From b21d2bb616a2b0ecd641707a783b84903d97ce36 Mon Sep 17 00:00:00 2001 From: Christian Rößler Date: Wed, 25 Jul 2018 16:08:45 +0200 Subject: [run-virt] linux scripts extended (minimised, user etc). TO BE TESTED! --- .../vmchooser/data/linux/includes/00_vars.inc | 5 ++ .../vmchooser/data/linux/includes/10_functions.inc | 31 +++++++++ .../vmchooser/data/linux/includes/20_get_creds.inc | 2 +- .../data/linux/includes/30_mount_shares.inc | 50 ++++++++++++++ .../data/linux/includes/60_resolution.inc | 77 ++++++++++++++++++++++ .../vmchooser/data/linux/includes/90_runscript.inc | 69 +++++++++++++++---- .../opt/openslx/vmchooser/data/linux/mnt_shares | 9 +-- .../data/opt/openslx/vmchooser/data/linux/openslx | 38 +++++++++++ .../opt/openslx/vmchooser/data/linux/resolution | 25 ++----- .../opt/openslx/vmchooser/data/linux/vm_installer | 60 +++++++---------- 10 files changed, 288 insertions(+), 78 deletions(-) create mode 100644 core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/60_resolution.inc create mode 100755 core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/openslx (limited to 'core/modules/run-virt/data/opt/openslx') diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/00_vars.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/00_vars.inc index e8e0ae91..939becf6 100644 --- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/00_vars.inc +++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/00_vars.inc @@ -24,6 +24,11 @@ GLOBALUSER=$(echo "$GLOBALDOMAINUSER" | cut -d '\' -f 2) REMAPMODE=$(grep '^remapMode=' "$SLXCONFIGFILE" | cut -d '=' -f 2) CREATEMISSING=$(grep '^createMissingRemap=' "$SLXCONFIGFILE" | cut -d '=' -f 2) +SCRIPTUSER=$(grep '^scriptUser=' "$SLXCONFIGFILE" | cut -d '=' -f 2) +SCRIPTVISIBILITY=$(grep '^scriptVisibility=' "$SLXCONFIGFILE" | cut -d '=' -f 2) +SCRIPTEXT=$(grep scriptExt "$DISKMOUNTDIR/openslx.ini" | cut -f 2 -d "=") + + # CIFSVERSIONS="3.11 3.0 2.1 2.0 1.0" CIFSVERSIONS="3.0 2.1 1.0 3.11 2.0" diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_functions.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_functions.inc index d6fd7caa..38213e86 100644 --- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_functions.inc +++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_functions.inc @@ -1,5 +1,7 @@ ### Funktionen #################################### +### Funktionen Mounter ############################ + function xor() { local RES=($(echo "$1" | sed "s/../0x& /g")) shift 1 @@ -112,5 +114,34 @@ function mount_share() fi } +### Funktionen Mounter Ende ####################### + +### Funktionen resolution ######################### + +get_xauthfile() +{ + # Das ist mitunter ein Problem, da die richtige xauth zu finden - Distroabhängig! + for wartezeit in 1 2 3 5 10 10 0 ende; do + [ "$wartezeit" = "ende" ] && { logger "openslx resolution utility: XAUTHFILE not found. Exiting."; exit 1; } + XAUTHORITY=$(ps aux | grep -o "root.*X.* \-auth *[^ ]*" | awk '{print $NF}') + [ -n "${XAUTHORITY}" ] && break + sleep $wartezeit + done + logger "openslx resolution utility: XAUTHFILE found." +} + + +check_resolution() { + ACTRES=$(DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr|grep '*'|tr -s " "|cut -f 2 -d " ") + if [ "$ACTRES" != "$RESOLUTION" ]; then + logger "openslx resolution utility: resolution changed; re-changing." + DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr --output ${AUSGABE} --mode ${RESOLUTION} + else + logger "openslx resolution utility: resolution unchanged." + fi +} + +### Funktionen resolution Ende #################### + ### Funktionen Ende ############################### diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/20_get_creds.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/20_get_creds.inc index c6f6ffcb..f0081658 100644 --- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/20_get_creds.inc +++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/20_get_creds.inc @@ -10,7 +10,7 @@ function get_creds() # Serverantwort pwdaemon in temp. Datei schreiben: timeout 2s dd bs=$BYTES count=1 of="$RAWKEYTEMP" <&13 2>/dev/null - + # Kanal zu Socket schließen: exec 13<&- exec 13>&- diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_mount_shares.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_mount_shares.inc index cc71f23c..7447dd41 100644 --- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_mount_shares.inc +++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_mount_shares.inc @@ -39,3 +39,53 @@ function mount_shares() fi done } + +mnt_shares() { + logger "openslx sharemapper: Started." + + # Wait for network connection to base system + x=1 + while ! ping -w 1 -c 1 "${NATADDR}" 2>/dev/null 1>&2; do + [ "$x" -gt 20 ] && { logger "openslx sharemapper: could not reach base system. Giving up."; exit 1; } + let x=x+1 + sleep 2 + done + + logger "openslx sharemapper: base system reaching; commencing." + + # REMAPMODE (remapMode): 0: None, 1 Native, 2 Native Fallback, 3 vmware + # CREATEMISSING (createMissingRemap): 0: Nichts tun, 1 xdg-Verzeichnisse + + case "$REMAPMODE" in + 0) logger "openslx sharemapper: remapMode 0 (do nothing) detected." + ;; + 1) logger "openslx sharemapper: remapMode 1 (native mode) detected." + preliminaries_native + get_creds # fills global var PW with (currently) decrypted password + get_shares # fills array ROHSHARES; row 0 global infos from (shares-)CONFIGFILE, + # following rows: column 1 share path, col 2 drive letter, col 3 share name, + # column 4 username, col 5 password. + mount_shares # mounts shares given in array ROHSHARES. + ;; + 2) logger "openslx sharemapper: remapMode 2 (fallback mode) detected." + preliminaries_native + get_creds # fills global var PW with (currently) decrypted password + get_shares # fills array ROHSHARES; row 0 global infos from (shares-)CONFIGFILE, + # following rows: column 1 share path, col 2 drive letter, col 3 share name, + # column 4 username, col 5 password. + mount_shares # mounts shares given in array ROHSHARES. + check_fallback # checks for a mounted home and fallbacks to vmware share, if none found. + ;; + 3) logger "openslx sharemapper: remapMode 3 (vmware mode) detected." + preliminaries_vmware + mount_shares # mounts shares given in array ROHSHARES - runvirt checks whether there's + # a home share given or not.. + ;; + *) logger "openslx sharemapper: unknown remapMode in $SLXCONFIGFILE; doing nothing." + ;; + esac + + # By the way: We also have to start a bwLehrpool-Suite given script (runscript). For convenience we will start it here and + # after mounting shares, as perhaps a given script needs mounted shares. + exit 0 +} diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/60_resolution.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/60_resolution.inc new file mode 100644 index 00000000..55f24407 --- /dev/null +++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/60_resolution.inc @@ -0,0 +1,77 @@ +set_resolution() +{ + DISPLAY="${1}.0" + logger "openslx resolution utility started." + + # Da nun fremdgemountet wird, hier sicherheitshalber zur Kontrolle wg. Gross-/Kleinschreibung: + SLXCONFIGFILE=$(find "${DISKMOUNTDIR}" -iwholename "${SLXCONFIGFILE}") + + if [ -f "$SLXCONFIGFILE" ]; then + RESOLUTION=$(grep 'resolution=' "$SLXCONFIGFILE" | cut -d '=' -f 2) + if [ -z $RESOLUTION ]; then + logger "openslx resolution utility: resolution file $SLXCONFIGFILE seems to be empty!" + exit 1 + fi + logger "openslx resolution utility: resolution file $SLXCONFIGFILE yields ${RESOLUTION}." + else + logger "openslx resolution utility: resolution file $SLXCONFIGFILE not found!" + exit 1 + fi + + # Das ist mitunter ein Problem, da die richtige zu finden - Distroabhängig! + # Hier ein Beispiel für openSuse 13.2, sollte auch für Debian, Ubuntu, Redhat usw. laufen:. + # XAUTHDATEI=$(ps aux | grep -o "root.*X.* \-auth *[^ ]*" | awk '{print $NF}') + get_xauthfile + + # Zu verbessern: Der Name des Verbundenen ist nicht immer bekannt. Daher nehmen wir das + # erste 'connected' in der Ausgabe xrandrs Und warten evtl. ein Weilchen):: + for wartezeit in 1 1 1 2 0 ende; do + [ "$wartezeit" = "ende" ] && { logger "openslx resolution utility: Could not detect output device. Exiting." ; exit 1; } + AUSGABE=$(DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr -q|grep -m 1 " connected "|awk '{print $1}') + [ -n "$AUSGABE" ] && break + sleep $wartezeit + done + + # Pruefen, ob xrand eine passende modeline ausgibt: + if [ "$(DISPLAY=${DISPLAY} XAUTHORITY=${XAUTHORITY} xrandr | grep -c ${RESOLUTION}[[:space:]])" -eq 0 ]; then + logger "openslx resolution utility: xrandr yields no fitting modeline; adding one." + MODELINE=$(cvt ${RESOLUTION//x/ } | grep -v "^#" | sed "s/Modeline //g" | sed 's/"//g') + DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr --newmode $(echo ${MODELINE}) + DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr --addmode ${AUSGABE} $(echo ${MODELINE} | cut -d " " -f 1) + # Dann einzusteuernde Auflösung natürlich auf die neue ändern: + RESOLUTION=$(echo ${MODELINE} | cut -d " " -f 1) + logger "openslx resolution utility: (xrandr) modeline ${MODELINE} added (${RESOLUTION})." + fi + + # Auflösung per xrandr setzen: + DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr --output ${AUSGABE} --mode ${RESOLUTION} + ERR=$? + if [ $ERR -ne 0 ]; then + logger "openslx resolution utility: xrandr error code ${ERR}." + else + logger "openslx resolution utility: xrandr ok. Mode $RESOLUTION set." + fi + + # Das hier ist ein wenig problematisch, da nach X-Start die gewünschte Desktopumgebung + # diese gern zuvor gespeicherte Auflösungen wieder einspielt. Daher warten wir einfach, + # und prüfen in gewissen Zeitabständen, ob sich die Auflösung geändert hat, und spielen + # im Änderungsfalle die Grundsystemauflösung wieder ein. Schön ist das nicht. + + # Now, let's wait some seconds to see if another process re-changes res.: + sleep 5 + check_resolution + + # Now, let's wait some more seconds to see if another process re-changes res.: + sleep 15 + check_resolution + + # Now, let's wait even more seconds to see if another process re-changes res.: + sleep 20 + check_resolution + + # Now, let's wait even more seconds to see if another process re-changes res.: + sleep 40 + check_resolution + + exit 0 +} diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/90_runscript.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/90_runscript.inc index e5a7971b..f5ef0223 100755 --- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/90_runscript.inc +++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/90_runscript.inc @@ -1,20 +1,65 @@ function runscript() { - logger "openslx sharemapper: runscript: looking for a script to run..." - if [ -f "$DISKMOUNTDIR/openslx.ini" ]; then - EXTENSION=$(grep scriptExt "$DISKMOUNTDIR/openslx.ini" | cut -f 2 -d "=") - [ -z "$EXTENSION" -o "$EXTENSION" = "bat" ] && \ - logger "openslx sharemapper: runscript: Script extension empty or \'bat\', trying anyway." - if [ -f "$DISKMOUNTDIR/runscript${EXTENSION}" ]; then - su -c "$DISKMOUNTDIR/runscript${EXTENSION}" "$LOCALUSER" - ERR=$? - if [ $ERR -eq 0 ]; then - logger "openslx sharemapper: runscript: runscript${EXTENSION} ok, errorlevel ${ERR}." + logger "openslx: runscript: looking for a script to run..." + ERR=0 + if [ -f "$SLXCONFIGFILE" ]; then + [ -z "$SCRIPTEXT" -o "$SCRIPTEXT" = "bat" ] && \ + logger "openslx utility: runscript: Script extension empty or \'bat\', trying anyway." + if [ -f "$DISKMOUNTDIR/runscript${SCRIPTEXT}" ]; then + logger "openslx utility: runscript: found script $DISKMOUNTDIR/runscript${SCRIPTEXT}." + + case "$SCRIPTUSER" in + 0) USERPART="" + ;; + 1) USERPART=" su -c - $LOCALUSER " + ;; + *) logger "openslx utility: runscript: Unknown script user or script user not set. Running as root." + USERPART="" + ;; + esac + + case "$SCRIPTVISIBILITY" in + 0) # 0=hidden + logger "openslx utility: runscript: Starting script hidden." + echo "$USERPART $DISKMOUNTDIR/runscript${SCRIPTEXT}" + $USERPART "$DISKMOUNTDIR/runscript${SCRIPTEXT}" & + ;; + 1) # 1=normal + logger "openslx utility: runscript: Starting script maximised." + get_xauthfile + DISPLAY=:0.0 XAUTHORITY="${XAUTHORITY}" $USERPART xterm "$DISKMOUNTDIR/runscript${SCRIPTEXT}" & + ;; + 2) # 2=minimized (xterm -iconic) + logger "openslx utility: runscript: starting script minimised." + get_xauthfile + + # warte auf Window manager... + while [[ "$(DISPLAY=:0.0 XAUTHORITY=${XAUTHORITY} xprop -root _NET_SUPPORTING_WM_CHECK)" =~ "no such atom" ]]; do + sleep 2 + done + + # Truly not the best way to wait until the desktop environment is ready, but there's no common way to + # check for DE readyness. Until then, we'll sleep. + sleep 20 + + DISPLAY=:0.0 XAUTHORITY="${XAUTHORITY}" $USERPART xterm -iconic "$DISKMOUNTDIR/runscript${SCRIPTEXT}" & + ;; + *) # *=? + logger "openslx utility: runscript: unkown scriptVisibility $SCRIPTVISIBILITY." + ;; + esac + + if [ "$ERR" -eq 0 ]; then + logger "openslx utility: runscript: runscript${SCRIPTEXT} ok, errorlevel ${ERR}." else - logger "openslx sharemapper: runscript: Script error ${ERR}." + logger "openslx utility: runscript: Script error ${ERR}." fi + else + logger "openslx utility: runscript: script $DISKMOUNTDIR/runscript${SCRIPTEXT} not found." fi else - logger "openslx sharemapper: runscript: Could not find $DISKMOUNTDIR/openslx.ini for script extension." + logger "openslx utility: runscript: Could not find $SLXCONFIGFILE." + exit 1 fi } + diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/mnt_shares b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/mnt_shares index d5485d1a..5c89295b 100755 --- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/mnt_shares +++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/mnt_shares @@ -10,8 +10,6 @@ for i in "$(dirname $0)"/includes/*.inc; do done # Wait for network connection to base system -#!/bin/bash - x=1 while ! ping -w 1 -c 1 "${NATADDR}" 2>/dev/null 1>&2; do [ "$x" -gt 20 ] && { logger "openslx sharemapper: could not reach base system. Giving up."; exit 1; } @@ -26,7 +24,6 @@ logger "openslx sharemapper: base system reaching; commencing." case "$REMAPMODE" in 0) logger "openslx sharemapper: remapMode 0 (do nothing) detected." - exit 0 ;; 1) logger "openslx sharemapper: remapMode 1 (native mode) detected." preliminaries_native @@ -35,7 +32,6 @@ case "$REMAPMODE" in # following rows: column 1 share path, col 2 drive letter, col 3 share name, # column 4 username, col 5 password. mount_shares # mounts shares given in array ROHSHARES. - exit 0 ;; 2) logger "openslx sharemapper: remapMode 2 (fallback mode) detected." preliminaries_native @@ -45,16 +41,13 @@ case "$REMAPMODE" in # column 4 username, col 5 password. mount_shares # mounts shares given in array ROHSHARES. check_fallback # checks for a mounted home and fallbacks to vmware share, if none found. - exit 0 ;; 3) logger "openslx sharemapper: remapMode 3 (vmware mode) detected." preliminaries_vmware mount_shares # mounts shares given in array ROHSHARES - runvirt checks whether there's # a home share given or not.. - exit 0 ;; - *) logger "openslx sharemapper: unknown remapMode in $SLXCONFIGFILE; doing nothing end exiting with error." - exit 1 + *) logger "openslx sharemapper: unknown remapMode in $SLXCONFIGFILE; doing nothing." ;; esac diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/openslx b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/openslx new file mode 100755 index 00000000..8e08f44e --- /dev/null +++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/openslx @@ -0,0 +1,38 @@ +#!/bin/bash + +# set -x + +logger "openslx utility script: Started." + +OWNDIR=$(dirname $0) +for i in "$(dirname $0)"/includes/*.inc; do + source "$i" +done + +logger "openslx utility script: spawning resolution script for X displays..." +OLDPWD=$(pwd) +i=0 + +# detecting running X instances: +cd /tmp/.X11-unix && for x in X*; do + set_resolution ":${x#X}" & + RESPID[i]=$! + logger "openslx utility script: spawned resolution script for :${x#X}." + let "i++" + done +cd "$OLDPWD" + +logger "openslx utility script: spawning share mounter..." +mnt_shares & +MNTPID=$! + +logger "openslx utility script: Waiting for mounter..." +# Best to wait until any shares are mounted (and perhaps resolution setting, too?), as perhaps +# an user supplied runscript needs a network share? +wait $MNTPID # ${RSPID[*]} +logger "openslx utility script: mounter finished." + + +logger "openslx utility script: starting runscript..." +runscript +logger "openslx utility script: runscript finished." diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/resolution b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/resolution index c22bcf80..162f4d08 100755 --- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/resolution +++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/resolution @@ -7,35 +7,22 @@ # Zu erledigen: Jede Menge, zB anständiges Trapping, Fehler abfangen usw... # set -x -MOUNTDIR=/mnt/diskmount -RESFILE="${MOUNTDIR}"/openslx.ini DISPLAY=:0.0 -check_resolution() { - # Now, let's wait even more seconds to see if another process re-changes res.: - ACTRES=$(DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr|grep '*'|tr -s " "|cut -f 2 -d " ") - if [ "$ACTRES" != "$RESOLUTION" ]; then - logger "openslx resolution utility: resolution changed; re-changing." - DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr --output ${AUSGABE} --mode ${RESOLUTION} - else - logger "openslx resolution utility: resolution unchanged." - fi -} - logger "openslx resolution utility started." # Da nun fremdgemountet wird, hier sicherheitshalber zur Kontrolle wg. Gross-/Kleinschreibung: -RESFILE=$(find "${MOUNTDIR}" -iwholename "${RESFILE}") +SLXCONFIGFILE=$(find "${DISKMOUNTDIR}" -iwholename "${SLXCONFIGFILE}") -if [ -f "$RESFILE" ]; then - RESOLUTION=$(grep 'resolution=' "$RESFILE" | cut -d '=' -f 2) +if [ -f "$SLXCONFIGFILE" ]; then + RESOLUTION=$(grep 'resolution=' "$SLXCONFIGFILE" | cut -d '=' -f 2) if [ -z $RESOLUTION ]; then - logger "openslx resolution utility: resolution file $RESFILE seems to be empty!" + logger "openslx resolution utility: resolution file $SLXCONFIGFILE seems to be empty!" exit 1 fi - logger "openslx resolution utility: resolution file $RESFILE yields ${RESOLUTION}." + logger "openslx resolution utility: resolution file $SLXCONFIGFILE yields ${RESOLUTION}." else - logger "openslx resolution utility: resolution file $RESFILE not found!" + logger "openslx resolution utility: resolution file $SLXCONFIGFILE not found!" exit 1 fi diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_installer b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_installer index 5e0677a9..ba43b6f6 100755 --- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_installer +++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_installer @@ -8,10 +8,10 @@ LOGGER=$(which logger) MKDIR=$(which mkdir) MOUNT=$(which mount) MOUNTDIR=/mnt/diskmount/ -SERVICEMOUNT=openslx-mount.service +SERVICEUTIL=openslx-utility.service SERVICEUMOUNT=openslx-umount.service -SERVICERESOLUTION=openslx-resolution.service -SERVICEDISKMOUNT=$(echo "$MOUNTDIR" |tr / -|sed 's:^-::;s:-$::').mount # mounter needs to be named like that, or else. +SERVICEDISKMOUNT=$(echo "$MOUNTDIR" |tr / -|sed 's:^-::;s:-$::').mount # mounter needs to be named like that... or else! +TARGET=$(systemctl get-default) # systemd erkennen @@ -41,7 +41,7 @@ case $(${PS} --pid 1 -o comm h) in unlink "${SERVICEDIR}/basic.target.wants/${SERVICERESOLUTION}" 2>/dev/null fi - echo "openslx praeinstaller: installing systemd service (disk mounter) to ${SERVICEDIR}/${SERVICEDISKMOUNT}." + echo "openslx praeinstaller: installing systemd service (floppy disk mounter) to ${SERVICEDIR}/${SERVICEDISKMOUNT}." cat <<-HEREDOC > "$SERVICEDIR"/"$SERVICEDISKMOUNT" [Unit] Description=Mount pseudofloppy fd1 @@ -53,60 +53,44 @@ case $(${PS} --pid 1 -o comm h) in Options=defaults HEREDOC - echo "openslx praeinstaller: installing systemd service (mounter) to ${SERVICEDIR}/${SERVICEMOUNT}." - cat <<-HEREDOC > "$SERVICEDIR"/"$SERVICEMOUNT" - [Unit] - Description=openSLX share mounter - After=basic.target + + echo "openslx praeinstaller: installing systemd service (openslx utility script) to ${SERVICEDIR}/${SERVICEUTIL}." + cat <<-HEREDOC > "${SERVICEDIR}"/"${SERVICEUTIL}" + [Unit] + Description=openslx utility script + After=$TARGET Requires=${SERVICEDISKMOUNT} [Service] Type=oneshot - ExecStart=${LOGGER} "openslx service file: mounter started." - ExecStart=${MOUNTDIR}/linux/mnt_shares + ExecStart=${LOGGER} "openslx utility script: starting." + ExecStart=${MOUNTDIR}/linux/openslx ExecStart=${LOGGER} "openslx service file: done." RemainAfterExit=yes HEREDOC - + echo "openslx praeinstaller: installing systemd service (umounter) to ${SERVICEDIR}/${SERVICEUMOUNT}." cat <<-THEREDOC > "$SERVICEDIR"/"${SERVICEUMOUNT}" [Unit] - Description=openSLX resolution utility + Description=openSLX umount utility Before=shutdown.target Requires=${SERVICEDISKMOUNT} - + DefaultDependencies=no + [Service] Type=oneshot ExecStart=${LOGGER} "openslx service file: umounter started." - ExecStart=${MOUNTDIR}/linux/umount + ExecStart=${MOUNTDIR}/linux/umnt_shares ExecStart=${LOGGER} "openslx service file: done." RemainAfterExit=no THEREDOC - - echo "openslx praeinstaller: installing systemd service (resolution utility) to ${SERVICEDIR}/${SERVICERESOLUTION}." - cat <<-SOMEWHEREDOC > "$SERVICEDIR"/"${SERVICERESOLUTION}" - [Unit] - Description=openSLX resolution utility - After=display-manager.service - Requires=${SERVICEDISKMOUNT} - - [Service] - Type=oneshot - ExecStart=${LOGGER} "openslx service file: resolution utility started." - ExecStart=${MOUNTDIR}/linux/resolution - ExecStart=${LOGGER} "openslx service file: done." - RemainAfterExit=yes - SOMEWHEREDOC - - - [ ! -d "$SERVICEDIR"/graphical.target.wants ] && mkdir "$SERVICEDIR"/graphical.target.wants 2>/dev/null - [ ! -d "$SERVICEDIR"/basic.target.wants ] && mkdir "$SERVICEDIR"/basic.target.wants 2>/dev/null + + [ ! -d "$SERVICEDIR"/"${TARGET}".wants ] && mkdir "$SERVICEDIR"/"${TARGET}".wants 2>/dev/null [ ! -d "$SERVICEDIR"/shutdown.target.wants ] && mkdir "$SERVICEDIR"/shutdown.target.wants 2>/dev/null - - ln -s "${SERVICEDIR}"/"${SERVICEMOUNT}" "$SERVICEDIR"/graphical.target.wants/"${SERVICEMOUNT}" + + ln -s "${SERVICEDIR}"/"${SERVICEUTIL}" "$SERVICEDIR"/"${TARGET}".wants/"${SERVICEUTIL}" ln -s "${SERVICEDIR}"/"${SERVICEUMOUNT}" "$SERVICEDIR"/shutdown.target.wants/"${SERVICEUMOUNT}" - ln -s "${SERVICEDIR}"/"${SERVICERESOLUTION}" "$SERVICEDIR"/basic.target.wants/"${SERVICERESOLUTION}" - + echo "openslx praeinstaller: doing systemd reload." systemctl daemon-reload ;; -- cgit v1.2.3-55-g7522