diff options
Diffstat (limited to 'source/a/pkgtools/scripts/explodepkg')
-rw-r--r-- | source/a/pkgtools/scripts/explodepkg | 64 |
1 files changed, 38 insertions, 26 deletions
diff --git a/source/a/pkgtools/scripts/explodepkg b/source/a/pkgtools/scripts/explodepkg index 110ebf06..e1f9b128 100644 --- a/source/a/pkgtools/scripts/explodepkg +++ b/source/a/pkgtools/scripts/explodepkg @@ -1,7 +1,7 @@ #!/bin/sh # Copyright 1994, 1998, 2000 Patrick Volkerding, Concord, CA, USA # Copyright 2001, 2003 Slackware Linux, Inc., Concord, CA, USA -# Copyright 2007, 2009 Patrick Volkerding, Sebeka, MN, USA +# Copyright 2007, 2009, 2017, 2018 Patrick Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -21,32 +21,15 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -TAR=tar-1.13 -$TAR --help 1> /dev/null 2> /dev/null -if [ ! $? = 0 ]; then - TAR=tar -fi -if [ ! "`LC_MESSAGES=C $TAR --version`" = "tar (GNU tar) 1.13 - -Copyright (C) 1988, 92,93,94,95,96,97,98, 1999 Free Software Foundation, Inc. -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -Written by John Gilmore and Jay Fenlason." ]; then - echo "WARNING: pkgtools are unstable with tar > 1.13." - echo " You should provide a \"tar-1.13\" in your \$PATH." - sleep 5 -fi - if [ $# = 0 ]; then cat << EOF Usage: explodepkg package_name [package_name2, ...] Explodes a Slackware compatible software package -(or any tar+{gzip,bzip2,lzma,xz archive) in the current directory. +(or any tar+{gzip,bzip2,lz,xz archive) in the current directory. Equivalent to (for each package listed): - ( umask 000 ; cat package_name | COMPRESSOR -dc | tar xvf package_name ) + ( umask 000 ; cat package_name | COMPRESSOR -dc | tar xpvf package_name ) Note: This should only be used for debugging or examining packages, not for installing them. It doesn't execute installation scripts or update the package @@ -55,6 +38,10 @@ indexes in /var/log/packages and /var/log/scripts. EOF fi +# Set maximum number of threads to use. By default, this will be the number +# of CPU threads: +THREADS="$(nproc)" + # Main loop: for PKG in $* ; do echo "Exploding package $PKG in current directory:" @@ -69,25 +56,50 @@ for PKG in $* ; do packagecompression=gzip ;; 'tbz' ) - packagecompression=bzip2 + if which lbzip2 1> /dev/null 2> /dev/null ; then + packagecompression=lbzip2 + else + packagecompression=bzip2 + fi ;; 'bz2' ) - packagecompression=bzip2 + if which lbzip2 1> /dev/null 2> /dev/null ; then + packagecompression=lbzip2 + else + packagecompression=bzip2 + fi ;; 'tlz' ) - packagecompression=lzma + 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 + ;; + 'lz' ) + 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 ;; 'lzma' ) packagecompression=lzma ;; 'txz' ) - packagecompression=xz + packagecompression="xz --threads=${THREADS}" ;; 'xz' ) - packagecompression=xz + packagecompression="xz --threads=${THREADS}" ;; esac - ( umask 000 ; cat $PKG | $packagecompression -dc | $TAR xvf - 2> /dev/null ) + ( umask 000 ; cat $PKG | $packagecompression -dc | tar --xattrs --xattrs-include='*' --keep-directory-symlink -xpvf - 2> /dev/null ) if [ -r install/doinst.sh ]; then echo echo "An installation script was detected in ./install/doinst.sh, but" |