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
|
+-- DEPS
|
||||||
+-- DESC
|
+-- DESC
|
||||||
|
+-- HOOKS
|
||||||
|
| +-- pre_install
|
||||||
|
| +-- ...
|
||||||
+-- ROOT
|
+-- ROOT
|
||||||
| +-- /
|
| +-- /
|
||||||
+-- HOME
|
+-- 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 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 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 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
|
### Deploying packages
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ package()
|
||||||
pkg="$2"
|
pkg="$2"
|
||||||
|
|
||||||
unset tmpdir
|
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
|
then
|
||||||
tmpdir="$TMPDIR/zpkg_$(random_string 5)"
|
tmpdir="$TMPDIR/zpkg_$(random_string 5)"
|
||||||
mkdir -p "$tmpdir"
|
mkdir -p "$tmpdir"
|
||||||
|
|
@ -22,6 +22,7 @@ package()
|
||||||
[ -f DESC ] && list="$list DESC"
|
[ -f DESC ] && list="$list DESC"
|
||||||
[ -d HOME ] && list="$list HOME"
|
[ -d HOME ] && list="$list HOME"
|
||||||
[ -d ROOT ] && list="$list ROOT"
|
[ -d ROOT ] && list="$list ROOT"
|
||||||
|
[ -d HOOKS ] && list="$list HOOKS"
|
||||||
size=$(du -sb $list | awk '{print $1}' | paste -sd+ | bc)
|
size=$(du -sb $list | awk '{print $1}' | paste -sd+ | bc)
|
||||||
echo "Packaging $(basename "$pkg"): $(echo "$size" | numfmt --to=iec-i)B"
|
echo "Packaging $(basename "$pkg"): $(echo "$size" | numfmt --to=iec-i)B"
|
||||||
cc=$compress
|
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
|
#!/bin/sh
|
||||||
|
|
||||||
# $1 = file , $2 = prefix
|
# $1 = file , $2 = prefix , $3 = target to extract
|
||||||
unpack()
|
unpack()
|
||||||
{
|
{
|
||||||
echo "Unpacking $1"
|
echo "Unpacking $1"
|
||||||
$pcompress -dc < "$1" 2>/dev/null | tar -xf -
|
$pcompress -dc < "$1" 2>/dev/null | tar -xf - $3
|
||||||
}
|
}
|
||||||
|
|
||||||
# $1 = package , $2 = prefix
|
# $1 = package , $2 = prefix
|
||||||
|
|
@ -43,13 +43,15 @@ install_package()
|
||||||
(
|
(
|
||||||
umask a+rx
|
umask a+rx
|
||||||
unpack "$1.tar.$extension" $2 || return $?
|
unpack "$1.tar.$extension" $2 || return $?
|
||||||
|
hook install pre $2
|
||||||
[ -d "ROOT" ] || return 0
|
[ -d "ROOT" ] || return 0
|
||||||
copy_files ROOT "$ROOT_PATH/" $2 2>/dev/null || return $?
|
copy_files ROOT "$ROOT_PATH/" $2 2>/dev/null || return $?
|
||||||
) || return $?
|
) || return $?
|
||||||
copy_files HOME "$HOME" 2>/dev/null
|
copy_files HOME "$HOME" 2>/dev/null
|
||||||
add_package_entry "$1" $2
|
add_package_entry "$1" $2
|
||||||
|
hook install post $2
|
||||||
)
|
)
|
||||||
ret=$?
|
ret=$?
|
||||||
rm -r "$tmpdir" 2>/dev/null
|
rm -rf "$tmpdir" 2>/dev/null
|
||||||
return $ret
|
return $ret
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,21 +11,31 @@ delete_files()
|
||||||
# $1 = package , $2 = prefix
|
# $1 = package , $2 = prefix
|
||||||
remove_package()
|
remove_package()
|
||||||
{
|
{
|
||||||
(
|
archive="$PKG_PATH/$1.tar.$extension"
|
||||||
cd "$PKG_PATH"
|
if [ ! -f "$archive" ] || ! grep -q "^$1 " "$PKG_PATH/installed"
|
||||||
archive="$(pwd)/$1.tar.$extension"
|
|
||||||
if [ ! -f "$archive" ] || ! grep -q "^$1 " installed
|
|
||||||
then
|
then
|
||||||
echo "Package '$1' not installed" >&2
|
echo "Package '$1' not installed" >&2
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
echo "Removing $1"
|
|
||||||
|
|
||||||
list=$(cat "$archive" | $pcompress -dc 2>/dev/null | tar -tf - 2>/dev/null)
|
tmpdir="$TMPDIR/zpkg_$(random_string 5)"
|
||||||
echo "$list" | grep "^ROOT/" | sed 's|^ROOT/||g' | tac | delete_files "$ROOT_PATH/" $2
|
mkdir -p "$tmpdir"
|
||||||
echo "$list" | grep "^HOME/" | sed 's|^HOME/||g' | tac | delete_files "$HOME"
|
(
|
||||||
|
cd "$tmpdir" || exit $?
|
||||||
|
echo "Removing $1"
|
||||||
|
|
||||||
$2 rm "$archive" 2>/dev/null
|
unpack "$archive" $2 HOOKS >/dev/null 2>&1 || true
|
||||||
$2 sed -i "/^$1 /d" installed
|
|
||||||
|
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; }
|
fetch_package "$1" || { echo "Package '$1' not found" >&2 && return 1; }
|
||||||
unpack "$1.tar.$extension" || return $?
|
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)
|
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 "^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"
|
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 cp "$1.tar.$extension" "$PKG_PATH"
|
||||||
$2 chmod a+r "$PKG_PATH/$1.tar.$extension"
|
$2 chmod a+r "$PKG_PATH/$1.tar.$extension"
|
||||||
add_package_entry "$1" $2
|
add_package_entry "$1" $2
|
||||||
|
|
||||||
|
hook upgrade post $2
|
||||||
)
|
)
|
||||||
ret=$?
|
ret=$?
|
||||||
rm -r "$tmpdir" 2>/dev/null
|
rm -rf "$tmpdir" 2>/dev/null
|
||||||
return $ret
|
return $ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue