diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2019-09-14 17:13:23 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2019-09-14 17:13:23 +0200 |
commit | 79003656b4a3e1cc69d36f5e49dc066547edf708 (patch) | |
tree | 104f4011220a3344c6133b06f8553505121eec48 | |
parent | d05caaafef647cd57b68cfc5dd53a687717dfa44 (diff) | |
download | slackupgrade-79003656b4a3e1cc69d36f5e49dc066547edf708.tar.gz slackupgrade-79003656b4a3e1cc69d36f5e49dc066547edf708.tar.bz2 |
Use index file to select package names, don't relay on shell globbing search
-rw-r--r-- | slackware-upgrade-system | 90 |
1 files changed, 50 insertions, 40 deletions
diff --git a/slackware-upgrade-system b/slackware-upgrade-system index 98d9bf0..1958935 100644 --- a/slackware-upgrade-system +++ b/slackware-upgrade-system @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # slackware-upgrade-system - full upgrade of a Slackware installation # Copyright (C) 2019 Sergey Poznyakoff. # @@ -36,6 +36,11 @@ install_series= # Name of the keep-list file. keep_file= +# Internal variables +installed_list=/tmp/installed.list.$$ +avail_index=/tmp/avail.index.$$ +avail_list=/tmp/avail.list.$$ + function usage() { cat <<EOF usage: $0 [-anqvy] [-k FILE] [-s SERIES] [DIRECTORY] @@ -87,6 +92,24 @@ function upgrade_package() { fi } +function package_file_name() { + pkg=$(awk -vname=$1 '$1==name { print $2 }' $avail_index) + if [ -z "$pkg" ]; then + echo >&2 "$0: package $name not found in index (should not happen!)" + echo >$logfile "$0: package $name not found in index (should not happen!)" + else + echo $pkg + fi +} + +function all_package_files() { + cut -d ' ' -f 2 $avail_index | grep -v '.*/kde[^/]*/' +} + +function series_package_files() { + cut -d ' ' -f 2 $avail_index | grep '.*/'"$1/" +} + while getopts "ahknq:s:vy" OPTION do case $OPTION in @@ -210,8 +233,6 @@ if [ -n "$missing" ]; then fi # Prepare a list of packages that should be removed after install -installed_list=/tmp/installed.list.$$ -avail_list=/tmp/avail.list.$$ candidates= remove_list=$logstem.removed @@ -226,9 +247,8 @@ find $pkgdir \ -name '*.t?z' | \ grep -v '/kde*/' | \ sed -r \ - -e 's|.*/||' \ - -e 's/-[^-]+-(i386|x86(_64)?|arm|noarch|fw)-[[:digit:]]+((_.*)?\.t.z)?//' | \ - sort > $avail_list + -e 's/^(.*\/)?(.*)-[^-]+-(i386|x86(_64)?|arm|noarch|fw)-[[:digit:]]+((_.*)?\.t.z)?/\2 &/' | \ + sort | tee $avail_index | awk '{print $1}' > $avail_list comm -2 -3 $installed_list $avail_list > $remove_list.$$ if [ -s "$keep_file" ]; then @@ -258,6 +278,7 @@ cat $remove_list) | ${PAGER:-more} fi if ! getyn n "Ready for upgrade from $VERSION to $newversion. Continue"; then + rm -f $avail_index echo "Exiting" exit 0 fi @@ -266,52 +287,41 @@ cd $pkgdir # Upgrade the glibc shared libraries. echo "$0: Upgrading shared libraries" -upgrade_package a/glibc-solibs-*.t?z +upgrade_package $(package_file_name glibc-solibs) # Upgrade the package utilities and related tools. echo "$0: Upgrading package utilities" -upgrade_package a/pkgtools-*.tgz -upgrade_package a/tar-*.tgz -upgrade_package a/xz-*.tgz -upgrade_package a/findutils-*.txz +for pkg in pkgtools tar xz findutils +do + upgrade_package $(package_file_name $pkg) +done +# Upgrade the rest of packages if [ -n "$candidates" ]; then for name in $candidates do - ls */$name*.t?z | \ - sed -r -n "/$name"'-[^-]+-(i386|x86(_64)?|arm|noarch|fw)-[[:digit:]]+(_.*)?\.t.z$/p' - done | \ - sort | \ - while read pkg - do - s=$(basename ${pkg%/*}) - if [ "$prev" != "$s" ]; then - echo "$0: installing selected files from series $s" - prev=$s - fi - upgrade_package --install-new $pkg + package_file_name $name done for s in $install_series do - if [ -d $s ]; then - echo "$0: installing additional series $s" - upgrade_package --install-new $s/*.t?z - else - echo >&2 "$0: no such series: $s" - fi + series_package_files $s done else - find . -depth -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | sort | - while read dir - do - case $dir in - kde*) ;; - *) echo "$0: installing packages from series $dir" - upgrade_package --install-new $dir/*.t?z - ;; - esac - done -fi + all_package_files +fi | \ + sort -u | \ + while read pkg + do + s=$(basename ${pkg%/*}) + if [ "$prev" != "$s" ]; then + echo "$0: installing selected files from series $s" + prev=$s + fi + upgrade_package --install-new $pkg + done + +# Index is not needed any more +rm -f $avail_index if [ -s $remove_list ]; then echo "$0: removing packages" |