From bab49856460612dad2dbc72d2547d307bab310db Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Tue, 5 Nov 2019 13:03:13 +0100 Subject: [slx-addon] auto ldconfig post addon --- builder/modules.d/slx-addons/module-setup.sh | 2 + .../modules.d/slx-addons/scripts/setup-addons.sh | 52 +++++++++++++++------- .../services/post-addon-ldconfig.service | 7 +++ 3 files changed, 45 insertions(+), 16 deletions(-) create mode 100644 builder/modules.d/slx-addons/services/post-addon-ldconfig.service diff --git a/builder/modules.d/slx-addons/module-setup.sh b/builder/modules.d/slx-addons/module-setup.sh index 296b3fe4..52278731 100755 --- a/builder/modules.d/slx-addons/module-setup.sh +++ b/builder/modules.d/slx-addons/module-setup.sh @@ -9,4 +9,6 @@ depends() { } install() { inst_hook pre-pivot 30 "$moddir/scripts/setup-addons.sh" + inst "${moddir}/services/post-addon-ldconfig.service" \ + "/opt/openslx/services/post-addon-ldconfig.service" } diff --git a/builder/modules.d/slx-addons/scripts/setup-addons.sh b/builder/modules.d/slx-addons/scripts/setup-addons.sh index 09ec9885..5d4e106f 100644 --- a/builder/modules.d/slx-addons/scripts/setup-addons.sh +++ b/builder/modules.d/slx-addons/scripts/setup-addons.sh @@ -33,23 +33,27 @@ if [ ! -d "$NEWROOT/opt/openslx/addons" ]; then return 0 fi -setup_addons() { - local ADDONS_DIR="$NEWROOT/opt/openslx/addons/" - cd "$ADDONS_DIR" || return 1 - for ADDON in *; do - if ! setup_addon "$ADDON"; then - info "Failed to setup $ADDON" - fi - done +# This just activates the ldconfig service to run during the sysinit target +# Since addons are likely to install libs, this is necessary to garantee +# that the live system "sees" the libraries. +prepare_ldconfig() { + local service_path="/opt/openslx/services/post-addon-ldconfig.service" + [ -e "$service_path" ] || return 1 + local target_dir="${NEWROOT}/etc/systemd/system/sysinit.target.wants" + mkdir -p "$target_dir" + cp -f "$service_path" "${NEWROOT}/etc/systemd/system/${service_path##*/}" + ln -sf "../${service_path##*/}" "${target_dir}/${service_path##*/}" } setup_addon() { - [ -z "$1" -o ! -d "$ADDONS_DIR/$1" ] && return 1 - local ADDON="$1" - cd "$ADDONS_DIR/$ADDON" || return 1 - + if [ -d "$1" ]; then + warn "Given '$1' not a directory, skipping." + return 1 + fi + local addon_dir="$1" + cd "$addon_dir" if ! bash addon-required 2>&1 ; then - info "'$ADDONS_DIR/$ADDON/addon-required' missing or returned non-zero, skipping..." + info "'$addon_dir/addon-required' missing or returned non-zero, skipping..." return 1 fi # purge addon-* files @@ -69,8 +73,24 @@ setup_addon() { rm -f "${NEWROOT}/${line}" done < "$WHITEOUT" done + + cd - &>/dev/null +} + +for addon in "${NEWROOT}/opt/openslx/addons/"*; do + if setup_addon "$addon"; then + info "Activated '$addon' (@ $(date +%s))" + prepare_ldconfig + fi +done + +setup_addons() { + local ADDONS_DIR="$NEWROOT/opt/openslx/addons/" + cd "$ADDONS_DIR" || return 1 + for ADDON in *; do + if ! setup_addon "$ADDON"; then + info "Failed to setup $ADDON" + fi + done } -if ! setup_addons; then - warn "Failed to fully setup some addons! They will likely malfunction..." -fi diff --git a/builder/modules.d/slx-addons/services/post-addon-ldconfig.service b/builder/modules.d/slx-addons/services/post-addon-ldconfig.service new file mode 100644 index 00000000..a303f244 --- /dev/null +++ b/builder/modules.d/slx-addons/services/post-addon-ldconfig.service @@ -0,0 +1,7 @@ +[Unit] +Description=Run ldconfig post-addon +Before=graphical.target + +[Service] +Type=oneshot +ExecStart=ldconfig -- cgit v1.2.3-55-g7522