aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2019-09-14 17:13:23 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2019-09-14 17:13:23 +0200
commit79003656b4a3e1cc69d36f5e49dc066547edf708 (patch)
tree104f4011220a3344c6133b06f8553505121eec48
parentd05caaafef647cd57b68cfc5dd53a687717dfa44 (diff)
downloadslackupgrade-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-system90
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"

Return to:

Send suggestions and report system problems to the System administrator.