From b42f558e81ed7b4d945fd659ef6b0c8b9af15be6 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Sat, 12 Oct 2024 08:53:13 +0400 Subject: [PATCH] support lancement dans container --- support/template-_wrapper.sh | 101 +++++++++++++++++++++++++++++------ 1 file changed, 84 insertions(+), 17 deletions(-) diff --git a/support/template-_wrapper.sh b/support/template-_wrapper.sh index 2139dd4..23170f3 100644 --- a/support/template-_wrapper.sh +++ b/support/template-_wrapper.sh @@ -15,39 +15,106 @@ LAUNCHERPATH=.launcher.php # Chemin relatif des scripts PHP wrappés WRAPPEDPATH= +# Nom du service dans docker-compose.yml +COMPOSE_SERVICE=web + +# Montages dans docker-compose.yml +# les répertoires relatifs le sont par rapport au répertoire du projet +COMPOSE_MOUNTS=( + devel:/data/php74-template + .:/var/www/app +) + ############################################################################### + +case "${RUNPHP_MODE:-auto}" in +auto) + RUNPHP_MODE=host + if [ -f /.dockerenv ]; then + RUNPHP_MODE=docker + elif [ -f /proc/1/cgroup ]; then + grep -q ':/docker/' /proc/1/cgroup && RUNPHP_MODE=docker + elif [ -f /proc/self/mountinfo ]; then + grep -q ' /docker/' /proc/self/mountinfo && RUNPHP_MODE=docker + fi + ;; +docker) RUNPHP_MODE=docker;; +host) RUNPHP_MODE=host;; +direct) RUNPHP_MODE=direct;; +*) RUNPHP_MODE=host;; +esac + MYDIR="$(dirname -- "$0")" MYNAME="$(basename -- "$0")" - if [ ! -L "$0" ]; then echo "\ $0 Ce script doit être lancé en tant que lien symbolique avec un nom de la forme 'monscript.php' et lance le script PHP du même nom situé dans le même répertoire -avec l'utilisateur www-data +avec l'utilisateur www-data" + if [ "$RUNPHP_MODE" == host ]; then + echo "\ +---------------------------------------- Vérification des liens..." - cd "$MYDIR" - for i in *.php*; do - [ -f "$i" ] || continue - name="bin/${i%.*}.php" - dest="../_cli/_wrapper.sh" - link="../bin/${i%.*}.php" - if [ -L "$link" ]; then - echo "* $name OK" - elif [ -e "$link" ]; then - echo "* $name KO (not a link)" - else - echo "* $name NEW" - ln -s "$dest" "$link" || exit 1 - fi - done + cd "$MYDIR" + for i in *.php*; do + [ -f "$i" ] || continue + name="bin/${i%.*}.php" + dest="../_cli/_wrapper.sh" + link="../bin/${i%.*}.php" + if [ -L "$link" ]; then + echo "* $name OK" + elif [ -e "$link" ]; then + echo "* $name KO (not a link)" + else + echo "* $name NEW" + ln -s "$dest" "$link" || exit 1 + fi + done + fi exit 0 fi MYTRUESELF="$(readlink -f "$0")" MYTRUEDIR="$(dirname -- "$MYTRUESELF")" PROJDIR="$(cd "$MYTRUEDIR${PROJPATH:+/$PROJPATH}"; pwd)" + +if [ "$RUNPHP_MODE" == host ]; then + cwd="$(pwd)" + found= + workdir= + for mounts in "${COMPOSE_MOUNTS[@]}"; do + hdir="${mounts%%:*}" + ddir="${mounts#*:}" + hdir="$(cd "$PROJDIR/$hdir"; pwd)" + if [ "$cwd" == "$hdir" ]; then + found=1 + workdir="$ddir" + break + elif [ "${cwd#$hdir/}" != "$cwd" ]; then + found=1 + workdir="$ddir/${cwd#$hdir/}" + break + fi + done + if [ -z "$found" ]; then + echo "Impossible de mapper le répertoire courant avec les montages du container" + exit 1 + fi + args=( + docker compose run + ${RUNPHP_BUILD:+--build} + --rm + --workdir "$workdir" + "$COMPOSE_SERVICE" + exec "$MYNAME" + "$@" + ) + cd "$PROJDIR" + exec "${args[@]}" +fi + launcher="$MYTRUEDIR/$LAUNCHERPATH" class="$MYTRUEDIR${WRAPPEDPATH:+/$WRAPPEDPATH}/${MYNAME%.php}.phpc" script="$MYTRUEDIR${WRAPPEDPATH:+/$WRAPPEDPATH}/${MYNAME%.php}.php"