aboutsummaryrefslogtreecommitdiff
path: root/slackupgrade
diff options
context:
space:
mode:
Diffstat (limited to 'slackupgrade')
-rw-r--r--slackupgrade25
1 files changed, 22 insertions, 3 deletions
diff --git a/slackupgrade b/slackupgrade
index 9be3e98..f00e20b 100644
--- a/slackupgrade
+++ b/slackupgrade
@@ -414,11 +414,25 @@ function download_all() {
fi
}
+function abspath() {
+ local name=$1
+ local val
+ eval val=\$$name
+ case $val in
+ /*) ;;
+ *) local dir=$(dirname $val)
+ dir=$(cd $dir 2>/dev/null && pwd) || abend "can't canonicalize $val"
+ val=$dir/$(basename $val)
+ eval $name=$val
+ ;;
+ esac
+}
+
# ##########
# Main
# ##########
-while getopts "ahIknp:qSs:vy" OPTION
+while getopts "ahIk:np:qSs:vy" OPTION
do
case $OPTION in
I) opmode=INCR;;
@@ -426,7 +440,8 @@ do
a) install_all=y;;
h) usage
exit 0;;
- k) keep_file=$OPTARG;;
+ k) keep_file=$OPTARG
+ abspath keep_file;;
n) dry_run=y;;
p) install_packages="$install_packages $OPTARG";;
q) verbosity=q;;
@@ -451,6 +466,10 @@ if [ $(id -u) != "0" ]; then
abend "must be root"
fi
+if [ -n "$keep_file" ] && [ ! -f "$keep_file" ]; then
+ abend "keep file \"$keep_file\" doesn't exist or is unreadable"
+fi
+
# Sanity check
if [ ! -s /etc/os-release ]; then
abend "/etc/os-release doesn't exist"
@@ -596,7 +615,7 @@ fi) | sort -u > candidates.$$
# Build a list of packages that should be removed after install
comm -2 -3 $installed_list candidates.$$ > remove.list.$$
-if [ -s "$keep_file" ]; then
+if [ -n "$keep_file" ] && [ -s "$keep_file" ]; then
grep -v '^#' $keep_file | \
tr -s '\n' | sort -u | comm -2 -3 remove.list.$$ - > remove.list
rm remove.list.$$

Return to:

Send suggestions and report system problems to the System administrator.