From ca85aab95397ae918088f8ba2195eb4eb996c739 Mon Sep 17 00:00:00 2001 From: Patrick J Volkerding Date: Thu, 21 Jun 2018 22:58:42 +0000 Subject: Thu Jun 21 22:58:42 UTC 2018 a/pkgtools-15.0-noarch-20.txz: Rebuilt. Move pkgtools database to /var/lib/pkgtools/. Move removed logs to /var/log/pkgtools/. a/sysvinit-2.90-x86_64-1.txz: Upgraded. ap/cups-filters-1.20.3-x86_64-3.txz: Rebuilt. Recompiled against poppler-0.66.0. kde/calligra-2.9.11-x86_64-22.txz: Rebuilt. Recompiled against poppler-0.66.0. l/dbus-python-1.2.8-x86_64-1.txz: Upgraded. l/gc-7.6.6-x86_64-1.txz: Upgraded. l/harfbuzz-1.8.1-x86_64-1.txz: Upgraded. l/poppler-0.66.0-x86_64-1.txz: Upgraded. Shared library .so-version bump. l/pulseaudio-12.0-x86_64-1.txz: Upgraded. n/dhcpcd-7.0.6-x86_64-1.txz: Upgraded. n/php-7.2.7-x86_64-1.txz: Upgraded. Added support for libedit. t/texlive-2017.171108-x86_64-7.txz: Rebuilt. Recompiled against poppler-0.66.0. x/libwacom-0.30-x86_64-1.txz: Upgraded. xfce/exo-0.12.2-x86_64-1.txz: Upgraded. xfce/tumbler-0.2.1-x86_64-4.txz: Rebuilt. Recompiled against poppler-0.66.0. xfce/xfce4-settings-4.12.4-x86_64-1.txz: Upgraded. --- testing/source/pkgtools/scripts/installpkg | 713 ----------------------------- 1 file changed, 713 deletions(-) delete mode 100644 testing/source/pkgtools/scripts/installpkg (limited to 'testing/source/pkgtools/scripts/installpkg') diff --git a/testing/source/pkgtools/scripts/installpkg b/testing/source/pkgtools/scripts/installpkg deleted file mode 100644 index 0d82f89c..00000000 --- a/testing/source/pkgtools/scripts/installpkg +++ /dev/null @@ -1,713 +0,0 @@ -#!/bin/sh -# Copyright 1994, 1998, 2000 Patrick Volkerding, Concord, CA, USA -# Copyright 2001, 2003 Slackware Linux, Inc., Concord, CA, USA -# Copyright 2007, 2009, 2011, 2017, 2018 Patrick Volkerding, Sebeka, MN, USA -# All rights reserved. -# -# Redistribution and use of this script, with or without modification, is -# permitted provided that the following conditions are met: -# -# 1. Redistributions of this script must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED -# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# Mon Jun 4 21:17:58 UTC 2018 -# Migrate the package database and directories from /var/log to -# /var/lib/pkgtools. /var/log was never a good place for this data, as it is -# considered by many to be a directory that could be wiped to free up some -# space. Originally the package database was in /var/adm, but the FSSTND -# (later FHS) group decided that directory should be a symlink to /var/log, -# and I went along with that since it was years ago and I was a n00b and didn't -# know any better. /var/lib/pkgtools will be a better and safer location. -# -# Thu May 24 20:23:55 UTC 2018 -# Added --terselength option to set the line length in --terse mode. -# Allow adding NOLOCK in an install script to allow it to run without locking. -# -# Sat May 19 22:42:03 UTC 2018 -# Implement locking to prevent screen output or install script collisions if -# multiple copies of installpkg are running simultaneously. -# Use ${MCOOKIE} instead of $$ (might as well, since we already generated it). -# -# Tue Apr 17 17:26:44 UTC 2018 -# Quit with the funny business in /install. Note however that /install still -# isn't a safe directory to use in a package for anything other than package -# metadata. Other files placed there are going to be left on the system in -# /installpkg-$(mcookie). That could be worked around, but we'll wait until -# someone reports there is a need. The main reason to do this is that /install -# was a collision point if more than one copy of installpkg was running at -# once. With this change, the pkgtools are (more or less) thread-safe. -# -# Tue Feb 13 01:19:46 UTC 2018 -# Use recent tar, and support restoring POSIX ACLs and extended attributes. -# -# Tue Dec 12 21:49:48 UTC 2017 -# If possible, use multiple decompression threads. -# -# Thu Dec 7 04:09:17 UTC 2017 -# Change meaning of .tlz to tar.lz (lzip) -# -# 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 -# valid package extensions. -# -# Sat Apr 4 22:58:06 CDT 2009 -# Support additional compression formats if the supporting utilities exist: -# .tbz - bzip2 -# .tlz - lzma -# .txz - xz (also LZMA) -# And of course, .tgz (gzip) is not going anywhere. :-) -# Add command switches to determine the uncompressed package size even if -# that will slow things down, and to add the package's md5sum to the -# metadata stored in /var/log/packages/. -# -# Fri Dec 21 17:21:35 CST 2007 -# Added a patch from Johnny Morano to work around package removal issues -# caused by packages that do not comply with FHS combined with a grep -# regex error in installpkg. Any package with a single-letter top- -# level directory could not be removed. -# -# Shortened some of the top-line dialog output to avoid overflowing the -# textbox (needed as some of the packages, especially in X, have very -# long base package names now). -# -# Sun Nov 26 12:38:25 CST 1995 -# Added patch from Glenn Moloney to allow -# packages to be installed to directories other than /. -# -# Wed Mar 18 15:15:51 CST 1998 -# Changed $TMP directory to /var/log/setup/tmp, and chmod'ed it 700 to close -# some security holes. - -# Return a package name that has been stripped of the dirname portion -# and any of the valid extensions (only): -pkgbase() { - # 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. -# If it finds more than one problem (i.e. with a list of packages) you'll only -# hear about the most recent one. :) -# 1 = tar returned error code -# 2 = corrupt compression envelope -# 3 = does not end in .tgz -# 4 = no such file -# 5 = external compression utility missing -# 99 = user abort from menu mode -EXITSTATUS=0 - -# Do not store md5sums by default: -MD5SUM=0 - -# So that we know what to expect... -umask 022 - -# If we have mcookie and a tar that is recent enough to support --transform, -# then we can stop needlessly erasing files in the /install directory while -# also making installpkg thread-safe. Don't check for recent tar - we'll -# already break from --attrs and --xattrs anyway if the wrong tar is used. -if which mcookie 1> /dev/null 2> /dev/null ; then - MCOOKIE=$(mcookie) - INSTDIR=installpkg-${MCOOKIE} -else - # Well, we will make due with this: - MCOOKIE=$$ - INSTDIR=installpkg-${MCOOKIE} -fi - -# Create a lockfile directory if it doesn't exist. We can use it to prevent -# screen corruption (from multiple dialogs) and install script collisions -# (from multiple scripts trying to work on the same files) in the case of -# parallel instances of installpkg. -INSTLOCKDIR=${INSTLOCKDIR:-/run/lock/pkgtools} -if [ ! -d $INSTLOCKDIR ]; then - mkdir -p $INSTLOCKDIR -fi - -usage() { - cat << EOF -Usage: installpkg [options] - -Installpkg is used to install a .t{gz,bz,lz,xz} package like this: - installpkg slackware-package-1.0.0-i486-1.tgz (or .tbz, .tlz, .txz) - -options: --warn (warn if files will be overwritten, but do not install) - --root /mnt (install someplace else, like /mnt) - --infobox (use dialog to draw an info box) - --terse (display a one-line short description for install) - --terselength (line length in terse mode - default is - the number of columns available) - --menu (confirm package installation with a menu, unless - the priority is [required] or ADD) - --ask (used with menu mode: always ask if a package should be - installed regardless of what the package's priority is) - --priority ADD|REC|OPT|SKP (provide a priority for the entire - package list to use instead of the priority in the - tagfile) - --tagfile /somedir/tagfile (specify a different file to use - for package priorities. The default is "tagfile" in - the package's directory) - --threads For xz/plzip compressed packages, set the max - number of threads to be used for decompression. Only has - an effect if a multithreaded compressor was used, and then - only on large packages. For plzip, the default is equal to - the number of CPU threads available on the machine. For xz, - the default is equal to 2. - --md5sum (record the package's md5sum in the metadata file) - -EOF -} - -# Eliminate whitespace function: -crunch() { - while read FOO ; do - echo $FOO - done -} - -# Strip version, architecture and build from the end of the name -package_name() { - pkgbase $1 | sed 's?-[^-]*-[^-]*-[^-]*$??' -} - -# Set maximum number of threads to use. By default, this will be the number -# of CPU threads: -THREADS="$(nproc)" - -# Set default line length for terse mode: -if tty -s && which tput 1> /dev/null 2> /dev/null ; then - TERSELENGTH=$(tput cols) -else - TERSELENGTH=80 -fi - -# Default install mode is standard text mode: -MODE=install -# If $TERSE is set to 0 in the environment, then use terse mode: -if [ "$TERSE" = "0" ]; then - MODE=terse -fi - -# Parse options: -while [ 0 ]; do - if [ "$1" = "-warn" -o "$1" = "--warn" ]; then - MODE=warn - shift 1 - elif [ "$1" = "-md5sum" -o "$1" = "--md5sum" ]; then - MD5SUM=1 - shift 1 - elif [ "$1" = "-infobox" -o "$1" = "--infobox" ]; then - MODE=infobox - shift 1 - elif [ "$1" = "-terse" -o "$1" = "--terse" ]; then - MODE=terse - shift 1 - elif [ "$1" = "-terselength" -o "$1" = "--terselength" ]; then - TERSELENGTH=$2 - shift 2 - elif [ "$1" = "-menu" -o "$1" = "--menu" ]; then - MODE=menu - shift 1 - elif [ "$1" = "-ask" -o "$1" = "--ask" ]; then - ALWAYSASK="yes" - shift 1 - elif [ "$1" = "-tagfile" -o "$1" = "--tagfile" ]; then - if [ -r "$2" ]; then - USERTAGFILE="$2" - elif [ -r "$(pwd)/$2" ]; then - USERTAGFILE="$(pwd)/$2" - else - usage - exit - fi - shift 2 - elif [ "$1" = "-threads" -o "$1" = "--threads" ]; then - THREADS="$2" - shift 2 - # xz has not yet implemented multi-threaded decompression. - # Who knows if or how well it will work... - XZ_THREADS_FORCED=yes - elif [ "$1" = "-priority" -o "$1" = "--priority" ]; then - if [ "$2" = "" ]; then - usage - exit - fi - USERPRIORITY="$2" - shift 2 - elif [ "$1" = "-root" -o "$1" = "--root" ]; then - if [ "$2" = "" ]; then - usage - exit - fi - ROOT="$2" - shift 2 - else - break - fi -done - -# Set the prefix for the package database directories (packages, scripts). -ADM_DIR="$ROOT/var/lib/pkgtools" - -# Set the prefix for the removed packages/scripts log files: -LOG_DIR="$ROOT/var/log/pkgtools" - -# If the directories don't exist, "initialize" the package database: -for PKGDBDIR in packages scripts setup ; do - if [ ! -d $ADM_DIR/$PKGDBDIR ]; then - mkdir -p $ADM_DIR/$PKGDBDIR - chmod 755 $ADM_DIR/$PKGDBDIR - fi -done -for PKGLOGDIR in removed_packages removed_scripts ; do - if [ ! -d $LOG_DIR/$PKGLOGDIR ]; then - rm -rf $LOG_DIR/$PKGLOGDIR # make sure it's not a symlink or something stupid - mkdir -p $LOG_DIR/$PKGLOGDIR - chmod 755 $LOG_DIR/$PKGLOGDIR - fi -done -# Likewise, make sure that the symlinks in /var/log exist. We no longer -# trust anything to remain in /var/log. Let the admin wipe it if that's -# what they like. -for symlink in packages scripts setup ; do - if [ ! -L $LOG_DIR/../$symlink -a ! -d $LOG_DIR/../$symlink ]; then - ( cd $LOG_DIR/.. ; ln -sf ../lib/pkgtools/$symlink . ) - fi -done - -# Make sure there's a proper temp directory: -TMP=$ADM_DIR/setup/tmp -# If the $TMP directory doesn't exist, create it: -if [ ! -d $TMP ]; then - mkdir -p $TMP - chmod 700 $TMP # no need to leave it open -fi - -# usage(), exit if called with no arguments: -if [ $# = 0 ]; then - usage; - exit -fi - -# If -warn mode was requested, produce the output and then exit: -if [ "$MODE" = "warn" ]; then - while [ -f "$1" ]; do - mkdir -p $TMP/scan${MCOOKIE} - # Determine extension: - packageext="$( echo $1 | rev | cut -f 1 -d . | rev)" - # Determine decompressor utility: - case $packageext in - 'tgz' ) - packagecompression=gzip - ;; - 'tbz' ) - if which lbzip2 1> /dev/null 2> /dev/null ; then - packagecompression=lbzip2 - else - packagecompression=bzip2 - fi - ;; - 'tlz' ) - if which plzip 1> /dev/null 2> /dev/null ; then - packagecompression="plzip --threads=${THREADS}" - elif which lzip 1> /dev/null 2> /dev/null ; then - packagecompression=lzip - else - echo "ERROR: lzip compression utility not found in \$PATH." - exit 3 - fi - ;; - 'txz' ) - if [ ! "$XZ_THREADS_FORCED" = "yes" ]; then - packagecompression="xz --threads=${THREADS}" - else - packagecompression="xz --threads=2" - fi - ;; - esac - ( cd $TMP/scan${MCOOKIE} ; $packagecompression -dc | tar xf - install ) < $1 2> /dev/null - if [ -r $TMP/scan${MCOOKIE}/install/doinst.sh ]; then - if grep ' rm -rf ' $TMP/scan${MCOOKIE}/install/doinst.sh 1>/dev/null 2>/dev/null ; then - grep ' rm -rf ' $TMP/scan${MCOOKIE}/install/doinst.sh > $TMP/scan${MCOOKIE}/install/delete - for f in `cat $TMP/scan${MCOOKIE}/install/delete | cut -f 3,7 -d ' ' | tr ' ' '/'`; do - f="/$f" - if [ -f "$f" -o -L "$f" ]; then - echo "$f" - fi - done - fi - if [ -d $TMP/scan${MCOOKIE} ]; then - ( cd $TMP/scan${MCOOKIE} ; rm -rf install ) 2> /dev/null - ( cd $TMP ; rmdir scan${MCOOKIE} ) 2> /dev/null - fi - fi - for f in `( $packagecompression -dc | tar tf - ) < $1 | grep -v 'drwx'`; do - f="/$f" - if [ -f "$f" -o -L "$f" ]; then - echo "$f" - fi - done - shift 1 - done - exit -fi - -# Main loop: -for package in $* ; do - - # Simple package integrity check: - if [ ! -f $package ]; then - EXITSTATUS=4 - if [ "$MODE" = "install" ]; then - echo "Cannot install $package: file not found" - fi - continue; - fi - - # "shortname" isn't really THAT short... - # it's just the full name without ".t{gz,bz,lz,xz}" - shortname="$(pkgbase $package)" - packagedir="$(dirname $package)" - # This is the base package name, used for grepping tagfiles and descriptions: - packagebase="$(package_name $shortname)" - - # Reject package if it does not end in '.t{gz,bz,lz,xz}': - if [ "$shortname" = "$(basename $package)" ]; then - EXITSTATUS=3 - if [ "$MODE" = "install" ]; then - echo "Cannot install $package: file does not end in .tgz, .tbz, .tlz, or .txz" - fi - continue; - fi - - # Determine extension: - packageext="$(echo $package | rev | cut -f 1 -d . | rev)" - - # Determine compressor utility: - case $packageext in - 'tgz' ) - packagecompression=gzip - ;; - 'tbz' ) - if which lbzip2 1> /dev/null 2> /dev/null ; then - packagecompression=lbzip2 - else - packagecompression=bzip2 - fi - ;; - 'tlz' ) - if which plzip 1> /dev/null 2> /dev/null ; then - packagecompression="plzip --threads=${THREADS}" - elif which lzip 1> /dev/null 2> /dev/null ; then - packagecompression=lzip - else - echo "ERROR: lzip compression utility not found in \$PATH." - exit 3 - fi - ;; - 'txz' ) - if [ ! "$XZ_THREADS_FORCED" = "yes" ]; then - packagecompression="xz --threads=${THREADS}" - else - packagecompression="xz --threads=2" - fi - ;; - esac - - # Test presence of external compression utility: - if ! $(echo $packagecompression | cut -f 1 -d ' ') --help 1> /dev/null 2> /dev/null ; then - EXITSTATUS=5 - if [ "$MODE" = "install" ]; then - echo "Cannot install $package: external compression utility $packagecompression missing" - fi - continue; - fi - - # Determine package's priority: - unset PRIORITY - if [ "$USERTAGFILE" = "" ]; then - TAGFILE="$packagedir/tagfile" - else - TAGFILE="$USERTAGFILE" - fi - if [ ! -r "$TAGFILE" ]; then - TAGFILE=/dev/null - fi - if grep "^$packagebase:" "$TAGFILE" | grep ADD > /dev/null 2> /dev/null ; then - PRIORITY="ADD" - elif grep "^$packagebase:" "$TAGFILE" | grep REC > /dev/null 2> /dev/null ; then - PRIORITY="REC" - elif grep "^$packagebase:" "$TAGFILE" | grep OPT > /dev/null 2> /dev/null ; then - PRIORITY="OPT" - elif grep "^$packagebase:" "$TAGFILE" | grep SKP > /dev/null 2> /dev/null ; then - PRIORITY="SKP" - fi - if [ "$PRIORITY" = "ADD" ]; then - PMSG="[ADD]" - elif [ "$PRIORITY" = "REC" ]; then - PMSG="[REC]" - elif [ "$PRIORITY" = "OPT" ]; then - PMSG="[OPT]" - elif [ "$PRIORITY" = "SKP" ]; then - PMSG="[SKP]" - else - PMSG="" - fi - - # If a tagfile wants this package to be skipped, do that now before - # wasting any more CPU on it: - if [ "$PRIORITY" = "SKP" -a ! "$ALWAYSASK" = "yes" ]; then - continue # next package - fi - - # Figure out some package information, like the compressed and uncompressed - # sizes, and where to find the package description: - COMPRESSED="$(/bin/du -sh "$(readlink -f $package)" | cut -f 1)" - DESCRIPTION="" - # First check for .txt file next to the package, since this is faster: - if grep "^$packagebase:" "$packagedir/$shortname.txt" 1> /dev/null 2> /dev/null ; then - DESCRIPTION="$packagedir/$shortname.txt" - elif grep "^$shortname:" "$packagedir/$shortname.txt" 1> /dev/null 2> /dev/null ; then - DESCRIPTION="$packagedir/$shortname.txt" - fi - - # Test tarball integrity and get uncompressed package size: - if [ "$MODE" = "install" ]; then - echo "Verifying package $(basename $package)." - fi - # The stray cat reduces the frequency of the lack of reported size. - # If it still fails, we hit it with a bigger hammer down below. - cat $package | $packagecompression -dc | LC_ALL=C dd 2> $TMP/tmpsize${MCOOKIE} | cat | tar tf - 2> /dev/null 1> $TMP/tmplist${MCOOKIE} - TARERROR=$? - if [ ! "$TARERROR" = "0" ]; then - EXITSTATUS=1 # tar file corrupt - if [ "$MODE" = "install" ]; then - echo "Unable to install $package: tar archive is corrupt (tar returned error code $TARERROR)" - fi - rm -f $TMP/tmplist${MCOOKIE} $TMP/tmpsize${MCOOKIE} - continue - fi - UNCOMPRESSED="$(cat $TMP/tmpsize${MCOOKIE} | tail -n 1 | cut -f 1 -d ' ' | numfmt --to=iec)" - # Weird bug "fix". Sometimes we get no uncompressed size (this started when we - # moved away from tar-1.13, but I don't see what that could have to do with - # it). So, if we have no uncompressed size here, demand it in this loop. - # Hopefully the bug is not weird enough to make this an infinite loop. :/ - while [ "$UNCOMPRESSED" = "" ]; do - cat $package | $packagecompression -dc | LC_ALL=C dd 1> /dev/null 2> $TMP/tmpsize${MCOOKIE} - UNCOMPRESSED="$(cat $TMP/tmpsize${MCOOKIE} | tail -n 1 | cut -f 1 -d ' ' | numfmt --to=iec)" - done - rm -f $TMP/tmpsize${MCOOKIE} - - # If we still don't have a package description, look inside the package. - # This requires a costly untar. - if [ "$DESCRIPTION" = "" ]; then - mkdir -p $TMP/scan${MCOOKIE} - ( cd $TMP/scan${MCOOKIE} ; $packagecompression -dc | tar xf - install ) < $package 2> /dev/null - if grep "^$packagebase:" "$TMP/scan${MCOOKIE}/install/slack-desc" 1> /dev/null 2> /dev/null ; then - DESCRIPTION="$TMP/scan${MCOOKIE}/install/slack-desc" - elif grep "^$shortname:" "$TMP/scan${MCOOKIE}/install/slack-desc" 1> /dev/null 2> /dev/null ; then - DESCRIPTION="$TMP/scan${MCOOKIE}/install/slack-desc" - fi - fi - - if [ "$DESCRIPTION" = "" ]; then - #echo "WARNING NO SLACK-DESC" - DESCRIPTION="/dev/null" - fi - - # Gather package infomation into a temporary file: - grep "^$packagebase:" $DESCRIPTION | cut -f 2- -d : | cut -b2- 1> $TMP/tmpmsg${MCOOKIE} 2> /dev/null - if [ "$shortname" != "$packagebase" ]; then - grep "^$shortname:" $DESCRIPTION | cut -f 2- -d : | cut -b2- 1>> $TMP/tmpmsg${MCOOKIE} 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=$(wc -l < $TMP/tmpmsg${MCOOKIE} ) - while [ $LENGTH -lt 12 ]; do - echo >> $TMP/tmpmsg${MCOOKIE} - LENGTH=$(expr $LENGTH + 1) - done - echo "Size: Compressed: ${COMPRESSED}, uncompressed: ${UNCOMPRESSED}." >> $TMP/tmpmsg${MCOOKIE} - # For recent versions of dialog it is necessary to add \n to the end of each line - # or it will remove repeating spaces and mess up our careful formatting: - cat << EOF > $TMP/controlns${MCOOKIE} -\n -\n -\n -\n -\n -\n -\n -\n -\n -\n -\n -\n -\n -EOF - paste -d "" $TMP/tmpmsg${MCOOKIE} $TMP/controlns${MCOOKIE} > $TMP/pasted${MCOOKIE} - rm -f $TMP/controlns${MCOOKIE} - mv $TMP/pasted${MCOOKIE} $TMP/tmpmsg${MCOOKIE} - # Emit information to the console: - if [ "$MODE" = "install" ]; then - if [ "$PMSG" = "" ]; then - echo "Installing package $(basename $package):" - else - echo "Installing package $(basename $package) $PMSG:" - fi - echo "PACKAGE DESCRIPTION:" - grep "^$packagebase:" $DESCRIPTION | uniq | sed "s/^$packagebase:/#/g" - if [ "$shortname" != "$packagebase" ]; then - grep "^$shortname:" $DESCRIPTION | uniq | sed "s/^$shortname:/#/g" - fi - elif [ "$MODE" = "terse" ]; then # emit a single description line - ( flock 9 || exit 11 - printf "%-$(expr $TERSELENGTH - 7)s %-6s\n" "$(echo $shortname: $(echo $(cat $DESCRIPTION | grep "^$packagebase:" | sed "s/^$packagebase: //g" | head -n 1 | tr -d '()' | sed "s/^$packagebase //g" ) $(echo " $(printf '.%.0s' {1..256})")) | cut -b1-$(expr $TERSELENGTH - 7))" "$(printf "[%4s]" $UNCOMPRESSED)" | cut -b 1-${TERSELENGTH} - ) 9> $INSTLOCKDIR/dialog.lock - elif [ "$MODE" = "infobox" ]; then # install infobox package - ( flock 9 || exit 11 - dialog --title "Installing package $shortname $PMSG" --infobox "$(cat $TMP/tmpmsg${MCOOKIE})" 0 0 - ) 9> $INSTLOCKDIR/dialog.lock - elif [ "$MODE" = "menu" -a "$PRIORITY" = "ADD" -a ! "$ALWAYSASK" = "yes" ]; then # ADD overrides menu mode unless -ask was used - ( flock 9 || exit 11 - dialog --title "Installing package $shortname $PMSG" --infobox "$(cat $TMP/tmpmsg${MCOOKIE})" 0 0 - ) 9> $INSTLOCKDIR/dialog.lock - elif [ "$MODE" = "menu" -a "$USERPRIORITY" = "ADD" ]; then # install no matter what $PRIORITY - ( flock 9 || exit 11 - dialog --title "Installing package $shortname $PMSG" --infobox "$(cat $TMP/tmpmsg${MCOOKIE})" 0 0 - ) 9> $INSTLOCKDIR/dialog.lock - else # we must need a full menu: - ( flock 9 || exit 11 - dialog --title "Package Name: $shortname $PMSG" --menu "$(cat $TMP/tmpmsg${MCOOKIE})" 0 0 3 \ - "Yes" "Install package $shortname" \ - "No" "Do not install package $shortname" \ - "Quit" "Abort software installation completely" 2> $TMP/reply${MCOOKIE} - if [ ! $? = 0 ]; then - echo "No" > $TMP/reply${MCOOKIE} - fi - ) 9> $INSTLOCKDIR/dialog.lock - REPLY="$(cat $TMP/reply${MCOOKIE})" - rm -f $TMP/reply${MCOOKIE} $TMP/tmpmsg${MCOOKIE} - if [ "$REPLY" = "Quit" ]; then - exit 99 # EXIT STATUS 99 = ABORT! - elif [ "$REPLY" = "No" ]; then - continue # skip the package - fi - fi - - # Make sure there are no symbolic links sitting in the way of - # incoming package files: - grep -v "/$" $TMP/tmplist${MCOOKIE} | while read file ; do - if [ -L "$ROOT/$file" ]; then - rm -f "$ROOT/$file" - fi - done - rm -f $TMP/tmplist${MCOOKIE} - - # Write the package file database entry and install the package: - echo "PACKAGE NAME: $shortname" > $ADM_DIR/packages/$shortname - echo "COMPRESSED PACKAGE SIZE: $COMPRESSED" >> $ADM_DIR/packages/$shortname - echo "UNCOMPRESSED PACKAGE SIZE: $UNCOMPRESSED" >> $ADM_DIR/packages/$shortname - echo "PACKAGE LOCATION: $package" >> $ADM_DIR/packages/$shortname - # Record the md5sum if that's a selected option: - if [ $MD5SUM = 1 ]; then - echo "PACKAGE MD5SUM: $(md5sum $package | cut -f 1 -d ' ')" >> $ADM_DIR/packages/$shortname - fi - echo "PACKAGE DESCRIPTION:" >> $ADM_DIR/packages/$shortname - grep "^$packagebase:" $DESCRIPTION >> $ADM_DIR/packages/$shortname 2> /dev/null - if [ "$shortname" != "$packagebase" ]; then - grep "^$shortname:" $DESCRIPTION >> $ADM_DIR/packages/$shortname 2> /dev/null - fi - echo "FILE LIST:" >> $ADM_DIR/packages/$shortname - if [ "$INSTDIR" = "install" ]; then - ( cd $ROOT/ ; $packagecompression -dc | tar --acls --xattrs --xattrs-include='*' --keep-directory-symlink -xpvf - | LC_ALL=C sort ) < $package >> $TMP/$shortname 2> /dev/null - else - ( cd $ROOT/ ; $packagecompression -dc | tar --transform "s,^install$,$INSTDIR," --transform "s,^install/,$INSTDIR/," --acls --xattrs --xattrs-include='*' --keep-directory-symlink -xpvf - | LC_ALL=C sort ) < $package >> $TMP/$shortname 2> /dev/null - fi - 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 - # Some dumb bunny built a package with something other than makepkg. Bad! - # Oh well. Bound to happen. Par for the course. Fix it and move on... - # We'll assume it's just a recent tar with an unfiltered filelist with all - # files prefixed with "./". No guarantees, but this will usually work. - cat $TMP/$shortname | sed '2,$s,^\./,,' >> $ADM_DIR/packages/$shortname - fi - rm -f $TMP/$shortname - - # It's a good idea to make sure those newly installed libraries are properly - # activated for use, unless ROOT is pointing somewhere else in which case - # running ldconfig on the host system won't make any difference: - if [ "$ROOT" = "" ] && [ -x /sbin/ldconfig ]; then - ( flock 9 || exit 11 - /sbin/ldconfig 2> /dev/null - ) 9> $INSTLOCKDIR/ldconfig.lock - fi - - if [ -f $ROOT/$INSTDIR/doinst.sh ]; then - if [ "$MODE" = "install" ]; then - echo "Executing install script for $(basename $package)." - fi - # Don't use locking if the script contains "NOLOCK": - if grep -q NOLOCK $ROOT/$INSTDIR/doinst.sh ; then - # 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 ' $INSTDIR/doinst.sh | /bin/bash - else - cd $ROOT/ ; sh $INSTDIR/doinst.sh - fi - else # use locking - # 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 - ( flock 9 || exit 11 - cd $ROOT/ ; sed -e's?^( cd \([^;]*\);\(.*\) )$?pushd \1 \&\> /dev/null ; \2 ; popd \&\> /dev/null?g ' $INSTDIR/doinst.sh | /bin/bash - ) 9> $INSTLOCKDIR/doinst.sh.lock - else - ( flock 9 || exit 11 - cd $ROOT/ ; sh $INSTDIR/doinst.sh - ) 9> $INSTLOCKDIR/doinst.sh.lock - fi - fi - fi - # Clean up the mess... - if [ -d $ROOT/$INSTDIR ]; then - if [ -r $ROOT/$INSTDIR/doinst.sh ]; then - cp $ROOT/$INSTDIR/doinst.sh $ADM_DIR/scripts/$shortname - chmod 755 $ADM_DIR/scripts/$shortname - fi - # /install/doinst.sh and /install/slack-* are reserved locations for the package system. - # Heh, not any more with a recent tar :-) - ( cd $ROOT/$INSTDIR ; rm -f doinst.sh slack-* 1> /dev/null 2>&1 ) - rmdir $ROOT/$INSTDIR 1> /dev/null 2>&1 - fi - # If we used a scan directory, get rid of it: - if [ -d "$TMP/scan${MCOOKIE}" ]; then - rm -rf "$TMP/scan${MCOOKIE}" - fi - rm -f $TMP/tmpmsg${MCOOKIE} $TMP/reply${MCOOKIE} - if [ "$MODE" = "install" ]; then - echo "Package $(basename $package) installed." - fi -done - -exit $EXITSTATUS -- cgit v1.2.3