# TODO Faire une copie de ce script dans un répertoire de l'application web # (dans le répertoire _cli/ par défaut) et modifier les paramétres si nécessaire #------------------------------------------------------------------------------- #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # S'assurer que le script PHP est lancé avec l'utilisateur www-data # Tous les chemins suivants sont relatifs au répertoire qui contient ce script # Chemin relatif de la racine du projet PROJPATH=.. # Chemin relatif vers le lanceur PHP LAUNCHERPATH=.launcher.php # Chemin relatif des scripts PHP wrappés WRAPPEDPATH= # Nom du service dans docker-compose.yml utilisé pour lancer les commandes COMPOSE_SERVICE=web ############################################################################### case "${RUNPHP_MODE:-auto}" in auto) RUNPHP_MODE= [ -f /.dockerenv ] && RUNPHP_MODE=docker [ -z "$RUNPHP_MODE" ] && [ -f /proc/self/mountinfo ] && grep -q ' /docker/' /proc/self/mountinfo && RUNPHP_MODE=docker [ -z "$RUNPHP_MODE" ] && [ -f /proc/1/cgroup ] && grep -q ':/docker/' /proc/1/cgroup && RUNPHP_MODE=docker [ -n "$RUNPHP_MODE" ] || RUNPHP_MODE=host ;; 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" if [ "$RUNPHP_MODE" == host -o "$RUNPHP_MODE" == direct ]; 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 fi exit 0 fi MYTRUESELF="$(readlink -f "$0")" MYTRUEDIR="$(dirname -- "$MYTRUESELF")" PROJDIR="$(cd "$MYTRUEDIR${PROJPATH:+/$PROJPATH}"; pwd)" if [ "$RUNPHP_MODE" == host ]; then args=( docker compose run ${RUNPHP_BUILD:+--build} --rm ) cwd="$(pwd)" mounted= if [ "$PROJDIR" == "$HOME" -o "${PROJDIR#$HOME/}" != "$PROJDIR" ]; then # monter HOME args+=(-v "$HOME:$HOME") [ "${cwd#$HOME/}" != "$cwd" ] && mounted=1 else # monter uniquement le répertoire du projet args+=(-v "$PROJDIR:$PROJDIR") [ "${cwd#$PROJDIR/}" != "$cwd" ] && mounted=1 fi if [ -z "$mounted" ]; then echo "Impossible de mapper le répertoire courant avec les montages du container" exit 1 fi args+=( --workdir "$cwd" "$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" [ -f /g/init.env ] && source /g/init.env www_data="${DEVUSER_USERENT%%:*}" [ -n "$www_data" ] || www_data=www-data cmd=(php "$launcher") [ -n "$MEMPROF_PROFILE" ] && cmd+=(-dextension=memprof.so) if [ -f "$class" ]; then cmd+=("$(<"$class")") else cmd+=("$script") fi cmd+=("$@") if [ "$(id -u)" -eq 0 ]; then su-exec "$www_data" "${cmd[@]}" else exec "${cmd[@]}" fi