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