diff options
author | Patrick J Volkerding <volkerdi@slackware.com> | 2016-06-30 20:26:57 +0000 |
---|---|---|
committer | Eric Hameleers <alien@slackware.com> | 2018-05-31 23:31:18 +0200 |
commit | d31c50870d0bee042ce660e445c9294a59a3a65b (patch) | |
tree | 6bfc0de3c95267b401b620c2c67859557dc60f97 /source/a/pkgtools | |
parent | 76fc4757ac91ac7947a01fb7b53dddf9a78a01d1 (diff) | |
download | current-d31c50870d0bee042ce660e445c9294a59a3a65b.tar.gz |
Slackware 14.2slackware-14.2
Thu Jun 30 20:26:57 UTC 2016
Slackware 14.2 x86_64 stable is released!
The long development cycle (the Linux community has lately been living in
"interesting times", as they say) is finally behind us, and we're proud to
announce the release of Slackware 14.2. The new release brings many updates
and modern tools, has switched from udev to eudev (no systemd), and adds
well over a hundred new packages to the system. Thanks to the team, the
upstream developers, the dedicated Slackware community, and everyone else
who pitched in to help make this release a reality.
The ISOs are off to be replicated, a 6 CD-ROM 32-bit set and a dual-sided
32-bit/64-bit x86/x86_64 DVD. Please consider supporting the Slackware
project by picking up a copy from store.slackware.com. We're taking
pre-orders now, and offer a discount if you sign up for a subscription.
Have fun! :-)
Diffstat (limited to 'source/a/pkgtools')
-rw-r--r-- | source/a/pkgtools/manpages/setup.8-deprecated | 120 | ||||
-rwxr-xr-x | source/a/pkgtools/pkgtools.SlackBuild | 19 | ||||
-rw-r--r-- | source/a/pkgtools/scripts/installpkg | 117 | ||||
-rw-r--r-- | source/a/pkgtools/scripts/makepkg | 50 | ||||
-rw-r--r-- | source/a/pkgtools/scripts/pkgtool | 33 | ||||
-rw-r--r-- | source/a/pkgtools/scripts/removepkg | 63 | ||||
-rw-r--r-- | source/a/pkgtools/scripts/setup.80.make-bootdisk | 98 | ||||
-rw-r--r-- | source/a/pkgtools/scripts/upgradepkg | 377 |
8 files changed, 362 insertions, 515 deletions
diff --git a/source/a/pkgtools/manpages/setup.8-deprecated b/source/a/pkgtools/manpages/setup.8-deprecated deleted file mode 100644 index 53397422..00000000 --- a/source/a/pkgtools/manpages/setup.8-deprecated +++ /dev/null @@ -1,120 +0,0 @@ -.\" -*- nroff -*- -.ds g \" empty -.ds G \" empty -.\" Like TP, but if specified indent is more than half -.\" the current line-length - indent, use the default indent. -.de Tp -.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP -.el .TP "\\$1" -.. -.TH SETUP 8 "21 May 1994" "Slackware Version 2.0.0" -.SH NAME -setup \- Slackware system setup tool. -.SH SYNOPSIS -.B setup -.LP -.SH DESCRIPTION -.B setup -is the system installation and setup tool provided with the Slackware Linux -distribution. -.LP -.B setup -is usually used to install software packages from your hard drive, a CD, -NFS, or floppy disks. It is also a frontend for -.B pkgtool -and many configuration scripts that come with various packages, such as the -scripts which allow you to install LILO, configure your timezone, set your -keyboard fonts, make bootdisks, and many other tasks. -.SH OPTIONS -.TP -.B HELP -Read the -.B setup -help file. -.TP -.B KEYMAP -Change your keyboard map to one of many international and specialized keymaps -available. -.B NOTE: -This change will not become permanent unless you go through the -.B CONFIGURE option. -.TP -.B MAKE TAGS -This allows you to write out custom tagfiles. A -.B tagfile -is a list of package names followed by one of these tags: -.B ADD -(required), -.B SKP -(skip), -.B REC -(recommended) or, -.B OPT -(optional). These allow you to completely automate your software installation. -You can either put these files on the first disk of each disk series -(optionally using a custom 3 character extension), or in a custom location -altogether, such as on a floppy disk in ./a1, ./ap1, ./d1, ..., directories. -The format of a line in a -.B tagfile -is like this: -.LP -package: -.B TAG -.TP -.B SOURCE -Select your source media, such as hard disk, NFS, CD, or floppy. You should -select installation from a directory if your CD or NFS directory has already -been mounted, as it probably is if you're using -.B setup -on your hard drive. -.TP -.B TARGET -Select your target directory. For testing purposes, you may install the -packages to a directory other than '/'. Don't expect them to run from there, -though. -.TP -.B DISK SETS -Select the disk sets you want to install. You can also install custom disk -sets by tagging the -.B CUS -selection. The disk sets must be Slackware-like: they require the diskxxx? -index on each disk, such as diskxyz1 for the first disk of the XYZ series. -On the last disk there must be a file called -.B install.end -to signal the end of the disk series. -.TP -.B INSTALL -Once you've gone through -.B SOURCE -and -.B DISK SETS -( and possibly -.B TARGET -), then you select this choice to go on with the software installation. You'll -be asked what type of tagfiles you want to use and then -.B pkgtool -will be called to install the software. -.TP -.B CONFIGURE -This option runs through several scripts that configure various aspects of your -Linux system. These might include LILO installation, timezone configuration, -and other things. -.TP -.B PKGTOOL -This option calls the -.B pkgtool(8) -utility for you. -.TP -.B EXIT -Exit the -.B setup -program. -.SH AUTHOR -Patrick J. Volkerding <volkerdi@slackware.com> -.SH "SEE ALSO" -.BR makepkg(8), -.BR installpkg(8), -.BR explodepkg(8), -.BR removepkg(8), -.BR pkgtool(8), -.BR upgradepkg(8) diff --git a/source/a/pkgtools/pkgtools.SlackBuild b/source/a/pkgtools/pkgtools.SlackBuild index d2930638..c33fb062 100755 --- a/source/a/pkgtools/pkgtools.SlackBuild +++ b/source/a/pkgtools/pkgtools.SlackBuild @@ -27,9 +27,9 @@ fi PKG=$TMP/package-pkgtools # *** UPDATE THESE WITH EACH BUILD: -VERSION=14.1 +VERSION=14.2 ARCH=${ARCH:-noarch} -BUILD=2 +BUILD=10 if [ ! -d $TMP ]; then mkdir -p $TMP # location to build the source @@ -46,6 +46,19 @@ mkdir -p $PKG done ) +# Install internationalized manpages from +# http://slint.fr/forSlackware/man_l10n/pkgtools/ +( cd $PKG/usr/man + tar xf $CWD/manpages-l10n.tar.xz + for page in manpages-l10n/* ; do + manpage=$(basename $page) + mkdir -p ${manpage%%.*}/man8 + mv $page ${manpage%%.*}/man8/${page#*.}.8 + done + gzip -9 */man8/*.8 + rmdir manpages-l10n +) + # Install Slackware scripts: ( cd $CWD/scripts # Install the core Slackware package tools: @@ -74,7 +87,7 @@ cat $CWD/slack-desc > $PKG/install/slack-desc # Build the package: cd $PKG -makepkg -l y -c n $TMP/pkgtools-$VERSION-$ARCH-$BUILD.tgz +makepkg -l y -c n $TMP/pkgtools-$VERSION-$ARCH-$BUILD.txz echo echo "HEY -- did you remember to update the version numbers in the setup scripts?" diff --git a/source/a/pkgtools/scripts/installpkg b/source/a/pkgtools/scripts/installpkg index 2d3f208d..96c34fd9 100644 --- a/source/a/pkgtools/scripts/installpkg +++ b/source/a/pkgtools/scripts/installpkg @@ -21,19 +21,10 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # -# Fri Apr 22 20:45:45 UTC 2011 -# A stronger formula is needed to regularize output that will be parsed. -unset LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY \ - LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT \ - LC_IDENTIFICATION LC_ALL -LANG=C -export LANG -# -# Thu Apr 21 17:31:29 UTC 2011 -# Set LC_MESSAGES=C to avoid output parsing issues. -# Might as well do that right now. -#LC_MESSAGES=C -#export LC_MESSAGES +# Sun Sep 6 21:58:36 BST 2009 +# Replaced usage of "cat" with STDIN redirection or file name parameters +# to speed up execution on ARM. +# Replaced pkgbase & package_name code with 'sed' script by Jim Hawkins. # # Sat Apr 25 21:18:53 UTC 2009 # Converted to use new pkgbase() function to remove pathname and @@ -67,28 +58,18 @@ export LANG # Changed $TMP directory to /var/log/setup/tmp, and chmod'ed it 700 to close # some security holes. +# A stronger formula is needed to regularize output that will be parsed. +unset LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY \ + LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT \ + LC_IDENTIFICATION LC_ALL +LANG=C +export LANG + # Return a package name that has been stripped of the dirname portion # and any of the valid extensions (only): pkgbase() { - PKGEXT=$(echo $1 | rev | cut -f 1 -d . | rev) - case $PKGEXT in - 'tgz' ) - PKGRETURN=$(basename $1 .tgz) - ;; - 'tbz' ) - PKGRETURN=$(basename $1 .tbz) - ;; - 'tlz' ) - PKGRETURN=$(basename $1 .tlz) - ;; - 'txz' ) - PKGRETURN=$(basename $1 .txz) - ;; - *) - PKGRETURN=$(basename $1) - ;; - esac - echo $PKGRETURN + # basename + strip extensions .tbz, .tgz, .tlz and .txz + echo "$1" | sed 's?.*/??;s/\.t[bglx]z$//' } # If installpkg encounters a problem, it will return a non-zero error code. @@ -157,33 +138,9 @@ crunch() { done } +# Strip version, architecture and build from the end of the name package_name() { - STRING=$(pkgbase $1) - # Check for old style package name with one segment: - if [ "$(echo $STRING | cut -f 1 -d -)" = "$(echo $STRING | cut -f 2 -d -)" ]; then - echo $STRING - else # has more than one dash delimited segment - # Count number of segments: - INDEX=1 - while [ ! "$(echo $STRING | cut -f $INDEX -d -)" = "" ]; do - INDEX=$(expr $INDEX + 1) - done - INDEX=$(expr $INDEX - 1) # don't include the null value - # If we don't have four segments, return the old-style (or out of spec) package name: - if [ "$INDEX" = "2" -o "$INDEX" = "3" ]; then - echo $STRING - else # we have four or more segments, so we'll consider this a new-style name: - NAME=$(expr $INDEX - 3) - NAME="$(echo $STRING | cut -f 1-$NAME -d -)" - echo $NAME - # cruft for later ;) - #VER=$(expr $INDEX - 2) - #VER="$(echo $STRING | cut -f $VER -d -)" - #ARCH=$(expr $INDEX - 1) - #ARCH="$(echo $STRING | cut -f $ARCH -d -)" - #BUILD="$(echo $STRING | cut -f $INDEX -d -)" - fi - fi + pkgbase $1 | sed 's?-[^-]*-[^-]*-[^-]*$??' } # Parse options: @@ -285,8 +242,8 @@ if [ "$MODE" = "warn" ]; then esac ( cd $TMP/scan$$ ; $packagecompression -dc | $TAR xf - install ) < $1 2> /dev/null if [ -r $TMP/scan$$/install/doinst.sh ]; then - if cat $TMP/scan$$/install/doinst.sh | grep ' rm -rf ' 1>/dev/null 2>/dev/null ; then - cat $TMP/scan$$/install/doinst.sh | grep ' rm -rf ' > $TMP/scan$$/install/delete + if grep ' rm -rf ' $TMP/scan$$/install/doinst.sh 1>/dev/null 2>/dev/null ; then + grep ' rm -rf ' $TMP/scan$$/install/doinst.sh > $TMP/scan$$/install/delete for f in `cat $TMP/scan$$/install/delete | cut -f 3,7 -d ' ' | tr ' ' '/'`; do f="/$f" if [ -f "$f" -o -L "$f" ]; then @@ -428,14 +385,7 @@ for package in $* ; do rm -f $TMP/tmplist$$ $TMP/tmpsize$$ continue fi - UNCOMPRESSED="$(expr $(cat $TMP/tmpsize$$ | head -n 1 | cut -f 1 -d +) / 2)" - if [ $UNCOMPRESSED -lt 1024 ]; then - UNCOMPRESSED="${UNCOMPRESSED}K" - elif [ $UNCOMPRESSED -lt 10239 ]; then - UNCOMPRESSED="$(expr $UNCOMPRESSED \* 1000 / 1024 | cut -b1).$(expr $UNCOMPRESSED \* 1000 / 1024 | cut -b2)M" - else - UNCOMPRESSED="$(expr $UNCOMPRESSED / 1024)M" - fi + UNCOMPRESSED="$(cat $TMP/tmpsize$$ | tail -n 1 | cut -f 1 -d ' ' | numfmt --to=iec)" rm -f $TMP/tmpsize$$ # If we still don't have a package description, look inside the package. @@ -456,12 +406,12 @@ for package in $* ; do fi # Gather package infomation into a temporary file: - cat $DESCRIPTION | grep "^$packagebase:" | cut -f 2- -d : | cut -b2- 1> $TMP/tmpmsg$$ 2> /dev/null + grep "^$packagebase:" $DESCRIPTION | cut -f 2- -d : | cut -b2- 1> $TMP/tmpmsg$$ 2> /dev/null if [ "$shortname" != "$packagebase" ]; then - cat $DESCRIPTION | grep "^$shortname:" | cut -f 2- -d : | cut -b2- 1>> $TMP/tmpmsg$$ 2> /dev/null + grep "^$shortname:" $DESCRIPTION | cut -f 2- -d : | cut -b2- 1>> $TMP/tmpmsg$$ 2> /dev/null fi # Adjust the length here. This allows a slack-desc to be any size up to 13 lines instead of fixed at 11. - LENGTH=$(cat $TMP/tmpmsg$$ | wc -l) + LENGTH=$(wc -l < $TMP/tmpmsg$$ ) while [ $LENGTH -lt 12 ]; do echo >> $TMP/tmpmsg$$ LENGTH=$(expr $LENGTH + 1) @@ -495,12 +445,12 @@ EOF echo "Installing package $(basename $package) $PMSG:" fi echo "PACKAGE DESCRIPTION:" - cat $DESCRIPTION | grep "^$packagebase:" | uniq | sed "s/^$packagebase:/#/g" + grep "^$packagebase:" $DESCRIPTION | uniq | sed "s/^$packagebase:/#/g" if [ "$shortname" != "$packagebase" ]; then - cat $DESCRIPTION | grep "^$shortname:" | uniq | sed "s/^$shortname:/#/g" + grep "^$shortname:" $DESCRIPTION | uniq | sed "s/^$shortname:/#/g" fi elif [ "$MODE" = "terse" ]; then # emit a single description line - printf "%-72s %-6s\n" "$(echo $shortname: $(cat $DESCRIPTION | grep "^$packagebase:" | sed "s/^$packagebase: //g" | head -n 1 | tr -d '()' | sed "s/^$packagebase //g" ) | cut -b1-72)" "[${UNCOMPRESSED}]" | cut -b1-80 + printf "%-72s %-6s\n" "$(echo $shortname: $(echo $(cat $DESCRIPTION | grep "^$packagebase:" | sed "s/^$packagebase: //g" | head -n 1 | tr -d '()' | sed "s/^$packagebase //g" ) $(echo " ......................................................................")) | cut -b1-72)" "[${UNCOMPRESSED}]" | cut -b1-80 elif [ "$MODE" = "infobox" ]; then # install infobox package dialog --title "Installing package $shortname $PMSG" --infobox "$(cat $TMP/tmpmsg$$)" 0 0 elif [ "$MODE" = "menu" -a "$PRIORITY" = "ADD" -a ! "$ALWAYSASK" = "yes" ]; then # ADD overrides menu mode unless -ask was used @@ -526,7 +476,7 @@ EOF # Make sure there are no symbolic links sitting in the way of # incoming package files: - cat $TMP/tmplist$$ | grep -v "/$" | while read file ; do + grep -v "/$" $TMP/tmplist$$ | while read file ; do if [ -L "$ROOT/$file" ]; then rm -f "$ROOT/$file" fi @@ -543,13 +493,13 @@ EOF echo "PACKAGE MD5SUM: $(md5sum $package | cut -f 1 -d ' ')" >> $ADM_DIR/packages/$shortname fi echo "PACKAGE DESCRIPTION:" >> $ADM_DIR/packages/$shortname - cat $DESCRIPTION | grep "^$packagebase:" >> $ADM_DIR/packages/$shortname 2> /dev/null + grep "^$packagebase:" $DESCRIPTION >> $ADM_DIR/packages/$shortname 2> /dev/null if [ "$shortname" != "$packagebase" ]; then - cat $DESCRIPTION | grep "^$shortname:" >> $ADM_DIR/packages/$shortname 2> /dev/null + grep "^$shortname:" $DESCRIPTION >> $ADM_DIR/packages/$shortname 2> /dev/null fi echo "FILE LIST:" >> $ADM_DIR/packages/$shortname - ( cd $ROOT/ ; $packagecompression -dc | $TAR -xlUpvf - ) < $package >> $TMP/$shortname 2> /dev/null - if [ "$(cat $TMP/$shortname | grep '^\./' | wc -l | tr -d ' ')" = "1" ]; then + ( cd $ROOT/ ; $packagecompression -dc | $TAR -xlUpvf - | sort ) < $package >> $TMP/$shortname 2> /dev/null + if [ "$( grep '^\./' $TMP/$shortname | wc -l | tr -d ' ')" = "1" ]; then # Good. We have a package that meets the Slackware spec. cat $TMP/$shortname >> $ADM_DIR/packages/$shortname else @@ -571,7 +521,14 @@ EOF if [ "$MODE" = "install" ]; then echo "Executing install script for $(basename $package)." fi - ( cd $ROOT/ ; sh install/doinst.sh -install; ) + # If bash is available, use sed to convert the install script to use pushd/popd + # rather than spawning subshells which is slow on ARM. This will also speed up + # install script processing on any platform. + if [ -x /bin/bash ]; then + ( cd $ROOT/ ; sed -e's?^( cd \([^;]*\);\(.*\) )$?pushd \1 \&\> /dev/null ; \2 ; popd \&\> /dev/null?g ' install/doinst.sh | /bin/bash ; ) + else + ( cd $ROOT/ ; sh install/doinst.sh ; ) + fi fi # Clean up the mess... if [ -d $ROOT/install ]; then diff --git a/source/a/pkgtools/scripts/makepkg b/source/a/pkgtools/scripts/makepkg index e6805476..25c5f236 100644 --- a/source/a/pkgtools/scripts/makepkg +++ b/source/a/pkgtools/scripts/makepkg @@ -1,7 +1,7 @@ #!/bin/sh # Copyright 1994, 1998, 2008 Patrick Volkerding, Moorhead, Minnesota USA # Copyright 2003 Slackware Linux, Inc. Concord, CA USA -# Copyright 2009 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2009, 2015 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -21,9 +21,16 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # +# Wed Sep 23 18:36:43 UTC 2015 +# Support spaces in file/directory names. <alphageek> +# # Sun Apr 5 21:23:26 CDT 2009 # Support .tgz, .tbz, .tlz, and .txz packages. <volkerdi> # +# Fri Nov 26 13:53:36 GMT 2004 +# Patched to chmod 755 the package's root directory if needed, then restore +# previous permissions after the package has been created. <sw> +# # Wed Mar 18 15:32:33 CST 1998 # Patched to avoid possible symlink attacks in /tmp. @@ -48,18 +55,21 @@ Written by John Gilmore and Jay Fenlason." ]; then fi make_install_script() { + TAB="$(echo -e "\t")" COUNT=1 - LINE="$(sed -n "$COUNT p" $1)" - while [ ! "$LINE" = "" ]; do - LINKGOESIN="$(echo "$LINE" | cut -f 1 -d " ")" - LINKGOESIN="$(dirname $LINKGOESIN)" - LINKNAMEIS="$(echo "$LINE" | cut -f 1 -d ' ')" + while :; do + LINE="$(sed -n "$COUNT p" $1)" + if [ "$LINE" = "" ]; then + break + fi + LINKGOESIN="$(echo "$LINE" | cut -f 1 -d "$TAB")" + LINKGOESIN="$(dirname "$LINKGOESIN")" + LINKNAMEIS="$(echo "$LINE" | cut -f 1 -d "$TAB")" LINKNAMEIS="$(basename "$LINKNAMEIS")" - LINKPOINTSTO="$(echo "$LINE" | cut -f 3 -d ' ')" + LINKPOINTSTO="$(echo "$LINE" | cut -f 2 -d "$TAB")" echo "( cd $LINKGOESIN ; rm -rf $LINKNAMEIS )" echo "( cd $LINKGOESIN ; ln -sf $LINKPOINTSTO $LINKNAMEIS )" COUNT=$(expr $COUNT + 1) - LINE="$(sed -n "$COUNT p" $1)" done } @@ -189,13 +199,12 @@ case $EXTENSION in esac echo -echo "Slackware package maker, version 3.14159." +echo "Slackware package maker, version 3.141593." echo echo "Searching for symbolic links:" # Get rid of possible pre-existing trouble: INST=$(mktemp $TMP/makepkg.XXXXXX) -# This requires the ls from coreutils-5.0 (or newer): -find . -type l -exec ls -l --time-style=long-iso {} \; | while read foo ; do echo $foo ; done | cut -f 8- -d ' ' | cut -b3- | tee $INST +find . -type l -printf "%p\t%l\n" | sed 's,^\./,, ; s, ,\\ ,g' | tee $INST if [ ! "$(cat $INST)" = "" ]; then echo echo "Making symbolic link creation script:" @@ -279,6 +288,18 @@ if [ "$CHOWN" = "y" ]; then find . -type d -exec chown -v root.root {} \; fi +# Ensure that the 'root' of the package is chmod 755 because +# the / of your filesystem will inherit these permissions. +# If it's anything tighter than 755 then bad things happen such as users +# not being able to login, users already logged in can no longer run commands +# and so on. +OLDROOTPERMS="$(find -name . -printf "%m\n")" +if [ $OLDROOTPERMS -ne 755 ]; then + echo "WARNING: $PWD is chmod $OLDROOTPERMS" + echo " temporarily changing to chmod 755" + chmod 755 . +fi + echo "Creating Slackware package: ${TARGET_NAME}/${TAR_NAME}.${EXTENSION}" echo rm -f ${TARGET_NAME}/${TAR_NAME}.${EXTENSION} @@ -342,6 +363,13 @@ if find . | grep site_perl 1> /dev/null ; then echo "WARNING: site_perl directory detected (this is fine for a local package build)" fi +# Restore the old permissions if they previously weren't chmod 755 +if [ $OLDROOTPERMS -ne 755 ]; then + echo + echo "Restoring permissions of $PWD to chmod $OLDROOTPERMS" + chmod $OLDROOTPERMS . +fi + echo echo "Slackware package ${TARGET_NAME}/${TAR_NAME}.${EXTENSION} created." echo diff --git a/source/a/pkgtools/scripts/pkgtool b/source/a/pkgtools/scripts/pkgtool index dd9d6816..fd77f298 100644 --- a/source/a/pkgtools/scripts/pkgtool +++ b/source/a/pkgtools/scripts/pkgtool @@ -1,10 +1,9 @@ #!/bin/sh # -# Copyright 1993, 1994, 1995, 1996, 1997, -# 1998, 1999 Patrick Volkerding, Moorhead, MN USA +# Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999 Patrick Volkerding, Moorhead, MN USA # Copyright 2001, 2004 Slackware Linux, Inc., Concord, CA USA # All rights reserved. -# Copyright 2007, 2009, 2010, 2011, 2013 Patrick Volkerding, Sebeka, MN, USA +# Copyright 2007, 2009, 2010, 2011, 2013, 2015 Patrick Volkerding, Sebeka, MN, USA # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: @@ -44,6 +43,15 @@ # Wed Jan 26 23:06:22 GMT 2005 # * Fix for non-standard package descriptions by Jim Hawkins +# Avoid problems if any files in /var/log/packages and /var/log/scripts +# might contain any broken UTF-8 sequences. This was once known to cause +# dialog to crash. +unset LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY \ + LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT \ + LC_IDENTIFICATION LC_ALL +LANG=C +export LANG + # Return a package name that has been stripped of the dirname portion # and any of the valid extensions (only): pkgbase() { @@ -72,10 +80,9 @@ SOURCE_DIR=/var/log/mount ASK="tagfiles" if [ -L /bin/chmod -a -L /bin/chown ]; then # probably on the bootdisk using busybox TARGET_DIR=/mnt + rootdevice="$(mount | grep ' on /mnt ' | tail -n 1 | cut -f 1 -d ' ' 2> /dev/null)" TMP=/mnt/var/log/setup/tmp - if mount | grep "on /mnt" 1> /dev/null 2>&1 ; then # good - true - else # bad + if ! mount | grep ' on /mnt ' 1> /dev/null 2> /dev/null ; then echo echo echo "You can't run pkgtool from the rootdisk until you've mounted your Linux" @@ -95,6 +102,7 @@ if [ -L /bin/chmod -a -L /bin/chown ]; then # probably on the bootdisk using bus fi else TARGET_DIR=/ + rootdevice="$(mount | grep ' on / ' | tail -n 1 | cut -f 1 -d ' ')" TMP=/var/log/setup/tmp fi if [ ! -d $TMP ]; then @@ -212,7 +220,7 @@ else # there were no arguments, so we'll get the needed information from the CMD_START="true" rm -f $TMP/SeT* while [ 0 ]; do - dialog --title "Slackware Package Tool (pkgtool version 14.1)" \ + dialog --title "Slackware Package Tool (pkgtool version 14.2)" \ --menu "\nWelcome to the Slackware package tool.\n\ \nWhich option would you like?\n" 17 75 7 \ "Current" "Install packages from the current directory" \ @@ -250,8 +258,7 @@ are done selecting to run the scripts." 17 70 9 \' > $TMP/setupscr # Run each script: for script in $(cat $TMP/return) ; do scrpath=$ADM_DIR/setup/setup.$(echo $script | tr -d \") - rootdevice="$(mount | head -n 1 | cut -f 1 -d ' ')" - ( COLOR=on ; cd $TARGET_DIR ; . $scrpath / $rootdevice ) + ( COLOR=on ; cd $TARGET_DIR ; . $scrpath $TARGET_DIR $rootdevice ) done fi rm -f $TMP/return $TMP/setupscr @@ -470,7 +477,7 @@ retry, or quit?" 10 60 2 \ umount_the_source() { if [ ! "$SOURCE_MOUNTED" = "always" ]; then - umount $SOURCE_DEVICE 1> /dev/null 2>&1 + umount $SOURCE_DEVICE 1> /dev/null 2> /dev/null fi; } @@ -570,7 +577,7 @@ install_disk() { CATALOG_FILE=$(basename $PACKAGE_DIR/disk*); fi if [ -r $PACKAGE_DIR/$CATALOG_FILE -a ! -d $PACKAGE_DIR/$CATALOG_FILE ]; then - if grep CONTENTS: $PACKAGE_DIR/$CATALOG_FILE 1> /dev/null 2>&1 ; then + if grep CONTENTS: $PACKAGE_DIR/$CATALOG_FILE 1> /dev/null 2> /dev/null ; then # First we check for missing packages... for PKGTEST in $(grep "^CONTENTS:" $PACKAGE_DIR/$CATALOG_FILE | cut -f2- -d : 2> /dev/null) ; do # This is not a perfect test. (say emacs is missing but emacs-nox is not) @@ -601,7 +608,7 @@ EOF for PACKAGE_FILENAME in $PACKAGE_DIR/*.t?z; do BASE=$(pkgbase $PACKAGE_FILENAME) BASE="$(package_name $BASE)" - if echo $ALLOWED | grep $BASE 1> /dev/null 2>&1 ; then + if echo $ALLOWED | grep $BASE 1> /dev/null 2> /dev/null ; then true else cat << EOF > $TMP/tmpmsg @@ -687,7 +694,7 @@ if [ "$DISK_SETS" = "disk" ]; then else touch $TMP/tagfile chmod 600 $TMP/tagfile - if echo $DISK_SETS | grep "#a#" 1> /dev/null 2>&1; then + if echo $DISK_SETS | grep "#a#" 1> /dev/null 2> /dev/null ; then A_IS_NEEDED="true" else A_IS_NEEDED="false" diff --git a/source/a/pkgtools/scripts/removepkg b/source/a/pkgtools/scripts/removepkg index 8b5a911d..2813fc3c 100644 --- a/source/a/pkgtools/scripts/removepkg +++ b/source/a/pkgtools/scripts/removepkg @@ -1,6 +1,12 @@ #!/bin/sh # Slackware remove package script # +# Thu Sep 24 03:31:58 UTC 2015 <alphageek> +# extract_links() sed adjusted to handle symlinks with spaces. +# +# Sun Sep 6 21:58:36 BST 2009 +# Replaced pkgbase & package_name code with 'sed' script by Jim Hawkins. +# # Sat Apr 25 21:18:53 UTC 2009 (12.34567890b) # Converted to use new pkgbase() function to remove pathname and # valid package extensions. @@ -72,7 +78,7 @@ # Copyright 1994, 1995, 1998 Patrick Volkerding, Moorhead, Minnesota USA # Copyright 2001, Slackware Linux, Inc., Concord, CA USA -# Copyright 2009 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2009, 2015 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -96,25 +102,8 @@ # Return a package name that has been stripped of the dirname portion # and any of the valid extensions (only): pkgbase() { - PKGEXT=$(echo $1 | rev | cut -f 1 -d . | rev) - case $PKGEXT in - 'tgz' ) - PKGRETURN=$(basename $1 .tgz) - ;; - 'tbz' ) - PKGRETURN=$(basename $1 .tbz) - ;; - 'tlz' ) - PKGRETURN=$(basename $1 .tlz) - ;; - 'txz' ) - PKGRETURN=$(basename $1 .txz) - ;; - *) - PKGRETURN=$(basename $1) - ;; - esac - echo $PKGRETURN + # basename + strip extensions .tbz, .tgz, .tlz and .txz + echo "$1" | sed 's?.*/??;s/\.t[bglx]z$//' } # This makes "sort" run much faster: @@ -149,7 +138,7 @@ cat_except() { } extract_links() { - sed -n 's,^( *cd \([^ ;][^ ;]*\) *; *rm -rf \([^ )][^ )]*\) *) *$,\1/\2,p' + sed -n 's,^[ ]*( [ ]*cd[ ]* \(.*\) [ ]*; [ ]*rm [ ]*-rf[ ]* \(.*\) [ ]*)[ ]*$,\1/\2,p' } preserve_file() { @@ -228,7 +217,7 @@ delete_links() { if [ -L "$ROOT/$LINK" ]; then if [ ! "$WARN" = "true" ]; then echo " --> Deleting symlink $ROOT/$LINK" - rm -f $ROOT/$LINK + rm -f "$ROOT/$LINK" else echo " --> $ROOT/$LINK (symlink) would be deleted" fi @@ -271,38 +260,14 @@ delete_cats() { } package_name() { - STRING=$(pkgbase $1) + STRING=$(pkgbase $1 | sed 's?-[^-]*-[^-]*-[^-]*$??') # If we don't do this, commands run later will take the '-' to be an option # and will destroy the package database. Packages should not contain spaces # in them. Normally this type of problem results from a command line typo. if [ "$(echo $STRING | cut -b 1)" = "-" ]; then STRING="malformed-package-name-detected" fi - # Check for old style package name with one segment: - if [ "$(echo $STRING | cut -f 1 -d -)" = "$(echo $STRING | cut -f 2 -d -)" ]; then - echo $STRING - else # has more than one dash delimited segment - # Count number of segments: - INDEX=1 - while [ ! "$(echo $STRING | cut -f $INDEX -d -)" = "" ]; do - INDEX=$(expr $INDEX + 1) - done - INDEX=$(expr $INDEX - 1) # don't include the null value - # If we don't have four segments, return the old-style (or out of spec) package name: - if [ "$INDEX" = "2" -o "$INDEX" = "3" ]; then - echo $STRING - else # we have four or more segments, so we'll consider this a new-style name: - NAME=$(expr $INDEX - 3) - NAME="$(echo $STRING | cut -f 1-$NAME -d -)" - echo $NAME - # cruft for later ;) - #VER=$(expr $INDEX - 2) - #VER="$(echo $STRING | cut -f $VER -d -)" - #ARCH=$(expr $INDEX - 1) - #ARCH="$(echo $STRING | cut -f $ARCH -d -)" - #BUILD="$(echo $STRING | cut -f $INDEX -d -)" - fi - fi + echo $STRING } # Conversion to 'comm' utility by Mark Wisdom. @@ -329,7 +294,7 @@ remove_packages() { fi if [ ! -e $ADM_DIR/packages/$PKGNAME ]; then - long_package=$(ls -1 $ADM_DIR/packages/${PKGNAME}* | grep -m 1 "${PKGNAME}-[^-]*-[^-]*-[^-]*$") + long_package=$(ls -1 $ADM_DIR/packages/${PKGNAME}* | grep -m 1 "^${PKGNAME}-[^-]*-[^-]*-[^-]*$") if [ -e "$long_package" ]; then PKGNAME=$(basename $long_package) fi diff --git a/source/a/pkgtools/scripts/setup.80.make-bootdisk b/source/a/pkgtools/scripts/setup.80.make-bootdisk index a5d44235..1f0202a5 100644 --- a/source/a/pkgtools/scripts/setup.80.make-bootdisk +++ b/source/a/pkgtools/scripts/setup.80.make-bootdisk @@ -5,13 +5,12 @@ if [ -r /usr/lib/setup/setup ]; then else RDIR=/dev/null fi -NDIR=/dev/null TMP=/var/log/setup/tmp if [ ! -d $TMP ]; then mkdir -p $TMP fi -if [ -z "$T_PX" ]; then +if [ -z "$1" ]; then T_PX=/ else T_PX="$1" @@ -22,6 +21,16 @@ else ROOT_DEVICE="$2" fi +if [ -r $T_PX/usr/share/syslinux/mbr.bin ]; then + MBR_BIN=$T_PX/usr/share/syslinux/mbr.bin +elif [ -r /usr/share/syslinux/mbr.bin ]; then + MBR_BIN=/usr/share/syslinux/mbr.bin +else + dialog --title "ERROR: USB BOOT STICK NOT CREATED" --msgbox \ + "Master Boot Record file mbr.bin not found. This script requires that the syslinux package is installed." 6 60 + exit +fi + while [ 0 ]; do # the bootdisk menu loop # Run "rescan-scsi-bus -l" to get an up to date overview of devices: /sbin/rescan-scsi-bus -l 1>$RDIR 2>$RDIR @@ -38,7 +47,7 @@ while [ 0 ]; do # the bootdisk menu loop fi dialog --title "MAKE USB FLASH BOOT" --default-item "$DEFAULTITEM" --menu \ "If your computer supports booting from a USB device, it is recommended that you make \ -a USB boot stick for your system at this time. It will boot your computer straight \ +a USB boot stick for your system at this time. It will boot your computer straight \ into the root filesystem on $ROOT_DEVICE. \n\ \n\ Please insert a USB flash memory stick and then press ENTER to create a boot stick. \n\ @@ -89,31 +98,56 @@ otherwise select 'No'." 12 70 dialog --title "CREATING USB BOOT STICK" --infobox "Creating SYSLINUX bootdisk for \ $ROOT_DEVICE on /dev/$STICK." 3 64 - # Determine max size of the filesystem (in KB) we want to create: - USBSIZE=$(( $(cat /sys/block/$STICK/size) / 2048)) - if [ $USBSIZE -lt 512 ]; then DOSSIZE=$(($USBSIZE*1024)) - else DOSSIZE=$((512*1024)) - fi - # Hack from Pat. If we're wasting a whole stick, who cares if the partition is - # extra-small, as long as the kernel fits? Also, FAT12 is the least problematic. - DOSSIZE=15861 + # Create a 16M partition with FAT16. This should be large enough for any kernel (for now). + PARTSIZE="+16384K" + # Zero out master boot record and then initialize it with one bootable dos partition + dd if=/dev/zero of=/dev/$STICK bs=512 count=1 1> $RDIR 2> $RDIR + echo "PARTSIZE=$PARTSIZE" 1> $RDIR + fdisk /dev/$STICK << EOF 1> $RDIR 2> $RDIR +n +p +1 +2048 +$PARTSIZE +t 1 +6 +a +w +EOF if [ -x /sbin/mkdosfs ]; then - /sbin/mkdosfs -I -n USBSLACK -F 12 /dev/$STICK $DOSSIZE 1> /dev/null 2> /dev/null + /sbin/mkdosfs -I -n USBSLACK -F 16 /dev/${STICK}1 1> $RDIR 2> $RDIR + else + chroot $T_PX /sbin/mkdosfs -I -n USBSLACK -F 16 /dev/${STICK}1 1> $RDIR 2> $RDIR + fi + sync + # install syslinux + if which syslinux-nomtools 1> $RDIR 2> $RDIR ; then + syslinux-nomtools -i -s /dev/${STICK}1 1> $RDIR 2> $RDIR + elif which strace 1> $RDIR 2> $RDIR ; then + # There is a race condition between udev >= 214 and mtools which causes + # the regular version of syslinux to fail when installing to USB, but + # strace changes the timing just enough that it usually works: + strace syslinux -i -s /dev/${STICK}1 1> $RDIR 2> $RDIR else - chroot $T_PX /sbin/mkdosfs -I -n USBSLACK -F 12 /dev/$STICK $DOSSIZE 1> /dev/null 2> /dev/null + # This might work when the issues with mtools and udev are addressed, + # or if syslinux is eventually able to work around them. + syslinux -i -s /dev/${STICK}1 1> $RDIR 2> $RDIR fi + # make the device bootable: + echo "dd if=$MBR_BIN of=/dev/$STICK" 1> $RDIR 2> $RDIR + dd if=$MBR_BIN of=/dev/$STICK 1> $RDIR 2> $RDIR + sync + # mount the device and write some configuration files if [ ! -d $TMP/bootdisk ]; then - mkdir $TMP/bootdisk + mkdir $TMP/bootdisk 2> $RDIR fi - mount -t vfat /dev/$STICK $TMP/bootdisk 1> /dev/null 2> /dev/null - if [ -r $T_PX/vmlinuz ]; then - cp $T_PX/vmlinuz $TMP/bootdisk/vmlinuz - elif [ -r $T_PX/boot/vmlinuz ]; then - cp $T_PX/boot/vmlinuz $TMP/bootdisk/vmlinuz + mount -t vfat /dev/${STICK}1 $TMP/bootdisk 1> $RDIR 2> $RDIR + if [ -r $T_PX/boot/vmlinuz ]; then + cp $T_PX/boot/vmlinuz $TMP/bootdisk/vmlinuz 1> $RDIR 2> $RDIR + elif [ -r $T_PX/vmlinuz ]; then + cp $T_PX/vmlinuz $TMP/bootdisk/vmlinuz 1> $RDIR 2> $RDIR fi - # We don't need the isolinux bootloader with syslinux do we? - #cp $T_PX/usr/share/syslinux/isolinux.bin $TMP/bootdisk/ - cat << EOF > $TMP/bootdisk/message.txt + cat << EOF > $TMP/bootdisk/message.txt 2> $RDIR Welcome to the 09Slackware07 Linux custom USB boot stick! @@ -131,7 +165,7 @@ kernel parameters you might need depending on your hardware, and which drivers are included in your kernel. EOF - cat << EOF > $TMP/bootdisk/syslinux.cfg + cat << EOF > $TMP/bootdisk/syslinux.cfg 2> $RDIR default vmlinuz root=$ROOT_DEVICE vga=normal ro prompt 1 timeout 6000 @@ -147,7 +181,7 @@ label mount kernel vmlinuz append root=$ROOT_DEVICE vga=normal ro EOF - cat << EOF > $TMP/bootdisk/f1.txt + cat << EOF > $TMP/bootdisk/f1.txt 2> $RDIR STANDARD MODES: To make the kernel prompt for standard video modes use: vga=ask @@ -169,9 +203,9 @@ EOF EOF if [ "$(uname -m)" == "x86_64" ]; then # also install an EFI bootloader - mkdir -p $TMP/bootdisk/EFI/BOOT 1> /dev/null 2> /dev/null - cp $T_PX/boot/elilo-x86_64.efi $TMP/bootdisk/EFI/BOOT/BOOTX64.EFI 1> /dev/null 2> /dev/null - cat << EOF > $TMP/bootdisk/EFI/BOOT/message.txt 2> /dev/null + mkdir -p $TMP/bootdisk/EFI/BOOT 1> $RDIR 2> $RDIR + cp $T_PX/boot/elilo-x86_64.efi $TMP/bootdisk/EFI/BOOT/BOOTX64.EFI 1> $RDIR 2> $RDIR + cat << EOF > $TMP/bootdisk/EFI/BOOT/message.txt 2> $RDIR Welcome to the Slackware Linux custom USB boot stick! @@ -190,7 +224,7 @@ drivers are included in your kernel. Hit ENTER to boot: EOF - cat << EOF > $TMP/bootdisk/EFI/BOOT/elilo.conf 2> /dev/null + cat << EOF > $TMP/bootdisk/EFI/BOOT/elilo.conf 2> $RDIR chooser=simple message=message.txt delay=300 @@ -202,10 +236,12 @@ image=/vmlinuz append="root=$ROOT_DEVICE vga=normal ro" EOF fi # end EFI installation - umount /dev/$STICK + sync + umount /dev/${STICK}1 rm -r $TMP/bootdisk - # Make the device bootable: - syslinux -s /dev/$STICK 1> /dev/null 2> /dev/null + # Sometimes the nomtools version of syslinux will leave the volume mounted, + # so umount again: + umount /dev/${STICK}1 2> $RDIR if [ "$T_PX" = "/" ]; then dialog --title "USB BOOT STICK CREATED" --msgbox \ "The USB boot stick has been successfully created on device /dev/$STICK." 6 60 diff --git a/source/a/pkgtools/scripts/upgradepkg b/source/a/pkgtools/scripts/upgradepkg index 6b0c2abb..5e029980 100644 --- a/source/a/pkgtools/scripts/upgradepkg +++ b/source/a/pkgtools/scripts/upgradepkg @@ -1,7 +1,8 @@ -#!/bin/sh +#!/bin/bash # Copyright 1999 Patrick Volkerding, Moorhead, Minnesota, USA # Copyright 2001, 2002, 2003 Slackware Linux, Inc., Concord, California, USA -# Copyright 2009 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2009, 2015 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2015 Michal Nazarewicz <mina86@mina86.com> # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -34,29 +35,20 @@ # Support new compression types and package extensions. # Converted to use new pkgbase() function to remove pathname and # valid package extensions. +# +# Sat 17 Jan 16:21:32 UTC 2015 mina86 +# Various optimisation mostly resolving around avoiding having to fork +# and call cut, basename and other helper commands. Slight +# refactoring of code calling removepkg. # Return a package name that has been stripped of the dirname portion # and any of the valid extensions (only): pkgbase() { - PKGEXT=$(echo $1 | rev | cut -f 1 -d . | rev) - case $PKGEXT in - 'tgz' ) - PKGRETURN=$(basename $1 .tgz) - ;; - 'tbz' ) - PKGRETURN=$(basename $1 .tbz) - ;; - 'tlz' ) - PKGRETURN=$(basename $1 .tlz) - ;; - 'txz' ) - PKGRETURN=$(basename $1 .txz) - ;; - *) - PKGRETURN=$(basename $1) - ;; + PKGRETURN=${1##*/} + case "$PKGRETURN" in *.t[gblx]z) + PKGRETURN=${PKGRETURN%.*} esac - echo $PKGRETURN + echo "$PKGRETURN" } usage() { @@ -101,6 +93,8 @@ umask 022 # $ROOT defined? if [ -d "$ROOT" ]; then export ROOT +else + unset ROOT fi # --help or no args? @@ -147,173 +141,158 @@ done # processing args # old package. package_name() { - STRING=$(pkgbase $1) - # Check for old style package name with one segment: - if [ "$(echo $STRING | cut -f 1 -d -)" = "$(echo $STRING | cut -f 2 -d -)" ]; then + STRING=$(pkgbase "$1") + case "$STRING" in + *-*-*-*) + # At least four segments, strip version arch and build and return name: + echo "${STRING%-*-*-*}" + # cruft for later ;) + # BUILD=${STRING##*-} + # STRING=${STRING%*-} + # ARCH=${STRING##*-} + # STRING=${STRING%*-} + # VER=${STRING%*-} + ;; + *) + # Old style package name with one segment or we don't have four + # segments: return the old-style (or out of spec) package name. echo $STRING - else # has more than one dash delimited segment - # Count number of segments: - INDEX=1 - while [ ! "$(echo $STRING | cut -f $INDEX -d -)" = "" ]; do - INDEX=$(expr $INDEX + 1) - done - INDEX=$(expr $INDEX - 1) # don't include the null value - # If we don't have four segments, return the old-style (or out of spec) package name: - if [ "$INDEX" = "2" -o "$INDEX" = "3" ]; then - echo $STRING - else # we have four or more segments, so we'll consider this a new-style name: - NAME=$(expr $INDEX - 3) - NAME="$(echo $STRING | cut -f 1-$NAME -d -)" - echo $NAME - # cruft for later ;) - #VER=$(expr $INDEX - 2) - #VER="$(echo $STRING | cut -f $VER -d -)" - #ARCH=$(expr $INDEX - 1) - #ARCH="$(echo $STRING | cut -f $ARCH -d -)" - #BUILD="$(echo $STRING | cut -f $INDEX -d -)" - fi - fi + esac } ERRCODE=0 # Main processing loop: -while [ ! "$1" = "" ]; do - -# Simple package integrity check: -if [ ! -f $(echo $1 | cut -f 2 -d '%') ]; then - ERRCODE=4 - echo "Cannot install $1: file not found" - shift 1 - continue; -fi +for ARG; do + OLD=${ARG%'%'*} # first segment, = $ARG if no % + NEW=${ARG#*'%'} # second segment, = $ARG if no % + + # Simple package integrity check: + if ! [ -f "$NEW" ]; then + ERRCODE=4 + echo "Cannot install $ARG: file not found" + continue; + fi -# Figure out the names of the old and new packages: -OLD=$(echo $1 | cut -f 1 -d '%') -NEW=$(echo $1 | cut -f 2 -d '%') -INCOMINGDIR=$(dirname $NEW) -# These are the package names with the extension: -NNAME=$(basename $NEW) -ONAME=$(basename $OLD) -# These are the package names without the extension: -OLD=$(pkgbase $OLD) -NEW=$(pkgbase $NEW) - -# Make sure the extension is valid: -if [ "$NNAME" = "$NEW" ]; then - # We won't throw an ERRCODE for this, but the package is skipped: - echo "Cannot install $1: invalid package extension" - shift 1 - continue; -fi + # Figure out the names of the old and new packages: + INCOMINGDIR=$(dirname $NEW) + # These are the package names with the extension: + NNAME=${NEW##*/} + ONAME=${OLD##*/} + # These are the package names without the extension: + OLD=$(pkgbase $OLD) + NEW=$(pkgbase $NEW) + + # Make sure the extension is valid: + if [ "$NNAME" = "$NEW" ]; then + # We won't throw an ERRCODE for this, but the package is skipped: + echo "Cannot install $OLD: invalid package extension" + continue; + fi -# Check and fix the old package name: -SHORT="$(package_name $OLD)" -if [ ! -r $ROOT/var/log/packages/$OLD ]; then - if ls $ROOT/var/log/packages/$SHORT* 1> /dev/null 2> /dev/null ; then - for installed_package in $ROOT/var/log/packages/$SHORT* ; do - if [ "$(package_name $installed_package)" = "$SHORT" ]; then # found one - OLD="$(basename $installed_package)" - break - fi - done + # Check and fix the old package name: + SHORT="$(package_name $OLD)" + if [ ! -r $ROOT/var/log/packages/$OLD ]; then + if ls $ROOT/var/log/packages/$SHORT* 1> /dev/null 2> /dev/null ; then + for installed_package in $ROOT/var/log/packages/$SHORT* ; do + if [ "$(package_name $installed_package)" = "$SHORT" ]; then # found one + OLD="${installed_package##*/}" + break + fi + done + fi fi -fi -# Test to see if both the old and new packages are where we expect them -# to be -- skip to the next package (or package pair) if anything's wrong: + # Test to see if both the old and new packages are where we expect them + # to be -- skip to the next package (or package pair) if anything's wrong: -if [ ! -r $ROOT/var/log/packages/$OLD ]; then - if [ ! "$INSTALL_NEW" = "yes" ]; then - if [ "$DRY_RUN" = "true" ]; then - echo "$OLD would not be upgraded (no installed package named $SHORT)." - else - echo - echo "Error: there is no installed package named $OLD." - echo " (looking for $ROOT/var/log/packages/$OLD)" - echo - fi - ERRCODE=1 - else # --install-new was given, so install the new package: - if [ "$DRY_RUN" = "true" ]; then - echo "$NEW would be installed (new package)." - else - cat << EOF + if [ ! -r $ROOT/var/log/packages/$OLD ]; then + if [ ! "$INSTALL_NEW" = "yes" ]; then + if [ "$DRY_RUN" = "true" ]; then + echo "$OLD would not be upgraded (no installed package named $SHORT)." + else + echo + echo "Error: there is no installed package named $OLD." + echo " (looking for $ROOT/var/log/packages/$OLD)" + echo + fi + ERRCODE=1 + else # --install-new was given, so install the new package: + if [ "$DRY_RUN" = "true" ]; then + echo "$NEW would be installed (new package)." + else + cat << EOF +============================================================================== | Installing new package $INCOMINGDIR/$NNAME +============================================================================== EOF - /sbin/installpkg $INCOMINGDIR/$NNAME + /sbin/installpkg $INCOMINGDIR/$NNAME + fi fi - fi - shift 1 - continue; -elif [ ! -r "$INCOMINGDIR/$NNAME" ]; then - if [ "$DRY_RUN" = "true" ]; then - echo "$NEW incoming package not found (command line)." - else - echo - echo "Error: incoming package $INCOMINGDIR/$NNAME not found." - echo - fi - shift 1 - ERRCODE=1 - continue; -fi - -# Unless --reinstall was given, compare the package names -# and skip any exact matches: -if [ ! "$REINSTALL" = "true" ]; then - if [ "$OLD" = "$NEW" ]; then + continue; + elif [ ! -r "$INCOMINGDIR/$NNAME" ]; then if [ "$DRY_RUN" = "true" ]; then - echo "$NEW would be skipped (already installed)." + echo "$NEW incoming package not found (command line)." else - cat << EOF + echo + echo "Error: incoming package $INCOMINGDIR/$NNAME not found." + echo + fi + ERRCODE=1 + continue; + fi + + # Unless --reinstall was given, compare the package names + # and skip any exact matches: + if [ ! "$REINSTALL" = "true" ]; then + if [ "$OLD" = "$NEW" ]; then + if [ "$DRY_RUN" = "true" ]; then + echo "$NEW would be skipped (already installed)." + else + cat << EOF +============================================================================== | Skipping package $NEW (already installed) +============================================================================== EOF + fi + continue; fi - shift 1 - continue; fi -fi -# Showtime. Let's do the upgrade. First, we will rename all the -# installed packages with this basename to make them easy to remove later: + # Showtime. Let's do the upgrade. First, we will rename all the + # installed packages with this basename to make them easy to remove later: -TIMESTAMP=$(date +%Y-%m-%d,%T) -SHORT="$(package_name $OLD)" -if [ "$DRY_RUN" = "true" ]; then - echo -n "$NEW would upgrade: " - for installed_package in $ROOT/var/log/packages/$SHORT* ; do - if [ "$(package_name $installed_package)" = "$SHORT" ]; then - echo -n "$(pkgbase $installed_package)" + TIMESTAMP=$(date +%Y-%m-%d,%T) + SHORT="$(package_name $OLD)" + if [ "$DRY_RUN" = "true" ]; then + echo -n "$NEW would upgrade: " + for installed_package in $ROOT/var/log/packages/$SHORT* ; do + if [ "$(package_name $installed_package)" = "$SHORT" ]; then + echo -n "$(pkgbase $installed_package)" + fi + done + echo + continue fi + for installed_package in $ROOT/var/log/packages/$SHORT* ; do + if [ "$(package_name $installed_package)" = "$SHORT" ]; then + mv $installed_package ${installed_package}-upgraded-$TIMESTAMP + fi done - echo - shift 1 - continue -fi -for installed_package in $ROOT/var/log/packages/$SHORT* ; do - if [ "$(package_name $installed_package)" = "$SHORT" ]; then - mv $installed_package ${installed_package}-upgraded-$TIMESTAMP - fi -done -for installed_script in $ROOT/var/log/scripts/$SHORT* ; do - if [ "$(package_name $installed_script)" = "$SHORT" ]; then - if [ -r $installed_script ]; then - mv $installed_script ${installed_script}-upgraded-$TIMESTAMP + for installed_script in $ROOT/var/log/scripts/$SHORT* ; do + if [ "$(package_name $installed_script)" = "$SHORT" ]; then + if [ -r $installed_script ]; then + mv $installed_script ${installed_script}-upgraded-$TIMESTAMP + fi fi - fi -done + done -# Print a banner for the current upgrade: -cat << EOF + # Print a banner for the current upgrade: + cat << EOF +============================================================================== | Upgrading $OLD package using $INCOMINGDIR/$NNAME @@ -321,67 +300,49 @@ cat << EOF EOF -# Next, the new package is pre-installed: -if [ "$VERBOSE" = "verbose" ]; then - /sbin/installpkg $INCOMINGDIR/$NNAME - RETCODE=$? -else - echo "Pre-installing package $NEW..." - /sbin/installpkg $INCOMINGDIR/$NNAME 1> /dev/null - RETCODE=$? -fi -# Make sure that worked: -if [ ! $RETCODE = 0 ]; then - echo "ERROR: Package $INCOMINGDIR/$NNAME did not install" - echo "correctly. You may need to reinstall your old package" - echo "to avoid problems. Make sure the new package is not" - echo "corrupted." - sleep 30 - # Skip this package, but still try to proceed. Good luck... - shift 1 - continue; -fi - -# Now, the leftovers from the old package(s) can go. Pretty simple, huh? :) -if [ -d "$ROOT" ]; then - ( cd $ROOT/var/log/packages - for rempkg in *-$TIMESTAMP ; do - if [ "$VERBOSE" = "verbose" ]; then - ROOT=$ROOT /sbin/removepkg $rempkg - else - ROOT=$ROOT /sbin/removepkg $rempkg | grep -v "Skipping\." | grep -v "Removing files:" - fi - done - ) -else - ( cd /var/log/packages - for rempkg in *-$TIMESTAMP ; do - if [ "$VERBOSE" = "verbose" ]; then - /sbin/removepkg $rempkg - else - /sbin/removepkg $rempkg | grep -v "Skipping\." | grep -v "Removing files:" - fi - done - ) -fi -echo - -# Again! Again! -# Seriously, the reinstalling of a package can be crucial if any files -# shift location, so we should always reinstall as the final step: -if [ ! "$NOT_PARANOID" = "true" ]; then - /sbin/installpkg $INCOMINGDIR/$NNAME -fi + # Next, the new package is pre-installed: + if [ "$VERBOSE" = "verbose" ]; then + /sbin/installpkg $INCOMINGDIR/$NNAME + RETCODE=$? + else + echo "Pre-installing package $NEW..." + /sbin/installpkg $INCOMINGDIR/$NNAME 1> /dev/null + RETCODE=$? + fi + # Make sure that worked: + if [ ! $RETCODE = 0 ]; then + echo "ERROR: Package $INCOMINGDIR/$NNAME did not install" + echo "correctly. You may need to reinstall your old package" + echo "to avoid problems. Make sure the new package is not" + echo "corrupted." + sleep 30 + # Skip this package, but still try to proceed. Good luck... + continue; + fi -echo "Package $OLD upgraded with new package $INCOMINGDIR/$NNAME." -ERRCODE=0 + # Now, the leftovers from the old package(s) can go. Pretty simple, huh? :) + for rempkg in "$ROOT/var/log/packages/"*"-$TIMESTAMP"; do + if [ "$VERBOSE" = "verbose" ]; then + /sbin/removepkg "${rempkg##*/}" + else + /sbin/removepkg "${rempkg##*/}" | grep -v 'Skipping\.\|Removing files:' + fi + done + echo -# Process next parameter: -shift 1 + # Again! Again! + # Seriously, the reinstalling of a package can be crucial if any files + # shift location, so we should always reinstall as the final step: + if [ ! "$NOT_PARANOID" = "true" ]; then + /sbin/installpkg $INCOMINGDIR/$NNAME + fi + echo "Package $OLD upgraded with new package $INCOMINGDIR/$NNAME." + ERRCODE=0 done if [ ! "$DRY_RUN" = "true" ]; then echo fi exit $ERRCODE + |