feat: add hooks
This commit is contained in:
parent
b789f89d12
commit
fd2f0a989a
6 changed files with 68 additions and 15 deletions
20
README.md
20
README.md
|
|
@ -67,6 +67,9 @@ You need to be able to SSH to the zpkg user, SSH keys are recommended
|
|||
.
|
||||
+-- DEPS
|
||||
+-- DESC
|
||||
+-- HOOKS
|
||||
| +-- pre_install
|
||||
| +-- ...
|
||||
+-- ROOT
|
||||
| +-- /
|
||||
+-- HOME
|
||||
|
|
@ -76,6 +79,23 @@ You need to be able to SSH to the zpkg user, SSH keys are recommended
|
|||
- The HOME directory represents the home directory of the user
|
||||
- The DEPS file contains dependency packages separated by spaces or newlines. Dependencies are package names from the repository
|
||||
- The DESC file contains the description of the package
|
||||
- The HOOKS directory contains hooks to run on certain operations.
|
||||
|
||||
#### Hooks
|
||||
|
||||
Hooks are executable files that are run at some points during processing. <br>
|
||||
Files are named `ORDER_OPERATION` or `ORDER_OPERATION_user`, for example: `pre_install`, `post_upgrade_user`. <br>
|
||||
The `_user` file is executed as user while original is executed as root.
|
||||
|
||||
Supported hooks:
|
||||
- pre_install
|
||||
- post_install
|
||||
- pre_upgrade
|
||||
- post_upgrade
|
||||
- pre_remove
|
||||
- post_remove
|
||||
|
||||
> Suffix with `_user` to run as user
|
||||
|
||||
### Deploying packages
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ package()
|
|||
pkg="$2"
|
||||
|
||||
unset tmpdir
|
||||
if [ ! -d "$src/ROOT" ] && [ ! -d "$src/HOME" ] && [ ! -f "$src/DEPS" ] && [ ! -f "$src/DESC" ]
|
||||
if [ ! -d "$src/ROOT" ] && [ ! -d "$src/HOME" ] && [ ! -f "$src/DEPS" ] && [ ! -f "$src/DESC" ] && [ ! -d "$src/HOOKS" ]
|
||||
then
|
||||
tmpdir="$TMPDIR/zpkg_$(random_string 5)"
|
||||
mkdir -p "$tmpdir"
|
||||
|
|
@ -22,6 +22,7 @@ package()
|
|||
[ -f DESC ] && list="$list DESC"
|
||||
[ -d HOME ] && list="$list HOME"
|
||||
[ -d ROOT ] && list="$list ROOT"
|
||||
[ -d HOOKS ] && list="$list HOOKS"
|
||||
size=$(du -sb $list | awk '{print $1}' | paste -sd+ | bc)
|
||||
echo "Packaging $(basename "$pkg"): $(echo "$size" | numfmt --to=iec-i)B"
|
||||
cc=$compress
|
||||
|
|
|
|||
16
src/hooks.sh
Normal file
16
src/hooks.sh
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
|
||||
# $1 = op , $2 = pre/post , $3 = sudo prefix
|
||||
hook() {
|
||||
(
|
||||
set -e
|
||||
cd HOOKS 2>/dev/null || return 0
|
||||
file=${2}_${1}
|
||||
if [ -x "$file" ] ; then
|
||||
$3 "./$file"
|
||||
fi
|
||||
if [ -x "${file}_user" ] ; then
|
||||
"./${file}_user"
|
||||
fi
|
||||
)
|
||||
}
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
# $1 = file , $2 = prefix
|
||||
# $1 = file , $2 = prefix , $3 = target to extract
|
||||
unpack()
|
||||
{
|
||||
echo "Unpacking $1"
|
||||
$pcompress -dc < "$1" 2>/dev/null | tar -xf -
|
||||
$pcompress -dc < "$1" 2>/dev/null | tar -xf - $3
|
||||
}
|
||||
|
||||
# $1 = package , $2 = prefix
|
||||
|
|
@ -43,13 +43,15 @@ install_package()
|
|||
(
|
||||
umask a+rx
|
||||
unpack "$1.tar.$extension" $2 || return $?
|
||||
hook install pre $2
|
||||
[ -d "ROOT" ] || return 0
|
||||
copy_files ROOT "$ROOT_PATH/" $2 2>/dev/null || return $?
|
||||
) || return $?
|
||||
copy_files HOME "$HOME" 2>/dev/null
|
||||
add_package_entry "$1" $2
|
||||
hook install post $2
|
||||
)
|
||||
ret=$?
|
||||
rm -r "$tmpdir" 2>/dev/null
|
||||
rm -rf "$tmpdir" 2>/dev/null
|
||||
return $ret
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,21 +11,31 @@ delete_files()
|
|||
# $1 = package , $2 = prefix
|
||||
remove_package()
|
||||
{
|
||||
(
|
||||
cd "$PKG_PATH"
|
||||
archive="$(pwd)/$1.tar.$extension"
|
||||
if [ ! -f "$archive" ] || ! grep -q "^$1 " installed
|
||||
archive="$PKG_PATH/$1.tar.$extension"
|
||||
if [ ! -f "$archive" ] || ! grep -q "^$1 " "$PKG_PATH/installed"
|
||||
then
|
||||
echo "Package '$1' not installed" >&2
|
||||
return 1
|
||||
fi
|
||||
echo "Removing $1"
|
||||
|
||||
list=$(cat "$archive" | $pcompress -dc 2>/dev/null | tar -tf - 2>/dev/null)
|
||||
echo "$list" | grep "^ROOT/" | sed 's|^ROOT/||g' | tac | delete_files "$ROOT_PATH/" $2
|
||||
echo "$list" | grep "^HOME/" | sed 's|^HOME/||g' | tac | delete_files "$HOME"
|
||||
tmpdir="$TMPDIR/zpkg_$(random_string 5)"
|
||||
mkdir -p "$tmpdir"
|
||||
(
|
||||
cd "$tmpdir" || exit $?
|
||||
echo "Removing $1"
|
||||
|
||||
$2 rm "$archive" 2>/dev/null
|
||||
$2 sed -i "/^$1 /d" installed
|
||||
unpack "$archive" $2 HOOKS >/dev/null 2>&1 || true
|
||||
|
||||
hook remove pre $2
|
||||
list=$(cat "$archive" | $pcompress -dc 2>/dev/null | tar -tf - 2>/dev/null)
|
||||
echo "$list" | grep "^ROOT/" | sed 's|^ROOT/||g' | tac | delete_files "$ROOT_PATH/" $2
|
||||
echo "$list" | grep "^HOME/" | sed 's|^HOME/||g' | tac | delete_files "$HOME"
|
||||
|
||||
$2 rm "$archive" 2>/dev/null
|
||||
$2 sed -i "/^$1 /d" "$PKG_PATH/installed"
|
||||
|
||||
hook remove post $2
|
||||
)
|
||||
ret=$?
|
||||
rm -rf "$tmpdir" 2>/dev/null
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@ upgrade_package()
|
|||
fetch_package "$1" || { echo "Package '$1' not found" >&2 && return 1; }
|
||||
unpack "$1.tar.$extension" || return $?
|
||||
|
||||
hook upgrade pre $2
|
||||
|
||||
oldlist=$(cat "$PKG_PATH/$1.tar.$extension" | $pcompress -dc 2>/dev/null | tar -tf - 2>/dev/null | sort)
|
||||
echo "$oldlist" | grep "^ROOT/" | to_delete - ROOT | sed 's|^ROOT/||g' | tac | delete_files "$ROOT_PATH/" $2
|
||||
echo "$oldlist" | grep "^HOME/" | to_delete - HOME | sed 's|^HOME/||g' | tac | delete_files "$HOME"
|
||||
|
|
@ -33,9 +35,11 @@ upgrade_package()
|
|||
$2 cp "$1.tar.$extension" "$PKG_PATH"
|
||||
$2 chmod a+r "$PKG_PATH/$1.tar.$extension"
|
||||
add_package_entry "$1" $2
|
||||
|
||||
hook upgrade post $2
|
||||
)
|
||||
ret=$?
|
||||
rm -r "$tmpdir" 2>/dev/null
|
||||
rm -rf "$tmpdir" 2>/dev/null
|
||||
return $ret
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue