Untitled

18 min read Original article ↗
#! /bin/sh # # dpkg (Debian pkg) - Debian Linux package maintenance utility (distributed # with Debian Linux 0.91 BETA) # # Copyright (C) 1994 Ian A. Murdock # # (Inspired by StopALOP by Dr. Greg Wettstein.) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # CLLVL1="1 2 3" CLLVL2="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18" CLLVL3="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19" DIR=`pwd` MOUNTDIR="/tmp/install" WHOAMI=`whoami` BELL=`tput bel` BOLD=`tput bold` CLR=`tput clear` INVIS=`tput civis` NORM=`tput sgr0` REV=`tput rev` VIS=`tput cnorm` add () { FDIR="$DIR/" trap "" 1 2 3 15 if [ $DEV != "none" ]; then if [ $MOUNTFLAG = "yes" ]; then mkdir $MOUNTDIR mount -t $FS $DEV $MOUNTDIR || ( echo "dpkg: Cannot mount device \`$DEV' (\`$FS' filesystem)." ; touch /tmp/nomount ) if [ -f /tmp/nomount ]; then rmdir $MOUNTDIR ; rm -f /tmp/nomount ; exit 1 fi fi if [ ! -f $MOUNTDIR/$FDIR$PKG.deb ]; then echo -n "dpkg: Could not find \`$PKG.deb' on \`$DEV'" if [ $DIR != "" ]; then echo " in the directory \`$DIR'." else echo "." fi 2>/dev/null if [ $MOUNTFLAG = "yes" ]; then umount $MOUNTDIR ; rmdir $MOUNTDIR fi exit 1 else ( pkginstall $MOUNTDIR/$FDIR$PKG.deb ) 2>/dev/null ( for INST in `ls /var/adm/dpkg/inst/*.inst` do sh $INST ; rm -f $INST done ) 2>/dev/null if [ $MOUNTFLAG = "yes" ]; then umount $MOUNTDIR ; rmdir $MOUNTDIR fi exit 0 fi else if [ ! -f $FDIR$PKG.deb ]; then echo -n "dpkg: Could not find \`$PKG.deb'" if [ $DIR != "" ]; then echo " in the directory \`$DIR'." else echo " in the current directory." fi 2>/dev/null exit 1 else ( pkginstall $FDIR$PKG.deb ) 2>/dev/null ( for INST in `ls /var/adm/dpkg/inst/*.inst` do sh $INST ; rm -f $INST done ) 2>/dev/null exit 0 fi fi } backup () { if [ -f /var/adm/dpkg/debian/categories.old -a /var/adm/dpkg/debian/packages.old ]; then mv /var/adm/dpkg/debian/categories /var/adm/dpkg/debian/categories.tmp mv /var/adm/dpkg/debian/categories.old /var/adm/dpkg/debian/categories mv /var/adm/dpkg/debian/categories.tmp /var/adm/dpkg/debian/categories.old mv /var/adm/dpkg/debian/packages /var/adm/dpkg/debian/packages.tmp mv /var/adm/dpkg/debian/packages.old /var/adm/dpkg/debian/packages mv /var/adm/dpkg/debian/packages.tmp /var/adm/dpkg/debian/packages.old echo "dpkg: backup package lists restored. Use \`--backup' to undo." exit 0 else echo "dpkg: no backup package lists found." exit 1 fi } bold () { echo -n $BOLD ; echo -n $1 ; echo -n $NORM; } catcheck () { if [ `fieldcat 1 2>/dev/null` ]; then SELFILE="packages" ; SELTYPE="package" else SELFILE="categories" ; SELTYPE="category" fi } category () { ACTION="$1" tput cup 21 0 ; cl "$CLLVL1" tput cup 22 0 echo -n "Enter the two-letter category code: " echo -n $VIS ; read INPUT ; echo -n $INVIS case $INPUT in Dc) CAT="Dc" ; catwrite ;; Dv) CAT="Dv" ; catwrite ;; Em) CAT="Em" ; catwrite ;; Gs) CAT="Gs" ; catwrite ;; Is) CAT="Is" ; catwrite ;; Nw) CAT="Nw" ; catwrite ;; Ut) CAT="Ut" ; catwrite ;; Wd) ACTION="pkg" ; SELFILE="packages" ; SELTYPE="package" ; CAT="Wd" ;; Xs) ACTION="pkg" ; SELFILE="packages" ; SELTYPE="package" ; CAT="Xs" ;; Xw) CAT="Xw" ; catwrite ;; *) CAT="none" esac if [ $ACTION = "pkg" ]; then catcheck fi } catwrite () { if [ $ACTION = "sel" ]; then sed s/" $CAT "/" x $CAT "/ /var/adm/dpkg/debian/packages > /tmp/packages ; mv /tmp/packages /var/adm/dpkg/debian/packages sed s/"$CAT "/"$CAT x "/ /var/adm/dpkg/debian/categories > /tmp/categories ; mv /tmp/categories /var/adm/dpkg/debian/categories else if [ $ACTION = "desel" ]; then sed s/" x $CAT "/" $CAT "/ /var/adm/dpkg/debian/packages > /tmp/packages ; mv /tmp/packages /var/adm/dpkg/debian/packages sed s/"$CAT x "/"$CAT "/ /var/adm/dpkg/debian/categories > /tmp/categories ; mv /tmp/categories /var/adm/dpkg/debian/categories fi fi } cl () { for LOOP in $1 do echo " " done } contents () { if [ -f /var/adm/dpkg/list/$PKG.list ]; then cd / ls -adl `cat /var/adm/dpkg/list/$PKG.list` cd $DIR exit 0 else not_installed fi } desc () { if [ -f /var/adm/dpkg/desc/$PKG.desc ]; then cat /var/adm/dpkg/desc/$PKG.desc if [ -f /var/adm/dpkg/list/$PKG.list ]; then echo "\`$PKG' is currently installed on the system." else echo "\`$PKG' is not currently installed on the system." fi exit 0 else no_desc exit 1 fi } deselectpkg () { tput cup 21 0 ; cl "$CLLVL1" tput cup 22 0 echo -n "Enter the number of the package that you wish to deselect: " echo -n $VIS ; read PKGNUM ; echo -n $INVIS if [ ! $PKGNUM ]; then selredraw continue fi if [ ! `field 1 2>/dev/null` ]; then tput cup 21 0 ; cl "$CLLVL1" tput cup 22 18 echo "Please enter package numbers one at a time." sleep 2 selredraw continue fi STATUS=`field 2` if [ $STATUS="x" ]; then CATEGORY=`field 3` sed "$PKGNUM"s/" x"/" "/ /var/adm/dpkg/debian/$SELFILE > /tmp/$SELFILE mv /tmp/$SELFILE /var/adm/dpkg/debian/$SELFILE NUMPKG=`grep -c " x $CATEGORY" /var/adm/dpkg/debian/$SELFILE` if [ $NUMPKG = 0 ]; then SELFILE="categories" sed s/"$CATEGORY x "/"$CATEGORY "/ /var/adm/dpkg/debian/$SELFILE > /tmp/$SELFILE mv /tmp/$SELFILE /var/adm/dpkg/debian/$SELFILE SELFILE="packages" fi fi selredraw } dpkgmain () { SELFILE="categories" SELTYPE="category" echo -n $INVIS selmain } field () { cut -d " " -f $1 /var/adm/dpkg/debian/packages | sed -n "$PKGNUM"p; } fieldcat () { cut -d " " -f $1 /var/adm/dpkg/debian/categories | grep -x "$CAT"; } fix () { if [ -f /var/adm/dpkg/list/$PKG.list ]; then if [ -f /var/adm/dpkg/perm/$PKG.perm ]; then echo -n "Fixing the permissions of \`$PKG'..." fixperms -q $PKG echo "done." else echo "dpkg: Could not find fixperms file for the package \`$PKG'." exit 1 fi else not_installed fi } help () { echo "" echo "Invoking \`dpkg' without arguments enters package selection mode." echo "" echo "The options for \`dpkg' are as follows:" echo " -a,--add: Add/install a package to the system" echo " -b,--backup: Copy the backup package lists to the master packages lists" echo " -c,--contents: Display the contents of an installed package in \`ls -adl' format" echo " -d,--describe: Describe a Debian Linux package" echo " -f,--fix: Set the permissions/ownerships of the package to their correct values" echo " -h,--help: Display this message" echo " -i,--integrity: Check a package's integrity (permissions and ownerships)" echo " -l,--list: List the packages installed on the system and their versions" echo " -o,--original: Copy the original package lists to the master package lists" echo " -p,--process: Process a dpkg batch list" echo " -r,--rm: Remove/deinstall a package from the system" echo " -s,--search: Search package lists for a specific file" echo " -u,--upgrade: Upgrade a component of the system" echo " -v,--version: Display the version number of a package" echo "" echo "NOTE: The \`.deb' extension is unnecessary when specifiying package name." echo "" echo "Please refer to dpkg(8) for more details." echo "" exit 0 } integrity () { if [ -f /var/adm/dpkg/list/$PKG.list ]; then if [ -f /var/adm/dpkg/perm/$PKG.perm ]; then echo -n "Checking the integrity of \`$PKG'..." fixperms -cq $PKG 2>/tmp/fixperms.err echo "done." cat /tmp/fixperms.err rm -f /tmp/fixperms.err exit 0 else echo "dpkg: Could not find fixperms file for the package \`$PKG'." exit 1 fi else not_installed fi } list () { declare -i PKGNUM=0 for PKG in `ls /var/adm/dpkg/ver/*.ver | sed "s,/var/adm/dpkg/ver/,," | sed "s,.ver,,"` do if [ $PKGNUM = 0 ]; then echo "Packages installed on the system:" fi echo " $PKG (version `cat /var/adm/dpkg/ver/$PKG.ver`)" PKGNUM=$PKGNUM+1 done if [ $PKGNUM = 0 ]; then echo "No packages are installed on the system." else if [ $PKGNUM = 1 ]; then echo "$PKGNUM package is installed on the system." else echo "$PKGNUM packages are installed on the system." fi fi exit 0 } missing_arg () { echo "dpkg: Missing argument for option \`$OPT'." echo "" usage exit 1 } no_desc () { echo "dpkg: there is no description for the package \`$PKG'." } not_installed () { echo "dpkg: \`$PKG' is not an installed package." exit 1 } original () { mv /var/adm/dpkg/debian/categories /var/adm/dpkg/debian/categories.old cp /var/adm/dpkg/debian/categories.orig /var/adm/dpkg/debian/categories mv /var/adm/dpkg/debian/packages /var/adm/dpkg/debian/packages.old cp /var/adm/dpkg/debian/packages.orig /var/adm/dpkg/debian/packages echo "dpkg: original (empty) package lists restored. Use \`--backup' to undo." exit 0 } packages () { tput cup 3 0 ; cl "$CLLVL2" tput cup 4 0 if [ $SELTYPE = "package" ]; then grep " $CAT " /var/adm/dpkg/debian/packages else cat /var/adm/dpkg/debian/categories fi } pkgdeinstall () { cd / echo -n "Removing package \`$PKG'..." if [ -f /var/adm/dpkg/dep/$PKG.dep ]; then sh /var/adm/dpkg/dep/$PKG.dep if [ $? = 1 ]; then exit 1 fi fi cp /var/adm/dpkg/list/$PKG.list /tmp/$PKG.list for FILE in `cat /tmp/$PKG.list` do if [ ! -d $FILE ]; then rm -f $FILE fi done for FILE in `cat /tmp/$PKG.list` do if [ -d $FILE ]; then rmdir $FILE 2>/dev/null || echo "Cannot remove directory \`$FILE'." fi done echo "done." rm -f /tmp/$PKG.list cd $DIR } pkginstall () { FPKG="$1" cd / if [ -f /var/adm/dpkg/desc/$PKG.desc ]; then cat /var/adm/dpkg/desc/$PKG.desc else no_desc fi echo "Approximate uncompressed size: `gzip -l $FPKG | sed /atio/d | cut -c11-19` bytes." echo "" ; echo -n "Installing \`$PKG'..." zcat $FPKG 2>>/var/adm/dpkg/dpkg.log | cpio -dim ; echo "done." fix $PKG echo "" ; df | sed "/\/tmp\/install/d" echo "" ; echo "Installation of \`$PKG' (version `cat /var/adm/dpkg/ver/$PKG.ver`) complete." cd $DIR } process () { declare -i ROW=8 declare -i COLUMN=1 declare -i DUPLICATES=0 SELPKG=0 TOTALSELPKGS=`cat /var/adm/dpkg/debian/packages | cut -d " " -f 2 | sed -n /x/p | wc -l | cut -c6-7` FDIR="$DIR/" trap "" 1 2 3 15 while true do echo "" echo "Prepare $DEV (\`dpkg' will mount it for you) and press <`bold "RETURN"`>. Press \`q'" echo -n "and then <`bold "RETURN"`> when finished: " read ANS if [ $ANS = "q" ]; then break fi 2>/dev/null echo "" mkdir -p $MOUNTDIR mount -t $FS $DEV $MOUNTDIR || ( echo "dpkg: Cannot mount device \`$DEV' (\`$FS' filesystem)." ; touch /tmp/nomount ) if [ -f /tmp/nomount ]; then rmdir $MOUNTDIR ; rm -f /tmp/nomount ; exit 1 fi ( for PKG in `ls $MOUNTDIR/$FDIR*.deb | sed s,"$MOUNTDIR/$FDIR",, | sed s/".deb"//` do PKGNUM=`cat /var/adm/dpkg/debian/packages | cut -c1-17 | sed -n /" $PKG "/p | cut -d " " -f 1` STATUS=`field 2` if [ $STATUS = "x" ]; then if [ -f /var/adm/dpkg/list/$PKG.list ]; then echo "" echo "" echo -n "*** Skipping \`" ; echo -n $BOLD ; echo -n "$PKG" ; echo -n $NORM ; echo "': already installed. ***" echo "" DUPLICATES=$DUPLICATES+1 else echo "" pkginstall $MOUNTDIR/$FDIR$PKG.deb echo "" echo $PKG >> /tmp/install.pkg SELPKG=`expr $SELPKG + 1` fi else echo "" echo "" echo -n "*** Skipping \`" ; echo -n $BOLD ; echo -n "$PKG" ; echo -n $NORM ; echo "': not a selected package. ***" echo "" fi 2>/dev/null echo "" ; echo "" ; echo -n $BOLD ; echo -n "Installation status report:" ; echo -n $NORM ; echo -n " $SELPKG/$TOTALSELPKGS selected packages installed ($DUPLICATES duplicates)." ; echo "" echo $SELPKG > /tmp/selpkg done ) 2>>/var/adm/dpkg/dpkg.log if [ -f /tmp/selpkg ]; then SELPKG=`cat /tmp/selpkg` ; rm -f /tmp/selpkg fi umount $MOUNTDIR ; rmdir $MOUNTDIR echo "" echo -n $BELL echo "Done." echo "" done echo "" echo -n "Press <" ; echo -n $BOLD ; echo -n "RETURN" ; echo -n $NORM ; echo -n "> to continue..." read INPUT echo -n $CLR echo -n $BOLD ; echo "*** Installation log ***" ; echo -n $NORM if [ -s /var/adm/dpkg/dpkg.log ]; then echo "" more /var/adm/dpkg/dpkg.log 2> /dev/null mv /var/adm/dpkg/dpkg.log /var/adm/dpkg/dpkg_log else echo "" echo "There were no errors during installation." fi echo "" echo -n "Press <`bold "RETURN"`> to continue..." read RETURN echo -n $CLR echo -n $BOLD ; echo "*** Package installation check ***" ; echo -n $NORM echo "" echo "Checking to make sure that all selected packages were installed..." echo "" echo "(Bold indicates a package that was selected but not installed, normal indicates" echo "a properly installed package.)" echo "" cat /var/adm/dpkg/debian/packages | sed -n /" x "/p > /tmp/pkgs_selected cat /tmp/pkgs_selected > /tmp/pkgs_bak ROW=8 COLUMN=1 echo -n $INVIS for PKG in `cat /tmp/pkgs_bak | cut -d " " -f 4` do tput cup "$ROW" "$COLUMN" if [ -f /var/adm/dpkg/list/$PKG.list ]; then echo $PKG else echo -n $BOLD ; echo $PKG ; echo -n $NORM echo $PKG >> /var/adm/dpkg/not_installed fi if [ $COLUMN -lt 70 ]; then COLUMN=$COLUMN+10 else ROW=$ROW+1 ; COLUMN=1 fi done echo -n $VIS echo "" ( for INST in `ls /var/adm/dpkg/inst/*.inst` do sh $INST ; rm -f $INST done ) 2>/dev/null mv /var/adm/dpkg/debian/categories /var/adm/dpkg/debian/categories.old mv /var/adm/dpkg/debian/packages /var/adm/dpkg/debian/packages.old cp /var/adm/dpkg/debian/categories.orig /var/adm/dpkg/debian/categories cp /var/adm/dpkg/debian/packages.orig /var/adm/dpkg/debian/packages rm -f /tmp/install.pkg /tmp/pkgs_bak /tmp/pkgs_selected } remove () { if [ -f /var/adm/dpkg/list/$PKG.list ]; then pkgdeinstall $PKG exit 0 else not_installed fi } search () { PKG=`( grep -x ".$FILE" /var/adm/dpkg/list/*.list | awk ' BEGIN { FS = "/" } { printf("%s\n", $6); }' ) | sed s/.list:// | sort | uniq` if [ $PKG ]; then echo "\`$FILE' is from the package \`$PKG'." else echo "Could not find \`$FILE' in any installed packages. Did you specify full path?" exit 1 fi exit 0 } selectpkg () { tput cup 21 0 ; cl "$CLLVL1" tput cup 22 0 echo -n "Enter the number of the package that you wish to select: " echo -n $VIS ; read PKGNUM ; echo -n $INVIS if [ ! $PKGNUM ]; then selredraw continue fi if [ ! `field 1 2>/dev/null` ]; then tput cup 21 0 ; cl "$CLLVL1" tput cup 22 18 echo "Please enter package numbers one at a time." sleep 2 selredraw continue fi STATUS=`field 2` if [ -n $STATUS ]; then CATEGORY=`field 4` sed "$PKGNUM"s/" "/" x"/ /var/adm/dpkg/debian/$SELFILE > /tmp/$SELFILE mv /tmp/$SELFILE /var/adm/dpkg/debian/$SELFILE NUMPKG=`grep -c " x $CATEGORY" /var/adm/dpkg/debian/$SELFILE` if [ $NUMPKG = 1 ]; then SELFILE="categories" sed s/"$CATEGORY "/"$CATEGORY x "/ /var/adm/dpkg/debian/$SELFILE > /tmp/$SELFILE mv /tmp/$SELFILE /var/adm/dpkg/debian/$SELFILE SELFILE="packages" fi fi selredraw } selheader () { echo -n $CLR echo "" echo -n $BOLD if [ $SELTYPE = "package" ]; then echo -n "No S " else echo -n "Ca S " fi if [ $SELTYPE = "package" ]; then echo -n "Ca Package name (ver)" else echo -n "Category name" fi echo -n " Description" if [ $SELTYPE = "package" ]; then echo " Page $1" else echo " Page $1" fi echo -n "==" if [ $SELTYPE = "package" ]; then echo -n " = == ==================" else echo -n " = =============" fi if [ $SELTYPE = "package" ]; then echo " ==================================================" else echo " ==========================================================" fi echo -n $NORM } selinput () { if [ $SELTYPE = "package" ]; then tput cup 23 50 ; echo -n $VIS ; read INPUT ; echo -n $INVIS tput cup 23 50 ; echo " " case $INPUT in [Ss]*) selectpkg ;; [Dd]*) deselectpkg ;; [Rr]*) selredraw ;; [Bb]*) SELFILE="category" ; SELTYPE="category" ; selredraw ;; esac else tput cup 23 50 ; echo -n $VIS ; read INPUT ; echo -n $INVIS tput cup 23 50 ; echo " " case $INPUT in [Ss]*) category "sel" ; selredraw ;; [Dd]*) category "desel" ; selredraw ;; [Pp]*) category "pkg" ; selredraw ;; [Rr]*) selredraw ;; [Qq]*) echo "" echo "To process any pending selections, use the following:" echo "" echo " # dpkg --process " echo "" echo "where is the full path of the device where Debian Linux packages are" echo "located (for example, /dev/fd0 or /dev/hda8), is the type of" echo "filesystem found on that device (for example, minix or msdos) and the optional" echo "argument is the directory on the filesystem in which to search for" echo "Debian Linux packages. If is omitted, root (/) is assumed." echo "" echo "Please see dpkg(8) for further details." echo "" ; echo -n $VIS ; exit 0 ;; esac fi } selmain () { selheader 1 ; selprompt ; packages "$PAGE" while true do selinput done } selprompt () { tput cup 21 0 echo "" if [ $SELTYPE = "package" ]; then echo "(`bold s`)elect package, (`bold d`)eselect package, (`bold p`)revious/(`bold n`)ext page, (`bold r`)edraw screen," echo -n "(`bold b`)ack to the cateogory menu Please select one: " else echo "(`bold s`)elect category, (`bold d`)eselect category, category (`bold p`)ackage menu, (`bold r`)edraw" echo "screen, (`bold q`)uit and process Please select one: " fi } selredraw () { echo -n $CLR case $PAGE in "$TMP1") selheader 1 ;; "$TMP2") selheader 2 ;; "$TMP3") selheader 3 ;; "$TMP4") selheader 4 ;; "$TMP5") selheader 5 ;; "$TMP6") selheader 6 ;; esac selprompt packages "$PAGE" } too_many_arg () { echo "dpkg: Too many arguments for option \`$OPT'." echo "" usage exit 1 } uidcheck () { if [ $WHOAMI != "root" ]; then if [ $NUMARG = 0 ]; then echo "Only root is allowed to invoke \`dpkg' in package selection mode." else echo "Only root is allowed to invoke \`dpkg $OPT'." fi exit 1 fi } unknown_opt () { echo "dpkg: Unknown option \`$OPT'." echo "" usage exit 1 } usage () { echo "Usage: dpkg [ -a --add ] package " echo " [ -u --upgrade ] package " echo " [ -r --rm ] package" echo " [ -b --backup ] [ -o --original ]" echo " [ -p --process ] device filesystem_type " echo " dpkg [ -c --contents ] [ -d --describe ] [ -f --fix ]" echo " [ -i --integrity ] [ -v --version ] package" echo " [ -s --search ] file" } upgrade () { echo "dpkg: this function will be implemented in the next version of Debian Linux." } version () { echo "`cat /var/adm/dpkg/ver/$PKG.ver`" exit 0 } NUMARG="$#" OPT="$1" case $NUMARG in 0) uidcheck ; dpkgmain ;; esac case $OPT in "-a" | "--add") uidcheck MOUNTFLAG="yes" case $NUMARG in 1) missing_arg ;; 2) PKG="$2" ; DEV="none" ; FS="" ; DIR="" ; add ;; 3) PKG="$2" if [ -d $3 ]; then DIR="$3" ; DEV="none" ; FS="none" else DEV="$3" ; FS="minix" ; DIR="" fi add ;; 4) PKG="$2" ; DEV="$3" if [ $4 = "ext" -o $4 = "ext2" -o $4 = "hpfs" -o \ $4 = "hpfs" -o $4 = "isofs" -o $4 = "minix" -o \ $4 = "msdos" -o $4 = "nfs" -o $4 = "sysv" -o \ $4 = "xiafs" ]; then FS="$4" ; DIR="" else DIR="$4" ; FS="minix" fi add ;; 5) PKG="$2" ; DEV="$3" ; FS="$4" ; DIR="$5" ; add ;; *) too_many_arg ;; esac ;; "-b" | "--backup") case $NUMARG in 1) backup ;; *) too_many_arg ;; esac ;; "-c" | "--contents") case $NUMARG in 1) missing_arg ;; 2) PKG="$2" ; contents ;; *) too_many_arg ;; esac ;; "-d" | "--describe") case $NUMARG in 1) missing_arg ;; 2) PKG="$2" ; desc ;; *) too_many_arg ;; esac ;; "-f" | "--fix") uidcheck case $NUMARG in 1) missing_arg ;; 2) PKG="$2" ; fix ;; *) too_many_arg ;; esac ;; "-h" | "--help") case $NUMARG in 1) help ;; *) too_many_arg ;; esac ;; "-i" | "--integrity") case $NUMARG in 1) missing_arg ;; 2) PKG="$2" ; integrity ;; *) too_many_arg ;; esac ;; "-l" | "--list") case $NUMARG in 1) list ;; *) too_many_arg ;; esac ;; "-o" | "--original") case $NUMARG in 1) original ;; *) too_many_arg ;; esac ;; "-p" | "--process") uidcheck case $NUMARG in 1) missing_arg ;; 2) missing_arg ;; 3) DEV="$2" ; FS="$3" ; DIR="" ; process ;; 4) DEV="$2" ; FS="$3" ; DIR="$4" ; process ;; *) too_many_arg ;; esac ;; "-r" | "--rm") uidcheck case $NUMARG in 1) missing_arg ;; 2) PKG="$2" ; remove ;; *) too_many_arg ;; esac ;; "-s" | "--search") case $NUMARG in 1) missing_arg ;; 2) FILE="$2" ; search ;; *) too_many_arg ;; esac ;; "-u" | "--upgrade") uidcheck MOUNTFLAG="yes" case $NUMARG in 1) missing_arg ;; 2) PKG="$2" ; DEV="none" ; FS="" ; DIR="" ; upgrade ;; 3) PKG="$2" if [ -d $3 ]; then DIR="$3" ; DEV="none" ; FS="none" else DEV="$3" ; FS="minix" ; DIR="" fi upgrade ;; 4) PKG="$2" ; DEV="$3" if [ -d $4 ]; then DIR="$4" ; FS="minix" else FS="$4" ; DIR="" fi upgrade ;; 5) PKG="$2" ; DEV="$3" ; FS="$4" ; DIR="$5" ; upgrade ;; *) too_many_arg ;; esac ;; "-v" | "--version") case $NUMARG in 1) missing_arg ;; 2) PKG="$2" ; version ;; 3) too_many_arg ;; esac ;; *) unknown_opt ;; esac