summaryrefslogtreecommitdiff
path: root/source/ap/slackpkg/files
diff options
context:
space:
mode:
Diffstat (limited to 'source/ap/slackpkg/files')
-rw-r--r--source/ap/slackpkg/files/ChangeLog14
-rw-r--r--source/ap/slackpkg/files/core-functions.sh52
-rw-r--r--source/ap/slackpkg/files/post-functions.conf-sample14
-rw-r--r--source/ap/slackpkg/files/post-functions.sh28
-rw-r--r--source/ap/slackpkg/files/shell-completion/slackpkg.bash114
-rw-r--r--source/ap/slackpkg/files/slackpkg13
6 files changed, 213 insertions, 22 deletions
diff --git a/source/ap/slackpkg/files/ChangeLog b/source/ap/slackpkg/files/ChangeLog
index 1b7172f5..08608ae5 100644
--- a/source/ap/slackpkg/files/ChangeLog
+++ b/source/ap/slackpkg/files/ChangeLog
@@ -1,3 +1,17 @@
+Sat Jun 5 03:54:45 UTC 2021
+---------------
+ - Release 15.0.5
+ - Add "--" option to "command cd" in bash completion file
+ (akinomyoga)
+
+Sat Jun 5 03:30:43 UTC 2021
+---------------
+ - Release 15.0.4
+ - shell-completions/slackpkg.bash: add "show-changelog"
+ - Import bash-completion file from upstream project
+ - Added the new-config actions for specific files (Piter PUNK)
+ - Harden slackpkg with respect to obtaining GPG key (CRTS)
+
Mon May 3 23:53:57 UTC 2021
---------------
- Release 15.0.3
diff --git a/source/ap/slackpkg/files/core-functions.sh b/source/ap/slackpkg/files/core-functions.sh
index a579f9fe..69f80620 100644
--- a/source/ap/slackpkg/files/core-functions.sh
+++ b/source/ap/slackpkg/files/core-functions.sh
@@ -64,9 +64,14 @@ function system_setup() {
# Create $WORKDIR just in case
mkdir -p "${WORKDIR}"
+ # Select the command to fetch files and packages from network sources
+ if [ "$DOWNLOADER" = "curl" ]; then
+ DOWNLOADER="curl ${CURLFLAGS} -o"
+ else
+ DOWNLOADER="wget ${WGETFLAGS} -O"
+ fi
+
# Set LOCAL if mirror isn't through network
- # If mirror is through network, select the command to fetch
- # files and packages from there.
#
MEDIA=${SOURCE%%:*}
if [ "$MEDIA" = "cdrom" ] || [ "$MEDIA" = "file" ] || \
@@ -75,11 +80,6 @@ function system_setup() {
LOCAL=1
else
LOCAL=0
- if [ "$DOWNLOADER" = "curl" ]; then
- DOWNLOADER="curl ${CURLFLAGS} -o"
- else
- DOWNLOADER="wget ${WGETFLAGS} -O"
- fi
fi
# Set MORECMD, EDITCMD and check BATCH mode
@@ -555,6 +555,42 @@ function checkgpg() {
gpg --verify ${1}.asc ${1} 2>/dev/null && echo "1" || echo "0"
}
+function get_gpg_key() {
+ if ping -c 1 slackware.com &>/dev/null; then
+ echo -e "\t\t\tGetting key from https://www.slackware.com/infra/keys/GPG-KEY"
+ $DOWNLOADER $TMPDIR/gpgkey https://www.slackware.com/infra/keys/GPG-KEY &>/dev/null
+ elif ping -c 1 mirrors.slackware.com &>/dev/null; then
+ echo -e "\t\t\tGetting key from https://mirrors.slackware.com/slackware/slackware-current/GPG-KEY"
+ $DOWNLOADER $TMPDIR/gpgkey https://mirrors.slackware.com/slackware/slackware-current/GPG-KEY &>/dev/null
+ else
+ echo -e "\
+slackpkg is unable to get the Slackware GPG key from either\n\
+slackware.com or mirrors.slackware.com; if you trust the\n\
+source you have configured in /etc/slackpkg/mirrors, slackpkg\n\
+can import the GPG key from that source.\n\
+The source currently in use is:\n\
+\t ${SOURCE}\n\
+Do you want to import the GPG key from this source? (YES|NO)\n"
+ read ANSWER
+ case "$ANSWER" in
+ YES|Y|yes|y)
+ getfile ${SOURCE}GPG-KEY $TMPDIR/gpgkey
+ ;;
+ *)
+ echo -e "\t\tslackpkg is unable to get the Slackware GPG key."
+ cleanup
+ ;;
+ esac
+ fi
+}
+
+function import_gpg_key() {
+ mkdir -p ~/.gnupg
+ 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"
+}
+
# Found packages in repository.
# This function selects the package from the higher priority
# repository directories.
@@ -904,7 +940,7 @@ function getfile() {
echo -e "\t\t\tDownloading $1..."
$DOWNLOADER $2 $1
fi
-}
+}
# Function to download the correct package and many "checks"
#
diff --git a/source/ap/slackpkg/files/post-functions.conf-sample b/source/ap/slackpkg/files/post-functions.conf-sample
new file mode 100644
index 00000000..1cbe04ad
--- /dev/null
+++ b/source/ap/slackpkg/files/post-functions.conf-sample
@@ -0,0 +1,14 @@
+# You can list here the .new files and the default action
+# to do for each file. The list format is:
+#
+# /full/path/of/dot/new/file.new:action
+#
+# The action can be:
+#
+# O to Overwrite it with the new version
+# R to Remove the new file
+# K to Keep the current and the .new files
+#
+# E.g:
+#/etc/slackpkg/mirrors.new:K
+#/etc/ntp.conf.new:R
diff --git a/source/ap/slackpkg/files/post-functions.sh b/source/ap/slackpkg/files/post-functions.sh
index 9191766a..e0036430 100644
--- a/source/ap/slackpkg/files/post-functions.sh
+++ b/source/ap/slackpkg/files/post-functions.sh
@@ -137,6 +137,12 @@ looknew() {
ONLY_NEW_DOTNEW=""
fi
+ # if there is a /etc/slackpkg/post-functions.conf file, it will be
+ # used to take the pre-defined action to each file specified there.
+ if [ -f /etc/slackpkg/post-functions.conf ]; then
+ NEWCONFIG="/etc/slackpkg/post-functions.conf"
+ fi
+
printf "%s\n" "Searching for NEW configuration files..."
FILES=$( find \
@@ -179,8 +185,8 @@ What do you want (K/O/R/P)?
# No. of prompt etc. lines to print.
TEXTLINES=$(( $( printf %b "$PROMPTTEXT" | wc -l ) + 3 ))
- if [ $(( newcount + TEXTLINES )) -lt $ROWS ]; then
- # All files will fit on screen.
+ if [ $(( newcount + TEXTLINES )) -lt $ROWS ] || [ "${BATCH}" = "on" ]; then
+ # All files will fit on screen or is a batch execution.
printf "%s\n" "$FILES"
else
# Won't all fit, so scroll a screenfull at a time.
@@ -240,6 +246,9 @@ EOF
printf %b "$PROMPTTEXT"
answer
+ if [ "${BATCH}" = "on" ] && [ -n "${NEWCONFIG}" ]; then
+ ANSWER=P
+ fi
case $ANSWER in
K|k)
;;
@@ -256,11 +265,24 @@ EOF
P|p)
echo "Select what you want file-by-file"
for i in $FILES; do
+ if [ -n "${NEWCONFIG}" ]; then
+ AUTOANSWER="$(sed -ne 's#^'$i':\([ORK]\)#\1#p' $NEWCONFIG 2>/dev/null)"
+ fi
GOEX=0
while [ $GOEX -eq 0 ]; do
echo
showmenu $i "(K)eep" "(O)verwrite" "(R)emove" "(D)iff" "(M)erge" "(V)imdiff"
- read ANSWER
+ if [ -n "${AUTOANSWER}" ]; then
+ ANSWER=$AUTOANSWER
+ echo $ANSWER
+ else
+ if [ "${BATCH}" = "on" ]; then
+ ANSWER=K
+ echo $ANSWER
+ else
+ read ANSWER
+ fi
+ fi
case $ANSWER in
O|o)
overold $i
diff --git a/source/ap/slackpkg/files/shell-completion/slackpkg.bash b/source/ap/slackpkg/files/shell-completion/slackpkg.bash
new file mode 100644
index 00000000..7be2bb28
--- /dev/null
+++ b/source/ap/slackpkg/files/shell-completion/slackpkg.bash
@@ -0,0 +1,114 @@
+# bash completion for slackpkg(8) -*- shell-script -*-
+# options list is based on `grep '\-.*\=.*)' /usr/sbin/slackpkg | cut -f1 -d\)`
+
+_slackpkg()
+{
+ local cur prev words cword
+ _init_completion -n = || return
+
+ local split=false
+ if [[ $cur == -?*=* ]]; then
+ prev="${cur%%?(\\)=*}"
+ cur="${cur#*=}"
+ split=true
+ fi
+
+ case "$prev" in
+ -delall | -checkmd5 | -checkgpg | -checksize | -postinst | -onoff | \
+ -download_all | -dialog | -batch | -only_new_dotnew | \
+ -use_includes | -spinning)
+ COMPREPLY=($(compgen -W 'on off' -- "$cur"))
+ return
+ ;;
+ -default_answer)
+ COMPREPLY=($(compgen -W 'yes no' -- "$cur"))
+ return
+ ;;
+ -dialog_maxargs | -mirror)
+ # argument required but no completions available
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ compopt -o nospace
+ COMPREPLY=($(compgen -W '-delall= -checkmd5= -checkgpg=
+ -checksize= -postinst= -onoff= -download_all= -dialog=
+ -dialog_maxargs= -batch= -only_new_dotnew= -use_includes=
+ -spinning= -default_answer= -mirror=' -- "$cur"))
+ return
+ fi
+
+ local confdir="/etc/slackpkg"
+ local config="$confdir/slackpkg.conf"
+
+ [[ -r $config ]] || return
+ . "$config"
+
+ local i action
+ for ((i = 1; i < ${#words[@]}; i++)); do
+ if [[ ${words[i]} != -* ]]; then
+ action="${words[i]}"
+ break
+ fi
+ done
+
+ case "$action" in
+ generate-template | search | file-search)
+ # argument required but no completions available
+ return
+ ;;
+ install-template | remove-template)
+ if [[ -e $confdir/templates ]]; then
+ COMPREPLY=($(
+ command cd -- "$confdir/templates"
+ compgen -f -X "!*.template" -- "$cur"
+ ))
+ COMPREPLY=(${COMPREPLY[@]%.template})
+ fi
+ return
+ ;;
+ remove)
+ _filedir
+ COMPREPLY+=($(compgen -W 'a ap d e f k kde kdei l n t tcl x
+ xap xfce y' -- "$cur"))
+ COMPREPLY+=($(
+ command cd /var/log/packages
+ compgen -f -- "$cur"
+ ))
+ return
+ ;;
+ install | reinstall | upgrade | blacklist | download)
+ _filedir
+ COMPREPLY+=($(compgen -W 'a ap d e f k kde kdei l n t tcl x
+ xap xfce y' -- "$cur"))
+ COMPREPLY+=($(cut -f 6 -d\ "${WORKDIR}/pkglist" 2>/dev/null |
+ command grep "^$cur"))
+ return
+ ;;
+ info)
+ COMPREPLY=($(cut -f 6 -d\ "${WORKDIR}/pkglist" 2>/dev/null |
+ command grep "^$cur"))
+ return
+ ;;
+ update)
+ # we should complete the same as the next `list` + "gpg"
+ COMPREPLY=($(compgen -W 'gpg' -- "$cur"))
+ ;&
+ *)
+ COMPREPLY+=($(compgen -W 'install reinstall upgrade remove
+ blacklist download update install-new upgrade-all
+ clean-system new-config check-updates help generate-template
+ install-template remove-template search file-search info
+ show-changelog' -- \
+ "$cur"))
+ return
+ ;;
+ esac
+
+} &&
+ complete -F _slackpkg slackpkg
+
+# ex: filetype=sh
diff --git a/source/ap/slackpkg/files/slackpkg b/source/ap/slackpkg/files/slackpkg
index 1076ba33..f606574a 100644
--- a/source/ap/slackpkg/files/slackpkg
+++ b/source/ap/slackpkg/files/slackpkg
@@ -350,17 +350,8 @@ case "$CMD" in
# 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"
+ get_gpg_key && import_gpg_key
+
if [ "$UPARG" = "gpg" ]; then
cleanup
fi