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
config_path="$(resolve_path "$config_path" "$(pwd)")"
config_file="$config_path/zpkg.conf"
if [ ! -d "$config_path" ]
then
sudo mkdir -p "$config_path" 2>/dev/null
fi
if [ ! -f "$config_file" ]
then
echo "Error: no config file '$config_file'" >&2
exit 1
# setup sudo prefix
unset sudo
if ! root_check ; then
which sudo >/dev/null || { 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 "Error: no config file '$config_file'" >&2 && exit 1
. "$config_file"
# resolve relative pkg_path
PKG_PATH="$(resolve_path "$PKG_PATH" "$config_path")"
if [ ! -d "$PKG_PATH" ]
then
sudo mkdir -p "$PKG_PATH" 2>/dev/null
fi
root_check && [ -z "$opt_f" ] && [ "$ALLOW_ROOT" != "true" ] && echo "Cannot run as root" >&2 && exit 10
[ ! -d "$PKG_PATH" ] $sudo mkdir -p "$PKG_PATH" 2>/dev/null

View file

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

View file

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

View file

@ -22,9 +22,13 @@ Admin operations:
Options:
-h Display this help
-c <path> Custom config path
-c <path> Custom config path. Default /etc/zpkg
-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() {

View file

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

View file

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

View file

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