slackware-current/source/ap/slackpkg/files/slackpkg
Patrick J Volkerding da4119a5e0 Thu Mar 18 23:54:14 UTC 2021
ap/slackpkg-15.0.1-noarch-1.txz:  Upgraded.
  Tweak default blacklist file's help text (thanks, dive).
  Fix display of blacklisted packages.
  Tweaks to slack-desc.
  Note that kernel-headers should not be blacklisted.
  Added Lithuania mirrors (Totoro-kun on LQ).
  Fix exit code for pending updates (dive).
  Avoid matching txz/tgz etc extension when blacklisting (dive).
  Use https for all slackpkg homepage links.
  Update mirror files (14.2 -> 15.0).
  Add blacklist to search option.
  Move applyblacklist to end of makelist().
  Clarify how to blacklist duplicate packages.
  Fix new-config dialog.
  Reduce false positives in DOUBLEFILES detection.
  Remove spaces in awk..
  More blacklisting fixups (see full commit msg).
  Escape plus signs in blacklist regex.
  Convert ${ROOT}/${WORKDIR} > ${WORKDIR} (dive).
  Convert ${ROOT}/${CONF} -> ${CONF} and tweak blacklists (dive).
  Further fixup/enhancement to blacklisting issues.
  Fix "slackpkg blacklist" so that it shows blacklist again.
  Fixup internal blacklist handling.
  Use ERE for sanity_check() function (David Woodfall).
  Remove "slackpkg blacklist" from manual pages.
  Fix aaa_elflibs --> aaa_libraries in sample blacklist file (mozes).
  Split aarch64 and arm mirrors into separate files (mozes).
  Allow new-config after slackpkg upgrade itself (PiterPUNK).
  Modify blacklist regex line ending.
  Thanks to Robby Workman.
ap/sqlite-3.35.2-x86_64-1.txz:  Upgraded.
kde/kid3-3.8.6-x86_64-1.txz:  Upgraded.
l/glib2-2.66.8-x86_64-1.txz:  Upgraded.
l/pango-1.48.3-x86_64-2.txz:  Rebuilt.
  Eliminate dangling symlink. Thanks to upnort.
n/bind-9.16.13-x86_64-1.txz:  Upgraded.
n/links-2.22-x86_64-1.txz:  Upgraded.
n/network-scripts-15.0-noarch-14.txz:  Rebuilt.
  Fix discrepancies between rc.inet1.conf versions.
  Move configuration of SLACC before DHCP.
  Don't bring up a bridge interface if it will be brought up later by IP config.
  Fix a typo in br_open when configuring IFOPTS: i->1.
  Add SLAAC security and privacy options.
  Fix typo of 'default'.
  Added debugging output around new SLAAC enhancements.
  Move enabling RA before SLAAC security section.  Thanks to davjohn on LQ.
  Fix domain name validation checks.  Thanks to xbeastx74 on LQ for the report.
  Thanks to Darren "Tadgy" Austin and Robby Workman.
n/wireless_tools-30.pre9-x86_64-5.txz:  Rebuilt.
  rc.wireless: don't leave interfaces in up state as it prevents SLAAC.
  Take interface down at exit from rc.wireless.  Thanks to davjohn.
x/libgee-0.20.4-x86_64-1.txz:  Upgraded.
2021-03-19 08:59:51 +01:00

615 lines
14 KiB
Bash

#!/bin/sh
#
# SlackPkg - An Automated packaging tool for Slackware Linux
# Copyright (C) 2003-2011 Roberto F. Batista, Evaldo Gardenali
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Project Page: https://slackpkg.org/
# Roberto F. Batista (aka PiterPunk) piterpunk@slackware.com
# Evaldo Gardenali (aka UdontKnow) evaldogardenali@fasternet.com.br
#
# Ensure that we're not at the epoch. slackpkg breaks with GPG checks when
# the date is so far in the past:
if [ $( date +%s ) -le 1437841588 ]; then
cat <<"EOF"
Error: Your system date is wrong. slackpkg requires that the date be correct
so that the package signatures can be verified.
The date may be incorrect because you have a system such as a Raspberry Pi that
does does not have an RTC (Real Time Clock), or that the correct date was unable
to be read from the RTC due to a driver bug, or a missing driver.
You may wish to set up NTP on your system:
http://docs.slackware.com/howtos:network_services:ntp
EOF
exit 1
fi
#========================================================================
#
# LOAD CONFIGURATIONS
#
#
# CONF = configuration directory
# SOURCE = A mirror of Slackware. Source can be set by editing $CONF/mirrors
#
VERSION=@VERSION@
PATH=/bin:/usr/bin:/sbin:/usr/sbin
SLACKWARE_VERSION=$(cat /etc/slackware-version | cut -f2 -d\ )
[ -z "$ROOT" ] && CONF=${CONF:-/etc/slackpkg}
[ -n "$ROOT" ] && CONF=${CONF:-"${ROOT}/etc/slackpkg"}
SOURCE=$(sed -n '
# Remove leading and trailing blanks
s/^[[:blank:]]*//
s/[[:blank:]]*$//
# Only one token is allowed per line
/[[:blank:]]/d
# A single solidus should end the URI
s,[/]*$,/,
# Print the lines beginning with one of the URI schemes we look for
\@^file://@p
\@^cdrom://@p
\@^local://@p
\@^https\{0,1\}://@p
\@^ftps\{0,1\}://@p' $CONF/mirrors)
. $CONF/slackpkg.conf
WORKDIR=${ROOT}/${WORKDIR}
ERROR=""
# Set temporary directory
#
mkdir -p ${ROOT}/tmp
TMPDIR=$(mktemp -p ${ROOT}/tmp -d slackpkg.XXXXXX 2>/dev/null)
if [ $? -ne 0 ]; then
TMPDIR="${ROOT}/tmp/slackpkg.${RANDOM}"
mkdir -p -m 700 $TMPDIR || TMPDIR="FAILED"
fi
#
# Load the slackpkg functions
#
. /usr/libexec/slackpkg/core-functions.sh
#========================================================================
#
# COMMAND LINE PARSING
#
if [ $# -eq 0 ]; then
usage
fi
while [ -n "$1" ] ; do
case $1 in
-delall=on)
DELALL=on
shift
;;
-delall=off)
DELALL=off
shift
;;
-checkmd5=on)
CHECKMD5=on
shift
;;
-checkmd5=off)
CHECKMD5=off
shift
;;
-checkgpg=on)
CHECKGPG=on
shift
;;
-checkgpg=off)
CHECKGPG=off
shift
;;
-checksize=on)
CHECKSIZE=on
shift
;;
-checksize=off)
CHECKSIZE=off
shift
;;
-postinst=on)
POSTINST=on
shift
;;
-postinst=off)
POSTINST=off
shift
;;
-onoff=on)
ONOFF=on
shift
;;
-onoff=off)
ONOFF=off
shift
;;
-download_all=on)
DOWNLOAD_ALL=on
shift
;;
-download_all=off)
DOWNLOAD_ALL=off
shift
;;
-dialog=on)
DIALOG=on
shift
;;
-dialog=off)
DIALOG=off
shift
;;
-dialog_maxargs=*)
DIALOG_MAXARGS=$(echo $1 | cut -f2 -d=)
shift
;;
-batch=on)
BATCH=on
shift
;;
-batch=off)
BATCH=off
shift
;;
-only_new_dotnew=on)
ONLY_NEW_DOTNEW=on
shift
;;
-only_new_dotnew=off)
ONLY_NEW_DOTNEW=off
shift
;;
-orig_backups=on)
ORIG_BACKUPS=on
shift
;;
-orig_backups=off)
ORIG_BACKUPS=off
shift
;;
-use_includes=on)
USE_INCLUDES=on
shift
;;
-use_includes=off)
USE_INCLUDES=off
shift
;;
-spinning=on)
SPINNING=on
shift
;;
-spinning=off)
SPINNING=off
shift
;;
-default_answer=y|-default_answer=yes)
DEFAULT_ANSWER=y
shift
;;
-default_answer=n|-default_answer=no)
DEFAULT_ANSWER=n
shift
;;
-mirror=*)
SOURCE=$(echo $1 | cut -f2 -d=)
shift
;;
install|reinstall|upgrade|remove|download)
CMD=$1
shift
if [ -n "$1" ]; then
if echo $1 | egrep -q "^\.{0,2}/" ; then
if [ -e $1 ]; then
INPUTLIST=$(cat $1 | tr "\n" " ")
else
echo -e "The file $1 doesn't exist.\n"
cleanup
fi
else
#
# Sanitize the argument. We have some problems with dots
# and plus (.+)
#
#INPUTLIST="$(echo $@ | sed -e 's/\+/\\\+/g' -e 's/\./\\\./g')"
INPUTLIST="$@"
fi
elif [ "$CMD" != "blacklist" ]; then
usage
fi
shift $#
;;
blacklist)
CMD=$1
shift $#
;;
update)
CMD=$1
shift
if [ "$1" = "gpg" ]; then
UPARG="$1"
shift
fi
;;
install-new|upgrade-all|clean-system|new-config|check-updates|show-changelog|help)
CMD=$1
shift
if [ -n "$1" ]; then
echo -e "\n$CMD: Ignoring extra arguments: $@" >&2 >&1
shift $#
fi
;;
generate-template|install-template|remove-template|search|file-search|info)
CMD=$1
shift
if [ -n "$1" ]; then
ARG=$1
shift
else
usage
fi
if [ -n "$1" ]; then
echo -e "\n$CMD: Ignoring extra arguments: $@" >&2 >&1
shift $#
fi
;;
*)
echo -e "\n$1: Unknown option.\n"
usage
;;
esac
done
#========================================================================
#
# SYSTEM SETUP
#
system_setup
#========================================================================
#
# SYNTAX CHECKING
#
system_checkup
#========================================================================
#
# READ EXTRA FUNCTIONS
#
# If you want a new function or need a rewrite of an existing
# feature, you can put your new function in a shell script under
# /usr/libexec/slackpkg/functions.d/
#
# Remember - the new function scripts need to be executable
#
for i in /usr/libexec/slackpkg/functions.d/*.sh; do
if [ -x $i ]; then
. $i
fi
done
#========================================================================
#
# MAIN PROGRAM
#
#
# A *BIG* case with all slackpkg commands -:)
#
case "$CMD" in
help)
full_usage
;;
check-updates)
# output to stdout if no change, or stderr if changes. Will cause
# cron jobs to notify system admin
if checkchangelog 1>/dev/null 2>/dev/null ; then
echo "Slackpkg: No updated packages since last check."
else
echo "Slackpkg: Updated packages are available since last check." >&2
PENDING_UPDATES=1
fi
;;
show-changelog)
# display changelog and exit
if [ -e ${WORKDIR}/ChangeLog.txt ]; then
$MORECMD ${WORKDIR}/ChangeLog.txt
else
echo "ChangeLog.txt file not found. Aborting"
fi
POSTINST=off
;;
update)
# If you are using "slackpkg update gpg" OR the system
# doesn't have Slackware GPG key, download and install
# the key
#
if [ "$UPARG" = "gpg" ] || [ "$GPGFIRSTTIME" = "0" ]; then
#
# Creates .gnupg directory if doesn't exist
# without this dir, gpg got an error.
#
if ! [ -e ~/.gnupg ]; then
mkdir ~/.gnupg
fi
getfile ${SOURCE}GPG-KEY $TMPDIR/gpgkey
gpg --yes --batch --delete-key "$SLACKKEY" &>/dev/null
gpg --import $TMPDIR/gpgkey &>/dev/null && \
echo -e "\t\t\tSlackware Linux Project's GPG key added"
if [ "$UPARG" = "gpg" ]; then
cleanup
fi
fi
echo "Updating the package lists..."
updatefilelists
;;
install)
makelist $INPUTLIST
if [ -n "$LIST" ]; then
showlist "$LIST" $CMD
install_pkg
else
echo -e "No packages match the pattern for install. Try:"
echo -e "\n\t$0 reinstall|upgrade $2\n"
POSTINST=off
fi
;;
reinstall)
makelist $INPUTLIST
if [ -n "$LIST" ]; then
showlist "$LIST" $CMD
install_pkg
else
echo -e "No packages match the pattern for reinstall. Try:"
echo -e "\n\t$0 install|upgrade $2\n"
POSTINST=off
fi
;;
upgrade)
sanity_check
makelist $INPUTLIST
if [ -n "$LIST" ]; then
showlist "$LIST" $CMD
upgrade_pkg
else
echo -e "No packages match the pattern for upgrade. Try:"
echo -e "\n\t$0 install|reinstall $2\n"
POSTINST=off
fi
;;
download)
makelist $INPUTLIST
DELALL="off"
if ! [ "$LIST" = "" ]; then
showlist "$LIST" $CMD
for i in $SHOWLIST; do
getpkg $i true
done
else
echo -e "No packages match the pattern for download."
POSTINST=off
fi
;;
remove)
makelist $INPUTLIST
if [ "$LIST" = "" ]; then
echo -e "The file(s) $INPUTLIST can't be removed - package not installed.\n"
cleanup
fi
showlist "$LIST" $CMD
remove_pkg
;;
clean-system)
makelist $INPUTLIST
if [ -n "$LIST" ]; then
showlist "$LIST" remove
remove_pkg
else
echo -e "No packages match the pattern for clean-system\n"
POSTINST=off
fi
;;
upgrade-all)
sanity_check
makelist $INPUTLIST
if ! [ -n "${LIST}" ]; then
echo -e "No packages match the pattern for upgrade. Try:"
echo -e "\n\t$0 install|reinstall $2\n"
POSTINST=off
else
showlist "$LIST" upgrade
if [ "$DOWNLOAD_ALL" = "on" ]; then
OLDDEL="$DELALL"
DELALL="off"
for i in $SHOWLIST; do
getpkg $i true
done
DELALL="$OLDDEL"
fi
FOUND=""
FOUND=$(echo $SHOWLIST | tr -s ' ' "\n" | grep "slackpkg-[0-9]")
if [ "$FOUND" != "" ]; then
getpkg $FOUND upgradepkg Upgrading
echo -e "slackpkg was upgraded - you will need start the upgrade process again...\n"
cleanup
exit 0
fi
for i in pkgtools aaa_glibc-solibs glibc-solibs aaa_libraries aaa_elflibs readline sed; do
FOUND=""
FOUND=$(echo $SHOWLIST | tr -s ' ' "\n" | grep "${i}-[0-9]")
if [ "$FOUND" != "" ]; then
getpkg $FOUND upgradepkg Upgrading
fi
done
upgrade_pkg
fi
;;
install-new)
makelist ${INPUTLIST}
if ! [ -n "${LIST}" ]; then
echo -e "No packages match the pattern for install. Try:"
echo -e "\n\t$0 upgrade|reinstall $2\n"
POSTINST=off
else
showlist "$LIST" install
install_pkg
fi
;;
blacklist)
echo -e "Edit /etc/slackpkg/blacklist to add or remove packages."
echo -e ""
echo -e "Packages in blacklist:\n"
grep -v "^#" $CONF/blacklist | $MORECMD
echo -e ""
;;
file-search)
PATTERN=$(echo $ARG | sed -e 's/\+/\\\+/g' -e 's/\./\\\./g' -e 's/ /\|/g')
makelist $PATTERN
if [ "$LIST" = "" ]; then
echo -e "No packages contains \"$PATTERN\" file."
else
echo -e "The list below shows the packages that contains \"$PATTERN\" file.\n"
searchlist "$LIST"
echo -e "\nYou can search specific packages using \"slackpkg search package\".\n"
fi
;;
search)
PATTERN=$(echo $ARG | sed -e 's/\+/\\\+/g' -e 's/\./\\\./g' -e 's/ /\|/g')
makelist $PATTERN
if [ "$LIST" = "" ]; then
echo -e "No package name matches the pattern."
else
echo -e "The list below shows all packages with name matching \"$PATTERN\".\n"
searchlist "$LIST"
echo -e "\nYou can search specific files using \"slackpkg file-search file\".\n"
fi
;;
info)
PATTERN=$(echo $ARG | sed -e 's/\+/\\\+/g' -e 's/\./\\\./g')
NAME=$(cutpkg $PATTERN)
awk -F: "/PACKAGE NAME:.* ${NAME}-[^-]+-(${ARCH}|fw|noarch)-[^-]+/,/^$/ {
found=1
if (\$1 ~ /"$NAME"/) {
print \$PATTERN
} else {
print \$0
}
}
END {
if ( found != 1 ) {
print \"No packages found! Try:\n\n\tslackpkg search $PATTERN\n\nand choose one (and ONLY one package).\n\"
}
}" ${WORKDIR}/PACKAGES.TXT 2>/dev/null
;;
new-config)
POSTINST=on
;;
generate-template)
TEMPLATE=$ARG.template
if [ -e $TEMPLATEDIR/$TEMPLATE ]; then
echo -e "\
\"$TEMPLATE\" already exists!\n\
\nDo you want to overwrite $TEMPLATE (y/N)? \c"
answer
if [ "$ANSWER" = "Y" -o "$ANSWER" = "y" ]; then
rm $TEMPLATEDIR/$TEMPLATE
echo
else
cleanup
fi
fi
generate_template $ARG
;;
install-template)
TEMPLATE=$ARG.template
if [ -e $TEMPLATEDIR/$TEMPLATE ]; then
( cd $TEMPLATEDIR
parse_template $TEMPLATE
)
INPUTLIST=$(cat ${TMPDIR}/${TEMPLATE}.tmp | tr "\n" " ")
else
echo -e "$ARG template not found!"
cleanup
fi
makelist $INPUTLIST
if [ -n "$LIST" ]; then
showlist "$LIST" $CMD
install_pkg
else
echo -e "All packages from $ARG template are already installed"
POSTINST=off
fi
;;
remove-template)
TEMPLATE=$ARG.template
if [ -e $TEMPLATEDIR/$TEMPLATE ]; then
( cd $TEMPLATEDIR
parse_template $TEMPLATE
)
INPUTLIST=$(cat ${TMPDIR}/${TEMPLATE}.tmp | tr "\n" " ")
else
echo -e "$ARG template not found!"
cleanup
fi
makelist $INPUTLIST
if [ "$LIST" = "" ]; then
echo -e "The template $ARG can't be removed - it isn't installed.\n"
cleanup
fi
showlist "$LIST" $CMD
remove_pkg
;;
*)
usage
;;
esac
#
# Executes the post-install. This is the default
# Before runs post-install, check if the slackpkg option is
# remove, search, update, info or clean-system.
# That options don't change configurations files and, if
# someone remove the kernel, i hope he knows what is doing.
#
for i in check-updates remove search file-search update info blacklist \
clean-system download generate-template remove-template; do
if [ "$CMD" = "$i" ]; then
POSTINST=off
fi
done
if [ "$POSTINST" != "off" ]; then
lookkernel
looknew
fi
cleanup