#!/bin/bash installLibrePortalImageWebUI() { isHeader "LibrePortal WebUI Image" isNotice "Building the LibrePortal WebUI Docker image..." # The copy below writes into the dockerinstall-owned containers root. On a # fresh install the general traversal/ownership reconcile runs LATER, so at # this point the system root is still 750 (untraversable by the container user) # and the containers root may still be manager-owned — the copy would fail. # Establish traversal + containers-root ownership FIRST. fixFolderPermissions local result; result=$(copyFolder "$install_containers_dir/libreportal" "$containers_dir" "$sudo_user_name") checkSuccess "Copy the LibrePortal to the containers folder" reconcileWebuiDirOwnership # copyFolder just restored the TEMPLATE docker-compose.yml, which carries raw # #LIBREPORTAL|TAG|VALUE placeholders. On a fresh install the following # dockerInstallApp (installLibrePortalAppWebUI) substitutes them; but on a # REBUILD/update (libreportal already installed — this also runs via the WebUI # deploy) nothing else does, leaving the at-rest compose unparseable by a plain # `docker compose` (e.g. "invalid boolean: HEALTHCHECK_DATA"). Re-apply the tag # processors here — the same self-heal up_app.sh uses — so the runtime compose # is always fully substituted at rest, not just when started via the CLI. if declare -F dockerConfigSetupFileWithData >/dev/null 2>&1 \ && [[ "$(dockerCheckAppInstalled libreportal docker)" != "not_installed" ]]; then initializeAppVariables libreportal >/dev/null 2>&1 || true dockerConfigSetupFileWithData libreportal >/dev/null 2>&1 || true checkSuccess "Re-applied LibrePortal WebUI compose tag substitutions" fi isNotice "Building libreportal-service image, this may take a while..." local result; result=$(runFileOp docker build -t libreportal-service -f $containers_dir/libreportal/Dockerfile $containers_dir/libreportal >/dev/null 2>&1) checkSuccess "Built LibrePortal WebUI Docker image" }