diff options
Diffstat (limited to 'testing/source/pkgtools/scripts/makepkg')
-rw-r--r-- | testing/source/pkgtools/scripts/makepkg | 452 |
1 files changed, 0 insertions, 452 deletions
diff --git a/testing/source/pkgtools/scripts/makepkg b/testing/source/pkgtools/scripts/makepkg deleted file mode 100644 index f9241cb9..00000000 --- a/testing/source/pkgtools/scripts/makepkg +++ /dev/null @@ -1,452 +0,0 @@ -#!/bin/sh -# Copyright 1994, 1998, 2008 Patrick Volkerding, Moorhead, Minnesota USA -# Copyright 2003 Slackware Linux, Inc. Concord, CA USA -# Copyright 2009, 2015, 2017, 2018 Patrick J. 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 May 21 18:31:20 UTC 2018 -# Add --compress option, usually used to change the preset compression level -# or block size. -# -# Tue Feb 13 00:46:12 UTC 2018 -# Use recent tar, and support storing POSIX ACLs and extended attributes. -# -# Tue Dec 12 21:55:59 UTC 2017 -# If possible, use multiple compression threads. -# -# 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. - -CWD=$(pwd) - -umask 022 - -make_install_script() { - TAB="$(echo -e "\t")" - COUNT=1 - 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 2 -d "$TAB")" - echo "( cd $LINKGOESIN ; rm -rf $LINKNAMEIS )" - echo "( cd $LINKGOESIN ; ln -sf $LINKPOINTSTO $LINKNAMEIS )" - COUNT=$(expr $COUNT + 1) - done -} - -usage() { - cat << EOF - -Usage: makepkg package_name.tgz - (or: package_name.tbz, package_name.tlz, package_name.txz) - -Makes a Slackware compatible package containing the contents of the current -and all subdirectories. If symbolic links exist, they will be removed and -an installation script will be made to recreate them later. This script will -be called "install/doinst.sh". You may add any of your own ash-compatible -shell scripts to this file and rebuild the package if you wish. - -options: -l, --linkadd y|n (moves symlinks into doinst.sh: recommended) - -p, --prepend (prepend rather than append symlinks to an existing - doinst.sh. Useful to link libraries needed by programs in - the doinst.sh script) - -c, --chown y|n (resets all permissions to root:root 755 - not - generally recommended) - --threads <number> For xz/plzip compressed packages, set the max - number of threads to be used for compression. Only has an - effect 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 (due to commonly occuring memory - related failures when using many threads with multi-threaded - xz compression). - --compress <option> Supply a custom option to the compressor. - This will be used in place of the default, which is: -9 - --acls Support storing POSIX ACLs in the package. The resulting - package will not be compatible with pkgtools version < 15.0. - --xattrs Support storing extended attributes in the package. The - resulting package will not be compatible with pkgtools - version < 15.0. - -If these options are not set, makepkg will prompt if appropriate. -EOF -} - -TMP=/tmp # This can be a hole, but I'm going to be careful about file - # creation in there, so don't panic. :^) - -# Set maximum number of threads to use. By default, this will be the number -# of CPU threads: -THREADS="$(nproc)" - -# Set default compression option. -COMPRESS_OPTION="-9" - -# Parse options -unset ACLS XATTRS -while [ 0 ]; do - if [ "$1" = "--linkadd" -o "$1" = "-l" ]; then - if [ "$2" = "y" ]; then - LINKADD=y - elif [ "$2" = "n" ]; then - LINKADD=n - else - usage - exit 2 - fi - shift 2 - elif [ "$1" = "--chown" -o "$1" = "-c" ]; then - if [ "$2" = "y" ]; then - CHOWN=y - elif [ "$2" = "n" ]; then - CHOWN=n - else - usage - exit 2 - fi - shift 2 - elif [ "$1" = "-p" -o "$1" = "--prepend" ]; then - PREPEND=y - shift 1 - elif [ "$1" = "-threads" -o "$1" = "--threads" ]; then - THREADS="$2" - shift 2 - # xz has memory issues with threads it seems, so we'll use two threads by - # default unless we see that something else was user-selected: - XZ_THREADS_FORCED=yes - elif [ "$1" = "-compress" -o "$1" = "--compress" ]; then - COMPRESS_OPTION="$2" - shift 2 - elif [ "$1" = "--acls" ]; then - ACLS="--acls" - shift 1 - elif [ "$1" = "--xattrs" ]; then - XATTRS="--xattrs" - shift 1 - elif [ "$1" = "-h" -o "$1" = "-H" -o "$1" = "--help" -o $# = 0 ]; then - usage - exit 0 - else - break - fi -done - -PACKAGE_NAME="$1" -TARGET_NAME="$(dirname $PACKAGE_NAME)" -PACKAGE_NAME="$(basename $PACKAGE_NAME)" - -# Identify package extension and compression type to use: -if [ ! "$(basename $PACKAGE_NAME .tgz)" = "$PACKAGE_NAME" ]; then - EXTENSION="tgz" - COMPEXT="gz" - COMPRESSOR="gzip ${COMPRESS_OPTION} -c" - if ! which gzip 1> /dev/null 2> /dev/null ; then - echo "ERROR: gzip compression utility not found in \$PATH." - exit 3 - fi -elif [ ! "$(basename $PACKAGE_NAME .tar.gz)" = "$PACKAGE_NAME" ]; then - EXTENSION="tar.gz" - COMPRESSOR="gzip ${COMPRESS_OPTION} -c" - if ! which gzip 1> /dev/null 2> /dev/null ; then - echo "ERROR: gzip compression utility not found in \$PATH." - exit 3 - fi -elif [ ! "$(basename $PACKAGE_NAME .tbz)" = "$PACKAGE_NAME" ]; then - EXTENSION="tbz" - if which lbzip2 1> /dev/null 2> /dev/null ; then - COMPRESSOR="lbzip2 ${COMPRESS_OPTION} -c" - else - if which bzip2 1> /dev/null 2> /dev/null ; then - COMPRESSOR="bzip2 ${COMPRESS_OPTION} -c" - else - echo "ERROR: bzip2 compression utility not found in \$PATH." - exit 3 - fi - fi -elif [ ! "$(basename $PACKAGE_NAME .tar.bz2)" = "$PACKAGE_NAME" ]; then - EXTENSION="tar.bz2" - if which lbzip2 1> /dev/null 2> /dev/null ; then - COMPRESSOR="lbzip2 ${COMPRESS_OPTION} -c" - else - if which bzip2 1> /dev/null 2> /dev/null ; then - COMPRESSOR="bzip2 ${COMPRESS_OPTION} -c" - else - echo "ERROR: bzip2 compression utility not found in \$PATH." - exit 3 - fi - fi -elif [ ! "$(basename $PACKAGE_NAME .tlz)" = "$PACKAGE_NAME" ]; then - EXTENSION="tlz" - if which plzip 1> /dev/null 2> /dev/null ; then - COMPRESSOR="plzip ${COMPRESS_OPTION} --threads=${THREADS} -c" - else - echo "WARNING: plzip compression utility not found in \$PATH." - echo "WARNING: package will not support multithreaded decompression." - if which lzip 1> /dev/null 2> /dev/null ; then - COMPRESSOR="lzip ${COMPRESS_OPTION} -c" - else - echo "ERROR: lzip compression utility not found in \$PATH." - exit 3 - fi - fi -elif [ ! "$(basename $PACKAGE_NAME .tar.lz)" = "$PACKAGE_NAME" ]; then - EXTENSION="tar.lz" - if which plzip 1> /dev/null 2> /dev/null ; then - COMPRESSOR="plzip ${COMPRESS_OPTION} --threads=${THREADS} -c" - else - echo "WARNING: plzip compression utility not found in \$PATH." - echo "WARNING: package will not support multithreaded decompression." - if which lzip 1> /dev/null 2> /dev/null ; then - COMPRESSOR="lzip ${COMPRESS_OPTION} -c" - else - echo "ERROR: lzip compression utility not found in \$PATH." - exit 3 - fi - fi -elif [ ! "$(basename $PACKAGE_NAME .tar.lzma)" = "$PACKAGE_NAME" ]; then - EXTENSION="tar.lzma" - COMPRESSOR="lzma ${COMPRESS_OPTION} -c" - if ! which lzma 1> /dev/null 2> /dev/null ; then - echo "ERROR: lzma compression utility not found in \$PATH." - exit 3 - fi -elif [ ! "$(basename $PACKAGE_NAME .txz)" = "$PACKAGE_NAME" ]; then - EXTENSION="txz" - if [ ! "$XZ_THREADS_FORCED" = "yes" ]; then - # Two threads by default with xz due to memory failures on 32-bit. Not that - # it matters much... if upstream ever gets around to implementing multi- - # threaded decompression we'll revisit this default. :-D - COMPRESSOR="xz ${COMPRESS_OPTION} --threads=2 -c" - else - COMPRESSOR="xz ${COMPRESS_OPTION} --threads=${THREADS} -c" - fi - if ! which xz 1> /dev/null 2> /dev/null ; then - echo "ERROR: xz compression utility not found in \$PATH." - exit 3 - fi -elif [ ! "$(basename $PACKAGE_NAME .tar.xz)" = "$PACKAGE_NAME" ]; then - EXTENSION="tar.xz" - if [ ! "$XZ_THREADS_FORCED" = "yes" ]; then - # Two threads by default with xz due to memory failures on 32-bit. Not that - # it matters much... if upstream ever gets around to implementing multi- - # threaded decompression we'll revisit this default. :-D - COMPRESSOR="xz ${COMPRESS_OPTION} --threads=2 -c" - else - COMPRESSOR="xz ${COMPRESS_OPTION} --threads=${THREADS} -c" - fi - if ! which xz 1> /dev/null 2> /dev/null ; then - echo "ERROR: xz compression utility not found in \$PATH." - exit 3 - fi -else - EXTENSION="$(echo $PACKAGE_NAME | rev | cut -f 1 -d . | rev)" - echo "ERROR: Package extension .$EXTENSION is not supported." - exit 1 -fi - -TAR_NAME="$(basename $PACKAGE_NAME .$EXTENSION)" - -# Sanity check -- we can't make the package in the current directory: -if [ "$CWD" = "$TARGET_NAME" -o "." = "$TARGET_NAME" ]; then - echo "ERROR: Can't make output package in current directory." - exit 2 -fi - -echo -echo "Slackware package maker, version 3.14159265." -echo -echo "Searching for symbolic links:" -# Get rid of possible pre-existing trouble: -INST=$(mktemp $TMP/makepkg.XXXXXX) -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:" - make_install_script $INST | tee doinst.sh -fi -echo -if [ ! "$(cat $INST)" = "" ]; then - if [ -r install/doinst.sh ]; then - echo "Unless your existing installation script already contains the code" - echo "to create these links, you should append these lines to your existing" - echo "install script. Now's your chance. :^)" - echo - echo "Would you like to add this stuff to the existing install script and" - echo -n "remove the symbolic links ([y]es, [n]o)? " - else - echo "It is recommended that you make these lines your new installation script." - echo - echo "Would you like to make this stuff the install script for this package" - echo -n "and remove the symbolic links ([y]es, [n]o)? " - fi - if [ ! "$LINKADD" ]; then - read LINKADD; - echo - else - echo $LINKADD - echo - fi - if [ "$LINKADD" = "y" ]; then - if [ -r install/doinst.sh ]; then - UPDATE="t" - if [ "$PREPEND" = "y" ]; then - touch install/doinst.sh - mv install/doinst.sh install/doinst.sh.shipped - cat doinst.sh > install/doinst.sh - echo "" >> install/doinst.sh - cat install/doinst.sh.shipped >> install/doinst.sh - rm -f install/doinst.sh.shipped - else - cat doinst.sh >> install/doinst.sh - fi - else - mkdir -p install - cat doinst.sh > install/doinst.sh - fi - echo - echo "Removing symbolic links:" - find . -type l -exec rm -v {} \; - echo - if [ "$UPDATE" = "t" ]; then - if [ "$PREPEND" = "y" ]; then - echo "Updating your ./install/doinst.sh (prepending symlinks)..." - else - echo "Updating your ./install/doinst.sh..." - fi - else - echo "Creating your new ./install/doinst.sh..." - fi - fi -else - echo "No symbolic links were found, so we won't make an installation script." - echo "You can make your own later in ./install/doinst.sh and rebuild the" - echo "package if you like." -fi -rm -f doinst.sh $INST -echo -echo "This next step is optional - you can set the directories in your package" -echo "to some sane permissions. If any of the directories in your package have" -echo "special permissions, then DO NOT reset them here!" -echo -echo "Would you like to reset all directory permissions to 755 (drwxr-xr-x) and" -echo -n "directory ownerships to root.root ([y]es, [n]o)? " -if [ ! "$CHOWN" ]; then - read CHOWN; - echo -else - echo $CHOWN - echo -fi -if [ "$CHOWN" = "y" ]; then - find . -type d -exec chmod -v 755 {} \; - 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} - -# HISTORICAL NOTE 2/2018: -# In the interest of maximizing portability of this script, we'll use find -# and sed to create a filelist compatible with tar-1.13, and then use a -# more modern tar version to create the archive. -# -# Other (but possibly less portable) ways to achieve the same result: -# -# Use the tar --transform and --show-transformed-names options: -# tar --transform "s,^\./\(.\),\1," --show-transformed-names $ACLS $XATTRS -cvf - . | $COMPRESSOR > ${TARGET_NAME}/${TAR_NAME}.${EXTENSION} -# -# Use cpio: -# find ./ | sed '2,$s,^\./,,' | cpio --quiet -ovHustar > ${TARGET_NAME}/${TAR_NAME}.tar - -# Create the package: -find ./ | sed '2,$s,^\./,,' | tar --no-recursion $ACLS $XATTRS -T - -cvf - | $COMPRESSOR > ${TARGET_NAME}/${TAR_NAME}.${EXTENSION} -ERRCODE=$? -if [ ! $ERRCODE = 0 ]; then - echo "ERROR: $COMPRESSOR returned error code $ERRCODE -- makepkg failed." - exit 1 -fi - -# Warn of zero-length files: -find . -type f -size 0c | while read file ; do - echo "WARNING: zero length file $(echo $file | cut -b3-)" -done - -# Warn of corrupt or empty gzip files: -find . -type f -name '*.gz' | while read file ; do - if ! gzip -t $file 1> /dev/null 2> /dev/null ; then - echo "WARNING: gzip test failed on $(echo $file | cut -b3-)" - else - if [ "$(gzip -l $file | tail -n 1 | tr -s ' ' | cut -f 3 -d ' ')" -eq 0 ]; then - echo "WARNING: $(echo $file | cut -b3-) is an empty gzipped file" - fi - fi -done - -# Some more handy warnings: -if [ -d usr/share/man ]; then - echo "WARNING: /usr/share/man (with possibly not gzipped man pages) detected" -fi - -if [ -d usr/share/info ]; then - echo "WARNING: /usr/share/info (with possibly not gzipped info pages) detected" -fi - -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 |