132 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| # TODO Faire une copie de ce script dans un répertoire de l'application web
 | |
| # (dans le répertoire cli/config/ 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=@@CLI2PROJ@@
 | |
| 
 | |
| # 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 "$0"
 | |
|         "$@"
 | |
|     )
 | |
|     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
 |