diff options
Diffstat (limited to 'source/ap/slackpkg/files')
-rw-r--r-- | source/ap/slackpkg/files/ChangeLog | 14 | ||||
-rw-r--r-- | source/ap/slackpkg/files/core-functions.sh | 52 | ||||
-rw-r--r-- | source/ap/slackpkg/files/post-functions.conf-sample | 14 | ||||
-rw-r--r-- | source/ap/slackpkg/files/post-functions.sh | 28 | ||||
-rw-r--r-- | source/ap/slackpkg/files/shell-completion/slackpkg.bash | 114 | ||||
-rw-r--r-- | source/ap/slackpkg/files/slackpkg | 13 |
6 files changed, 213 insertions, 22 deletions
diff --git a/source/ap/slackpkg/files/ChangeLog b/source/ap/slackpkg/files/ChangeLog index 1b7172f52..08608ae58 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 a579f9fe0..69f80620f 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 000000000..1cbe04ad0 --- /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 9191766a0..e0036430f 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 000000000..7be2bb280 --- /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 1076ba330..f606574a1 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 |