From 995bf183bf1aea00f907fd295a46b3fee001256c Mon Sep 17 00:00:00 2001 From: zawz Date: Thu, 12 Aug 2021 18:29:12 +0200 Subject: [PATCH] add configurable root dir --- src/config.sh | 33 ++++++++++++++++++--------------- src/env.sh | 2 +- src/install.sh | 2 +- src/main.sh | 6 +++++- src/remove.sh | 2 +- src/upgrade.sh | 6 +++--- src/view.sh | 2 +- 7 files changed, 30 insertions(+), 23 deletions(-) diff --git a/src/config.sh b/src/config.sh index 9ae520b..bbf442e 100644 --- a/src/config.sh +++ b/src/config.sh @@ -14,28 +14,31 @@ virtual_config_path() config_path="$(resolve_path "$config_path" "$(pwd)")" config_file="$config_path/zpkg.conf" -# setup sudo prefix -unset sudo -if ! root_check ; then - which sudo >/dev/null 2>&1 || { echo "sudo not installed" && exit 11; } - sudo=sudo -fi - [ ! -d "$config_path" ] && { $sudo mkdir -p "$config_path" 2>/dev/null || exit $?; } [ ! -f "$config_file" ] && echo "WARN: no config file '$config_file'" >&2 [ -f "$config_file" ] && . "$config_file" -[ -n "$ZPKG_SSH_ADDRESS" ] && SSH_ADDRESS=$ZPKG_SSH_ADDRESS -[ -n "$ZPKG_HTTP_ADDRESS" ] && HTTP_ADDRESS=$ZPKG_HTTP_ADDRESS -[ -n "$ZPKG_COMPRESSION" ] && COMPRESSION=$ZPKG_COMPRESSION -[ -n "$ZPKG_ALLOW_ROOT" ] && ALLOW_ROOT=$ZPKG_ALLOW_ROOT -[ -n "$ZPKG_UPDATE_REMOVE" ] && UPDATE_REMOVE=$ZPKG_UPDATE_REMOVE +SSH_ADDRESS=${ZPKG_SSH_ADDRESS-$SSH_ADDRESS} +HTTP_ADDRESS=${ZPKG_HTTP_ADDRESS-$HTTP_ADDRESS} +COMPRESSION=${ZPKG_COMPRESSION-$COMPRESSION} +ALLOW_ROOT=${ZPKG_ALLOW_ROOT-$ALLOW_ROOT} +UPDATE_REMOVE=${ZPKG_UPDATE_REMOVE-$UPDATE_REMOVE} +ROOT_PATH=${ZPKG_ROOT_PATH-$ROOT_PATH} +NOSUDO=${ZPKG_NOSUDO-$NOSUDO} # resolve relative pkg_path -if [ -n "$ZPKG_PKG_PATH" ] -then PKG_PATH="$(resolve_path "$ZPKG_PKG_PATH" "$(pwd)")" -else PKG_PATH="$(resolve_path "$PKG_PATH" "$config_path")" +if [ -n "$ZPKG_PKG_PATH" ] ; then + PKG_PATH="$(resolve_path "$ZPKG_PKG_PATH" "$(pwd)")" +else + PKG_PATH="$(resolve_path "$PKG_PATH" "$config_path")" +fi + +# setup sudo prefix +unset sudo +if ! root_check && [ -z "$NOSUDO" ] ; then + which sudo >/dev/null 2>&1 || { echo "sudo not installed" && exit 11; } + sudo=sudo fi root_check && [ -z "$opt_f" ] && [ "$ALLOW_ROOT" != "true" ] && echo "Cannot run as root" >&2 && exit 10 diff --git a/src/env.sh b/src/env.sh index 18ee977..4086aff 100644 --- a/src/env.sh +++ b/src/env.sh @@ -3,7 +3,7 @@ _OUTPUT=/dev/stdin [ "$_ZPKG_SELF_UPGRADE" = "y" ] && _OUTPUT=/dev/null -config_path=/etc/zpkg +config_path=$ZPKG_ROOT_PATH/etc/zpkg fname="$(basename "$0")" ALLOW_ROOT=false UPDATE_REMOVE=true diff --git a/src/install.sh b/src/install.sh index 55dfce6..f0e3048 100644 --- a/src/install.sh +++ b/src/install.sh @@ -43,7 +43,7 @@ install_package() ( umask a+rx unpack "$1.tar.$extension" $2 || return $? - copy_files ROOT / $2 o+rx 2>/dev/null || return $? + copy_files ROOT "$ROOT_PATH/" $2 2>/dev/null || return $? ) || return $? copy_files HOME "$HOME" 2>/dev/null add_package_entry "$1" $2 diff --git a/src/main.sh b/src/main.sh index 1b348a7..cc6ad07 100644 --- a/src/main.sh +++ b/src/main.sh @@ -1,7 +1,11 @@ #!/bin/sh +[ "$DEBUG" = true ] && set -x + # ordered requirements -%include util.sh env.sh print.sh options.sh config.sh +%include util.sh env.sh print.sh +%include options.sh +%include config.sh # everything else %include *.sh diff --git a/src/remove.sh b/src/remove.sh index 9fd4bdc..1b2c3a6 100644 --- a/src/remove.sh +++ b/src/remove.sh @@ -22,7 +22,7 @@ remove_package() echo "Removing $1" list=$(cat "$archive" | $pcompress -dc 2>/dev/null | tar -tf - 2>/dev/null) - echo "$list" | grep "^ROOT/" | sed 's|^ROOT/||g' | tac | delete_files / $2 + echo "$list" | grep "^ROOT/" | sed 's|^ROOT/||g' | tac | delete_files "$ROOT_PATH/" $2 echo "$list" | grep "^HOME/" | sed 's|^HOME/||g' | tac | delete_files "$HOME" $2 rm "$archive" 2>/dev/null diff --git a/src/upgrade.sh b/src/upgrade.sh index 128fa05..ca4eb0d 100644 --- a/src/upgrade.sh +++ b/src/upgrade.sh @@ -25,10 +25,10 @@ upgrade_package() unpack "$1.tar.$extension" || return $? oldlist=$(cat "$PKG_PATH/$1.tar.$extension" | $pcompress -dc 2>/dev/null | tar -tf - 2>/dev/null | sort) - echo "$oldlist" | grep "^ROOT/" | to_delete - ROOT | sed 's|^ROOT/||g' | tac | delete_files / $2 + echo "$oldlist" | grep "^ROOT/" | to_delete - ROOT | sed 's|^ROOT/||g' | tac | delete_files "$ROOT_PATH/" $2 echo "$oldlist" | grep "^HOME/" | to_delete - HOME | sed 's|^HOME/||g' | tac | delete_files "$HOME" - copy_files ROOT / $2 2>/dev/null + copy_files ROOT "$ROOT_PATH/" $2 2>/dev/null copy_files HOME "$HOME" 2>/dev/null $2 cp "$1.tar.$extension" "$PKG_PATH" $2 chmod a+r "$PKG_PATH/$1.tar.$extension" @@ -47,5 +47,5 @@ do_self_update() _tmpzpkg="$TMPDIR/zpkg_bin_$(random_string 5)" # copy current file cp "$0" "$_tmpzpkg" || return $? - exec sh -c '_ZPKG_SELF_UPGRADE=y "$1" -R install zpkg ; rm -f "$1"' sh "$_tmpzpkg" + exec sh -c '_ZPKG_SELF_UPGRADE=y "$1" -c "$2" -R install zpkg ; rm -f "$1"' sh "$_tmpzpkg" "$config_path" } diff --git a/src/view.sh b/src/view.sh index bfbf0b2..940d2bf 100644 --- a/src/view.sh +++ b/src/view.sh @@ -58,7 +58,7 @@ is_installed() # $1 = file view_package_file() { tree=$(cat "$1" | $pcompress -dc 2>/dev/null | tar -tf - 2>/dev/null) || exit $? - echo "$tree" | grep -E '^ROOT/|^HOME/' | sed "/\/$/d ; s|^ROOT/|/|g ; s|^HOME/|$HOME/|g" 2>/dev/null + echo "$tree" | grep -E '^ROOT/|^HOME/' | sed "/\/$/d ; s|^ROOT/|$ROOT_PATH/|g ; s|^HOME/|$HOME/|g" 2>/dev/null } # $1 = package name