mirror of
git://slackware.nl/current.git
synced 2025-01-07 05:25:35 +01:00
7de9181e0d
ap/slackpkg-15.0.10-noarch-2.txz: Rebuilt. fix: egrep and fgrep commands have been deprecated since 2007 fix: grep warning: stray \ before / Thanks to shamilbi. ap/vim-9.0.0500-x86_64-1.txz: Upgraded. Fixed heap-based buffer overflow. Thanks to marav for the heads-up. For more information, see: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-3234 (* Security fix *) x/ibus-m17n-1.4.17-x86_64-1.txz: Upgraded. xap/vim-gvim-9.0.0500-x86_64-1.txz: Upgraded.
614 lines
14 KiB
Bash
614 lines
14 KiB
Bash
#!/bin/bash
|
|
#
|
|
# 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)
|
|
PATH='' builtin source $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 | grep -Eq "^\.{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 && [ "$UPDATED" != "1" ] ; then
|
|
echo "Slackpkg: No updated packages since last check."
|
|
else
|
|
echo "Slackpkg: Updated packages are available since last check." >&2
|
|
EXIT_CODE=100
|
|
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
|
|
get_gpg_key && import_gpg_key
|
|
|
|
if [ "$UPARG" = "gpg" ]; then
|
|
cleanup
|
|
fi
|
|
fi
|
|
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
|
|
EXIT_CODE=20
|
|
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
|
|
EXIT_CODE=20
|
|
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
|
|
EXIT_CODE=20
|
|
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
|
|
EXIT_CODE=20
|
|
fi
|
|
;;
|
|
remove)
|
|
makelist $INPUTLIST
|
|
if [ "$LIST" = "" ]; then
|
|
echo -e "The file(s) $INPUTLIST can't be removed - package not installed.\n"
|
|
EXIT_CODE=20
|
|
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
|
|
EXIT_CODE=20
|
|
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
|
|
EXIT_CODE=20
|
|
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"
|
|
EXIT_CODE=50
|
|
cleanup
|
|
exit ${EXIT_CODE}
|
|
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
|
|
EXIT_CODE=20
|
|
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
|