From 40cbdf108ab1d85c69fcfd1d506340b7b102f40c Mon Sep 17 00:00:00 2001 From: Christian Rößler Date: Mon, 24 Apr 2017 17:18:42 +0200 Subject: [run-virt] Floppy (fd1)-scripts: Some more testing, some hardening --- .../data/opt/openslx/vmchooser/data/linux/LIESMICH | 11 ++- .../data/opt/openslx/vmchooser/data/linux/README | 13 ++- .../vmchooser/data/linux/includes/10_functions.inc | 21 ++-- .../opt/openslx/vmchooser/data/linux/resolution | 17 ++-- .../opt/openslx/vmchooser/data/linux/vm_installer | 107 +++++++++++++++++---- 5 files changed, 122 insertions(+), 47 deletions(-) (limited to 'core/modules/run-virt/data/opt/openslx/vmchooser/data/linux') diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/LIESMICH b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/LIESMICH index 7b526a9a..c9335628 100644 --- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/LIESMICH +++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/LIESMICH @@ -2,26 +2,29 @@ Dieses Paket besteht aus folgenden Skripten: vm_installer: Dieses Skript einmalig in einer lokalen, permanenten (also nicht innerhalb des Poolsystems) Virtuellen Maschine ausführen. - Es schreibt eine drei systemd-Servicedateien und verlinkt diese, - um beim Systemstart foglende Skripte zu starten: + Es schreibt eine systemd-Servicedateien und verlinkt diese, + um beim Systemstart folgende Skripte zu starten: resolution: (after display-manager.service): Dieses Skript wartet eine gewisse Zeit, ob ein X-Server gestartet wurde, ändert anschließend die Auflösung entsprechend der vom Basissystem übergebenen Angabe in openslx.ini und überwacht diese eine - gewisse Zeit lang. + gewisse Zeit lang, um nachträgliche Auflösungsänderungen, + zB. durch gespeicherte Einstellungen des Displaymanagers, + zu erkennen und rückzusetzen. mnt_shares: (after basic.target): Wertet die Einträge remapMode (sowie createMissingRemap, noch zu implementieren) der Datei openslx.ini aus, und hängt anhand des per remapMode gegebenen Wertes die in shares.dat angegebenen Netzlaufwerke ein. Die - (evtl. nötige) Authentizizierung wird verschlüsselt vom + (evtl. nötige) Authentifizierung wird verschlüsselt vom Grundsystem übergeben. umnt_shares: (Before shutdown.target): Hängt gegebene Laufwerke beim Herunterfahren der VM wieder aus. + resolution_standalone: Einzelstehende Version des resolution-Skriptes, die keine Vorarbeiten seitens systemd bzw. vm_runtime benötigt. Für geeignete Einbindung innerhalb der VM (Xsetup/Xreset) diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/README b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/README index 2476126b..53576259 100644 --- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/README +++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/README @@ -1,19 +1,24 @@ -This package consists of the following scripts: +This package consists of following scripts: vm_installer: This script is to be started once in a local, permanent (so not within the pool system environment) virtual machine. It - writes three systemd service files and links them, so the - scripts will be started at system startup resp. shutdown: + writes three systemd service files and links them, so + following scripts will be started at system startup resp. + shutdown: resolution: (after display-manager.service): Sets resolution within the virtual machine according to base system resolution given via - config file openslx.ini, and re-checks it for some time.. + config file openslx.ini, and re-checks it for some time. mnt_shares: (after basic.target): Reads entries remapMode (and createMissingRemap, todo) from the file openslx.ini, and mounts the shares given by shares.dat according to remapMode. mounts therein given network shares. +umnt_shares: (Before shutdown.target): Umounts given shares at virtual + machine shutdown time . + + resolution_standalone: Standalone version of resolution sctipt. Needs no preliminary work done by systemd or vm_runtime. One has to embed/start it via adequate means by hand 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 97767c51..cc5246ee 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 @@ -34,15 +34,18 @@ function mounter() logger "openslx sharemapper: $3 already mounted." AUSGANG=2 else - mount $1 $2 $3 2>/dev/null 1>&2 - ERR=$? - if [ "$ERR" -gt 0 ]; then - logger "openslx sharemapper: could not mount ${2} to ${3}." - AUSGANG=1 - else - logger "openslx sharemapper: ${2} mounted to ${3}." - AUSGANG=0 - fi + x=2 + while ! mount $1 $2 $3 2>/dev/null 1>&2; do + sleep $x + if [ "$x" -gt 10 ]; then + AUSGANG=1 + logger "openslx sharemapper: could not mount ${2} to ${3}." + break + fi + let x=x+2 + done + logger "openslx sharemapper: ${2} mounted to ${3}." # Todo: Schöner schreiben:) + AUSGANG=0 fi return $AUSGANG } 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 a8942b9f..a4811355 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 @@ -42,23 +42,22 @@ 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}') - -for wartezeit in 0 1 2 3 5 10 10 0 ende; do +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." # Zu verbessern: Der Name des Verbundenen ist nicht immer bekannt. Daher nehmen wir das -# erste 'connected' in der Ausgabe xrandrs: -AUSGABE=$(DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr -q|grep -m 1 " connected "|awk '{print $1}') -if [ -z "$AUSGABE" ]; then - logger "openslx resolution utility: Could not detect output device. Exiting." - exit 1 -fi +# 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})" -eq 0 ]; then 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 323ed0a4..240c0a27 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 @@ -1,5 +1,7 @@ #!/bin/bash +# set -x + PS=$(which ps) GREP=$(which grep) LOGGER=$(which logger) @@ -18,6 +20,25 @@ case $(${PS} --pid 1 -o comm h) in else SERVICEDIR=/usr/lib/systemd/system/ fi + + if [ -L "${SERVICEDIR}/graphical.target.wants/${SERVICEMOUNT}" ] \ + || [ -L "${SERVICEDIR}/graphical.target.wants/${SERVICEUMOUNT}" ] \ + || [ -L "${SERVICEDIR}/graphical.target.wants/${SERVICERESOLUTION}" ]; then + while [ "$RESCRIPT" != "y" ] && [ "$RESCRIPT" != "n" ]; do + RESCRIPTDEF=y + read -e -p "There seems to an older install. Delete (y/n, Default is $RESCRIPTDEF, Ctrl-C to exit): " RESCRIPT + RESCRIPT="${RESCRIPT:-$RESCRIPTDEF}" + done + fi + + if [ "${RESCRIPT}" == "y" ]; then + # Just unlink stuff... + echo "Deleting old links..." + unlink "${SERVICEDIR}/graphical.target.wants/${SERVICEMOUNT}" 2>/dev/null + unlink "${SERVICEDIR}/shutdown.target.wants/${SERVICEUMOUNT}" 2>/dev/null + unlink "${SERVICEDIR}/basic.target.wants/${SERVICERESOLUTION}" 2>/dev/null + fi + echo "openslx praeinstaller: installing systemd service (mounter) to ${SERVICEDIR}/${SERVICEMOUNT}." cat <<-HEREDOC > "$SERVICEDIR"/"$SERVICEMOUNT" [Unit] @@ -50,30 +71,74 @@ case $(${PS} --pid 1 -o comm h) in RemainAfterExit=no THEREDOC - echo "openslx praeinstaller: installing systemd service (resolution utility) to ${SERVICEDIR}/${SERVICERESOLUTION}." - cat <<-THEREDOC > "$SERVICEDIR"/"${SERVICERESOLUTION}" - [Unit] - Description=openSLX resolution utility - After=display-manager.service - - [Service] - Type=oneshot - ExecStartPre=${MKDIR} -p /mnt/diskmount - ExecStartPre=-${MOUNT} /dev/fd1 /mnt/diskmount - ExecStart=${LOGGER} "openslx service file: resolution utility started." - ExecStart=${MOUNTDIR}/linux/resolution - ExecStart=${LOGGER} "openslx service file: done." - RemainAfterExit=yes - THEREDOC +# This bloc was meant for a resolution setting alternative via xorg.conf.d. As this did not work on time, it's +# just commented for now due to programmer's laziness, who was too lazy to store it elsewhere. +# echo +# echo "openslx praeinstaller: Which resolution script to install?" +# echo +# echo "There are two possibilies:" +# echo "" +# echo '1) A script which waits until the xserver started, then checks for possible' +# echo ' modelines (writes one if no sufficient modeline is detected, and waits for' +# echo ' some time afterwards whether resolution changes again (eg. via display manager' +# echo ' or such stuff. Fairly stable no more XSetup/Xreset patching.' +# echo +# echo '2) Just a screen configuration dropped to xorg.conf.d, which restricts' +# echo ' possible screen resolutions to just one. This may give trouble when screen,' +# echo ' monitor etc. are hard-wired elsewhere (xorg.conf, xorg.conf.d).' +# echo +# +# while [ "$RESCRIPT" != "1" ] && [ "$RESCRIPT" != "2" ]; do +# RESCRIPTDEF=1 +# read -e -p "Well, which one do you choose? (1/2, Default is $RESCRIPTDEF): " RESCRIPT +# RESCRIPT="${RESCRIPT:-$RESCRIPTDEF}" +# done +# +# case $RESCRIPT in +# 1) echo "openslx praeinstaller: installing systemd service (resolution utility) to ${SERVICEDIR}/${SERVICERESOLUTION}." + echo "openslx praeinstaller: installing systemd service (resolution utility) to ${SERVICEDIR}/${SERVICERESOLUTION}." + cat <<-SOMEWHEREDOC > "$SERVICEDIR"/"${SERVICERESOLUTION}" + [Unit] + Description=openSLX resolution utility + After=display-manager.service + [Service] + Type=oneshot + ExecStartPre=${MKDIR} -p /mnt/diskmount + ExecStartPre=-${MOUNT} /dev/fd1 /mnt/diskmount + ExecStart=${LOGGER} "openslx service file: resolution utility started." + ExecStart=${MOUNTDIR}/linux/resolution + ExecStart=${LOGGER} "openslx service file: done." + RemainAfterExit=yes + SOMEWHEREDOC +# ;; +# 2) echo "openslx praeinstaller: installing systemd service (xorg.conf.d entry) to ${SERVICEDIR}/${SERVICERESOLUTION}." +# cat <<-THEREDOC > "$SERVICEDIR"/"${SERVICERESOLUTION}" +# [Unit] +# Description=openSLX xorg.conf.d entry +# Before=display-manager.service +# [Service] +# Type=oneshot +# ExecStartPre=${MKDIR} -p /mnt/diskmount +# ExecStartPre=-${MOUNT} /dev/fd1 /mnt/diskmount +# ExecStart=${LOGGER} "openslx service file: resolution utility started." +# ExecStart=${MOUNTDIR}/linux/xorgconf +# ExecStart=${LOGGER} "openslx service file: done." +# RemainAfterExit=yes +# THEREDOC +# ;; +# *) echo "openslx praeinstaller: This should not have happened: RESCRIPT ($RESCRIPT) not set!" +# exit 1 +# ;; +#esac - [ ! -d /etc/systemd/system/graphical.target.wants ] && mkdir /etc/systemd/system/graphical.target.wants 2>/dev/null - [ ! -d /etc/systemd/system/basic.target.wants ] && mkdir /etc/systemd/system/basic.target.wants 2>/dev/null - [ ! -d /etc/systemd/system/shutdown.target.wants ] && mkdir /etc/systemd/system/shutdown.target.wants 2>/dev/null + [ ! -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"/shutdown.target.wants ] && mkdir "$SERVICEDIR"/shutdown.target.wants 2>/dev/null - ln -s "${SERVICEDIR}"/"${SERVICEMOUNT}" /etc/systemd/system/graphical.target.wants/"${SERVICEMOUNT}" - ln -s "${SERVICEDIR}"/"${SERVICEUMOUNT}" /etc/systemd/system/shutdown.target.wants/"${SERVICEUMOUNT}" - ln -s "${SERVICEDIR}"/"${SERVICERESOLUTION}" /etc/systemd/system/basic.target.wants/"${SERVICERESOLUTION}" + ln -s "${SERVICEDIR}"/"${SERVICEMOUNT}" "$SERVICEDIR"/graphical.target.wants/"${SERVICEMOUNT}" + 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