Cleanup + root fixes

This commit is contained in:
zawz 2020-05-26 11:20:51 +02:00
parent 223d5da8f2
commit 4d85aa1ebc
7 changed files with 43 additions and 62 deletions

View file

@ -12,25 +12,24 @@ virtual_config_path()
# resolve relative config_path # resolve relative config_path
config_path="$(resolve_path "$config_path" "$(pwd)")" config_path="$(resolve_path "$config_path" "$(pwd)")"
config_file="$config_path/zpkg.conf" config_file="$config_path/zpkg.conf"
if [ ! -d "$config_path" ] # setup sudo prefix
then unset sudo
sudo mkdir -p "$config_path" 2>/dev/null if ! root_check ; then
fi which sudo >/dev/null || { echo "sudo not installed" && exit 11; }
if [ ! -f "$config_file" ] sudo=sudo
then
echo "Error: no config file '$config_file'" >&2
exit 1
fi fi
[ ! -d "$config_path" ] && { $sudo mkdir -p "$config_path" 2>/dev/null || exit $?; }
[ ! -f "$config_file" ] && echo "Error: no config file '$config_file'" >&2 && exit 1
. "$config_file" . "$config_file"
# resolve relative pkg_path # resolve relative pkg_path
PKG_PATH="$(resolve_path "$PKG_PATH" "$config_path")" PKG_PATH="$(resolve_path "$PKG_PATH" "$config_path")"
if [ ! -d "$PKG_PATH" ] root_check && [ -z "$opt_f" ] && [ "$ALLOW_ROOT" != "true" ] && echo "Cannot run as root" >&2 && exit 10
then
sudo mkdir -p "$PKG_PATH" 2>/dev/null [ ! -d "$PKG_PATH" ] $sudo mkdir -p "$PKG_PATH" 2>/dev/null
fi

View file

@ -6,15 +6,16 @@ unpack()
tar -xf "$1" tar -xf "$1"
} }
# $1 = package , $2 = prefix
add_package_entry() add_package_entry()
{ {
( (
cd "$PKG_PATH" cd "$PKG_PATH"
if grep -q -w "$1" installed 2>/dev/null if grep -q -w "$1" installed 2>/dev/null
then then
sudo sed "s|$1 .*\$|$1 $(date +%s)|g" -i installed $2 sed "s|$1 .*\$|$1 $(date +%s)|g" -i installed
else else
sudo sh -c "echo '$1 $(date +%s)' >> installed" $2 sh -c "echo '$1 $(date +%s)' >> installed"
fi fi
) )
} }
@ -37,22 +38,19 @@ move_files()
done done
} }
# $1 = package , $2 = prefix
install_package() install_package()
{ {
tmpdir="/tmp/zpkg_$(random_string 5)" tmpdir="/tmp/zpkg_$(random_string 5)"
mkdir -p "$tmpdir" mkdir -p "$tmpdir"
( (
cd "$tmpdir" cd "$tmpdir"
if ! fetch_package "$1" fetch_package "$1" || { echo "Package '$1' not found" >&2 && return 1; }
then $2 cp "$1.tar.xz" "$PKG_PATH"
echo "Package '$1' not found" >&2
return 1
fi
sudo cp "$1.tar.xz" "$PKG_PATH"
unpack "$1.tar.xz" || return $? unpack "$1.tar.xz" || return $?
move_files ROOT / sudo 2>/dev/null move_files ROOT / $2 2>/dev/null
move_files HOME "$HOME" 2>/dev/null move_files HOME "$HOME" 2>/dev/null
add_package_entry "$1" add_package_entry "$1" $2
) )
ret=$? ret=$?
rm -rd "$tmpdir" 2>/dev/null rm -rd "$tmpdir" 2>/dev/null

View file

@ -1,14 +1,9 @@
#!/bin/sh #!/bin/sh
if [ -z "$opt_f" ] ; then
root_check || exit 10
fi
case "$1" in case "$1" in
list) awk '{print $1}' "$PKG_PATH/installed" 2>/dev/null | sort ;; list) awk '{print $1}' "$PKG_PATH/installed" 2>/dev/null | sort ;;
list-all) awk '{print $1}' "$PKG_PATH/pkglist" 2>/dev/null | sort ;; list-all) awk '{print $1}' "$PKG_PATH/pkglist" 2>/dev/null | sort ;;
update-database) fetch_pkglist sudo ;; update-database) fetch_pkglist $sudo ;;
fetch) fetch)
if [ -z "$2" ] if [ -z "$2" ]
then then
@ -60,7 +55,7 @@ info)
fi fi
;; ;;
install) install)
fetch_pkglist sudo || exit $? fetch_pkglist $sudo || exit $?
if [ -z "$2" ] if [ -z "$2" ]
then then
echo "No package specified" >&2 echo "No package specified" >&2
@ -71,11 +66,8 @@ install)
echo "Installing packages: $pkglist" echo "Installing packages: $pkglist"
for I in $pkglist for I in $pkglist
do do
if is_installed "$I" is_installed $I && remove_package $I $sudo
then install_package $I $sudo
remove_package "$I"
fi
install_package "$I"
done done
fi fi
;; ;;
@ -87,12 +79,12 @@ remove)
shift 1 shift 1
for I in $* for I in $*
do do
remove_package "$I" remove_package "$I" $sudo
done done
fi fi
;; ;;
update) update)
fetch_pkglist sudo || exit 1 fetch_pkglist $sudo || exit 1
r_pkg=$(removed_packages) r_pkg=$(removed_packages)
o_pkg=$(outdated_packages) o_pkg=$(outdated_packages)
if [ -n "$r_pkg" ] if [ -n "$r_pkg" ]
@ -100,7 +92,7 @@ update)
echo "Removing packages: "$r_pkg echo "Removing packages: "$r_pkg
for I in $r_pkg for I in $r_pkg
do do
remove_package $I remove_package $I $sudo
done done
fi fi
if [ -n "$o_pkg" ] if [ -n "$o_pkg" ]
@ -108,8 +100,8 @@ update)
echo "Updating packages: "$o_pkg echo "Updating packages: "$o_pkg
for I in $o_pkg for I in $o_pkg
do do
remove_package $I remove_package $I $sudo
install_package $I install_package $I $sudo
done done
fi fi
;; ;;

View file

@ -22,9 +22,13 @@ Admin operations:
Options: Options:
-h Display this help -h Display this help
-c <path> Custom config path -c <path> Custom config path. Default /etc/zpkg
-f Force running when root -f Force running when root
"
Config (zpkg.conf):
SSH_ADDRESS SSH access for deploy
HTTP_ADDRESS HTTP address for downloading packages
ALLOW_ROOT Set to true to allow running as root without -f. Default: false"
} }
error() { error() {

View file

@ -6,13 +6,11 @@ delete_files()
{ {
while read -r in while read -r in
do do
if [ -n "$in" ] [ -n "$in" ] && $1 rm -d "$in" 2>/dev/null
then
$1 rm -d "$in" 2>/dev/null
fi
done done
} }
# $1 = package , $2 = prefix
remove_package() remove_package()
{ {
cd "$PKG_PATH" cd "$PKG_PATH"
@ -26,13 +24,13 @@ remove_package()
( # delete root files ( # delete root files
cd / cd /
tar -tf "$archive" ROOT 2>/dev/null | sed 's|^ROOT/||g' | tac | delete_files sudo tar -tf "$archive" ROOT 2>/dev/null | sed 's|^ROOT/||g' | tac | delete_files $2
) )
( # delete home files ( # delete home files
cd "$HOME" cd "$HOME"
tar -tf "$archive" HOME 2>/dev/null | sed 's|^HOME/||g' | tac | delete_files tar -tf "$archive" HOME 2>/dev/null | sed 's|^HOME/||g' | tac | delete_files
) )
sudo rm "$archive" 2>/dev/null $2 rm "$archive" 2>/dev/null
sudo sed -i "/^$1 /d" installed $2 sed -i "/^$1 /d" installed
} }

View file

@ -26,10 +26,5 @@ getname()
# return error if user is root # return error if user is root
root_check() root_check()
{ {
if [ "$(id | cut -d'=' -f2 | cut -d'(' -f1)" -eq 0 ] [ "$(id | cut -d'=' -f2 | cut -d'(' -f1)" -eq 0 ]
then
echo "Cannot run as root" >&2
return 1
fi
return 0
} }

View file

@ -68,9 +68,7 @@ removed_packages()
do do
name=$(echo "$in" | awk '{print $1}') name=$(echo "$in" | awk '{print $1}')
rem=$(grep -w "^$name" pkglist | awk '{print $2}') rem=$(grep -w "^$name" pkglist | awk '{print $2}')
if [ -z "$rem" ] ; then [ -z "$rem" ] && echo $name
echo $name
fi
done done
} }
@ -82,9 +80,6 @@ outdated_packages()
name=$(echo "$in" | awk '{print $1}') name=$(echo "$in" | awk '{print $1}')
loc=$(echo "$in" | awk '{print $2}') loc=$(echo "$in" | awk '{print $2}')
rem=$(grep -w "^$name" pkglist | awk '{print $2}') rem=$(grep -w "^$name" pkglist | awk '{print $2}')
if [ -n "$rem" ] && [ "$loc" -lt "$rem" ] [ -n "$rem" ] && [ "$loc" -lt "$rem" ] && echo $name
then
echo $name
fi
done done
} }