build-package.sh: add TERMUX_PKG_SERVICE_SCRIPT var and build script
termux_step_install_service_scripts is run after termux_step_post_make_install and loops over the new array TERMUX_PKG_SERVICE_SCRIPT to add service scripts for termux-services. The service scripts are usually only a one-liner so we might just as well define it in a variable like TERMUX_PKG_SERVICE_SCRIPT. TERMUX_PKG_SERVICE_SCRIPT should be an array on the format ("daemon-name" 'script to execute' "another daemon" 'multi\n line\n script'), i.e. it should be of even length with name + script where the script part preferably is within single quotes (to avoid accidental expansion of for example $HOME).
This commit is contained in:
parent
3ce6ec6953
commit
ab2a3b70f0
|
@ -159,6 +159,10 @@ termux_step_post_make_install() {
|
|||
return
|
||||
}
|
||||
|
||||
# Add service scripts from array TERMUX_PKG_SERVICE_SCRIPT, if it is set
|
||||
# shellcheck source=scripts/build/termux_step_install_service_scripts.sh
|
||||
source "$TERMUX_SCRIPTDIR/scripts/build/termux_step_install_service_scripts.sh"
|
||||
|
||||
# Link/copy the LICENSE for the package to $TERMUX_PREFIX/share/$TERMUX_PKG_NAME/
|
||||
# shellcheck source=scripts/build/termux_step_install_license.sh
|
||||
source "$TERMUX_SCRIPTDIR/scripts/build/termux_step_install_license.sh"
|
||||
|
@ -322,6 +326,7 @@ while (($# > 0)); do
|
|||
termux_step_make_install
|
||||
cd "$TERMUX_PKG_BUILDDIR"
|
||||
termux_step_post_make_install
|
||||
termux_step_install_service_scripts
|
||||
termux_step_install_license
|
||||
cd "$TERMUX_PKG_MASSAGEDIR"
|
||||
termux_step_extract_into_massagedir
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
termux_step_install_service_scripts() {
|
||||
array_length=${#TERMUX_PKG_SERVICE_SCRIPT[@]}
|
||||
if [ $array_length -eq 0 ]; then return; fi
|
||||
|
||||
# TERMUX_PKG_SERVICE_SCRIPT should have the structure =("daemon name" 'script to execute')
|
||||
if [ $(( $array_length & 1 )) -eq 1 ]; then
|
||||
termux_error_exit "TERMUX_PKG_SERVICE_SCRIPT has to be an array of even length"
|
||||
fi
|
||||
|
||||
mkdir -p $TERMUX_PREFIX/var/service
|
||||
cd $TERMUX_PREFIX/var/service
|
||||
for ((i=0; i<${array_length}; i+=2)); do
|
||||
mkdir -p ${TERMUX_PKG_SERVICE_SCRIPT[$i]}/log
|
||||
echo "#!$TERMUX_PREFIX/bin/sh" > ${TERMUX_PKG_SERVICE_SCRIPT[$i]}/run
|
||||
echo -e ${TERMUX_PKG_SERVICE_SCRIPT[$((i + 1))]} >> ${TERMUX_PKG_SERVICE_SCRIPT[$i]}/run
|
||||
|
||||
TERMUX_PKG_CONFFILES+="
|
||||
var/service/${TERMUX_PKG_SERVICE_SCRIPT[$i]}/run
|
||||
var/service/${TERMUX_PKG_SERVICE_SCRIPT[$i]}/log/run
|
||||
"
|
||||
|
||||
chmod +x ${TERMUX_PKG_SERVICE_SCRIPT[$i]}/run
|
||||
touch ${TERMUX_PKG_SERVICE_SCRIPT[$i]}/down
|
||||
ln -sf $TERMUX_PREFIX/share/termux-services/svlogger ${TERMUX_PKG_SERVICE_SCRIPT[$i]}/log/run
|
||||
done
|
||||
}
|
|
@ -125,6 +125,7 @@ termux_step_setup_variables() {
|
|||
TERMUX_PKG_SUGGESTS=""
|
||||
TERMUX_PKG_REPLACES=""
|
||||
TERMUX_PKG_PROVIDES="" #https://www.debian.org/doc/debian-policy/#virtual-packages-provides
|
||||
TERMUX_PKG_SERVICE_SCRIPT=() # Fill with entries like: ("daemon name" 'script to execute'). Script is echoed with -e so can contain \n for multiple lines
|
||||
TERMUX_PKG_CONFFILES=""
|
||||
# Set if a host build should be done in TERMUX_PKG_HOSTBUILD_DIR:
|
||||
TERMUX_PKG_HOSTBUILD=false
|
||||
|
|
|
@ -378,6 +378,17 @@ lint_package() {
|
|||
unset file_path_ok
|
||||
fi
|
||||
|
||||
if [ -n "$TERMUX_PKG_SERVICE_SCRIPT" ]; then
|
||||
echo -n "TERMUX_PKG_SERVICE_SCRIPT: "
|
||||
array_length=${#TERMUX_PKG_SERVICE_SCRIPT[@]}
|
||||
if [ $(( $array_length & 1 )) -eq 1 ]; then
|
||||
echo "INVALID (TERMUX_PKG_SERVICE_SCRIPT has to be an array of even length)"
|
||||
pkg_lint_error=true
|
||||
else
|
||||
echo "PASS"
|
||||
fi
|
||||
fi
|
||||
|
||||
if $pkg_lint_error; then
|
||||
exit 1
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue