Code reordering. No significant code modify:

Add vim modeline settings (but vim has nomodeline set by default, so it is just informational)
Removed tab (use spaces instead)
Reindent code
Add/Modify comments
moved zdialogplus.sh into slackpkgplus.sh

reordering functions (and separing from main):

      function internal_blacklist()
      function applyblacklist()
      function cleanup()
      function handle_event()
      function remove_pkg()
      function upgrade_pkg()
      function install_pkg()
      function wgetdebug()
      function cached_downloader()
      function getfile()
      function checkgpg()
      function checkmd5()
      function givepriority()
      function searchPackages()
      function searchlistEX()
      function showlist() // dialog=on (ex-zdialogplus.sh)
      function showlist() // dialog=off
This commit is contained in:
Matteo Rossini 2015-12-29 14:01:53 +01:00
parent eab93929d0
commit 1dccd06d0a
3 changed files with 766 additions and 693 deletions

View file

@ -57,7 +57,6 @@ mkdir -p usr/doc/slackpkg+-$VERSION/
mkdir -p install/
cp $CWD/slackpkgplus.sh usr/libexec/slackpkg/functions.d/
cp $CWD/zdialogplus.sh usr/libexec/slackpkg/functions.d/
cp $CWD/makeinstlog.sh usr/libexec/slackpkg/makeinstlog.sh
cp $CWD/README usr/doc/slackpkg+-$VERSION/
cp $CWD/ChangeLog.txt usr/doc/slackpkg+-$VERSION/
@ -73,7 +72,6 @@ cat $CWD/doinst.sh|sed "s/SLPVERSION/$VERSION/" > install/doinst.sh
cat $CWD/notifymsg.conf > etc/slackpkg/notifymsg.conf.new
chmod +x usr/libexec/slackpkg/functions.d/slackpkgplus.sh
chmod +x usr/libexec/slackpkg/functions.d/zdialogplus.sh
chmod +x usr/libexec/slackpkg/makeinstlog.sh
chmod +x usr/doc/slackpkg+-$VERSION/setupmultilib.sh

View file

@ -1,3 +1,5 @@
# vim: set tabstop=2 shiftwidth=2 expandtab
# Thanks to AlienBob and phenixia2003 (on LQ) for contributing
# A special thanks to all packagers that make slackpkg+ useful
@ -49,33 +51,68 @@ fi
if [ "$SLACKPKGPLUS" = "on" ];then
if [ "$DOWNLOADONLY" == "on" ];then
DELALL=off
DOWNLOAD_ALL=on
# function internal_blacklist()
# function applyblacklist()
# function cleanup()
# function handle_event()
# function remove_pkg()
# function upgrade_pkg()
# function install_pkg()
# function wgetdebug()
# function cached_downloader()
# function getfile()
# function checkgpg()
# function checkmd5()
# function givepriority()
# function searchPackages()
# function searchlistEX()
# function showlist() // dialog=on
# function showlist() // dialog=off
##### ===== BLACKLIST FUNCTIONS === #####
# Adds the pattern given by $(1) into the internal blacklist
# ${TMPDIR}/blacklist.slackpkgplus
#
# ($1) The pattern to add.
#
function internal_blacklist() {
echo "$1" >> ${TMPDIR}/blacklist.slackpkgplus
} # END function internal_blacklist()
# Override original applyblackist() so that internal blacklist will
# be applied too.
#
function applyblacklist() {
# -- This is to prevent silent exclusion of multilib package
# aaa_elflibs-compat32 when /etc/slackpkg/blacklist contains the
# pattern aaa_elflibs.
if ! $USEBLACKLIST ;then
>${TMPDIR}/blacklist
fi
if [ -z "$VERBOSE" ];then
VERBOSE=1
if $MLREPO_SELELECTED && grep -q "^aaa_elflibs$" ${TMPDIR}/blacklist && ! grep -q "^aaa_elflibs-compat32$" ${TMPDIR}/blacklist ; then
sed -i --expression "s/^aaa_elflibs/#aaa_elflibs/" ${TMPDIR}/blacklist
grep -vEw -f ${TMPDIR}/blacklist -f ${TMPDIR}/blacklist.slackpkgplus | grep -v "[ ]aaa_elflibs[ ]" >${TMPDIR}/blacklist.tmp
else
grep -vEw -f ${TMPDIR}/blacklist -f ${TMPDIR}/blacklist.slackpkgplus >${TMPDIR}/blacklist.tmp
fi
SPKGPLUS_VERSION="1.6.1"
VERSION="$VERSION / slackpkg+ $SPKGPLUS_VERSION"
if [ ! -e "$WORKDIR" ];then
mkdir -p "$WORKDIR"
cat ${TMPDIR}/blacklist.tmp
if [ "$(head -1 ${TMPDIR}/blacklist.tmp|awk '{print $1}')" != "local" ];then
cat ${TMPDIR}/pkglist-pre
fi
cat $TMPDIR/greylist.* >$TMPDIR/greylist
grep -qvEw -f $TMPDIR/greylist $TMPDIR/pkglist-pre >$TMPDIR/unchecklist
if [ ! -e $WORKDIR/install.log ];then
touch $WORKDIR/install.log
fi
} # END function applyblacklist()
if [ "$CMD" == "update" ];then
ANSWER="Y"
fi
##### ====== END BLACKLIST FUNCTIONS === #####
##### ====== INSTALL/POSTINSTALL FUNCTIONS ====== #####
# Override cleanup() to improve log messages and debug functions
#
function cleanup(){
if [ "$CMD" == "update" ];then
if [ "$ANSWER" != "Y" ] && [ "$ANSWER" != "y" ]; then
@ -114,7 +151,250 @@ if [ "$SLACKPKGPLUS" = "on" ];then
rm -rf $TMPDIR
fi
exit
} # END cleanup()
} # END function cleanup()
# -- handle the event $1 that occured on packages $SHOWLIST
#
# $1 the event that occurs, which can be install, upgrade, remove
#
function handle_event() {
local EVENT="$1"
local SELKEYS=""
local KEY
local PATLIST
local EXPR
local MSG
local MSGLIST=""
local USERKEY
find $ROOT/var/log/packages/ -type f -printf "%f\n" | sort > ${TMPDIR}/installed.tmp
# -- Get the basename of packages which have been effectively
# installed, upgraded, or removed
if [ "$EVENT" == "remove" ] ; then
echo "$SHOWLIST" | tr " " "\n" | sort > ${TMPDIR}/showlist.tmp
comm -1 ${TMPDIR}/installed.tmp ${TMPDIR}/showlist.tmp | rev | cut -f4- -d"-" | rev > ${TMPDIR}/basenames.tmp
else
echo "$SHOWLIST" | tr " " "\n" | rev | cut -f2- -d"." | rev | sort > ${TMPDIR}/showlist.tmp
comm -1 -2 ${TMPDIR}/installed.tmp ${TMPDIR}/showlist.tmp | rev | cut -f4- -d"-" | rev > ${TMPDIR}/basenames.tmp
fi
SELKEYS=$(echo "${!NOTIFYMSG[@]}" | tr " " "\n" | grep "^on_${EVENT}@" | tr "\n" " ")
for KEY in $SELKEYS ; do
PATLIST="${KEY#*@}"
EXPR=$(echo -en "$PATLIST" | \
tr --squeeze-repeats "," | \
sed -e "s/,$//" -e "s/^/(&/" -e "s/,/)|(/g" -e "s/$/&)/")
NV_MATCHPKGS=$(grep -E "$EXPR" ${TMPDIR}/basenames.tmp | tr "\n" "," | sed -e "s/,$//")
if [ ! -z "$NV_MATCHPKGS" ] ; then
MSG=$(eval "echo \"${NOTIFYMSG[$KEY]}\"")
[ -z "MSGLIST" ] && MSGLIST="$MSG\n" || MSGLIST="$MSGLIST\n$MSG"
fi
done
if [ ! -z "$MSGLIST" ] ; then
if [ "$DIALOG" = "on" ] || [ "$DIALOG" = "ON" ] ; then
dialog --title "post-$EVENT notifications" --backtitle "slackpkg $VERSION" --msgbox "$MSGLIST" 12 70
else
MSGLIST="====[ POST-${EVENT} NOTIFICATIONS ]===================================== \n${MSGLIST}\n======================================================================="
echo -e "\n$MSGLIST" | more
echo -en "Hit a key to continue or wait 10 seconds\r"
read -t 10 USERKEY
echo " "
fi
fi
} # END functino handle_event()
# Overrides original remove_pkg(). Required by the notification mechanism.
function remove_pkg() {
local i
for i in $SHOWLIST; do
echo -e "\nPackage: $i"
echo -e "\tRemoving... "
removepkg $i
if [ ! -e $ROOT/var/log/packages/$i ];then
FDATE=$(ls -ltr --full-time $ROOT/var/log/removed_packages/$i|tail -1 |awk '{print $6" "$7}'|sed -r -e 's/\.[0-9]{9}//' -e 's,-,/,' -e 's,-,/,')
echo "$FDATE removed: $i" >> $WORKDIR/install.log
fi
done
handle_event "remove"
} # END function remove_pkg()
# Overrides original upgrade_pkg(). Required by the notification mechanism.
function upgrade_pkg() {
local i
if [ "$DOWNLOAD_ALL" = "on" ]; then
OLDDEL="$DELALL"
DELALL="off"
for i in $SHOWLIST; do
getpkg $i true
done
DELALL="$OLDDEL"
fi
if [ "$DOWNLOADONLY" == "on" ];then
echo "Download only.. not upgraded!"
return
fi
ls -1 $ROOT/var/log/packages > $TMPDIR/tmplist
for i in $SHOWLIST; do
PKGFOUND=$(grep -m1 -e "^$(echo $i|rev|cut -f4- -d-|rev)-[^-]\+-[^-]\+-[^-]\+$" $TMPDIR/tmplist)
REPOPOS=$(grep -m1 " $(echo $i|sed 's/\.t.z//') " $TMPDIR/pkglist|awk '{print $1}'|sed 's/SLACKPKGPLUS_//')
getpkg $i upgradepkg Upgrading
if [ -e "$ROOT/var/log/packages/$(echo $i|sed 's/\.t.z//')" ];then
FDATE=$(ls -l --full-time $ROOT/var/log/packages/$(echo $i|sed 's/\.t.z//') |awk '{print $6" "$7}'|sed -r -e 's/\.[0-9]{9}//' -e 's,-,/,' -e 's,-,/,')
echo "$FDATE upgraded: $i [$REPOPOS] (was $PKGFOUND)" >> $WORKDIR/install.log
fi
done
handle_event "upgrade"
} # END function upgrade_pkg()
# Overrides original install_pkg(). Required by the notification mechanism.
function install_pkg() {
local i
if [ "$DOWNLOAD_ALL" = "on" ]; then
OLDDEL="$DELALL"
DELALL="off"
for i in $SHOWLIST; do
getpkg $i true
done
DELALL="$OLDDEL"
fi
if [ "$DOWNLOADONLY" == "on" ];then
echo "Download only.. not installed!"
return
fi
for i in $SHOWLIST; do
INSTALL_T='installed: '
if [ -e $ROOT/var/log/packages/$(echo $i|sed 's/\.t.z//') ];then
INSTALL_T='reinstalled:'
fi
REPOPOS=$(grep -m1 " $(echo $i|sed 's/\.t.z//') " $TMPDIR/pkglist|awk '{print $1}'|sed 's/SLACKPKGPLUS_//')
getpkg $i installpkg Installing
if [ -e "$ROOT/var/log/packages/$(echo $i|sed 's/\.t.z//')" ];then
FDATE=$(ls -l --full-time $ROOT/var/log/packages/$(echo $i|sed 's/\.t.z//') |awk '{print $6" "$7}'|sed -r -e 's/\.[0-9]{9}//' -e 's,-,/,' -e 's,-,/,')
echo "$FDATE $INSTALL_T $i [$REPOPOS]" >> $WORKDIR/install.log
fi
done
handle_event "install"
} # END function install_pkg()
##### ====== END INSTALL/POSTINSTALL FUNCTIONS ====== #####
##### ====== DOWNLOADERS ====== ######
# Implements an improved wget version for a verbose output
#
function wgetdebug(){
local SRCURL
local DSTFILE
SRCURL=$2
DSTFILE=$(echo $SRCURL|sed 's|/|,|g')
if [ ${SRCURL:0:5} == "https" ];then
WGETOPTSL="--no-check-certificate"
fi
if [ ${SRCURL:0:3} == "ftp" ];then
WGETOPTSL="--passive-ftp"
fi
DOWNTIME=$(date +%s)
wget $WGETOPTS $WGETOPTSL -O $TMPDIR/$DSTFILE $SRCURL 2>&1|tee $TMPDIR/$DSTFILE.log
WGETERR=${PIPESTATUS[0]}
cp $TMPDIR/$DSTFILE $1
echo "exit code: $WGETERR" >>$TMPDIR/$DSTFILE.log
DOWNTIME=$[$(date +%s)-$DOWNTIME]
if [ $WGETERR -ne 0 ];then
echo >> $TMPDIR/error.log
echo "$SRCURL --> BAD" >> $TMPDIR/error.log
echo "wget $WGETOPTS $WGETOPTSL -O $DSTFILE $SRCURL" >> $TMPDIR/error.log
echo "exit code: $WGETERR" >> $TMPDIR/error.log
echo "download time: $DOWNTIME secs" >> $TMPDIR/error.log
echo "details:" >> $TMPDIR/error.log
cat $TMPDIR/$DSTFILE.log >> $TMPDIR/error.log
ls -l $DSTFILE >> $TMPDIR/error.log 2>&1
md5sum $DSTFILE >> $TMPDIR/error.log 2>&1
echo >> $TMPDIR/error.log
else
echo "$SRCURL --> OK" >> $TMPDIR/info.log
fi
return $WGETERR
} # END function wgetdebug()
# Implements CACHEUPDATE=on
#
function cached_downloader(){
local SRCURL
local CACHEFILE
local SRCBASE
SRCURL=$2
SRCBASE=$(basename $SRCURL)
CACHEFILE=$(echo $SRCURL|md5sum|awk '{print $1}')
case $SRCBASE in
CHECKSUMS.md5) TOCACHE=1 ;;
MANIFEST.bz2) TOCACHE=1 ;;
PACKAGES.TXT) TOCACHE=1 ;;
*) TOCACHE=0 ;;
esac
if [ $TOCACHE -eq 1 ];then
echo
echo "=== check cache: $SRCURL ==="
echo -n "headers.. "
curl --location --head $SRCURL 2>/dev/null|grep -v ^Date:|sed 's/ //' > $TMPDIR/cache.head
echo "Url: $SRCURL" >> $TMPDIR/cache.head
grep -q "200 OK" $TMPDIR/cache.head || echo "Header or Url Invalid!!! (`date`)"
[ $VERBOSE -eq 3 ]&&cat $TMPDIR/cache.head|sed 's/^/ /'
if [ -e $CACHEDIR/$CACHEFILE -a -e $CACHEDIR/$CACHEFILE.head ];then
echo "Is cached.. "
[ $VERBOSE -eq 3 ]&&cat $CACHEDIR/$CACHEFILE.head|sed 's/^/ /'
if diff $CACHEDIR/$CACHEFILE.head $TMPDIR/cache.head >/dev/null;then
echo "Cache valid! If not please remove manually $CACHEDIR/$CACHEFILE !"
cp $CACHEDIR/$CACHEFILE $1
return $?
fi
echo -n "Invalid.. "
rm -f $CACHEDIR/$CACHEFILE $CACHEDIR/$CACHEFILE.head
fi
echo "Download file.. "
$CACHEDOWNLOADER $1 $SRCURL
ERR=$?
if [ "$(ls -l $1 2>/dev/null|awk '{print $5}')" == "$(grep Content-Length: $TMPDIR/cache.head|awk '{print $2}')" ];then
echo "Caching it!"
cp $1 $CACHEDIR/$CACHEFILE
cp $TMPDIR/cache.head $CACHEDIR/$CACHEFILE.head
else
echo "NOT cacheable!"
fi
else
echo
echo "=== no caching for $SRCURL ==="
$CACHEDOWNLOADER $1 $SRCURL
ERR=$?
fi
return $ERR
} # END function cached_downloader()
##### ====== END DOWNLOADERS ====== ######
##### ====== CORE FUNCTION ====== ######
# Override the slackpkg getfile().
# The new getfile() download all file needed from all defined repositories
@ -299,7 +579,7 @@ if [ "$SLACKPKGPLUS" = "on" ];then
rm $2-tmp
done
fi
} # END getfile()
} # END function getfile()
# override slackpkg checkgpg()
# new checkgpg() is used to check gpg and to merge the CHECKSUMS.md5 files
@ -333,7 +613,7 @@ if [ "$SLACKPKGPLUS" = "on" ];then
fi
done
fi
} # END checkgpg()
} # END function checkgpg()
# override slackpkg checkmd5()
# Verify if the package was corrupted by checking md5sum
@ -361,7 +641,12 @@ if [ "$SLACKPKGPLUS" = "on" ];then
else
echo 0
fi
} # END checkmd5()
} # END function checkmd5()
#### ====== END CORE FUNCTIONS ======= ####
#### ===== PRIORITY AND SEARCH FUNCTIONS ===== #####
# Found packages in repository.
# This function selects the package from the higher priority
@ -496,8 +781,10 @@ if [ "$SLACKPKGPLUS" = "on" ];then
(( PRIORITYIDX++ ))
fi
done
} # END givepriority()
} # END function givepriority()
# Improved 'slackpkg search'/'slackpkg file-search'
#
function searchPackages() {
local i
local GREPOPTS=""
@ -576,8 +863,14 @@ if [ "$SLACKPKGPLUS" = "on" ];then
rm ${TMPDIR}/waiting
echo -e "DONE\n"
} # END searchPackages()
} # END function searchPackages()
#### ===== PRIORITY AND SEARCH FUNCTIONS ===== #####
#### ===== SHOWLIST FUNCTIONS ====== ######
# generate output for 'slackpkg search'/'slackpkg file-search'
#
function searchlistEX() {
local i
local BASENAME
@ -642,7 +935,117 @@ if [ "$SLACKPKGPLUS" = "on" ];then
printf " %-16s %-24s %-40s \n" "$STATUS" "$REPO" "${RAWNAME}"
fi
done
} # END searchlistEX()
} # END function searchlistEX()
if [ "$DIALOG" = "on" ] || [ "$DIALOG" = "ON" ]; then
# Slackpkg+ Dialog functions
# Original functions from slackpkg modified by Marek Wodzinski (majek@mamy.to)
#
export DIALOG_CANCEL="1"
export DIALOG_ERROR="126"
export DIALOG_ESC="1"
export DIALOG_EXTRA="3"
export DIALOG_HELP="2"
export DIALOG_ITEM_HELP="2"
export DIALOG_OK="0"
# Show the lists and asks if the user want to proceed with that action
# Return accepted list in $SHOWLIST
#
function showlist() {
if [ "$ONOFF" != "off" ]; then
ONOFF=on
fi
cat $TMPDIR/greylist.* >$TMPDIR/greylist
if [ "$GREYLIST" == "off" ];then
>$TMPDIR/greylist
fi
grep -Ew -f $TMPDIR/greylist $TMPDIR/pkglist|awk '{print $2}' >$TMPDIR/unchecklist
rm -f $TMPDIR/dialog.tmp
if [ "$2" = "upgrade" ]; then
ls -1 $ROOT/var/log/packages > $TMPDIR/tmplist
for i in $1; do
TMPONOFF=$ONOFF
BASENAME=$(cutpkg $i)
PKGFOUND=$(grep -m1 -e "^${BASENAME}-[^-]\+-[^-]\+-[^-]\+$" $TMPDIR/tmplist)
REPOPOS=$(grep -m1 " $(echo $i|sed 's/\.t.z//') " $TMPDIR/pkglist|awk '{print $1}'|sed 's/SLACKPKGPLUS_//')
REPOPOSFULL=$(grep -m1 " $(echo $i|sed 's/\.t.z//') " $TMPDIR/pkglist|sed 's/SLACKPKGPLUS_//'|awk '{print $0,gensub(/([0-9]+)([^0-9]*)/,"\\1 \\2_","1",$5),$6}')
PKGVER=$(echo $i|rev|cut -f3 -d-|rev)
ALLFOUND=$(echo $(grep " ${BASENAME} " $TMPDIR/pkglist|sed -r -e 's/SLACKPKGPLUS_//' -e 's/^([^ ]*) [^ ]* ([^ ]*) [^ ]* ([^ ]*) .*/\2-\3(\1) ,/')|sed 's/,$//')
grep -q "^$(echo $i|rev|cut -f4- -d-|rev)$" $TMPDIR/unchecklist && TMPONOFF="off"
echo "$REPOPOSFULL $i \"$REPOPOS\" $TMPONOFF \"installed: $PKGFOUND --> available: $ALLFOUND\"" >>$TMPDIR/dialog.tmp.1
done
# 1 2 3 4 5 6 7 8 9 1011 12-
# repo package 1.0.12 i586 1 package-1.0.12-i586-1 ./path/to txz 1 _ package-1.0.12-i586-1 package-1.0.12-i586-1.txz "repo" on "installed: ... "
case "$SHOWORDER" in
"repository") SHOWORDER=1;;
"arch") SHOWORDER=4;;
"package") SHOWORDER=6;;
"path") SHOWORDER=7;;
"tag") SHOWORDER=10;;
*) SHOWORDER=6;;
esac
cat $TMPDIR/dialog.tmp.1 | awk '{print $'$SHOWORDER',$0}'|sort|cut -f13- -d" " >$TMPDIR/dialog.tmp
HINT="--item-help"
else # other than 'upgrade'
for i in $1; do
TMPONOFF=$ONOFF
REPOPOS=$(grep -m1 " $(echo $i|sed 's/\.t.z//') " $TMPDIR/pkglist|awk '{print $1}'|sed 's/SLACKPKGPLUS_//')
grep -q "^$(echo $i|rev|cut -f4- -d-|rev)$" $TMPDIR/unchecklist && TMPONOFF="off"
echo "$i \"$REPOPOS\" $TMPONOFF" >>$TMPDIR/dialog.tmp
done
HINT=""
fi
# This is needed because dialog have a limit of arguments.
# This limit is around 20k characters in slackware 10.x
# Empiric tests on slackware 13.0 got a limit around 139k.
# If we exceed this limit, dialog got a terrible error, to
# avoid that, if the number of arguments is bigger than
# DIALOG_MAXARGS we remove the hints. If even without hints
# we can't got less characters than DIALOG_MAXARGS we give an
# error message to the user ask him to not use dialog
if [ $(wc -c $TMPDIR/dialog.tmp | cut -f1 -d\ ) -ge $DIALOG_MAXARGS ]; then
mv $TMPDIR/dialog.tmp $TMPDIR/dialog2.tmp
awk '{ NF=3 ; print $0 }' $TMPDIR/dialog2.tmp > $TMPDIR/dialog.tmp
HINT=""
fi
DTITLE=$2
if [ "$DOWNLOADONLY" == "on" ];then
DTITLE="$DTITLE (download only)"
fi
cat $TMPDIR/dialog.tmp|xargs dialog --title "$DTITLE" --backtitle "slackpkg $VERSION" $HINT --checklist "Choose packages to $2:" 19 70 13 2>$TMPDIR/dialog.out
case "$?" in
0|123)
dialog --clear
;;
1|124|125|126|127)
dialog --clear
echo -e "DIALOG ERROR:\n-------------" >> $TMPDIR/error.log
cat $TMPDIR/dialog.out >> $TMPDIR/error.log
echo "-------------"
echo "If you want to continue using slackpkg, disable the DIALOG option in"
echo "$CONF/slackpkg.conf and try again."
echo "Help us to make slackpkg a better tool - report bugs to the slackpkg"
echo "developers" >> $TMPDIR/error.log
cleanup
;;
esac
SHOWLIST=$(cat $TMPDIR/dialog.out | tr -d \")
if [ -z "$SHOWLIST" ]; then
echo "No packages selected for $2, exiting."
cleanup
fi
} # END function showlist()
else # (DIALOG=off)
# Supersede original showlist() from core-functions.sh
#
@ -651,7 +1054,7 @@ if [ "$SLACKPKGPLUS" = "on" ];then
#
# This version show the repository to which each package belongs.
#
function showlist() {
function showlist() {
local ANSWER
local i
local SHOWREPO=false
@ -680,7 +1083,47 @@ function showlist() {
SHOWLIST="$1"
continue
fi
}
} # END function showlist()
fi # (DIALOG=on/off)
#### ===== SHOWLIST FUNCTIONS ====== ######
### =========================== MAIN ============================ ###
if [ "$DOWNLOADONLY" == "on" ];then
DELALL=off
DOWNLOAD_ALL=on
fi
if [ -z "$VERBOSE" ];then
VERBOSE=1
fi
SPKGPLUS_VERSION="1.6.1"
VERSION="$VERSION / slackpkg+ $SPKGPLUS_VERSION"
if [ ! -e "$WORKDIR" ];then
mkdir -p "$WORKDIR"
fi
if [ ! -e $WORKDIR/install.log ];then
touch $WORKDIR/install.log
fi
if [ "$CMD" == "update" ];then
# answer to "Do you really want to download all other files"
# if there are new changes
ANSWER="Y"
fi
# Ensure each repository url has a trailing slash...
#
@ -779,267 +1222,6 @@ function showlist() {
#
echo -n "" > ${TMPDIR}/blacklist.slackpkgplus
# Adds the pattern given by $(1) into the internal blacklist
# ${TMPDIR}/blacklist.slackpkgplus
#
# ($1) The pattern to add.
#
function internal_blacklist() {
echo "$1" >> ${TMPDIR}/blacklist.slackpkgplus
} # END internal_blacklist()
# Override original applyblackist() so that internal blacklist will
# be applied too.
#
function applyblacklist() {
# -- This is to prevent silent exclusion of multilib package
# aaa_elflibs-compat32 when /etc/slackpkg/blacklist contains the
# pattern aaa_elflibs.
if ! $USEBLACKLIST ;then
>${TMPDIR}/blacklist
fi
if $MLREPO_SELELECTED && grep -q "^aaa_elflibs$" ${TMPDIR}/blacklist && ! grep -q "^aaa_elflibs-compat32$" ${TMPDIR}/blacklist ; then
sed -i --expression "s/^aaa_elflibs/#aaa_elflibs/" ${TMPDIR}/blacklist
grep -vEw -f ${TMPDIR}/blacklist -f ${TMPDIR}/blacklist.slackpkgplus | grep -v "[ ]aaa_elflibs[ ]" >${TMPDIR}/blacklist.tmp
else
grep -vEw -f ${TMPDIR}/blacklist -f ${TMPDIR}/blacklist.slackpkgplus >${TMPDIR}/blacklist.tmp
fi
cat ${TMPDIR}/blacklist.tmp
if [ "$(head -1 ${TMPDIR}/blacklist.tmp|awk '{print $1}')" != "local" ];then
cat ${TMPDIR}/pkglist-pre
fi
cat $TMPDIR/greylist.* >$TMPDIR/greylist
grep -qvEw -f $TMPDIR/greylist $TMPDIR/pkglist-pre >$TMPDIR/unchecklist
} # END applyblacklist()
# -- handle the event $1 that occured on packages $SHOWLIST
#
# $1 the event that occurs, which can be install, upgrade, remove
#
function handle_event() {
local EVENT="$1"
local SELKEYS=""
local KEY
local PATLIST
local EXPR
local MSG
local MSGLIST=""
local USERKEY
find $ROOT/var/log/packages/ -type f -printf "%f\n" | sort > ${TMPDIR}/installed.tmp
# -- Get the basename of packages which have been effectively
# installed, upgraded, or removed
if [ "$EVENT" == "remove" ] ; then
echo "$SHOWLIST" | tr " " "\n" | sort > ${TMPDIR}/showlist.tmp
comm -1 ${TMPDIR}/installed.tmp ${TMPDIR}/showlist.tmp | rev | cut -f4- -d"-" | rev > ${TMPDIR}/basenames.tmp
else
echo "$SHOWLIST" | tr " " "\n" | rev | cut -f2- -d"." | rev | sort > ${TMPDIR}/showlist.tmp
comm -1 -2 ${TMPDIR}/installed.tmp ${TMPDIR}/showlist.tmp | rev | cut -f4- -d"-" | rev > ${TMPDIR}/basenames.tmp
fi
SELKEYS=$(echo "${!NOTIFYMSG[@]}" | tr " " "\n" | grep "^on_${EVENT}@" | tr "\n" " ")
for KEY in $SELKEYS ; do
PATLIST="${KEY#*@}"
EXPR=$(echo -en "$PATLIST" | \
tr --squeeze-repeats "," | \
sed -e "s/,$//" -e "s/^/(&/" -e "s/,/)|(/g" -e "s/$/&)/")
NV_MATCHPKGS=$(grep -E "$EXPR" ${TMPDIR}/basenames.tmp | tr "\n" "," | sed -e "s/,$//")
if [ ! -z "$NV_MATCHPKGS" ] ; then
MSG=$(eval "echo \"${NOTIFYMSG[$KEY]}\"")
[ -z "MSGLIST" ] && MSGLIST="$MSG\n" || MSGLIST="$MSGLIST\n$MSG"
fi
done
if [ ! -z "$MSGLIST" ] ; then
if [ "$DIALOG" = "on" ] || [ "$DIALOG" = "ON" ] ; then
dialog --title "post-$EVENT notifications" --backtitle "slackpkg $VERSION" --msgbox "$MSGLIST" 12 70
else
MSGLIST="====[ POST-${EVENT} NOTIFICATIONS ]===================================== \n${MSGLIST}\n======================================================================="
echo -e "\n$MSGLIST" | more
echo -en "Hit a key to continue or wait 10 seconds\r"
read -t 10 USERKEY
echo " "
fi
fi
} # END handle_event()
# Overrides original remove_pkg(). Required by the notification mechanism.
function remove_pkg() {
local i
for i in $SHOWLIST; do
echo -e "\nPackage: $i"
echo -e "\tRemoving... "
removepkg $i
if [ ! -e $ROOT/var/log/packages/$i ];then
FDATE=$(ls -ltr --full-time $ROOT/var/log/removed_packages/$i|tail -1 |awk '{print $6" "$7}'|sed -r -e 's/\.[0-9]{9}//' -e 's,-,/,' -e 's,-,/,')
echo "$FDATE removed: $i" >> $WORKDIR/install.log
fi
done
handle_event "remove"
} # END remove_pkg()
# Overrides original upgrade_pkg(). Required by the notification mechanism.
function upgrade_pkg() {
local i
if [ "$DOWNLOAD_ALL" = "on" ]; then
OLDDEL="$DELALL"
DELALL="off"
for i in $SHOWLIST; do
getpkg $i true
done
DELALL="$OLDDEL"
fi
if [ "$DOWNLOADONLY" == "on" ];then
echo "Download only.. not upgraded!"
return
fi
ls -1 $ROOT/var/log/packages > $TMPDIR/tmplist
for i in $SHOWLIST; do
PKGFOUND=$(grep -m1 -e "^$(echo $i|rev|cut -f4- -d-|rev)-[^-]\+-[^-]\+-[^-]\+$" $TMPDIR/tmplist)
REPOPOS=$(grep -m1 " $(echo $i|sed 's/\.t.z//') " $TMPDIR/pkglist|awk '{print $1}'|sed 's/SLACKPKGPLUS_//')
getpkg $i upgradepkg Upgrading
if [ -e "$ROOT/var/log/packages/$(echo $i|sed 's/\.t.z//')" ];then
FDATE=$(ls -l --full-time $ROOT/var/log/packages/$(echo $i|sed 's/\.t.z//') |awk '{print $6" "$7}'|sed -r -e 's/\.[0-9]{9}//' -e 's,-,/,' -e 's,-,/,')
echo "$FDATE upgraded: $i [$REPOPOS] (was $PKGFOUND)" >> $WORKDIR/install.log
fi
done
handle_event "upgrade"
} # END upgrade_pkg()
# Overrides original install_pkg(). Required by the notification mechanism.
function install_pkg() {
local i
if [ "$DOWNLOAD_ALL" = "on" ]; then
OLDDEL="$DELALL"
DELALL="off"
for i in $SHOWLIST; do
getpkg $i true
done
DELALL="$OLDDEL"
fi
if [ "$DOWNLOADONLY" == "on" ];then
echo "Download only.. not installed!"
return
fi
for i in $SHOWLIST; do
INSTALL_T='installed: '
if [ -e $ROOT/var/log/packages/$(echo $i|sed 's/\.t.z//') ];then
INSTALL_T='reinstalled:'
fi
REPOPOS=$(grep -m1 " $(echo $i|sed 's/\.t.z//') " $TMPDIR/pkglist|awk '{print $1}'|sed 's/SLACKPKGPLUS_//')
getpkg $i installpkg Installing
if [ -e "$ROOT/var/log/packages/$(echo $i|sed 's/\.t.z//')" ];then
FDATE=$(ls -l --full-time $ROOT/var/log/packages/$(echo $i|sed 's/\.t.z//') |awk '{print $6" "$7}'|sed -r -e 's/\.[0-9]{9}//' -e 's,-,/,' -e 's,-,/,')
echo "$FDATE $INSTALL_T $i [$REPOPOS]" >> $WORKDIR/install.log
fi
done
handle_event "install"
} # END install_pkg()
function wgetdebug(){
local SRCURL
local DSTFILE
SRCURL=$2
DSTFILE=$(echo $SRCURL|sed 's|/|,|g')
if [ ${SRCURL:0:5} == "https" ];then
WGETOPTSL="--no-check-certificate"
fi
if [ ${SRCURL:0:3} == "ftp" ];then
WGETOPTSL="--passive-ftp"
fi
DOWNTIME=$(date +%s)
wget $WGETOPTS $WGETOPTSL -O $TMPDIR/$DSTFILE $SRCURL 2>&1|tee $TMPDIR/$DSTFILE.log
WGETERR=${PIPESTATUS[0]}
cp $TMPDIR/$DSTFILE $1
echo "exit code: $WGETERR" >>$TMPDIR/$DSTFILE.log
DOWNTIME=$[$(date +%s)-$DOWNTIME]
if [ $WGETERR -ne 0 ];then
echo >> $TMPDIR/error.log
echo "$SRCURL --> BAD" >> $TMPDIR/error.log
echo "wget $WGETOPTS $WGETOPTSL -O $DSTFILE $SRCURL" >> $TMPDIR/error.log
echo "exit code: $WGETERR" >> $TMPDIR/error.log
echo "download time: $DOWNTIME secs" >> $TMPDIR/error.log
echo "details:" >> $TMPDIR/error.log
cat $TMPDIR/$DSTFILE.log >> $TMPDIR/error.log
ls -l $DSTFILE >> $TMPDIR/error.log 2>&1
md5sum $DSTFILE >> $TMPDIR/error.log 2>&1
echo >> $TMPDIR/error.log
else
echo "$SRCURL --> OK" >> $TMPDIR/info.log
fi
return $WGETERR
} # END wgetdebug()
function cached_downloader(){
local SRCURL
local CACHEFILE
local SRCBASE
SRCURL=$2
SRCBASE=$(basename $SRCURL)
CACHEFILE=$(echo $SRCURL|md5sum|awk '{print $1}')
case $SRCBASE in
CHECKSUMS.md5) TOCACHE=1 ;;
MANIFEST.bz2) TOCACHE=1 ;;
PACKAGES.TXT) TOCACHE=1 ;;
*) TOCACHE=0 ;;
esac
if [ $TOCACHE -eq 1 ];then
echo
echo "=== check cache: $SRCURL ==="
echo -n "headers.. "
curl --location --head $SRCURL 2>/dev/null|grep -v ^Date:|sed 's/ //' > $TMPDIR/cache.head
echo "Url: $SRCURL" >> $TMPDIR/cache.head
grep -q "200 OK" $TMPDIR/cache.head || echo "Header or Url Invalid!!! (`date`)"
[ $VERBOSE -eq 3 ]&&cat $TMPDIR/cache.head|sed 's/^/ /'
if [ -e $CACHEDIR/$CACHEFILE -a -e $CACHEDIR/$CACHEFILE.head ];then
echo "Is cached.. "
[ $VERBOSE -eq 3 ]&&cat $CACHEDIR/$CACHEFILE.head|sed 's/^/ /'
if diff $CACHEDIR/$CACHEFILE.head $TMPDIR/cache.head >/dev/null;then
echo "Cache valid! If not please remove manually $CACHEDIR/$CACHEFILE !"
cp $CACHEDIR/$CACHEFILE $1
return $?
fi
echo -n "Invalid.. "
rm -f $CACHEDIR/$CACHEFILE $CACHEDIR/$CACHEFILE.head
fi
echo "Download file.. "
$CACHEDOWNLOADER $1 $SRCURL
ERR=$?
if [ "$(ls -l $1 2>/dev/null|awk '{print $5}')" == "$(grep Content-Length: $TMPDIR/cache.head|awk '{print $2}')" ];then
echo "Caching it!"
cp $1 $CACHEDIR/$CACHEFILE
cp $TMPDIR/cache.head $CACHEDIR/$CACHEFILE.head
else
echo "NOT cacheable!"
fi
else
echo
echo "=== no caching for $SRCURL ==="
$CACHEDOWNLOADER $1 $SRCURL
ERR=$?
fi
return $ERR
} # END cached_downloader()
if [ ! -z "$DOWNLOADCMD" ];then
DOWNLOADER="$DOWNLOADCMD"
@ -1247,7 +1429,8 @@ function showlist() {
# -- only insert "package" if not in NEWINPUTLIST
echo "$NEWINPUTLIST" | grep -qw "${package}" || NEWINPUTLIST="$NEWINPUTLIST $package"
done
done # pref in $INPUTLIST
INPUTLIST=$NEWINPUTLIST
@ -1272,7 +1455,7 @@ function showlist() {
fi
done
fi
fi
fi # "$CMD" == "install" / "upgrade" / "reinstall" / "remove"
if [ "$CMD" == "search" ] || [ "$CMD" == "file-search" ] ; then
PATTERN=$(echo $ARG | sed -e 's/\+/\\\+/g' -e 's/\./\\\./g' -e 's/ /\|/g')
@ -1301,7 +1484,7 @@ function showlist() {
esac
cleanup
fi
fi # "$CMD" == "search" / "file-search"
if [ "$CMD" == "check-updates" ] ; then
@ -1376,6 +1559,6 @@ function showlist() {
fi
cleanup
fi
fi # "$CMD" == "check-updates"
fi

View file

@ -1,108 +0,0 @@
if [ "$SLACKPKGPLUS" = "on" ];then
# Slackpkg+ Dialog functions
# Original functions from slackpkg modified by Marek Wodzinski (majek@mamy.to)
#
export DIALOG_CANCEL="1"
export DIALOG_ERROR="126"
export DIALOG_ESC="1"
export DIALOG_EXTRA="3"
export DIALOG_HELP="2"
export DIALOG_ITEM_HELP="2"
export DIALOG_OK="0"
# Show the lists and asks if the user want to proceed with that action
# Return accepted list in $SHOWLIST
#
if [ "$DIALOG" = "on" ] || [ "$DIALOG" = "ON" ]; then
function showlist() {
if [ "$ONOFF" != "off" ]; then
ONOFF=on
fi
cat $TMPDIR/greylist.* >$TMPDIR/greylist
if [ "$GREYLIST" == "off" ];then
>$TMPDIR/greylist
fi
grep -Ew -f $TMPDIR/greylist $TMPDIR/pkglist|awk '{print $2}' >$TMPDIR/unchecklist
rm -f $TMPDIR/dialog.tmp
if [ "$2" = "upgrade" ]; then
ls -1 $ROOT/var/log/packages > $TMPDIR/tmplist
for i in $1; do
TMPONOFF=$ONOFF
BASENAME=$(cutpkg $i)
PKGFOUND=$(grep -m1 -e "^${BASENAME}-[^-]\+-[^-]\+-[^-]\+$" $TMPDIR/tmplist)
REPOPOS=$(grep -m1 " $(echo $i|sed 's/\.t.z//') " $TMPDIR/pkglist|awk '{print $1}'|sed 's/SLACKPKGPLUS_//')
REPOPOSFULL=$(grep -m1 " $(echo $i|sed 's/\.t.z//') " $TMPDIR/pkglist|sed 's/SLACKPKGPLUS_//'|awk '{print $0,gensub(/([0-9]+)([^0-9]*)/,"\\1 \\2_","1",$5),$6}')
PKGVER=$(echo $i|rev|cut -f3 -d-|rev)
ALLFOUND=$(echo $(grep " ${BASENAME} " $TMPDIR/pkglist|sed -r -e 's/SLACKPKGPLUS_//' -e 's/^([^ ]*) [^ ]* ([^ ]*) [^ ]* ([^ ]*) .*/\2-\3(\1) ,/')|sed 's/,$//')
grep -q "^$(echo $i|rev|cut -f4- -d-|rev)$" $TMPDIR/unchecklist && TMPONOFF="off"
echo "$REPOPOSFULL $i \"$REPOPOS\" $TMPONOFF \"installed: $PKGFOUND --> available: $ALLFOUND\"" >>$TMPDIR/dialog.tmp.1
done
# 1 2 3 4 5 6 7 8 9 1011 12-
# slackware xf86-video-nouveau 1.0.12 i586 1 xf86-video-nouveau-1.0.12-i586-1 ./slackware/x txz 1 _ xf86-video-nouveau-1.0.12-i586-1 xf86-video-nouveau-1.0.12-i586-1.txz "slackware" on "installed: xf86-video-nouveau-git_20151119_6e6d8ac-i586-1 --> available: blacklist-1(extra) , 1.0.12-1(slackware) "
case "$SHOWORDER" in
"repository") SHOWORDER=1;;
"arch") SHOWORDER=4;;
"package") SHOWORDER=6;;
"path") SHOWORDER=7;;
"tag") SHOWORDER=10;;
*) SHOWORDER=6;;
esac
cat $TMPDIR/dialog.tmp.1 | awk '{print $'$SHOWORDER',$0}'|sort|cut -f13- -d" " >$TMPDIR/dialog.tmp
HINT="--item-help"
else
for i in $1; do
TMPONOFF=$ONOFF
REPOPOS=$(grep -m1 " $(echo $i|sed 's/\.t.z//') " $TMPDIR/pkglist|awk '{print $1}'|sed 's/SLACKPKGPLUS_//')
grep -q "^$(echo $i|rev|cut -f4- -d-|rev)$" $TMPDIR/unchecklist && TMPONOFF="off"
echo "$i \"$REPOPOS\" $TMPONOFF" >>$TMPDIR/dialog.tmp
done
HINT=""
fi
# This is needed because dialog have a limit of arguments.
# This limit is around 20k characters in slackware 10.x
# Empiric tests on slackware 13.0 got a limit around 139k.
# If we exceed this limit, dialog got a terrible error, to
# avoid that, if the number of arguments is bigger than
# DIALOG_MAXARGS we remove the hints. If even without hints
# we can't got less characters than DIALOG_MAXARGS we give an
# error message to the user ask him to not use dialog
if [ $(wc -c $TMPDIR/dialog.tmp | cut -f1 -d\ ) -ge $DIALOG_MAXARGS ]; then
mv $TMPDIR/dialog.tmp $TMPDIR/dialog2.tmp
awk '{ NF=3 ; print $0 }' $TMPDIR/dialog2.tmp > $TMPDIR/dialog.tmp
HINT=""
fi
DTITLE=$2
if [ "$DOWNLOADONLY" == "on" ];then
DTITLE="$DTITLE (download only)"
fi
cat $TMPDIR/dialog.tmp|xargs dialog --title "$DTITLE" --backtitle "slackpkg $VERSION" $HINT --checklist "Choose packages to $2:" 19 70 13 2>$TMPDIR/dialog.out
case "$?" in
0|123)
dialog --clear
;;
1|124|125|126|127)
dialog --clear
echo -e "DIALOG ERROR:\n-------------" >> $TMPDIR/error.log
cat $TMPDIR/dialog.out >> $TMPDIR/error.log
echo -e "-------------
If you want to continue using slackpkg, disable the DIALOG option in
$CONF/slackpkg.conf and try again.
Help us to make slackpkg a better tool - report bugs to the slackpkg
developers" >> $TMPDIR/error.log
cleanup
;;
esac
SHOWLIST=$(cat $TMPDIR/dialog.out | tr -d \")
if [ -z "$SHOWLIST" ]; then
echo "No packages selected for $2, exiting."
cleanup
fi
}
fi
fi