pthbs

Packaging Through Hashed Build Scripts
git clone https://ccx.te2000.cz/git/pthbs
Log | Files | Refs | Submodules | README

pthbs-enter-gen (2925B)


      1 #!/bin/sh -e
      2 
      3 if test $# != 1; then
      4 	printf >2 'usage: %s\n' "pthbs-enter-gen /path/to/env.hash"
      5 	printf >2 'Error: expected 1 argument, got%s\n' "$#"
      6 	exit 2
      7 fi
      8 envtop=$1
      9 envdir=$envtop/env
     10 envcommand=$envtop/command
     11 
     12 case $(basename "$envtop") in
     13 	(env.*) ;;
     14 	(*)
     15 		printf >&2 "Error: '%s' doesn't look like environment path!\n" "$envtop"
     16 		exit 1;;
     17 esac
     18 
     19 mkdir -p "$envdir"
     20 
     21 if ! test -d "$envcommand"; then
     22 	printf >&2 "Error: '%s' doesn't exist!\n" "$envcommand"
     23 fi
     24 printf '%s\n' "$envcommand" >"$envdir/PATH"
     25 
     26 
     27 if test -d "$envtop/.env-template"; then
     28 	for f in "$envtop/.env-template"/*; do
     29 		if ! test -f "$f"; then
     30 			case "$f" in
     31 				($envtop/.env-template/\*) continue;;
     32 			esac
     33 			printf >2 'Error: expected plain file while generating env: %s\n' "$f"
     34 			exit 1
     35 		fi
     36 		sed "s|@ENVROOT@|$envtop|g" <"$f" >"$envdir/${f##*/}"
     37 	done
     38 fi
     39 
     40 mkscript() {
     41 	exe=$envcommand/$1
     42 	cat >"$exe.new" 
     43 	chmod +x "$exe.new"
     44 	mv "$exe.new" "$exe"
     45 }
     46 
     47 exe=$envcommand/pthbs-enter
     48 if test -x "$envcommand/execlineb" && test -x "$envcommand/s6-envdir"; then
     49 	mkscript pthbs-enter <<EOF
     50 #!$envcommand/execlineb -S0
     51 "$envcommand/s6-envdir" "$envdir" "$envcommand/exec" \$@
     52 EOF
     53 	"$envcommand/pthbs-enter" true  # TODO: don't run executables without sandbox
     54 	mkscript pthbs-enter-execlineb <<EOF
     55 #!$envcommand/execlineb -S0
     56 "$envcommand/s6-envdir" "$envdir" "$envcommand/execlineb" \$@
     57 EOF
     58 	if test -x "$envcommand/sh"; then
     59 		mkscript pthbs-enter-sh <<EOF
     60 #!$envcommand/execlineb -S0
     61 "$envcommand/s6-envdir" "$envdir" "$envcommand/sh" \$@
     62 EOF
     63 	fi
     64 elif test -x "$envcommand/sh" && test -x "$envcommand/envdir"; then
     65 	mkscript pthbs-enter <<EOF
     66 #!$envcommand/sh
     67 exec "$envcommand/envdir" "$envdir" "$envcommand/env" -- "\$@"
     68 EOF
     69 	"$envcommand/pthbs-enter" true  # TODO: don't run executables without sandbox
     70 	mkscript pthbs-enter-sh <<EOF
     71 #!$envcommand/sh
     72 exec "$envcommand/envdir" "$envdir" "$envcommand/sh" "\$@"
     73 EOF
     74 fi
     75 
     76 if test -x "$envcommand/install-as-current-environment.postinstall"; then
     77 	mkscript install-as-current-environment <<EOF
     78 #!$envcommand/execlineb -P
     79 "$envcommand/s6-envdir" "$envdir" "$envcommand/exec"
     80 ifelse -n { test -L /run/current } {
     81 	if { ln -s -f -v "$envtop" /run/current }
     82 	"$envcommand/install-as-current-environment.postinstall"
     83 }
     84 foreground {
     85 	fdmove -c 1 2
     86 	printf "* Swapping /run/current from %s to " "$envtop"
     87 	readlink /run/command
     88 }
     89 getpid NS_PID
     90 importas -i NS_PID NS_PID
     91 if { mv -v /run/current /run/previous.\${NS_PID} }
     92 if { ln -s -f -v "$envtop" /run/current }
     93 ifelse {
     94 	"$envcommand/install-as-current-environment.postinstall" /run/previous.\${NS_PID}
     95 } { }
     96 foreground {
     97 	fdmove -c 1 2
     98 	printf "* %s returned error, reverting to " "$envcommand/install-as-current-environment.postinstall"
     99 	readlink /run/previous.\${NS_PID}
    100 }
    101 if { rm -v /run/current }
    102 if { mv -v /run/previous.\${NS_PID} /run/current }
    103 #foreground { /run/current/command/install-as-current-environment.postinstall }
    104 exit 1
    105 EOF
    106 fi