mirror of
git://slackware.nl/current.git
synced 2025-01-30 08:38:10 +01:00
646a5c1cbf
a/pkgtools-15.0-noarch-13.txz: Rebuilt. installpkg: default line length for --terselength is the number of columns. removepkg: added --terse mode. upgradepkg: default line length for --terselength is the number of columns. upgradepkg: accept -option in addition to --option. ap/vim-8.1.0026-x86_64-1.txz: Upgraded. d/bison-3.0.5-x86_64-1.txz: Upgraded. e/emacs-26.1-x86_64-1.txz: Upgraded. kde/kopete-4.14.3-x86_64-8.txz: Rebuilt. Recompiled against libidn-1.35. n/conntrack-tools-1.4.5-x86_64-1.txz: Upgraded. n/libnetfilter_conntrack-1.0.7-x86_64-1.txz: Upgraded. n/libnftnl-1.1.0-x86_64-1.txz: Upgraded. n/links-2.16-x86_64-2.txz: Rebuilt. Rebuilt to enable X driver for -g mode. n/lynx-2.8.9dev.19-x86_64-1.txz: Upgraded. n/nftables-0.8.5-x86_64-1.txz: Upgraded. n/p11-kit-0.23.11-x86_64-1.txz: Upgraded. n/ulogd-2.0.7-x86_64-1.txz: Upgraded. n/whois-5.3.1-x86_64-1.txz: Upgraded. xap/network-manager-applet-1.8.12-x86_64-1.txz: Upgraded. xap/vim-gvim-8.1.0026-x86_64-1.txz: Upgraded.
312 lines
12 KiB
Bash
Executable file
312 lines
12 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# Copyright 2002, 2009 Stuart Winter, Surrey, England, United Kingdom.
|
|
# 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.
|
|
#
|
|
##################################################################################
|
|
# Program: slackdtxt
|
|
# Purpose: Create package-ver-arch-build.txt files from slack-desc files.
|
|
# For use after running a SlackBuild script - you do not need to
|
|
# use this program for a package produced by slacktrack -- use its
|
|
# -c switch instead.
|
|
# Author : Stuart Winter <mozes@slackware.com>
|
|
# Date...: 24-Sep-2011
|
|
# Version: 1.05
|
|
#################################################################################
|
|
# History
|
|
##########
|
|
# 24-Sep-2011 - v1.05
|
|
# * Look for 'install/slack-desc' and './install/slack-desc'
|
|
# in the packages. This provides support for malformed packages
|
|
# that have not been created with the Slackware 'makepkg' command.
|
|
# Thanks to Helmut Hullen for the suggestion.
|
|
# 15-May-2009 - v1.04
|
|
# * Adjust to handle .tgz, .tbz, .tlz, .txz file extensions/
|
|
# compression formats.
|
|
# 04-Sep-2008 - v1.03
|
|
# * Display the filename of the .tgz being processed.
|
|
# * .txt files now use the time stamp of the corresponding .tgz
|
|
# * New default: only create a .txt or sign a package if there
|
|
# isn't an existing .txt or .asc *or* the .txt's time stamp
|
|
# isn't the same as the .tgz's.
|
|
# * Fixed bug where the gpg signing key wasn't being picked up
|
|
# at the command line.
|
|
# * Always wipe temp file when exiting
|
|
# * A GPG signing key must be specified -- it will not fall back
|
|
# on the default. This is because the code to check check the
|
|
# command line operators doesn't work. I checked the supplied
|
|
# examples for getopt and even they don't work!
|
|
# 28-Sep-2003 - v1.02
|
|
# * Added option -G, --gpg-sign to sign the .tgz package
|
|
# (Patch from Emanuele Vicentini)
|
|
# * Removed -t option. You may now do specify the file after
|
|
# as before (but without -t) or specify more than one package
|
|
# at once: eg slackdtxt *.tgz
|
|
# 11-Jul-2003 - v1.01
|
|
# * Fixed problem with checking the exit code from getopt.
|
|
# (reported by Emanuele Vicentini).
|
|
# 02-Mar-2003 - v1.00
|
|
# * Created
|
|
##################################################################################
|
|
|
|
# Program name
|
|
PROGNAME=slackdtxt
|
|
|
|
# Version
|
|
VERSION="${PROGNAME} v1.03 by Stuart Winter <mozes@slackware.com>"
|
|
|
|
# Temporary store for the slack-desc file
|
|
DESCTMPFILE="/var/tmp/$$.slackdtxt.desc.$$"
|
|
|
|
trap "rm -f $DESCTMPFILE" EXIT
|
|
|
|
############################## Functions###################################
|
|
function display_usage () {
|
|
printf "Usage: ${PROGNAME} [options] <package file/list of package files>\n"
|
|
if [ ! -z "$1" ]; then
|
|
echo "Use $( basename $0 ) --help for a list of options"
|
|
fi
|
|
}
|
|
|
|
function display_help () {
|
|
printf "${VERSION}\n\n$(display_usage)
|
|
|
|
Startup:
|
|
-h, --help Display this help
|
|
-v, --version Display version information
|
|
|
|
Main options:
|
|
-s, --slackdescfile <file> 'slack-desc' file (cannot be used when
|
|
specifying more than one package file)
|
|
-d, --destdir <directory> The directory in which to store the package
|
|
file & create the .txt description file within
|
|
Omitting this flag implies --nodelete
|
|
-n, --nodelete Do not delete the original package file.
|
|
once moved into destination directory
|
|
-G, --gpg-sign <key id> Sign the package with GnuPG
|
|
-f, --force Force creation of a .txt and GPG signing.
|
|
By default, .txt files are only created and
|
|
packages signed if there is no existing .txt
|
|
or .asc file, or the .txt time stamps aren't
|
|
the same as the package's.
|
|
"
|
|
}
|
|
|
|
###############################################################################
|
|
|
|
############################## Configuration variables #########################
|
|
# These can be changed via the command line switches
|
|
#
|
|
DELETEPKG="Yes"
|
|
# By default, don't force signing nor creation of .txt files
|
|
FORCE=No
|
|
################################################################################
|
|
|
|
PARAMS="$( getopt -qn "$( basename $0 )" -o s:d:fnhvG: -l slackdescfile:,destdir:,nodelete,force,help,version,gpg-sign: -- "$@" )"
|
|
# If params are incorrect then
|
|
if [ $? -gt 0 ]; then display_help ; exit 2 ; fi
|
|
eval set -- "${PARAMS}"
|
|
for param in $*; do
|
|
case "$param" in
|
|
-s|--slackdescfile) SLACKDESCFILE="$2"
|
|
shift 2;;
|
|
|
|
-d|--destdir) DESTDIR="$2"
|
|
shift 2;;
|
|
|
|
-n|--nodelete) DELETEPKG="No"
|
|
shift 1;;
|
|
|
|
-f|--force) FORCE="Yes"
|
|
shift 1;;
|
|
|
|
-G|--gpg-sign) SIGNPACKAGE="Yes"
|
|
SIGNINGKEY="$2"
|
|
shift 2 ;;
|
|
|
|
-h|--help) display_help ; exit ;;
|
|
|
|
-v|--version) printf "${VERSION}\n" ; exit;;
|
|
|
|
--) shift; break;;
|
|
esac
|
|
done
|
|
|
|
# Do we have the relevant information to proceed?
|
|
if [ -z "${1}" ]; then
|
|
display_usage help
|
|
exit 2
|
|
fi
|
|
|
|
# Do we have too *much* information to proceed?
|
|
if [ $# -gt 1 -a ! -z "${SLACKDESCFILE}" ]; then
|
|
echo "Error: You cannot specify a slack-desc file when"
|
|
echo " specifying more than one package file"
|
|
display_usage help
|
|
exit 2
|
|
fi
|
|
|
|
# Let's check if user really has gpg.
|
|
if [ "${SIGNPACKAGE}" = "Yes" ]; then
|
|
which gpg >/dev/null 2>&1 || { echo "${PROGNAME}: Warning: Cannot find gpg; disabling signature creation"; unset SIGNPACKAGE; }
|
|
fi
|
|
|
|
# Main loop, handle any number (well, not really but you know..)
|
|
# of package files specified at the command line.
|
|
for PKGFILE in $*; do
|
|
|
|
# If we were given a destination dir then check whether it exists
|
|
# Now giving a dest dir allows us to do
|
|
# # for i in *.t?z ; do slackdtxt -t $i ; done
|
|
# and create .txt files for all the package files in a dir.
|
|
if [ ! -z "${DESTDIR}" ]; then
|
|
DESTDIR="${DESTDIR}/" # otherwise when we tar without specifying a dest dir, it becomes /package-blah.tgz
|
|
if [ ! -d "${DESTDIR}" ]; then
|
|
echo "${PROGNAME}: ERROR: The destination directory does not exist"
|
|
exit 6
|
|
fi
|
|
else
|
|
DELETEPKG="No" # otherwise we'd delete our only copy
|
|
fi
|
|
|
|
# Does the specified package exist?
|
|
if [ ! -s "${PKGFILE}" ]; then
|
|
echo "${PROGNAME}: ERROR: The specified package "${PKGFILE}" does not exist"
|
|
exit 7
|
|
fi
|
|
|
|
# Does the specified slack-desc file exist ?
|
|
if [ ! -z "${SLACKDESCFILE}" ]; then
|
|
if [ ! -s "${SLACKDESCFILE}" ]; then
|
|
echo "${PROGNAME}: Warning: The specified slack-desc file ${SLACKDESCFILE} does not exist;"
|
|
echo " will try and extract from the package."
|
|
unset SLACKDESCFILE
|
|
else
|
|
# .. the file is fine.
|
|
# copy the slack-desc file to the temp location so I don't have
|
|
# to code around having the user specify one and having to take one
|
|
# from the package then delete it.
|
|
cp -f "${SLACKDESCFILE}" "${DESCTMPFILE}"
|
|
# .. but if copying it fails then we'll take it from the package anyway.
|
|
if [ $? -gt 0 ]; then
|
|
unset SLACKDESCFILE
|
|
else
|
|
SLACKDESCFILE="${DESCTMPFILE}" # we'll use the /var/tmp version now
|
|
fi
|
|
fi
|
|
fi
|
|
############################## Main program###################################
|
|
|
|
# Move the pakage file to the dest dir if we were given one
|
|
if [ ! -z "${DESTDIR}" ]; then
|
|
echo -n "${PROGNAME}: Copying package to destination directory"
|
|
cp -fa "${PKGFILE}" "${DESTDIR}"
|
|
if [ $? -gt 0 ]; then
|
|
printf "\n${PROGNAME}: ERROR: Failed to copy the package\n"
|
|
exit 8
|
|
else
|
|
echo " ... done"
|
|
fi
|
|
fi
|
|
|
|
# Test the copied package -- it probably isn't corrupt (eg no disk space on $DESTDIR)
|
|
# as the cp would have errored, but I'd like to check anyway
|
|
if [ ! -z "${DESTDIR}" ]; then
|
|
echo -n "${PROGNAME}: Verifying the version of the package in the destination directory"
|
|
tar ftz "${DESTDIR}$( basename ${PKGFILE} )" >/dev/null 2>&1
|
|
if [ $? -gt 0 ]; then
|
|
printf "\n${PROGNAME}: ERROR: The package in ${DESTDIR} is corrupt\n"
|
|
exit 8
|
|
else
|
|
echo " ... done"
|
|
fi
|
|
fi
|
|
|
|
# If we weren't given a slack-desc file then try and pull one from the
|
|
# package
|
|
if [ -z "${SLACKDESCFILE}" ]; then
|
|
SLACKDESCFILE="${DESCTMPFILE}"
|
|
echo "${PROGNAME}: Processing $( basename ${PKGFILE} ) ..."
|
|
echo -n "${PROGNAME}: Attempting to extract install/slack-desc from the package"
|
|
# In case somebody's not used 'makepkg' (which uses tar-1.13) to create the package,
|
|
# and tar has created the archive index with absolute path names.
|
|
# (it's a malformed package in this case, but we may as well support it)
|
|
tar fOx "${PKGFILE}" install/slack-desc ./install/slack-desc > "${SLACKDESCFILE}" 2>/dev/null
|
|
if [ ! -s "${SLACKDESCFILE}" ]; then
|
|
printf "\n${PROGNAME}: ERROR: Failed to extract the slack-desc file from the package\n"
|
|
rm -f "${SLACKDESCFILE}" # it may be zero bytes/empty
|
|
exit 8
|
|
else
|
|
echo " ... done"
|
|
fi
|
|
fi
|
|
|
|
# Turn the slack-desc file into a .txt file;
|
|
# only if there isn't an existing .txt or the .txt is older than the package
|
|
# unless -f,--force is specified.
|
|
SLACKTXTFILE="${DESTDIR}$( echo $( basename $PKGFILE ) | rev | cut -d. -f2- | rev ).txt"
|
|
if [ $SLACKTXTFILE -ot $PKGFILE -o $SLACKTXTFILE -nt $PKGFILE -o "$FORCE" = "Yes" ]; then
|
|
egrep -v '^($|#| *\|)' "${SLACKDESCFILE}" > $SLACKTXTFILE
|
|
rm -f "${SLACKDESCFILE}"
|
|
# Set the time stamp to that of the package:
|
|
touch -r $PKGFILE $SLACKTXTFILE
|
|
echo "${PROGNAME}: $SLACKTXTFILE created"
|
|
else
|
|
echo "${PROGNAME}: Not created .txt - is same age as package (use -f to override)"
|
|
fi
|
|
|
|
# Let's sign the original package with user's gpg key
|
|
if [ ! -z "${SIGNPACKAGE}" ]; then
|
|
# If the .asc is the same time stamp as the package, don't sign unless
|
|
# forced.
|
|
if [ ${DESTDIR}${PKGFILE}.asc -ot $PKGFILE -o ${DESTDIR}${PKGFILE}.asc -nt $PKGFILE -o "$FORCE" = "Yes" ]; then
|
|
echo -n "${PROGNAME}: signing ${PKGFILE} with ${SIGNINGKEY:-your default} key"
|
|
GPG_OPTIONS="--detach-sign --armor --yes"
|
|
if [ "${SIGNINGKEY}" ]; then
|
|
GPG_OPTIONS="${GPG_OPTIONS} --local-user $SIGNINGKEY"
|
|
fi
|
|
gpg ${GPG_OPTIONS} --output ${DESTDIR}${PKGFILE}.asc ${PKGFILE}
|
|
if [ $? -ne 0 ]; then
|
|
echo "${PROGNAME}: ERROR: Signature has not been correctly generated"
|
|
else
|
|
echo " ... done"
|
|
# Set time stamp to that of the package:
|
|
touch -r $PKGFILE ${DESTDIR}${PKGFILE}.asc
|
|
fi
|
|
else
|
|
echo "${PROGNAME}: Not signed package - is same age as package (use -f to override)"
|
|
fi
|
|
fi
|
|
|
|
# Delete the package ?
|
|
if [ "${DELETEPKG}" = "Yes" ]; then
|
|
echo -n "${PROGNAME}: Deleting the original package"
|
|
rm -f "${PKGFILE}"
|
|
if [ $? -gt 0 ]; then
|
|
printf "\n${PROGNAME}: Warning: unable to delete package\n"
|
|
else
|
|
echo " ... done"
|
|
fi
|
|
fi
|
|
|
|
unset SLACKDESCFILE
|
|
|
|
# Exit from main loop
|
|
done
|