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:
Henrik Grimler 2020-01-05 15:00:15 +01:00
parent 3ce6ec6953
commit ab2a3b70f0
4 changed files with 43 additions and 0 deletions

View File

@ -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

View File

@ -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
}

View File

@ -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

View File

@ -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