Cleanup + root fixes
This commit is contained in:
parent
223d5da8f2
commit
4d85aa1ebc
7 changed files with 43 additions and 62 deletions
|
|
@ -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
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
26
src/main.sh
26
src/main.sh
|
|
@ -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
|
||||||
;;
|
;;
|
||||||
|
|
|
||||||
|
|
@ -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() {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue