Implement self-upgrading mitigation
This commit is contained in:
parent
b471059972
commit
b558f5f0b4
10 changed files with 41 additions and 20 deletions
|
|
@ -28,7 +28,6 @@ fi
|
|||
|
||||
# resolve relative pkg_path
|
||||
PKG_PATH="$(resolve_path "$PKG_PATH" "$config_path")"
|
||||
[ -z "$UPDATE_REMOVE" ] && UPDATE_REMOVE=true
|
||||
|
||||
root_check && [ -z "$opt_f" ] && [ "$ALLOW_ROOT" != "true" ] && echo "Cannot run as root" >&2 && exit 10
|
||||
|
||||
|
|
|
|||
|
|
@ -2,3 +2,5 @@
|
|||
|
||||
config_path=/etc/zpkg
|
||||
fname="$(basename "$0")"
|
||||
ALLOW_ROOT=false
|
||||
UPDATE_REMOVE=true
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ fetch_package()
|
|||
# $1 = prefix
|
||||
fetch_pkglist()
|
||||
{
|
||||
(
|
||||
cd "$PKG_PATH"
|
||||
$1 mv pkglist pkglist_bak 2>/dev/null
|
||||
if ! $1 wget "$HTTP_ADDRESS/pkglist" -q --show-progress -O pkglist 2>&1
|
||||
|
|
@ -22,4 +23,5 @@ fetch_pkglist()
|
|||
$1 rm pkglist_bak 2>/dev/null
|
||||
return 0
|
||||
fi
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ copy_files() {
|
|||
# $1 = package , $2 = prefix
|
||||
install_package()
|
||||
{
|
||||
[ "$1" = "$fname" ] && [ -z "$opt_R" ] && _self_update=y && return 0
|
||||
echo "Installing $1"
|
||||
tmpdir="/tmp/zpkg_$(random_string 5)"
|
||||
mkdir -p "$tmpdir"
|
||||
|
|
|
|||
|
|
@ -132,3 +132,5 @@ deploy)
|
|||
;;
|
||||
*) usage && exit 1 ;;
|
||||
esac
|
||||
|
||||
[ -n "$_self_update" ] && gen_self_update && exec "$_tmpzpkg" -R install zpkg
|
||||
|
|
|
|||
|
|
@ -1,25 +1,15 @@
|
|||
#!/bin/sh
|
||||
|
||||
unset opt_f
|
||||
unset opt_f opt_R
|
||||
|
||||
while getopts ":hc:f" opt;
|
||||
while getopts ":hc:fR" opt;
|
||||
do
|
||||
case $opt in
|
||||
h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
c)
|
||||
config_path="$OPTARG"
|
||||
;;
|
||||
f)
|
||||
opt_f="y"
|
||||
;;
|
||||
\?)
|
||||
echo "Uknown option: $OPTARG"
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
h) usage ; exit 1 ;;
|
||||
c) config_path="$OPTARG" ;;
|
||||
f) opt_f=y ;;
|
||||
R) opt_R=y ;;
|
||||
\?) echo "Uknown option: $OPTARG" ; usage ; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ Options:
|
|||
-h Display this help
|
||||
-c <path> Custom config path. Default /etc/zpkg
|
||||
-f Force running when root
|
||||
-R Don't do self-update mitigation
|
||||
|
||||
Config (zpkg.conf):
|
||||
SSH_ADDRESS SSH access for deploy
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ delete_files()
|
|||
# $1 = package , $2 = prefix
|
||||
remove_package()
|
||||
{
|
||||
(
|
||||
cd "$PKG_PATH"
|
||||
archive="$(pwd)/$1.tar.$extension"
|
||||
if [ ! -f "$archive" ] || ! grep -q "^$1 " installed
|
||||
|
|
@ -26,4 +27,5 @@ remove_package()
|
|||
|
||||
$2 rm "$archive" 2>/dev/null
|
||||
$2 sed -i "/^$1 /d" installed
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ to_delete()
|
|||
# $1 = package , $2 = prefix
|
||||
upgrade_package()
|
||||
{
|
||||
[ "$1" = "$fname" ] && [ -z "$opt_R" ] && _self_update=y && return 0
|
||||
echo "Updating $1"
|
||||
tmpdir="/tmp/zpkg_$(random_string 5)"
|
||||
mkdir -p "$tmpdir"
|
||||
|
|
@ -36,3 +37,15 @@ upgrade_package()
|
|||
rm -rd "$tmpdir" 2>/dev/null
|
||||
return $ret
|
||||
}
|
||||
|
||||
## self upgrading mitigation
|
||||
|
||||
unset _self_update
|
||||
_tmpzpkg="/tmp/zpkg_bin_$(random_string 5)"
|
||||
gen_self_update()
|
||||
{
|
||||
# copy current file
|
||||
cp "$0" "$_tmpzpkg" || return $?
|
||||
# make new script self-delete
|
||||
echo 'rm -f "$0"' >> "$_tmpzpkg"
|
||||
}
|
||||
|
|
|
|||
13
src/view.sh
13
src/view.sh
|
|
@ -2,9 +2,11 @@
|
|||
|
||||
deps()
|
||||
{
|
||||
(
|
||||
cd "$PKG_PATH"
|
||||
l=$(grep "^$1 " pkglist) || return $?
|
||||
echo "$l" | cut -d' ' -f3-
|
||||
)
|
||||
}
|
||||
|
||||
# $1 = pkg file
|
||||
|
|
@ -15,6 +17,7 @@ desc() {
|
|||
resolve_packages()
|
||||
{
|
||||
RET=0
|
||||
(
|
||||
cd "$PKG_PATH"
|
||||
for I in $*
|
||||
do
|
||||
|
|
@ -27,6 +30,7 @@ resolve_packages()
|
|||
fi
|
||||
done
|
||||
return $RET
|
||||
)
|
||||
}
|
||||
|
||||
# env: INCLUDE_PACKAGES
|
||||
|
|
@ -45,9 +49,10 @@ resolve_deps()
|
|||
|
||||
is_installed()
|
||||
{
|
||||
(
|
||||
cd "$PKG_PATH"
|
||||
grep -q "^$1 " installed 2>/dev/null
|
||||
return $?
|
||||
)
|
||||
}
|
||||
|
||||
# $1 = file
|
||||
|
|
@ -58,11 +63,12 @@ view_package_file() {
|
|||
|
||||
# $1 = package name
|
||||
view_package() {
|
||||
cd "$PKG_PATH" && view_package_file "$1.tar.$extension"
|
||||
( cd "$PKG_PATH" && view_package_file "$1.tar.$extension" )
|
||||
}
|
||||
|
||||
removed_packages()
|
||||
{
|
||||
(
|
||||
cd "$PKG_PATH"
|
||||
cat installed 2>/dev/null | while read -r in
|
||||
do
|
||||
|
|
@ -70,10 +76,12 @@ removed_packages()
|
|||
rem=$(grep "^$name " pkglist | awk '{print $2}')
|
||||
[ -z "$rem" ] && echo $name
|
||||
done
|
||||
)
|
||||
}
|
||||
|
||||
outdated_packages()
|
||||
{
|
||||
(
|
||||
cd "$PKG_PATH"
|
||||
cat installed 2>/dev/null | while read -r in
|
||||
do
|
||||
|
|
@ -82,4 +90,5 @@ outdated_packages()
|
|||
rem=$(grep "^$name " pkglist | awk '{print $2}')
|
||||
[ -n "$rem" ] && [ "$loc" -lt "$rem" ] && echo $name
|
||||
done
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue