summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Rößler2017-04-11 16:35:08 +0200
committerChristian Rößler2017-04-11 16:35:08 +0200
commit99a38f25910522b4c04deb6595a0a41e4df62890 (patch)
treed61685b782792be2218705067d8b8a2ada84e215
parent[run-virt] WTF? resolution_standalone, now right. (diff)
downloadtm-scripts-99a38f25910522b4c04deb6595a0a41e4df62890.tar.gz
tm-scripts-99a38f25910522b4c04deb6595a0a41e4df62890.tar.xz
tm-scripts-99a38f25910522b4c04deb6595a0a41e4df62890.zip
[run-virt] Floppy (fd1)-scripts: No more display manager conf. patching,
now via systemd service files started. To be tested!
-rw-r--r--remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/LIESMICH38
-rw-r--r--remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/README26
-rwxr-xr-xremote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/resolution34
-rwxr-xr-xremote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_installer57
4 files changed, 100 insertions, 55 deletions
diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/LIESMICH b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/LIESMICH
index 326af2a4..7b526a9a 100644
--- a/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/LIESMICH
+++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/LIESMICH
@@ -2,23 +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 systemd-Servicedatei und verlinkt diese, um
- beim Systemstart per vm_runtime die Skripte zu Auflösungsan-
- passung und Einhängung eventuell übergebener Netzlaufwerke
- nach Hochladung der VM in das Poolsystem automatisch zu starten.
- Das Skript kann von der gemounteten (Pseudo-)Diskette /dev/fd1
- aus oder einzelstehend gestartet werden.
- Unterstützung für init-basierte Systeme folgt noch.
-vm_runtime: Dieses Skript wird beim booten der VM aufgerufen und patcht
- Xsetup, um beim grafischen Start der VM die Skripte shares
- und resolution aufzurufen.
-mnt_shares: Liest die auf Pseudodiskette gegebene shares.dat aus und hängt
- ggf. darin angegebene Netzlaufwerke ein.
-resolution: Stellt die Auflösung der VM anhand der übergebenen Auflösung
- des Grundsystems ein.
+ Es schreibt eine drei systemd-Servicedateien und verlinkt diese,
+ um beim Systemstart foglende 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.
+
+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
+ 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 muss daher selbst
- gesorgt werden.
+ Für geeignete Einbindung innerhalb der VM (Xsetup/Xreset)
+ muss daher selbst gesorgt werden.
+
diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/README b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/README
index 12777c67..2476126b 100644
--- a/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/README
+++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/README
@@ -2,20 +2,20 @@ This package consists of the 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 a systemd service file and links it, so the scripts
- for resolution setting and mounting network shares will be
- started at boot time at boot time via vm_runtime.
- It may be run from the mounted (pseudo) disk drive /dev/fd1
- or from elsewhere.
- init will be supported at later time.
-vm_runtime: Will be started at boot time and patches Xsetup, so the
- scripts mnt_shares and resolution will be started at graphical
- login.
-mnt_shares: Reads the config file shares.dat from (pseudo) disk drive and
+ writes three systemd service files and links them, so the
+ 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..
+
+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.
-resolution: Sets resolution within the virtual machine according to base
- system resolution given via config file openslx.ini.
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.
+ One has to embed/start it via adequate means by hand
+ (Xsetup/Xreset).
+
diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/resolution b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/resolution
index 35fb42e3..a8942b9f 100755
--- a/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/resolution
+++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/resolution
@@ -9,14 +9,14 @@
MOUNTDIR=/mnt/diskmount
RESFILE="${MOUNTDIR}"/openslx.ini
-export DISPLAY=:0.0
+DISPLAY=:0.0
check_resolution() {
# Now, let's wait even more seconds to see if another process re-changes res.:
- ACTRES=$(xrandr|grep '*'|tr -s " "|cut -f 2 -d " ")
+ 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."
- xrandr --output ${AUSGABE} --mode ${RESOLUTION}
+ DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr --output ${AUSGABE} --mode ${RESOLUTION}
else
logger "openslx resolution utility: resolution unchanged."
fi
@@ -41,36 +41,38 @@ 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 "X.* \-auth *[^ ]*" | awk '{print $NF}')
-if [ -n "$XAUTHDATEI" ]; then
- logger "openslx resolution utility: XAUTHFILE found."
- export XAUTHORITY="${XAUTHDATEI}"
-else
- logger "openslx resolution utility: XAUTHFILE not found. Exiting."
- exit 1
-fi
+# XAUTHDATEI=$(ps aux | grep -o "root.*X.* \-auth *[^ ]*" | awk '{print $NF}')
+
+for wartezeit in 0 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=$(xrandr -q|grep -m 1 " connected "|awk '{print $1}')
+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
# Pruefen, ob xrand eine passende modeline ausgibt:
-if [ "$(xrandr | grep -c ${RESOLUTION})" -eq 0 ]; then
+if [ "$(DISPLAY=${DISPLAY} XAUTHORITY=${XAUTHORITY} xrandr | grep -c ${RESOLUTION})" -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')
- xrandr --newmode $(echo ${MODELINE})
- xrandr --addmode ${AUSGABE} $(echo ${MODELINE} | cut -d " " -f 1)
+ 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:
-xrandr --output ${AUSGABE} --mode ${RESOLUTION}
+DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr --output ${AUSGABE} --mode ${RESOLUTION}
ERR=$?
if [ $ERR -ne 0 ]; then
logger "openslx resolution utility: xrandr error code ${ERR}."
diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_installer b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_installer
index 978cee20..323ed0a4 100755
--- a/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_installer
+++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_installer
@@ -6,7 +6,9 @@ LOGGER=$(which logger)
MKDIR=$(which mkdir)
MOUNT=$(which mount)
MOUNTDIR=/mnt/diskmount/
-SERVICEFILE=openslx-scriptinstall.service
+SERVICEMOUNT=openslx-mount.service
+SERVICEUMOUNT=openslx-umount.service
+SERVICERESOLUTION=openslx-resolution.service
# systemd erkennen
case $(${PS} --pid 1 -o comm h) in
@@ -16,32 +18,67 @@ case $(${PS} --pid 1 -o comm h) in
else
SERVICEDIR=/usr/lib/systemd/system/
fi
- echo "openslx praeinstaller: installing systemd service file to ${SERVICEDIR}/${SERVICEFILE}."
+ echo "openslx praeinstaller: installing systemd service (mounter) to ${SERVICEDIR}/${SERVICEMOUNT}."
+ cat <<-HEREDOC > "$SERVICEDIR"/"$SERVICEMOUNT"
+ [Unit]
+ Description=openSLX share mounter
+ After=basic.target
+
+ [Service]
+ Type=oneshot
+ ExecStartPre=${MKDIR} -p /mnt/diskmount
+ ExecStartPre=-${MOUNT} /dev/fd1 /mnt/diskmount
+ ExecStart=${LOGGER} "openslx service file: mounter started."
+ ExecStart=${MOUNTDIR}/linux/mnt_shares
+ ExecStart=${LOGGER} "openslx service file: done."
+ RemainAfterExit=yes
+ HEREDOC
- cat <<-HEREDOC > "$SERVICEDIR"/"$SERVICEFILE"
+ echo "openslx praeinstaller: installing systemd service (umounter) to ${SERVICEDIR}/${SERVICEUMOUNT}."
+ cat <<-THEREDOC > "$SERVICEDIR"/"${SERVICEUMOUNT}"
[Unit]
- Description=openSLX script installer
- Before=display-manager.service graphical.target
+ Description=openSLX resolution utility
+ Before=shutdown.target
[Service]
Type=oneshot
ExecStartPre=${MKDIR} -p /mnt/diskmount
ExecStartPre=-${MOUNT} /dev/fd1 /mnt/diskmount
- ExecStart=${LOGGER} "openslx service file: started."
- ExecStart=${MOUNTDIR}/linux/vm_runtime
+ ExecStart=${LOGGER} "openslx service file: umounter started."
+ ExecStart=${MOUNTDIR}/linux/umount
ExecStart=${LOGGER} "openslx service file: done."
RemainAfterExit=no
- HEREDOC
+ 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
+
[ ! -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
- ln -s "${SERVICEDIR}"/"${SERVICEFILE}" /etc/systemd/system/graphical.target.wants/"${SERVICEFILE}"
- ln -s "${SERVICEDIR}"/"${SERVICEFILE}" /etc/systemd/system/basic.target.wants/"${SERVICEFILE}"
+ 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}"
echo "openslx praeinstaller: doing systemd reload."
systemctl daemon-reload
;;
+
init) echo "openslx praeinstaller: init(V) detected."
SERVICEDIR=/etc/init.d/
[ ! -d "${SERVICEDIR}" ] && { echo "openslx praeinstaller: No init directory $SERVICEDIR found, exiting."; exit 1; }