From 6d2d56cfc67870981c2b87d44e40daef63f5cdb6 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 12 Jul 2016 13:44:50 +0200 Subject: [kernel-vanilla] 4.4.15 --- remote/modules/kernel-vanilla/module.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'remote/modules') diff --git a/remote/modules/kernel-vanilla/module.conf b/remote/modules/kernel-vanilla/module.conf index a0973a2b..0ea12bc3 100644 --- a/remote/modules/kernel-vanilla/module.conf +++ b/remote/modules/kernel-vanilla/module.conf @@ -1,5 +1,5 @@ REQUIRED_BINARIES="" REQUIRED_LIBRARIES="" REQUIRED_DIRECTORIES="" -REQUIRED_KERNEL="4.4.13" +REQUIRED_KERNEL="4.4.15" REQUIRED_GIT="git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git" -- cgit v1.2.3-55-g7522 From c5dd230a9ea5b45736b6109ac901322c26aaf1dc Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Thu, 14 Jul 2016 14:02:43 +0200 Subject: [xscreensaver] initial module --- .../xscreensaver/data/etc/X11/Xsession.d/95-xscreensaver | 8 ++++++++ remote/modules/xscreensaver/module.build | 13 +++++++++++++ remote/modules/xscreensaver/module.conf | 8 ++++++++ remote/modules/xscreensaver/module.conf.ubuntu | 6 ++++++ 4 files changed, 35 insertions(+) create mode 100755 remote/modules/xscreensaver/data/etc/X11/Xsession.d/95-xscreensaver create mode 100644 remote/modules/xscreensaver/module.build create mode 100644 remote/modules/xscreensaver/module.conf create mode 100644 remote/modules/xscreensaver/module.conf.ubuntu (limited to 'remote/modules') diff --git a/remote/modules/xscreensaver/data/etc/X11/Xsession.d/95-xscreensaver b/remote/modules/xscreensaver/data/etc/X11/Xsession.d/95-xscreensaver new file mode 100755 index 00000000..385a8280 --- /dev/null +++ b/remote/modules/xscreensaver/data/etc/X11/Xsession.d/95-xscreensaver @@ -0,0 +1,8 @@ +#!/bin/ash + +if ! which xscreensaver; then + echo "Failed to find xscreensaver in '$PATH'!" + return 1 +fi + +xscreensaver -no-splash & diff --git a/remote/modules/xscreensaver/module.build b/remote/modules/xscreensaver/module.build new file mode 100644 index 00000000..435a7b10 --- /dev/null +++ b/remote/modules/xscreensaver/module.build @@ -0,0 +1,13 @@ +fetch_source() { + : +} + +build() { + COPYLIST="list_dpkg_output" + list_packet_files > "$COPYLIST" + tarcopy "$(cat "${COPYLIST}" | sort -u)" "${MODULE_BUILD_DIR}" +} + +post_copy() { + : +} diff --git a/remote/modules/xscreensaver/module.conf b/remote/modules/xscreensaver/module.conf new file mode 100644 index 00000000..2134f0cb --- /dev/null +++ b/remote/modules/xscreensaver/module.conf @@ -0,0 +1,8 @@ +REQUIRED_BINARIES=" + xscreensaver + xscreensaver-command +" +REQUIRED_LIBRARIES="" +REQUIRED_DIRECTORIES=" + /etc/pam.d/ +" diff --git a/remote/modules/xscreensaver/module.conf.ubuntu b/remote/modules/xscreensaver/module.conf.ubuntu new file mode 100644 index 00000000..b25b886f --- /dev/null +++ b/remote/modules/xscreensaver/module.conf.ubuntu @@ -0,0 +1,6 @@ +REQUIRED_CONTENT_PACKAGES=" + xscreensaver +" +REQUIRED_INSTALLED_PACKAGES=" + xscreensaver +" -- cgit v1.2.3-55-g7522 From 8a927da541ff175c2601e54726c642b0d5375b13 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 14 Jul 2016 15:07:30 +0200 Subject: Update several calls to slxlog with --delete instead of having sleep + rm follow the call --- remote/modules/cron/data/opt/openslx/scripts/cron-sendmail | 8 +++----- .../data/opt/openslx/scripts/systemd-hardware_stats | 2 +- remote/modules/pam-bwidm/data/opt/openslx/scripts/pam_bwidm | 3 +-- .../data/opt/openslx/scripts/pam_script_mount_common_share | 9 +++++---- .../data/opt/openslx/scripts/includes/setup_image_access.inc | 2 -- .../run-virt/data/opt/openslx/scripts/systemd-mount_vm_store | 5 ++--- .../modules/smartctl/data/opt/openslx/scripts/systemd-smartctl | 10 +++++++++- 7 files changed, 21 insertions(+), 18 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/cron/data/opt/openslx/scripts/cron-sendmail b/remote/modules/cron/data/opt/openslx/scripts/cron-sendmail index 3ce2a19d..f46c226d 100755 --- a/remote/modules/cron/data/opt/openslx/scripts/cron-sendmail +++ b/remote/modules/cron/data/opt/openslx/scripts/cron-sendmail @@ -10,16 +10,14 @@ if [ "x$SLX_CRON_MAIL" = "xslxlog" ]; then SUBJ=$(grep '^Subject: .*$' "$TMP" | cut -c 10-) if [ -n "$SUBJ" ]; then - slxlog "cron" "$SUBJ" "$TMP" + slxlog --delete "cron" "$SUBJ" "$TMP" fi - - rm -f -- "$TMP" elif [ -n "$SLX_CRON_MAIL" ] && [ -x "$SLX_CRON_MAIL" ]; then # see if SLX_CRON_MAIL is a valid binary and use that - $SLX_CRON_MAIL $@ + $SLX_CRON_MAIL "$@" elif which sendmail 2> /dev/null; then # fallback to sendmail - sendmail $@ + sendmail "$@" elif which logger 2> /dev/null; then # nothing worked, write to syslog if logger is present TMP=$(mktemp /tmp/cron.XXXXXXXX) diff --git a/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats b/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats index 94c2094f..eba9c287 100755 --- a/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats +++ b/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats @@ -66,7 +66,7 @@ fi CPUMODEL=$(grep -m1 '^model name\s*:' /proc/cpuinfo | sed 's/^model name\s*:\s*//;s/\s\s*/ /g;s/^ //;s/ $//') # 6) RAM -RAM=$(grep '^MemTotal:' /proc/meminfo | awk '{print $2}') +RAM=$(grep -m1 '^MemTotal:' /proc/meminfo | awk '{print $2}') RAM=$(( $RAM / 1024 )) if [ -z "$RAM" ] || [ "$RAM" -lt 500 ]; then # Fallback to dmidecode diff --git a/remote/modules/pam-bwidm/data/opt/openslx/scripts/pam_bwidm b/remote/modules/pam-bwidm/data/opt/openslx/scripts/pam_bwidm index 13e40cb9..69a0b657 100755 --- a/remote/modules/pam-bwidm/data/opt/openslx/scripts/pam_bwidm +++ b/remote/modules/pam-bwidm/data/opt/openslx/scripts/pam_bwidm @@ -166,8 +166,7 @@ exit 1 mainret=$? if [ "x$mainret" == "x7" ]; then # exit code 7 is our marker to push the logfile to the sat - slxlog "pam-bwidm" "Internal error during bwIDM authentication" "${LOGFILE}" - ( sleep 1; rm -f -- "${LOGFILE}" ) & + slxlog --delete "pam-bwidm" "Internal error during bwIDM authentication" "${LOGFILE}" exit 1 fi exit "${mainret}" diff --git a/remote/modules/pam-common-share/data/opt/openslx/scripts/pam_script_mount_common_share b/remote/modules/pam-common-share/data/opt/openslx/scripts/pam_script_mount_common_share index 670943f4..d0bd8842 100644 --- a/remote/modules/pam-common-share/data/opt/openslx/scripts/pam_script_mount_common_share +++ b/remote/modules/pam-common-share/data/opt/openslx/scripts/pam_script_mount_common_share @@ -118,12 +118,13 @@ mount_share() { # check for failures if [ -e "${SIGNAL}" ]; then - slxlog "pam-share-mount" "Mount of '${SHARE_PATH}' to '${TARGET_DIR}' failed. (Args: ${MOUNT_OPTS}" "${MOUNT_OUTPUT}" - rm -f -- "${SIGNAL}" + slxlog --delete "pam-share-mount" "Mount of '${SHARE_PATH}' to '${TARGET_DIR}' failed. (Args: '${MOUNT_OPTS}')" "${MOUNT_OUTPUT}" + rm -f -- "${SIGNAL}" elif kill -9 "${MOUNT_PID}" 2>/dev/null; then - slxlog "pam-share-mount" "Mount of '${SHARE_PATH}' to '${TARGET_DIR}' timed out. (Args: ${MOUNT_OPTS}" "${MOUNT_OUTPUT}" + slxlog --delete "pam-share-mount" "Mount of '${SHARE_PATH}' to '${TARGET_DIR}' timed out. (Args: '${MOUNT_OPTS}')" "${MOUNT_OUTPUT}" + else + rm -f -- "${MOUNT_OUTPUT}" fi - ( sleep 2; rm -f -- "${MOUNT_OUTPUT}" ) & # always unset credentials unset USER diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_image_access.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_image_access.inc index 337562dc..3c4ed330 100644 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_image_access.inc +++ b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_image_access.inc @@ -29,8 +29,6 @@ else writelog "dnbd3-fuse stopped working (Exit code $RET)" slxlog "virt-dnbd3-fuse" "dnbd3-fuse stopped/refused serving '${imgrelpath}' from '${SLX_DNBD3_SERVERS}' with error code: $RET" "${dnbd3_tmplog}" fi - sleep 2 - rm -f -- "$dnbd3_tmplog" "$dnbd3_exitflag" ) & # give it a bit of time usleep 250000 diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/systemd-mount_vm_store b/remote/modules/run-virt/data/opt/openslx/scripts/systemd-mount_vm_store index 363e5253..235cf4be 100755 --- a/remote/modules/run-virt/data/opt/openslx/scripts/systemd-mount_vm_store +++ b/remote/modules/run-virt/data/opt/openslx/scripts/systemd-mount_vm_store @@ -31,13 +31,12 @@ fi > "$OUTFILE" 2>&1 if [ "$RET" -ne "0" ]; then if [ -s "$OUTFILE" ]; then - slxlog "mount-vmstore-fail" "Mounting '$SLX_VM_NFS' failed. VMs will not boot." "$OUTFILE" - sleep 1 + slxlog --delete "mount-vmstore-fail" "Mounting '$SLX_VM_NFS' failed. VMs will not boot." "$OUTFILE" else slxlog "mount-vmstore-fail" "Mounting '$SLX_VM_NFS' failed. VMs will not boot." + rm -f -- "$OUTFILE" fi fi -rm -f -- "$OUTFILE" exit $RET diff --git a/remote/modules/smartctl/data/opt/openslx/scripts/systemd-smartctl b/remote/modules/smartctl/data/opt/openslx/scripts/systemd-smartctl index 1eef0a23..979fde62 100755 --- a/remote/modules/smartctl/data/opt/openslx/scripts/systemd-smartctl +++ b/remote/modules/smartctl/data/opt/openslx/scripts/systemd-smartctl @@ -5,6 +5,7 @@ . /opt/openslx/config [ -z "$SLX_SMARTCTL_MIN_REALLOC" ] && SLX_SMARTCTL_MIN_REALLOC=0 +DELAY= FILES= for dev in /dev/sd?; do @@ -20,14 +21,21 @@ for dev in /dev/sd?; do # report if applicable if [ -n "$OVERALL" ]; then slxlog "smartctl-fail" "Failed HDD: $dev reports health as $OVERALL" "$FILE" + DELAY=yes fi if [ -n "$REALLOC" ] && [ "$REALLOC" -gt "$SLX_SMARTCTL_MIN_REALLOC" ]; then slxlog "smartctl-realloc" "Failing HDD: $dev has $REALLOC reallocated sectors!" "$FILE" + DELAY=yes fi if [ -n "$SPINRETRY_VAL" ] && [ "$SPINRETRY_VAL" -le "$SPINRETRY_THR" ]; then slxlog "smartctl-spinretry" "Failing HDD: $dev has bad spin retry count! ($SPINRETRY_VAL/$SPINRETRY_THR)" "$FILE" + DELAY=yes fi done -sleep 2 # give slxlog a little time, as it's running async + +[ -n "$DELAY" ] && sleep 2 # give slxlog a little time, as it's running async [ -n "$FILES" ] && rm -f -- $FILES # list, no "" +# Keep it that way instead of using --delete or --sync sonce it would add up; this way we're doing it just once here + +exit 0 -- cgit v1.2.3-55-g7522 From b595ffabc54a89f784e35fc3889e795e348727e3 Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Fri, 15 Jul 2016 13:32:36 +0200 Subject: [dnbd3] fix missing dependency on fusermount for dnbd3-fuse --- remote/modules/dnbd3/module.build | 11 ++++++----- remote/modules/dnbd3/module.conf | 1 + remote/modules/dnbd3/module.conf.ubuntu | 2 ++ 3 files changed, 9 insertions(+), 5 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/dnbd3/module.build b/remote/modules/dnbd3/module.build index 1594b9ab..c954879c 100644 --- a/remote/modules/dnbd3/module.build +++ b/remote/modules/dnbd3/module.build @@ -27,8 +27,8 @@ build() { cd "$MODULE_DIR/src/kmod" || perror "Could not CD to standalone dnbd3 kmod dir" make MODULE_NAME=dnbd3 KDIR="$KERNEL_HEADERS_DIR" || perror "Could not compile kernel module" mkdir -p "$MODULE_BUILD_DIR/lib/modules/dnbd3" || perror "Could not create lib/modules/dnbd3" - mkdir -p "$MODULE_BUILD_DIR/opt/openslx/bin" || perror "Coould not create opt/openslx/bin" - cp "$MODULE_DIR/src/kmod/dnbd3.ko" "$MODULE_BUILD_DIR/lib/modules/dnbd3/" || perror "could not cp dnbd3.ko" + mkdir -p "$MODULE_BUILD_DIR/opt/openslx/bin" || perror "Could not create opt/openslx/bin" + cp "$MODULE_DIR/src/kmod/dnbd3.ko" "$MODULE_BUILD_DIR/lib/modules/dnbd3/" || perror "Could not copy dnbd3.ko" cd "$MODULE_BUILD_DIR/opt/openslx/bin" || perror "Could not cd to build dir for client binary" cmake "$MODULE_DIR/src/dnbd3" || perror "Could not cmake" make dnbd3-client || perror "Could not make dnbd3-client" @@ -37,9 +37,10 @@ build() { chmod +xs "dnbd3-client" chmod +x "dnbd3-fuse" cd "$MODULE_DIR" -} -post_copy() { - : + COPYLIST="list_dpkg_output" + [ -e "$COPYLIST" ] && rm "$COPYLIST" + list_packet_files >> "$COPYLIST" + tarcopy "$(cat "$COPYLIST" | sort -u)" "${MODULE_BUILD_DIR}" } diff --git a/remote/modules/dnbd3/module.conf b/remote/modules/dnbd3/module.conf index 29442db7..8d943764 100644 --- a/remote/modules/dnbd3/module.conf +++ b/remote/modules/dnbd3/module.conf @@ -4,6 +4,7 @@ REQUIRED_COMMIT="6d6455b271ac99c5862691620e1217ed7b3b78b4" REQUIRED_BINARIES=" dnbd3-client dnbd3-fuse + fusermount " REQUIRED_DIRECTORIES=" /lib/modules diff --git a/remote/modules/dnbd3/module.conf.ubuntu b/remote/modules/dnbd3/module.conf.ubuntu index 8033437b..69b5b9de 100644 --- a/remote/modules/dnbd3/module.conf.ubuntu +++ b/remote/modules/dnbd3/module.conf.ubuntu @@ -1,9 +1,11 @@ REQUIRED_CONTENT_PACKAGES=" cmake + fuse " REQUIRED_INSTALLED_PACKAGES=" cmake zlib1g-dev libfuse-dev + fuse " -- cgit v1.2.3-55-g7522 From 1a8be004e322b780a0a0ae97f1af294df5df7a51 Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Fri, 15 Jul 2016 17:32:47 +0200 Subject: [dnbd3] fix missing post_copy ... --- remote/modules/dnbd3/module.build | 3 +++ 1 file changed, 3 insertions(+) (limited to 'remote/modules') diff --git a/remote/modules/dnbd3/module.build b/remote/modules/dnbd3/module.build index c954879c..dc24c875 100644 --- a/remote/modules/dnbd3/module.build +++ b/remote/modules/dnbd3/module.build @@ -44,3 +44,6 @@ build() { tarcopy "$(cat "$COPYLIST" | sort -u)" "${MODULE_BUILD_DIR}" } +post_copy() { + : +} -- cgit v1.2.3-55-g7522 From 0956eb6872117f68244dc3825a607f9892ad29fb Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 27 Jul 2016 16:23:26 +0200 Subject: [hardware-stats] Add -q to dmidecode calls --- .../data/opt/openslx/scripts/systemd-hardware_stats | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats b/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats index eba9c287..4227070f 100755 --- a/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats +++ b/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats @@ -40,7 +40,7 @@ fi MAC=${BOOTIF:3} # 2) Get machine UUID, with fallback to MAC address if it fails for some reason -UUID=$(dmidecode -s system-uuid | head -n 1) +UUID=$(dmidecode -q -s system-uuid | head -n 1) if [ "${#UUID}" -ne "36" ]; then echo "Determined UUID (${UUID}) has not expected length of 36, falling back to MAC..." UUID="000000000000000-$BOOTIF" @@ -151,12 +151,12 @@ dmidec() { esac echo "$LMODEL" } -MODEL=$(dmidec -s system-product-name) -MANUF=$(dmidec -s system-manufacturer) +MODEL=$(dmidec -q -s system-product-name) +MANUF=$(dmidec -q -s system-manufacturer) # Try fallback to baseboard if [ "$MODEL" = "Unknown" ]; then - MODEL=$(dmidec -s baseboard-product-name) - MANUF=$(dmidec -s baseboard-manufacturer) + MODEL=$(dmidec -q -s baseboard-product-name) + MANUF=$(dmidec -q -s baseboard-manufacturer) fi if [ "$MANUF" != "Unknown" ]; then -- cgit v1.2.3-55-g7522 From b8bd21ddf49de23c18db019a12cfe532b944e563 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 3 Aug 2016 10:09:35 +0200 Subject: [run-virt] usbdetect: Add class 239 ("misc. device") --- .../modules/run-virt/data/opt/openslx/scripts/includes/usb_detector.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'remote/modules') diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/usb_detector.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/usb_detector.inc index 9769c81d..a2d442e4 100644 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/usb_detector.inc +++ b/remote/modules/run-virt/data/opt/openslx/scripts/includes/usb_detector.inc @@ -2,7 +2,7 @@ # and then output the corresponding device ids. This can be used for selective # handover of devices to a virtual machine -declare -rg PASSTHROUGH_USB_DEVICES="2 0:5 0:6 0:7 0:14 0:16 0:17" +declare -rg PASSTHROUGH_USB_DEVICES="2 0:5 0:6 0:7 0:14 0:16 0:17 239" # $1: expression to fill with device information. # valid placeholders are: -- cgit v1.2.3-55-g7522 From 0e3b1d69a4c08a2e71aae2247f575325a301d259 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 3 Aug 2016 14:49:51 +0200 Subject: [run-virt/vmware] Patch resolution into vmx if it's an "odd one" vmware doesn't allow some resolutions by default on some guests, so this workaround forces the desired resolution by some additional vmx entries. --- .../scripts/includes/setup_virtual_floppy.inc | 2 +- .../openslx/vmchooser/vmware/includes/parse_vmx.inc | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc index ff562b20..5f12fe29 100644 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc +++ b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc @@ -19,7 +19,7 @@ else SHARE_REMAP_MODE_INI="$SHARE_REMAP_MODE" fi [ -z "$SHARE_CREATE_MISSING_REMAP" ] && SHARE_CREATE_MISSING_REMAP="1" -RESOLUTION=$(xrandr | grep -o -E 'connected\s*(primary)?\s*[0-9]+x[0-9]+\+0\+0' \ +declare -rg RESOLUTION=$(xrandr | grep -o -E 'connected\s*(primary)?\s*[0-9]+x[0-9]+\+0\+0' \ | grep -o -E -m1 '[0-9]+x[0-9]+') # Legacy: HOSTRES.TXT diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc index 878e9a9d..69ec513a 100644 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc @@ -128,8 +128,26 @@ if [ -n "$SLX_EXAM" ]; then echo 'gui.restricted = "true"' >> "${TMPCONFIG}" fi +# Hack resolution if we know the desired one is not in the default list of vmx_svga +# For now, only do it on the odd ones, as we don't know if this has any side effects +# This seems unnecessary on Win7 but is required on WinXP - need more research for other OSs +case "$RESOLUTION" in + 1600x900|2560x1440|2880x1800|3200x1800) + X=${RESOLUTION%x*} + Y=${RESOLUTION#*x} + BYTES=$(( ( ( X * Y * 4 + 65535 ) / 65536 ) * 65536 )) + [ "$BYTES" -lt 16777216 ] && BYTES=16777216 + cat >> "${TMPCONFIG}" <<-EOF + svga.autodetect = "FALSE" + svga.vramSize = $BYTES + svga.maxWidth = $X + svga.maxHeight = $Y + EOF + ;; +esac + # Killing duplicate lines (output much nicer than sort -u): -awk '!a[$0]++' "${TMPCONFIG}" > "${TMPCONFIG}.tmp" && mv "${TMPCONFIG}.tmp" "${TMPCONFIG}" +awk '!a[$0]++' "${TMPCONFIG}" > "${TMPCONFIG}.tmp" && mv -f "${TMPCONFIG}.tmp" "${TMPCONFIG}" # Apply $maxhardwareversion to final VMX HWVER=$(grep -i -m1 '^virtualHW.version *= *' "${TMPCONFIG}" | awk -F '=' '{print $2}' | sed -r 's/[^0-9]//g') -- cgit v1.2.3-55-g7522 From 593ff83002ecbcbc81f5f7842554bb56e3db62ea Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 3 Aug 2016 14:50:57 +0200 Subject: [hardware-stats] Only consider display :0 for usage detection --- .../data/opt/openslx/scripts/cron-system_usage_update | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/hardware-stats/data/opt/openslx/scripts/cron-system_usage_update b/remote/modules/hardware-stats/data/opt/openslx/scripts/cron-system_usage_update index 9ab77f4f..74486508 100755 --- a/remote/modules/hardware-stats/data/opt/openslx/scripts/cron-system_usage_update +++ b/remote/modules/hardware-stats/data/opt/openslx/scripts/cron-system_usage_update @@ -10,16 +10,17 @@ UUID=$(cat "/run/system-uuid") [ -z "$UUID" ] && exit 1 USED=0 +Name= for SESSION in $(loginctl | awk '{print $1}'); do unset Display Remote State - eval $(loginctl -p Display -p Remote -p State -p Class show-session "$SESSION") - if [ -n "$Display" ] && [ "$Remote" = "no" ] && [ "$State" = "active" -o "$State" = "online" ] && [ "$Class" = "user" ]; then - USED=1 - break; + eval $(loginctl -p Display -p Remote -p State -p Class -p Name show-session "$SESSION") + if [ "$Display" = ":0" ] && [ "$Remote" = "no" ] && [ "$State" = "active" -o "$State" = "online" ] && [ "$Class" = "user" ]; then + USED=1 # We only consider sessions on the primary display, which should always be the case + break fi done curl -s --data-urlencode "type=~runstate" --data-urlencode "uuid=$UUID" --data-urlencode "used=$USED" \ - "$SLX_REMOTE_LOG" > /dev/null 2>&1 + --data-urlencode "user=$Name" "$SLX_REMOTE_LOG" > /dev/null 2>&1 -- cgit v1.2.3-55-g7522 From 681448ed94f94a9f56ba81a569e7461d14804478 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 3 Aug 2016 14:54:36 +0200 Subject: [kernel-vanilla] -> 4.4.16 --- remote/modules/kernel-vanilla/module.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'remote/modules') diff --git a/remote/modules/kernel-vanilla/module.conf b/remote/modules/kernel-vanilla/module.conf index 0ea12bc3..c95db52b 100644 --- a/remote/modules/kernel-vanilla/module.conf +++ b/remote/modules/kernel-vanilla/module.conf @@ -1,5 +1,5 @@ REQUIRED_BINARIES="" REQUIRED_LIBRARIES="" REQUIRED_DIRECTORIES="" -REQUIRED_KERNEL="4.4.15" +REQUIRED_KERNEL="4.4.16" REQUIRED_GIT="git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git" -- cgit v1.2.3-55-g7522 From 820d16d840f462bf1b614f487cef1ddb589084b4 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 4 Aug 2016 16:01:53 +0200 Subject: [run-virt] Implement automatic firewalling --- .../openslx/scripts/includes/setup_firewall.inc | 12 ++ .../pam_script_ses_close.d/runvirt-firewall-clear | 17 +++ .../data/opt/openslx/scripts/vmchooser-run_virt | 4 + .../opt/openslx/vmchooser/scripts/set-firewall | 130 +++++++++++++++++++++ remote/modules/run-virt/fwtool/main.c | 32 +++++ remote/modules/run-virt/module.build | 1 + remote/modules/run-virt/module.conf | 1 + 7 files changed, 197 insertions(+) create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_firewall.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/pam_script_ses_close.d/runvirt-firewall-clear create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/scripts/set-firewall create mode 100644 remote/modules/run-virt/fwtool/main.c (limited to 'remote/modules') diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_firewall.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_firewall.inc new file mode 100644 index 00000000..f0820ed7 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_firewall.inc @@ -0,0 +1,12 @@ + +setup_firewall () { + local LOGF="${TMPDIR}/firewall.log" + local RET + [ "$DISPLAY" = ":0" ] || return 0 # For now, to avoid conflicts, we only do this on display :0 + slxfwtool "$IMGUUID" > "$LOGF" 2>&1 + RET=$? + if [ "$RET" != "0" ]; then + slxlog "runvirt-firewall" "Error setting up firewall rules for lecture $IMGUUID (Exit code $RET)" "$LOGF" + fi + return 0 +} diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/pam_script_ses_close.d/runvirt-firewall-clear b/remote/modules/run-virt/data/opt/openslx/scripts/pam_script_ses_close.d/runvirt-firewall-clear new file mode 100644 index 00000000..dab08190 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/scripts/pam_script_ses_close.d/runvirt-firewall-clear @@ -0,0 +1,17 @@ +#!/bin/ash + +# Sourced by pam_script_ses_close + +runvirt_fw_clear () { + iptables -w -F runvirt-INPUT + ip6tables -w -F runvirt-INPUT + iptables -w -F runvirt-OUTPUT + ip6tables -w -F runvirt-OUTPUT +} + +if [ "x$PAM_TTY" = "x:0" ]; then + runvirt_fw_clear > /dev/null 2>&1 +fi + +true + diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt b/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt index 5353d21a..ea3cfe8e 100755 --- a/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt +++ b/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt @@ -64,6 +64,10 @@ else # This include does not currently work. TODO. # source ${RUNVIRTINCLUDEDIR}/check_runvirt_needed_files.inc && filecheck + # Firewall + source "${RUNVIRTINCLUDEDIR}/setup_firewall.inc" || writelog "Could not source setup_firewall" + setup_firewall || writelog "Could not run setup_firewall" + # Read needed variables from XML file source ${RUNVIRTINCLUDEDIR}/get_xml_file_variables.inc diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/scripts/set-firewall b/remote/modules/run-virt/data/opt/openslx/vmchooser/scripts/set-firewall new file mode 100644 index 00000000..02ba2b5c --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/scripts/set-firewall @@ -0,0 +1,130 @@ +#!/bin/bash + +# Do not rename/move this script, or change fwtool.c accordingly + +[ "$UID" = "0" ] || exit 1 + +declare -rg RULES=$(mktemp) + +[ -n "$RULES" ] || exit 2 + +[ -n "$1" ] || exit 3 + +[ "${#1}" -ge 10 ] || exit 4 +[ "${#1}" -lt 40 ] || exit 5 + +. /opt/openslx/config + +for TOOL in iptables ip6tables; do + $TOOL -w -F runvirt-INPUT || $TOOL -w -N runvirt-INPUT + $TOOL -w -F runvirt-OUTPUT || $TOOL -w -N runvirt-OUTPUT + + if ! $TOOL -w -C INPUT -i br0 -j runvirt-INPUT; then + $TOOL -w -A INPUT -i br0 -j runvirt-INPUT + fi + if ! $TOOL -w -C OUTPUT -o br0 -j runvirt-OUTPUT; then + $TOOL -w -A OUTPUT -o br0 -j runvirt-OUTPUT + fi + if ! $TOOL -w -C FORWARD -i br0 -j runvirt-INPUT; then + $TOOL -w -A FORWARD -i br0 -j runvirt-INPUT + fi + if ! $TOOL -w -C FORWARD -o br0 -j runvirt-OUTPUT; then + $TOOL -w -A FORWARD -o br0 -j runvirt-OUTPUT + fi + $TOOL -A runvirt-INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT + $TOOL -A runvirt-OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT +done + +declare -rg AUTORULES=$(mktemp) + +add_ips () { + # add_ips "IN/OUT" "IP1 IP2 IPn" "PORT" "ACCEPT/REJECT" + local IP + [ -z "$1" -o -z "$2" -o -z "$3" -o -z "$4" ] && return 1 + for IP in $2; do + echo "$1 $IP $3 $4" >> "${AUTORULES}" + done +} + +add_ips "IN" "127.0.0.0/8" 0 "ACCEPT" +add_ips "OUT" "127.0.0.0/8" 0 "ACCEPT" +add_ips "OUT" "$SLX_DNS" 53 "ACCEPT" +add_ips "OUT" "$SLX_DNBD3_SERVERS" 5003 "ACCEPT" +add_ips "OUT" "$SLX_KCL_SERVERS $SLX_SERVER_IP" 0 "ACCEPT" + +if [ -n "$SLX_VM_NFS" ]; then + IP= + if [ "${SLX_VM_NFS:0:2}" = '//' ]; then + IP=${SLX_VM_NFS:2} + IP=${IP%%/*} + else + IP=${SLX_VM_NFS%%:*} + fi + [ -n "$IP" ] && add_ips "OUT" "$IP" 0 "ACCEPT" +fi + +sort -u "${AUTORULES}" > "${RULES}" + +wget -T 6 --no-verbose -O - "${SLX_VMCHOOSER_BASE_URL}/lecture/$1/netrules" >> "${RULES}" 2> "${AUTORULES}" +RET=$? + +if [ "$RET" != "0" ]; then + echo "wget exit code: $RET :-(" + grep -q "ERROR 404" "${AUTORULES}" && exit 0 + exit 6 +fi + +declare -rg V4='^[0-9]+(\.[0-9]+)*(/[0-9]+)?$' +declare -rg V6='^([0-9a-fA-F]+|:)(:+[0-9a-fA-F]*)*(/[0-9]+)?$' + +while read -r DIR DEST PORT ACTION GARBAGE || [ -n "$DIR" ]; do + if [ -z "$DEST" -o -z "$PORT" -o -z "$ACTION" ]; then + echo "Invalid rule: '$DIR $DEST $PORT $ACTION'" + continue + fi + IPLINE1=" -w" + IPLINE2= + if [ "$DIR" = "IN" ]; then + IPLINE1+=" -A runvirt-INPUT" + elif [ "$DIR" = "OUT" ]; then + IPLINE1+=" -A runvirt-OUTPUT" + else + continue + fi + if ! [[ $PORT =~ ^[0-9]+$ ]] || [ "$PORT" -gt 65535 ]; then + echo "Invalid port: '$PORT'" + continue + fi + if [ "$DEST" != "*" ]; then + if [ "$DIR" = "OUT" ]; then + IPLINE1+=" -d $DEST" + else + IPLINE1+=" -s $DEST" + fi + fi + if [ "$PORT" != 0 ]; then + IPLINE2+=" --dport $PORT" + fi + IPLINE2+=" -j $ACTION" + # IPv6? + if ! [[ $DEST =~ $V4 ]]; then + if [ "$PORT" = 0 ]; then + ip6tables $IPLINE1 $IPLINE2 + else + ip6tables $IPLINE1 -p tcp $IPLINE2 + ip6tables $IPLINE1 -p udp $IPLINE2 + fi + fi + # IPv4 + if ! [[ $DEST =~ $V6 ]]; then + if [ "$PORT" = 0 ]; then + iptables $IPLINE1 $IPLINE2 + else + iptables $IPLINE1 -p tcp $IPLINE2 + iptables $IPLINE1 -p udp $IPLINE2 + fi + fi +done < "$RULES" + +exit 0 + diff --git a/remote/modules/run-virt/fwtool/main.c b/remote/modules/run-virt/fwtool/main.c new file mode 100644 index 00000000..9e272384 --- /dev/null +++ b/remote/modules/run-virt/fwtool/main.c @@ -0,0 +1,32 @@ +#define _GNU_SOURCE +#include +#include +#include +#include + +int main(int argc, char **argv) +{ + if (argc < 2) { + puts("Nee\n"); + return 1; + } + char * const nargv[] = { + "bash", + "/opt/openslx/vmchooser/scripts/set-firewall", + argv[1], + 0 + }; + char * const nenv[] = { + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/openslx/sbin:/opt/openslx/bin", + "HOME=/root", + "LC_ALL=C", + "LANG=C", + 0 + }; + + setresuid(0, 0, 0); + setregid(0, 0); + + execve("/bin/bash", nargv, nenv); +} + diff --git a/remote/modules/run-virt/module.build b/remote/modules/run-virt/module.build index e9b0d581..eb718599 100644 --- a/remote/modules/run-virt/module.build +++ b/remote/modules/run-virt/module.build @@ -11,6 +11,7 @@ build () { # Compile pwdaemon mkdir -p "${MODULE_BUILD_DIR}/opt/openslx/bin" gcc -std=gnu99 -o "${MODULE_BUILD_DIR}/opt/openslx/bin/pwdaemon" -Os "${MODULE_DIR}/pw_daemon.c" || perror "Could not compile the pwdaemon" + gcc -std=gnu99 -o "${MODULE_BUILD_DIR}/opt/openslx/bin/slxfwtool" -Os "${MODULE_DIR}/fwtool/main.c" || perror "Could not compile slxfwtool" } post_copy() { diff --git a/remote/modules/run-virt/module.conf b/remote/modules/run-virt/module.conf index b52fae0e..73155f89 100644 --- a/remote/modules/run-virt/module.conf +++ b/remote/modules/run-virt/module.conf @@ -2,5 +2,6 @@ REQUIRED_BINARIES=" lsusb mcopy pwdaemon + slxfwtool " -- cgit v1.2.3-55-g7522 From b4ab4c58c014eb8985a885c0d2752bf7997e24ba Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 4 Aug 2016 16:02:20 +0200 Subject: [run-virt] Add lecture runscript to virtual floppy --- .../openslx/scripts/includes/setup_virtual_floppy.inc | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'remote/modules') diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc index 5f12fe29..9856f66a 100644 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc +++ b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc @@ -5,6 +5,10 @@ declare -rg FLOPPYIMG="${TMPDIR}/floppy.img" declare -rg TMPHOME="${HOME}" +declare -rg RUNSCRIPT="${TMPDIR}/runscript.tmp" + +wget -T 6 -O "${RUNSCRIPT}" -nv "${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}/runscript" & +WGET=$? dd "if=/dev/zero" "of=${FLOPPYIMG}" count=1440 bs=1024 chmod 0600 "${FLOPPYIMG}" @@ -66,8 +70,13 @@ media=${SHARE_MEDIA} other=${SHARE_OTHER} HIER +wait "$WGET" +EXT= +if [ -s "$RUNSCRIPT" ]; then + EXT=$(head -n 1 "$RUNSCRIPT" | grep -o -i '^EXT=.*$' | cut -d '=' -f 2-) +fi -# Copy all them there files into floppy image +# Copy all them there filez into floppy image mcopy -i "${FLOPPYIMG}" "${TMPDIR}/openslx.ini" "${TMPDIR}/HOSTRES.TXT" "${SHARES}" "::/" mcopy -i "${FLOPPYIMG}" "$VMCHOOSER_DIR/data/openslx.exe" "::/" # Copy guest configuration (with added information) config.xml to be accessed @@ -77,6 +86,12 @@ mcopy -i "${FLOPPYIMG}" "$xmlfile" "::/config.xml" # Copying linux directory: mcopy -s -i "${FLOPPYIMG}" "$VMCHOOSER_DIR/data/linux" "::/" +# User supplied runscript +if [ -n "$EXT" ]; then + sed -i '1d' "${RUNSCRIPT}" + mcopy -i "${FLOPPYIMG}" "${RUNSCRIPT}" "::/runscript.${EXT}" +fi + rm -f -- "${SHARES}" "${TMPDIR}/openslx.ini" "${TMPDIR}/HOSTRES.TXT" unset SHARES VAR NETHOME UNAME -- cgit v1.2.3-55-g7522 From e686d68284437d441c036bb2a61d8eeb42dce3b5 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 4 Aug 2016 16:25:59 +0200 Subject: [run-virt] $? != $! --- .../run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'remote/modules') diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc index 9856f66a..0b64b9e2 100644 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc +++ b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc @@ -8,7 +8,7 @@ declare -rg TMPHOME="${HOME}" declare -rg RUNSCRIPT="${TMPDIR}/runscript.tmp" wget -T 6 -O "${RUNSCRIPT}" -nv "${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}/runscript" & -WGET=$? +WGET=$! dd "if=/dev/zero" "of=${FLOPPYIMG}" count=1440 bs=1024 chmod 0600 "${FLOPPYIMG}" -- cgit v1.2.3-55-g7522 From 126583497f7b43b46d2e52a826537ae862d374dc Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 4 Aug 2016 16:49:43 +0200 Subject: [vmchooser2] Honor new autostart param/variable --- remote/modules/vmchooser2/data/opt/openslx/bin/vmchooser | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/vmchooser2/data/opt/openslx/bin/vmchooser b/remote/modules/vmchooser2/data/opt/openslx/bin/vmchooser index 0cf04135..dc659c64 100755 --- a/remote/modules/vmchooser2/data/opt/openslx/bin/vmchooser +++ b/remote/modules/vmchooser2/data/opt/openslx/bin/vmchooser @@ -41,9 +41,9 @@ fi # No quotes around $EXTRA! if [ -z "$SLX_LOCATIONS" ]; then - exec vmchooser.real "$@" --url "$URL" --fullscreen --tab "$TAB" $EXTRA + exec vmchooser.real "$@" --url "$URL" --fullscreen --tab "$TAB" --start-uuid "$SLX_EXAM_START" $EXTRA fi # No quotes around $EXTRA! -exec vmchooser.real "$@" --url "$URL" --fullscreen --tab "$TAB" --locations "$SLX_LOCATIONS" $EXTRA +exec vmchooser.real "$@" --url "$URL" --fullscreen --tab "$TAB" --start-uuid "$SLX_EXAM_START" --locations "$SLX_LOCATIONS" $EXTRA -- cgit v1.2.3-55-g7522 From 6bc277f9381de34e162ddc72388a96b6b5498ae4 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 5 Aug 2016 16:58:00 +0200 Subject: [screen-standby] New module for managing screen standby settings --- .../data/etc/X11/Xreset.d/screen-standby | 1 + .../data/etc/X11/Xsession.d/screen-standby | 1 + .../data/etc/X11/Xsetup.d/screen-standby | 1 + .../data/opt/openslx/scripts/screen-standby | 29 ++++++++++++++++++++++ remote/modules/screen-standby/module.build | 13 ++++++++++ remote/modules/screen-standby/module.conf | 5 ++++ remote/targets/stage32-bwlp/screen-standby | 1 + remote/targets/stage32-bwlp/xscreensaver | 1 + 8 files changed, 52 insertions(+) create mode 120000 remote/modules/screen-standby/data/etc/X11/Xreset.d/screen-standby create mode 120000 remote/modules/screen-standby/data/etc/X11/Xsession.d/screen-standby create mode 120000 remote/modules/screen-standby/data/etc/X11/Xsetup.d/screen-standby create mode 100644 remote/modules/screen-standby/data/opt/openslx/scripts/screen-standby create mode 100644 remote/modules/screen-standby/module.build create mode 100644 remote/modules/screen-standby/module.conf create mode 120000 remote/targets/stage32-bwlp/screen-standby create mode 120000 remote/targets/stage32-bwlp/xscreensaver (limited to 'remote/modules') diff --git a/remote/modules/screen-standby/data/etc/X11/Xreset.d/screen-standby b/remote/modules/screen-standby/data/etc/X11/Xreset.d/screen-standby new file mode 120000 index 00000000..b25fe082 --- /dev/null +++ b/remote/modules/screen-standby/data/etc/X11/Xreset.d/screen-standby @@ -0,0 +1 @@ +/opt/openslx/scripts/screen-standby \ No newline at end of file diff --git a/remote/modules/screen-standby/data/etc/X11/Xsession.d/screen-standby b/remote/modules/screen-standby/data/etc/X11/Xsession.d/screen-standby new file mode 120000 index 00000000..b25fe082 --- /dev/null +++ b/remote/modules/screen-standby/data/etc/X11/Xsession.d/screen-standby @@ -0,0 +1 @@ +/opt/openslx/scripts/screen-standby \ No newline at end of file diff --git a/remote/modules/screen-standby/data/etc/X11/Xsetup.d/screen-standby b/remote/modules/screen-standby/data/etc/X11/Xsetup.d/screen-standby new file mode 120000 index 00000000..b25fe082 --- /dev/null +++ b/remote/modules/screen-standby/data/etc/X11/Xsetup.d/screen-standby @@ -0,0 +1 @@ +/opt/openslx/scripts/screen-standby \ No newline at end of file diff --git a/remote/modules/screen-standby/data/opt/openslx/scripts/screen-standby b/remote/modules/screen-standby/data/opt/openslx/scripts/screen-standby new file mode 100644 index 00000000..74a09556 --- /dev/null +++ b/remote/modules/screen-standby/data/opt/openslx/scripts/screen-standby @@ -0,0 +1,29 @@ +#!/bin/ash + +# This is usually sourced by Xstartup/session/reset + +do_standby_stuff () { + . /opt/openslx/config + # Make sure SLX_SCREEN_STANDBY_TIMEOUT is numeric + TO=${SLX_SCREEN_STANDBY_TIMEOUT} + [ -z "${TO}" ] && TO=0 + [ "${TO}" -gt 0 ] || [ "${TO}" -lt 100 ] || TO=600 + [ "${TO}" -lt 0 ] && TO=0 + MIN=$(( TO / 60 )) + [ "$MIN" -gt 60 ] && MIN=60 + # Set + setterm -blank "$MIN" + setterm -powerdown "$MIN" + if [ "${TO}" = 0 ]; then + # Off + xset s "${TO}" "${TO}" + xset s off -dpms + else + xset +dpms + xset s "${TO}" "${TO}" + fi +} + +do_standby_stuff & +true + diff --git a/remote/modules/screen-standby/module.build b/remote/modules/screen-standby/module.build new file mode 100644 index 00000000..435a7b10 --- /dev/null +++ b/remote/modules/screen-standby/module.build @@ -0,0 +1,13 @@ +fetch_source() { + : +} + +build() { + COPYLIST="list_dpkg_output" + list_packet_files > "$COPYLIST" + tarcopy "$(cat "${COPYLIST}" | sort -u)" "${MODULE_BUILD_DIR}" +} + +post_copy() { + : +} diff --git a/remote/modules/screen-standby/module.conf b/remote/modules/screen-standby/module.conf new file mode 100644 index 00000000..96ca18d4 --- /dev/null +++ b/remote/modules/screen-standby/module.conf @@ -0,0 +1,5 @@ +REQUIRED_BINARIES=" +" +REQUIRED_LIBRARIES="" +REQUIRED_DIRECTORIES=" +" diff --git a/remote/targets/stage32-bwlp/screen-standby b/remote/targets/stage32-bwlp/screen-standby new file mode 120000 index 00000000..7930482f --- /dev/null +++ b/remote/targets/stage32-bwlp/screen-standby @@ -0,0 +1 @@ +../../modules/screen-standby \ No newline at end of file diff --git a/remote/targets/stage32-bwlp/xscreensaver b/remote/targets/stage32-bwlp/xscreensaver new file mode 120000 index 00000000..d2f4f1a8 --- /dev/null +++ b/remote/targets/stage32-bwlp/xscreensaver @@ -0,0 +1 @@ +../../modules/xscreensaver \ No newline at end of file -- cgit v1.2.3-55-g7522 From e77814d63863f910cb47c69632b6cd380a4ec4ba Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 11 Aug 2016 11:14:40 +0200 Subject: [vmware] Update to 12.1.1 --- remote/modules/vmware/module.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/vmware/module.conf b/remote/modules/vmware/module.conf index 697ba546..02f65c03 100644 --- a/remote/modules/vmware/module.conf +++ b/remote/modules/vmware/module.conf @@ -1,4 +1,4 @@ -REQUIRED_DOWNLOAD_BASE="http://softwareupdate.vmware.com/cds/vmw-desktop/ws/12.1.0/3272444/linux/core/" +REQUIRED_DOWNLOAD_BASE="http://softwareupdate.vmware.com/cds/vmw-desktop/ws/12.1.1/3770994/linux/core/" REQUIRED_TYPE="workstation" REQUIRED_MODULES="kernel" REQUIRED_DIRECTORIES=" @@ -38,8 +38,8 @@ REQUIRED_VMWARE_DELETIONS=" /etc/cups/thnuclnt.convs /etc/cups/thnuclnt.types /etc/modprobe.d/vmware-fuse.conf - /lib/modules/3.11.0-13-generic/misc/vmnet.ko - /lib/modules/3.11.0-13-generic/misc/vmmon.ko + /lib/modules/*-generic/misc/vmnet.ko + /lib/modules/*-generic/misc/vmmon.ko /usr/share/mime/packages/vmware-player.xml /usr/share/applications/vmware* /usr/share/desktop-directories/vmware-ace-vms.directory -- cgit v1.2.3-55-g7522 From 99d38b68e64d91575601f9f45fb27b8b266df000 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 11 Aug 2016 11:20:03 +0200 Subject: [kernel-vanilla] -> 4.4.17 --- remote/modules/kernel-vanilla/module.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'remote/modules') diff --git a/remote/modules/kernel-vanilla/module.conf b/remote/modules/kernel-vanilla/module.conf index c95db52b..795a97eb 100644 --- a/remote/modules/kernel-vanilla/module.conf +++ b/remote/modules/kernel-vanilla/module.conf @@ -1,5 +1,5 @@ REQUIRED_BINARIES="" REQUIRED_LIBRARIES="" REQUIRED_DIRECTORIES="" -REQUIRED_KERNEL="4.4.16" +REQUIRED_KERNEL="4.4.17" REQUIRED_GIT="git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git" -- cgit v1.2.3-55-g7522 From 704d8a989816592a01dd47b76954bb4f507ed4be Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 26 Aug 2016 15:30:47 +0200 Subject: [beamergui] Add more detection logic for big screens most likely being used as mirrors for audience --- .../data/opt/openslx/scripts/beamergui-mode_setter | 25 +++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/beamergui/data/opt/openslx/scripts/beamergui-mode_setter b/remote/modules/beamergui/data/opt/openslx/scripts/beamergui-mode_setter index 503e44fa..8fe9b4b6 100755 --- a/remote/modules/beamergui/data/opt/openslx/scripts/beamergui-mode_setter +++ b/remote/modules/beamergui/data/opt/openslx/scripts/beamergui-mode_setter @@ -55,13 +55,28 @@ if [ ${#OUTPUTNAMES[@]} -eq 2 ]; then # Either of them a projector? BEAMER= + MAYBEAMER= + SMALL= for i in 0 1; do - WIDTH=$(grep -E "^${OUTPUTNAMES[$i]}.*[0-9]+mm x [0-9]+mm" <<<"$XRANDR" | head -n 1 | grep -o -E ' [0-9]+mm x' | grep -o -E '[0-9]+') - if [ -z "$WIDTH" ] || [ "$WIDTH" -eq 0 ] || [ "$WIDTH" -gt 900 ]; then - echo "Screen $i is beamer, width is '$WIDTH'" - BEAMER=$i - fi + WIDTH=$(grep -E "^${OUTPUTNAMES[$i]}.*[0-9]+mm x [0-9]+mm" <<<"$XRANDR" | head -n 1 | grep -o -E ' [0-9]+mm x' | grep -o -E '[0-9]+') + if [ -z "$WIDTH" ] || [ "$WIDTH" -eq 0 ] || [ "$WIDTH" -gt 900 ]; then + echo "Screen $i is beamer, width is '$WIDTH'" + BEAMER=$i + elif [ -n "$WIDTH" ] && [ "$WIDTH" -gt 700 ]; then + MAYBEAMER=$i + elif [ -n "$WIDTH" ] && [ "$WIDTH" -lt 550 ]; then + SMALL=yes + fi done + if [ -z "$BEAMER" ] && [ -n "$MAYBEAMER" ] && [ -n "$SMALLONE" ]; then + # This is a hack on top of the other hack; we already treat outputs reporting a sufficiently large width + # as beamers, as we have encountered such devices in the wild. However, we might have just a large TV connected + # that is intended to be used just like a beamer to present the screen to the audience. So if we have a screen + # that is at least 70cm wide and the other one is no wider than 55cm we treat this as a beamer setup aswell. + # The reasoning here is that if it were a dual screen setup, the screens should be roughly the same size. + echo "Treating $MAYBEAMER as beamer as size difference is big enough" + BEAMER=$MAYBEAMER + fi if [ -n "$BEAMER" ]; then echo "${OUTPUTNAMES[$BEAMER]} is a beamer. " -- cgit v1.2.3-55-g7522 From 98fb0fe15fdfe40fedf178d56d3952d859475697 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 30 Aug 2016 18:19:54 +0200 Subject: [run-virt] Fix firewall setup by making wget calls busybox compliant, +s fw-binary --- .../run-virt/data/opt/openslx/scripts/includes/detect_legacy.inc | 2 +- .../run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc | 2 +- remote/modules/run-virt/data/opt/openslx/vmchooser/scripts/set-firewall | 2 +- remote/modules/run-virt/module.build | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/detect_legacy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/detect_legacy.inc index f77e955b..8bdfd8b1 100644 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/detect_legacy.inc +++ b/remote/modules/run-virt/data/opt/openslx/scripts/includes/detect_legacy.inc @@ -19,7 +19,7 @@ if [ -z "$IMGUUID" ]; then # Keine uuid: Abbruch, Legacy writelog "Could not extract a uuid param from ${xmlfile}. Triggering legacy mode." else # Now getting template file: - if ! wget -O "$TMPCONFIG" "${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}" 2>/dev/null >&2; then + if ! wget -T 6 -O "$TMPCONFIG" "${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}" 2>/dev/null >&2; then writelog "wget ${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}. Triggering legacy mode." else writelog "wget ${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID} successful." diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc index 0b64b9e2..3fd5c109 100644 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc +++ b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc @@ -7,7 +7,7 @@ declare -rg FLOPPYIMG="${TMPDIR}/floppy.img" declare -rg TMPHOME="${HOME}" declare -rg RUNSCRIPT="${TMPDIR}/runscript.tmp" -wget -T 6 -O "${RUNSCRIPT}" -nv "${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}/runscript" & +wget -T 6 -O "${RUNSCRIPT}" "${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}/runscript" > /dev/null & WGET=$! dd "if=/dev/zero" "of=${FLOPPYIMG}" count=1440 bs=1024 diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/scripts/set-firewall b/remote/modules/run-virt/data/opt/openslx/vmchooser/scripts/set-firewall index 02ba2b5c..2773150c 100644 --- a/remote/modules/run-virt/data/opt/openslx/vmchooser/scripts/set-firewall +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/scripts/set-firewall @@ -65,7 +65,7 @@ fi sort -u "${AUTORULES}" > "${RULES}" -wget -T 6 --no-verbose -O - "${SLX_VMCHOOSER_BASE_URL}/lecture/$1/netrules" >> "${RULES}" 2> "${AUTORULES}" +wget -T 6 -O - "${SLX_VMCHOOSER_BASE_URL}/lecture/$1/netrules" >> "${RULES}" 2> "${AUTORULES}" RET=$? if [ "$RET" != "0" ]; then diff --git a/remote/modules/run-virt/module.build b/remote/modules/run-virt/module.build index eb718599..56afd839 100644 --- a/remote/modules/run-virt/module.build +++ b/remote/modules/run-virt/module.build @@ -15,6 +15,6 @@ build () { } post_copy() { - : + chmod +s "${TARGET_BUILD_DIR}/opt/openslx/bin/slxfwtool" || perror "Could not set suid bit on slxfwtool" } -- cgit v1.2.3-55-g7522 From 459029ac54521d4b3a04d1b4dac9070b43e34c36 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 1 Sep 2016 11:54:08 +0200 Subject: [vmchooser2] Extend remote logging format --- .../openslx/vmchooser/sessionstart.d/log-selected-session | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'remote/modules') diff --git a/remote/modules/vmchooser2/data/opt/openslx/vmchooser/sessionstart.d/log-selected-session b/remote/modules/vmchooser2/data/opt/openslx/vmchooser/sessionstart.d/log-selected-session index 2499b3b7..fb8ae9eb 100755 --- a/remote/modules/vmchooser2/data/opt/openslx/vmchooser/sessionstart.d/log-selected-session +++ b/remote/modules/vmchooser2/data/opt/openslx/vmchooser/sessionstart.d/log-selected-session @@ -1,5 +1,16 @@ #!/bin/ash -[ -n "$SESSION_NAME" ] && slxlog ".vmchooser-session-name" "$SESSION_NAME" +[ -z "${SESSION_UUID}${SESSION_NAME}" ] && exit 0 + +. /opt/openslx/config + +[ -z "$SLX_REMOTE_LOG" ] && exit 0 + +REALUSER=$(whoami) +LOGUSER=0 +[ "x$SLX_REMOTE_LOG_SESSIONS" = "xyes" ] && LOGUSER=1 + +curl --data-urlencode "type=.vmchooser-session" --data-urlencode "uuid=$SESSION_UUID" --data-urlencode "name=$SESSION_NAME" \ + --data-urlencode "user=$REALUSER" --data-urlencode "loguser=$LOGUSER" "$SLX_REMOTE_LOG" exit 0 -- cgit v1.2.3-55-g7522 From 9feb645feedb66412408b9562ccac74d86f6f822 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 1 Sep 2016 14:25:33 +0200 Subject: [dmidecode] New module: Compile on our own so we support 'em all The distro's dmidecode might be a little out of date and won't support all the latest hardware at all times. --- remote/modules/dmidecode/module.build | 27 ++++++++++++++++++++++ remote/modules/dmidecode/module.conf | 4 ++++ .../opt/openslx/scripts/systemd-hardware_stats | 4 ++-- remote/modules/hardware-stats/module.conf | 4 +++- 4 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 remote/modules/dmidecode/module.build create mode 100644 remote/modules/dmidecode/module.conf (limited to 'remote/modules') diff --git a/remote/modules/dmidecode/module.build b/remote/modules/dmidecode/module.build new file mode 100644 index 00000000..1d58d03c --- /dev/null +++ b/remote/modules/dmidecode/module.build @@ -0,0 +1,27 @@ +#!/bin/bash + + +fetch_source() { + [ -d "${MODULE_DIR}/src/.git" ] && return 0 + rm -rf -- "${MODULE_DIR}/src" + git clone "${REQUIRED_GIT}" "${MODULE_DIR}/src" || perror "Could not create ${MODULE_DIR}/src" +} + +build() { + + # compilation + cd "${MODULE_DIR}/src" || perror "Could not cd to '${MODULE_DIR}/src'. Did fetch_source work?" + + make || perror "Could not compile dmidecode using 'make'." + + # NO MAKE INSTALL: Copy to build dir, since there are no shared libs linked in + mkdir -p "${MODULE_BUILD_DIR}/usr/sbin" + cp "${MODULE_DIR}/src/dmidecode" "${MODULE_BUILD_DIR}/usr/sbin/" || perror "Could not copy dmidecode binary to ${MODULE_BUILD_DIR}" + + cd - &>/dev/null +} + +post_copy() { + : +} + diff --git a/remote/modules/dmidecode/module.conf b/remote/modules/dmidecode/module.conf new file mode 100644 index 00000000..3f58cff4 --- /dev/null +++ b/remote/modules/dmidecode/module.conf @@ -0,0 +1,4 @@ +REQUIRED_GIT="git://git.savannah.nongnu.org/dmidecode.git" +REQUIRED_BINARIES=" + dmidecode +" diff --git a/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats b/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats index 4227070f..5a776054 100755 --- a/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats +++ b/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats @@ -40,7 +40,7 @@ fi MAC=${BOOTIF:3} # 2) Get machine UUID, with fallback to MAC address if it fails for some reason -UUID=$(dmidecode -q -s system-uuid | head -n 1) +UUID=$(dmidecode -q -s system-uuid | grep -v '^#' | head -n 1) if [ "${#UUID}" -ne "36" ]; then echo "Determined UUID (${UUID}) has not expected length of 36, falling back to MAC..." UUID="000000000000000-$BOOTIF" @@ -143,7 +143,7 @@ fi # A) Read system model and manufacturer dmidec() { - local LMODEL=$(dmidecode "$@" 2>/dev/null | grep -v '^Invalid' | sed 's/\s\s*/ /g;s/^ //;s/ $//') + local LMODEL=$(dmidecode "$@" 2>/dev/null | grep -v '^#' | grep -v '^Invalid' | sed 's/\s\s*/ /g;s/^ //;s/ $//') case "$LMODEL" in ""|*"Product Name"*|*"be filled"*|"unknown"|*"product name"*) LMODEL="Unknown" diff --git a/remote/modules/hardware-stats/module.conf b/remote/modules/hardware-stats/module.conf index 5850b267..8e371d5b 100644 --- a/remote/modules/hardware-stats/module.conf +++ b/remote/modules/hardware-stats/module.conf @@ -1,6 +1,8 @@ +REQUIRED_MODULES=" + dmidecode +" REQUIRED_BINARIES=" rdmsr - dmidecode blockdev " -- cgit v1.2.3-55-g7522 From 392ba80dd0caaede65d5c52c9eefb66bfe278096 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 2 Sep 2016 17:59:02 +0200 Subject: [vmchooser] Enable exam mode param passing --- remote/modules/safe-mode/data/etc/X11/Xsession.d/00-exam-mode | 9 +++++++++ remote/modules/vmchooser2/data/opt/openslx/bin/vmchooser | 1 + 2 files changed, 10 insertions(+) create mode 100644 remote/modules/safe-mode/data/etc/X11/Xsession.d/00-exam-mode (limited to 'remote/modules') diff --git a/remote/modules/safe-mode/data/etc/X11/Xsession.d/00-exam-mode b/remote/modules/safe-mode/data/etc/X11/Xsession.d/00-exam-mode new file mode 100644 index 00000000..d4ab5359 --- /dev/null +++ b/remote/modules/safe-mode/data/etc/X11/Xsession.d/00-exam-mode @@ -0,0 +1,9 @@ +#!/bin/ash Being sourced but hey + +. /opt/openslx/config + +if [ "x$SLX_EXAM" = "xyes" ]; then + # Force usage of vmchooser + set -- "$(which vmchooser)" +fi + diff --git a/remote/modules/vmchooser2/data/opt/openslx/bin/vmchooser b/remote/modules/vmchooser2/data/opt/openslx/bin/vmchooser index dc659c64..2588c884 100755 --- a/remote/modules/vmchooser2/data/opt/openslx/bin/vmchooser +++ b/remote/modules/vmchooser2/data/opt/openslx/bin/vmchooser @@ -38,6 +38,7 @@ fi [ -n "$SLX_VMCHOOSER_TEMPLATES" ] && EXTRA="$EXTRA --template-mode $SLX_VMCHOOSER_TEMPLATES" [ -n "$SLX_VMCHOOSER_FORLOCATION" ] && EXTRA="$EXTRA --location-mode $SLX_VMCHOOSER_FORLOCATION" [ "$HW_KVM" != "ENABLED" ] && EXTRA="$EXTRA --no-vtx" +[ -n "$SLX_EXAM" ] && EXTRA="$EXTRA --exam-mode" # No quotes around $EXTRA! if [ -z "$SLX_LOCATIONS" ]; then -- cgit v1.2.3-55-g7522 From febc9c433dcf15e9e2b493367d202cc135cf33c3 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 2 Sep 2016 18:02:05 +0200 Subject: [xorg] Add xdotool --- remote/modules/xorg/module.conf | 1 + remote/modules/xorg/module.conf.ubuntu | 2 ++ 2 files changed, 3 insertions(+) (limited to 'remote/modules') diff --git a/remote/modules/xorg/module.conf b/remote/modules/xorg/module.conf index 2fc6ab94..c98f9586 100644 --- a/remote/modules/xorg/module.conf +++ b/remote/modules/xorg/module.conf @@ -11,6 +11,7 @@ REQUIRED_BINARIES=" xkbevd xrandr xset + xdotool xkbcomp vmmouse_detect " diff --git a/remote/modules/xorg/module.conf.ubuntu b/remote/modules/xorg/module.conf.ubuntu index 90a46747..807d8859 100644 --- a/remote/modules/xorg/module.conf.ubuntu +++ b/remote/modules/xorg/module.conf.ubuntu @@ -3,6 +3,7 @@ REQUIRED_INSTALLED_PACKAGES=" fonts-dejavu-extra ttf-dejavu-core x11-xserver-utils + xdotool " REQUIRED_CONTENT_PACKAGES=" xserver-xorg$UBUNTU_XORG_PKG_SUFFIX @@ -12,6 +13,7 @@ REQUIRED_CONTENT_PACKAGES=" xkb-data x11-xkb-utils x11-xserver-utils + xdotool xserver-xorg-input-evdev$UBUNTU_XORG_PKG_SUFFIX xserver-xorg-input-mouse$UBUNTU_XORG_PKG_SUFFIX xserver-xorg-input-vmmouse$UBUNTU_XORG_PKG_SUFFIX -- cgit v1.2.3-55-g7522 From eb0587ff0fc3b56409dc2f463af74c496991cd0a Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 5 Sep 2016 19:27:11 +0200 Subject: [vmware] Rely on usb config from server, only do fallback --- .../vmchooser/vmware/includes/parse_vmx.inc | 38 +++++++++++++--------- 1 file changed, 23 insertions(+), 15 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc index 69ec513a..edbaeddc 100644 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc @@ -18,7 +18,7 @@ echo 'ethernet0.addressType = "static"' >> "${TMPCONFIG}" echo 'ethernet0.address = "'"${macaddr}"'"' >> "${TMPCONFIG}" # DVD, CDROM -# XXX: For now it's save to assume ide channel 1 is free, as we support only one HDD, and it it's IDE, it's on channel 0 +# XXX: For now it's safe to assume ide channel 1 is free, as we support only one HDD, and if it's IDE, it's on channel 0 cat >> "${TMPCONFIG}" <<-HEREEND ide1:0.present = "$cdrom0" ide1:0.autodetect = "TRUE" @@ -60,17 +60,21 @@ MemAllowAutoScaleDown = "FALSE" MemTrimRate = "-1" HEREEND -# USB -if [ -n "$SLX_EXAM" ]; then - # Exam mode: No USB (TODO: Configurable) - sed -i '/^usb\./d' "${TMPCONFIG}" - echo 'usb.present = "FALSE"' >> "${TMPCONFIG}" -else - cat >> "${TMPCONFIG}" <<-HEREEND - usb.present = "TRUE" - usb.generic.autoconnect = "TRUE" - HEREEND +# USB fallback: Only write usb config if there's none +if ! grep -q -i "^usb\.present" "${TMPCONFIG}"; then + # Nothing found, go ahead + if [ -n "$SLX_EXAM" ]; then + # Exam mode: Default to no USB + sed -i '/^usb\./Id' "${TMPCONFIG}" + echo 'usb.present = "FALSE"' >> "${TMPCONFIG}" + else + cat >> "${TMPCONFIG}" <<-HEREEND + usb.present = "TRUE" + HEREEND + fi fi +sed -i '/^usb\.generic\.autoconnect/Id' "${TMPCONFIG}" +echo 'usb.generic.autoconnect = "TRUE"' >> "${TMPCONFIG}" # shared folders if [ "$HGFS_DISABLED" = "FALSE" ]; then @@ -120,7 +124,7 @@ else fi # Disable DPI scaling information passing via vmware tools -sed -i '/^gui.applyHostDisplayScaling/d' "${TMPCONFIG}" +sed -i '/^gui.applyHostDisplayScaling/Id' "${TMPCONFIG}" echo 'gui.applyHostDisplayScalingToGuest = "FALSE"' >> "${TMPCONFIG}" # Additinal exam mode settings @@ -168,10 +172,14 @@ fi #grep -qi '^vpmc\.enable' "${TMPCONFIG}" || echo 'vpmc.enable = "TRUE"' >> "${TMPCONFIG}" # Disable space check warnings -sed -i '/^mainMem.freeSpaceCheck/d' "${TMPCONFIG}" +sed -i '/^mainMem.freeSpaceCheck/Id' "${TMPCONFIG}" echo 'mainMem.freeSpaceCheck = "FALSE"' >> "${TMPCONFIG}" # At last_ Let's copy it to $confdir/run-vmware.conf -cp -p "${TMPCONFIG}" "$conffile" && writelog "Copied TMPDIR/IMGUUID ${TMPCONFIG} to conffile ${conffile}" || \ - ( writelog "Could not copy TMPDIR/IMGUUID -${TMPCONFIG}- to conffile ${conffile}!"; cleanexit 1 ) +if cp -p "${TMPCONFIG}" "$conffile"; then + writelog "Copied TMPDIR/IMGUUID ${TMPCONFIG} to conffile ${conffile}" +else + writelog "Could not copy TMPDIR/IMGUUID -${TMPCONFIG}- to conffile ${conffile}!" + cleanexit 1 +fi -- cgit v1.2.3-55-g7522 From 7300288761fb269dfcef316a8e79a4e48ae77c12 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 5 Sep 2016 20:44:02 +0200 Subject: [pam-bwidm] Support organization filtering --- .../pam-bwidm/data/opt/openslx/scripts/pam_bwidm | 44 +++++++++++++++++----- 1 file changed, 35 insertions(+), 9 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/pam-bwidm/data/opt/openslx/scripts/pam_bwidm b/remote/modules/pam-bwidm/data/opt/openslx/scripts/pam_bwidm index 69a0b657..1ea5a8a8 100755 --- a/remote/modules/pam-bwidm/data/opt/openslx/scripts/pam_bwidm +++ b/remote/modules/pam-bwidm/data/opt/openslx/scripts/pam_bwidm @@ -8,6 +8,15 @@ # fix PATH as PAM clears it export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/openslx/sbin:/opt/openslx/bin" + +# grab the password from stdin asap, since there is no guarantee some tool just reads it +unset USER_PASSWORD +if [ "x$PAM_TYPE" == "xauth" ]; then + read -r USER_PASSWORD > /dev/null 2>&1 + readonly USER_PASSWORD + [ -z "$USER_PASSWORD" ] && echo "No password given." && exit 1 +fi + if ! busybox which curl || ! busybox which mktemp; then echo "'curl/mktemp' missing. This script won't work without it." exit 1 @@ -27,14 +36,16 @@ exec > "${LOGFILE}" 2>&1 # check if we are allowed to run . /opt/openslx/config -[ -z "${SLX_BWIDM_AUTH}" -o "x${SLX_BWIDM_AUTH}" != "xyes" ] && echo "bwIDM login disabled in openslx-config." && exit 1 - -# grab the password from stdin asap, since there is no garantee some tool just reads it -unset USER_PASSWORD -if [ "x$PAM_TYPE" == "xauth" ]; then - read -r USER_PASSWORD > /dev/null 2>&1 - readonly USER_PASSWORD - [ -z "$USER_PASSWORD" ] && echo "No password given." && exit 1 +if [ "x${SLX_BWIDM_AUTH}" = "xyes" ]; then + : # Allow everything +elif [ "x${SLX_BWIDM_AUTH}" = "xselective" ]; then + if [ -z "${SLX_BWIDM_ORGS}" ]; then + echo "bwIDM selective mode with empty org list - exiting" + exit 1 + fi +else + echo "bwIDM login disabled in openslx-config." + exit 1 fi # sanity check on PAM_USER: contains '@'? @@ -50,6 +61,21 @@ readonly USER_ORGANISATION="${PAM_USER#*@}" [ -z "$USER_ORGANISATION" ] && echo "Could not parse organisation from given login: ${PAM_USER}. Aborting." && exit 1 [ -z "$USER_USERNAME" ] && echo "Could not parse user from given login: ${PAM_USER}. Aborting." && exit 1 +# Check if we're in selective mode and if so, whether the user's organization is whitelisted +if [ "x${SLX_BWIDM_AUTH}" = "xselective" ]; then + FOUND= + for org in ${SLX_BWIDM_ORGS}; do + if [ "x$org" = "x$USER_ORGANISATION" ]; then + FOUND=ya + break + fi + done + if [ -z "$FOUND" ]; then + echo "bwIDM organization $USER_ORGANISATION not in whitelist, abort" + exit 1 + fi +fi + # The given username is valid. Now we get the list of IdPs from the bwlp masterserver # and try to find the user's organisation @@ -76,7 +102,7 @@ USER_ECP_URL="$(awk -v idp="${USER_ORGANISATION}" -F '=' '{if($1==idp) print $2} # now create the bwidm group: find the first free GID from 1000 "downwards" to 100 BWIDM_GROUP="$(getent group bwidm)" if [ -z "$BWIDM_GROUP" ]; then - BWIDM_GID=1000 + BWIDM_GID=999 while [ "$BWIDM_GID" -gt 100 ]; do getent group "$BWIDM_GID" || break let BWIDM_GID-- -- cgit v1.2.3-55-g7522 From a3870d7f226126e5b85d5149069d5a846c5ce17f Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 8 Sep 2016 11:15:56 +0200 Subject: Formatting --- .../pvs2/data/opt/openslx/vmchooser/sessionstart.d/50-PVSclient | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/pvs2/data/opt/openslx/vmchooser/sessionstart.d/50-PVSclient b/remote/modules/pvs2/data/opt/openslx/vmchooser/sessionstart.d/50-PVSclient index 86f26a17..0b13b39b 100755 --- a/remote/modules/pvs2/data/opt/openslx/vmchooser/sessionstart.d/50-PVSclient +++ b/remote/modules/pvs2/data/opt/openslx/vmchooser/sessionstart.d/50-PVSclient @@ -19,8 +19,8 @@ if [ -n "${PVSMGR_SESSION_CMD}" ]; then fi # If the ENV var PVS has been set by vmchooser start pvsclient if [ -n "$PVS_AUTO_CONNECT" -a "$PVS_AUTO_CONNECT" == "TRUE" ]; then - pvsstartup --auto & + pvsstartup --auto & else - pvsstartup & + pvsstartup & fi exit 0 -- cgit v1.2.3-55-g7522 From 6fdaaf6b54f187f6961d1fc36cb5c76ed8d22879 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 8 Sep 2016 11:30:51 +0200 Subject: [pvs2] Renamed lock/unlock scripts --- remote/modules/pvs2/data/opt/openslx/bin/pvsstartup | 4 ++-- remote/modules/pvs2/module.build | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/pvs2/data/opt/openslx/bin/pvsstartup b/remote/modules/pvs2/data/opt/openslx/bin/pvsstartup index def24a81..b77dcd51 100755 --- a/remote/modules/pvs2/data/opt/openslx/bin/pvsstartup +++ b/remote/modules/pvs2/data/opt/openslx/bin/pvsstartup @@ -4,10 +4,10 @@ timediff=5 while [ $timediff -gt 3 ]; do start="$(date +%s)" - pvsclient $@ + pvsclient "$@" ret=$? end="$(date +%s)" - /opt/openslx/pvs2/unlock.sh + /opt/openslx/pvs2/kb-unlock.sh [ "$ret" == "0" ] && break timediff=$(( end - start )) done diff --git a/remote/modules/pvs2/module.build b/remote/modules/pvs2/module.build index 70b88350..970c3c00 100644 --- a/remote/modules/pvs2/module.build +++ b/remote/modules/pvs2/module.build @@ -26,9 +26,9 @@ build() { # copy external scripts under 'sample_configuration' mkdir -p "${MODULE_BUILD_DIR}/opt/openslx/pvs2/" if [ -d "${SRCDIR}/sample_configuration" ]; then - cp ${SRCDIR}/sample_configuration/*.sh "${MODULE_BUILD_DIR}/opt/openslx/pvs2/" \ + cp "${SRCDIR}/sample_configuration"/{kb-lock,kb-unlock,lockDesktop,switchToManager,switchBack}.sh "${MODULE_BUILD_DIR}/opt/openslx/pvs2/" \ || perror "Could not copy external scripts to '${MODULE_BUILD_DIR}/opt/openslx/pvs2/'!" - chmod +x ${MODULE_BUILD_DIR}/opt/openslx/pvs2/*.sh \ + chmod +x "${MODULE_BUILD_DIR}/opt/openslx/pvs2"/*.sh \ || perror "Could not set executable bit for external scripts." fi -- cgit v1.2.3-55-g7522 From 6eea8f48ac415be6208ffb55167b67a539874ac4 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 8 Sep 2016 12:34:05 +0200 Subject: [pvs2] Support fetching remote pvs2.ini; honor exam mode, dedicated flag --- .../system/multi-user.target.wants/pvsmgr.service | 1 + .../pvs2/data/etc/systemd/system/pvsmgr.service | 12 +++++++++ .../modules/pvs2/data/opt/openslx/bin/pvsstartup | 13 +++++++++- .../pvs2/data/opt/openslx/scripts/setup-pvsmgr | 8 ++++++ .../pvs2/data/opt/openslx/scripts/systemd-pvsmgr | 30 ++++++++++++++++++++++ 5 files changed, 63 insertions(+), 1 deletion(-) create mode 120000 remote/modules/pvs2/data/etc/systemd/system/multi-user.target.wants/pvsmgr.service create mode 100644 remote/modules/pvs2/data/etc/systemd/system/pvsmgr.service create mode 100644 remote/modules/pvs2/data/opt/openslx/scripts/systemd-pvsmgr (limited to 'remote/modules') diff --git a/remote/modules/pvs2/data/etc/systemd/system/multi-user.target.wants/pvsmgr.service b/remote/modules/pvs2/data/etc/systemd/system/multi-user.target.wants/pvsmgr.service new file mode 120000 index 00000000..cab88a66 --- /dev/null +++ b/remote/modules/pvs2/data/etc/systemd/system/multi-user.target.wants/pvsmgr.service @@ -0,0 +1 @@ +../pvsmgr.service \ No newline at end of file diff --git a/remote/modules/pvs2/data/etc/systemd/system/pvsmgr.service b/remote/modules/pvs2/data/etc/systemd/system/pvsmgr.service new file mode 100644 index 00000000..281e1ab4 --- /dev/null +++ b/remote/modules/pvs2/data/etc/systemd/system/pvsmgr.service @@ -0,0 +1,12 @@ +[Unit] +Description=Fetch up to date pvsmgr config +DefaultDependencies=no +After=tmp.target +Wants=tmp.target +Before=graphical.target + +[Service] +Type=oneshot +ExecStart=/opt/openslx/scripts/systemd-pvsmgr +RemainAfterExit=yes + diff --git a/remote/modules/pvs2/data/opt/openslx/bin/pvsstartup b/remote/modules/pvs2/data/opt/openslx/bin/pvsstartup index b77dcd51..dc7bd48a 100755 --- a/remote/modules/pvs2/data/opt/openslx/bin/pvsstartup +++ b/remote/modules/pvs2/data/opt/openslx/bin/pvsstartup @@ -1,7 +1,15 @@ #!/bin/ash -# TODO UNTESTED! timediff=5 +counter=0 + +. /opt/openslx/config +if [ -n "$SLX_PVS_CONFIG_URL" ]; then + [ -z "$UID" ] && UID="$(id -u)" + [ -z "$HOME" ] && HOME="$(getent passwd "$UID" | head -n 1 | awk -F ':' '{print $6}')" + wget -O "$HOME/.config/openslx/pvs2/pvs2.ini" "$SLX_PVS_CONFIG_URL" +fi + while [ $timediff -gt 3 ]; do start="$(date +%s)" pvsclient "$@" @@ -10,6 +18,9 @@ while [ $timediff -gt 3 ]; do /opt/openslx/pvs2/kb-unlock.sh [ "$ret" == "0" ] && break timediff=$(( end - start )) + counter=$(( counter + 1 )) + [ $counter -gt 8 ] && break done +exit $ret diff --git a/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr b/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr index 7a6c13d9..f58ce099 100755 --- a/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr +++ b/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr @@ -1,4 +1,12 @@ #!/bin/ash openbox & + +. /opt/openslx/config +if [ -n "$SLX_PVS_CONFIG_URL" ]; then + [ -z "$UID" ] && UID="$(id -u)" + [ -z "$HOME" ] && HOME="$(getent passwd "$UID" | head -n 1 | awk -F ':' '{print $6}')" + wget -O "$HOME/.config/openslx/pvs2/pvs2.ini" "$SLX_PVS_CONFIG_URL" +fi + exec /opt/openslx/bin/pvsmgr --manager-only diff --git a/remote/modules/pvs2/data/opt/openslx/scripts/systemd-pvsmgr b/remote/modules/pvs2/data/opt/openslx/scripts/systemd-pvsmgr new file mode 100644 index 00000000..34ae61d5 --- /dev/null +++ b/remote/modules/pvs2/data/opt/openslx/scripts/systemd-pvsmgr @@ -0,0 +1,30 @@ +#!/bin/ash + +. /opt/openslx/config +DST="/opt/openslx/pvs2/pvs2.ini" + +# Try to get fresh version from server +if [ -n "$SLX_PVS_CONFIG_URL" ]; then + wget -O "${DST}.new" "$SLX_PVS_CONFIG_URL" + [ -s "${DST}.new" ] && mv -f "${DST}.new" "${DST}" +fi + +# Patch exam mode according to what our fetched config says +if [ -n "$SLX_EXAM" ]; then + EMODE=True +else + EMODE=False +fi +sed -i "/^examMode/d;/^\\[General\\]/a examMode=$EMODE" "$DST" + +# If this is a dedicated PVS station, make it launch right away +if [ -n "$SLX_PVS_DEDICATED" ] && cd /opt/openslx/xsessions; then + for file in *.desktop; do + cp -f "/usr/share/xsessions/pvs2mgr.desktop" "$file" + done + # patch autologin into kdmrc + sed -i '/AutoLogin.*=/d;/^\[X-.*-Core\]/a AutoLoginEnable=true\nAutoLoginUser=demo\nAutoLoginAgain=true\nAutoLoginDelay=0' "/etc/kde/kdm/kdmrc" +fi + +exit 0 + -- cgit v1.2.3-55-g7522 From ae00d87b4564090b276ec2b0d7ae707b2527991e Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 8 Sep 2016 16:29:58 +0200 Subject: [pam-bwidm] Create idp request with valid timestamp, don't pass password as command line argument --- .../pam-bwidm/data/opt/openslx/bwidm_soap.xml | 30 ++++++---------------- .../pam-bwidm/data/opt/openslx/scripts/pam_bwidm | 24 ++++++++++++++--- 2 files changed, 29 insertions(+), 25 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/pam-bwidm/data/opt/openslx/bwidm_soap.xml b/remote/modules/pam-bwidm/data/opt/openslx/bwidm_soap.xml index ef2c9490..ed456f9c 100644 --- a/remote/modules/pam-bwidm/data/opt/openslx/bwidm_soap.xml +++ b/remote/modules/pam-bwidm/data/opt/openslx/bwidm_soap.xml @@ -1,22 +1,8 @@ - - - - - - - __REMOTE_ENTITY_ID__ - - - - - + + + + https://bwlp-masterserver.ruf.uni-freiburg.de/shibboleth + + + + diff --git a/remote/modules/pam-bwidm/data/opt/openslx/scripts/pam_bwidm b/remote/modules/pam-bwidm/data/opt/openslx/scripts/pam_bwidm index 1ea5a8a8..ae62c7ee 100755 --- a/remote/modules/pam-bwidm/data/opt/openslx/scripts/pam_bwidm +++ b/remote/modules/pam-bwidm/data/opt/openslx/scripts/pam_bwidm @@ -133,18 +133,33 @@ readonly SOAP_ENVELOPE="/opt/openslx/bwidm_soap.xml" # now the pam-type specific part starts if [ "x$PAM_TYPE" == "xauth" ]; then + HA='Accept: text/html; application/vnd.paos+xml' + HP='PAOS: ver="urn:liberty:paos:2003-08";"urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp"' + CT='Content-Type: application/vnd.paos+xml; charset=utf-8' + NOW=$(date -u '+%Y-%m-%dT%H:%M:%SZ') + HOST=$(echo "${USER_ECP_URL}" | awk -F '/' '{print $3}') + REQUEST=$(sed "s/%TIMESTAMP%/${NOW}/g" "${SOAP_ENVELOPE}") + NETRC=$(mktemp -p /run/) + [ -z "$NETRC" ] && NETRC="/run/netrc_$$_${USER}_${RANDOM}.tmp" + touch "$NETRC" + chmod 0600 "$NETRC" # now we are ready to actually send the credentials to the IdP # to be sure everything is working as expected - # we will first send a wrong password (by repeating the given password) and expect a 401 - ret=$(curl --connect-timeout 5 --max-time 15 -o /dev/null -w "%{http_code}" -d @"${SOAP_ENVELOPE}" -H "Content-Type: application/vnd.paos+xml" --basic -u "${USER_USERNAME}:${USER_PASSWORD}${USER_PASSWORD}" "$USER_ECP_URL") + # we will first send a wrong password and expect a 401 + echo "machine ${HOST} login ${USER_USERNAME} password ___invalid-INVALID++~" > "${NETRC}" + ret=$(curl --connect-timeout 5 --max-time 15 -o /dev/null -w "%{http_code}" -d "${REQUEST}" -H "$CT" -H "$HP" -H "$HA" --basic --netrc-file "$NETRC" "$USER_ECP_URL") if [ "x$ret" != "x401" ]; then # this means something else is bad, just exit echo "False authentication attempt did not return 401 as expected but: $ret" + rm -- "${NETRC}" exit 7 fi # the fake auth call behaved as expected, do the actualy login - ret=$(curl --connect-timeout 5 --max-time 15 -o /dev/null -w "%{http_code}" -d @"${SOAP_ENVELOPE}" -H "Content-Type: application/vnd.paos+xml" --basic -u "${USER_USERNAME}:${USER_PASSWORD}" "$USER_ECP_URL") + echo "machine ${HOST} login ${USER_USERNAME} password ${USER_PASSWORD}" > "${NETRC}" + ret=$(curl --connect-timeout 5 --max-time 15 -o /dev/null -w "%{http_code}" -d "${REQUEST}" -H "$CT" -H "$HP" -H "$HA" --basic --netrc-file "$NETRC" "$USER_ECP_URL") + echo "machine ${HOST} login ${USER_USERNAME} password ********************" > "${NETRC}" # It should be a tmpfs but you never know + rm -- "${NETRC}" if [ "x$ret" == "x200" ]; then # auth succeeded, lets create a local user representing the bwIDM user @@ -194,5 +209,8 @@ if [ "x$mainret" == "x7" ]; then # exit code 7 is our marker to push the logfile to the sat slxlog --delete "pam-bwidm" "Internal error during bwIDM authentication" "${LOGFILE}" exit 1 +else + rm -- "${LOGFILE}" fi exit "${mainret}" + -- cgit v1.2.3-55-g7522 From 413129de12028bd035faa6a9d812724257392951 Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Thu, 8 Sep 2016 17:11:57 +0200 Subject: [pam] fix stupid lightdm recursive bug by ignoring sessions where PAM_SERVICE='.*greeter' --- remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close | 2 ++ remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_open | 3 +++ 2 files changed, 5 insertions(+) (limited to 'remote/modules') diff --git a/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close b/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close index cd35a86b..e4a7c1b4 100755 --- a/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close +++ b/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close @@ -6,6 +6,8 @@ export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/o # can only work if script is run as root [ "x$(whoami)" = "xroot" ] || exit 0 +[ "x${PAM_SERVICE%greeter}" != "x${PAM_SERVICE}" ] && exit 0 + # NSA needs to know if [ "x$PAM_SERVICE" != "xsu" -a "x$PAM_SERVICE" != "xsudo" ]; then . /opt/openslx/config diff --git a/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_open b/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_open index 8ab34708..b918278e 100755 --- a/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_open +++ b/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_open @@ -3,6 +3,9 @@ # Needed as pam_script clears PATH export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/openslx/sbin:/opt/openslx/bin" +# just exit for greeter sessions +[ "x${PAM_SERVICE%greeter}" != "x${PAM_SERVICE}" ] && exit 0 + # NSA needs to know if [ "x$PAM_SERVICE" != "xsu" -a "x$PAM_SERVICE" != "xsudo" ]; then . /opt/openslx/config -- cgit v1.2.3-55-g7522 From 0c1a0b937647a519028b517f4ed3870b9f0f0e16 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 8 Sep 2016 17:18:04 +0200 Subject: [kdm] Run greeter as user kdm, not root -.- --- remote/modules/kdm/data/etc/kde4/kdm/kdmrc | 1 + 1 file changed, 1 insertion(+) (limited to 'remote/modules') diff --git a/remote/modules/kdm/data/etc/kde4/kdm/kdmrc b/remote/modules/kdm/data/etc/kde4/kdm/kdmrc index 5f9f9e39..b14a7929 100644 --- a/remote/modules/kdm/data/etc/kde4/kdm/kdmrc +++ b/remote/modules/kdm/data/etc/kde4/kdm/kdmrc @@ -3,6 +3,7 @@ PidFile=/var/run/kdm.pid ServerVTs=-7 # Always spawn :0 (this is the default but it won't hurt) StaticServers=:0 +GreeterUID=kdm [X-*-Greeter] UseTheme=true -- cgit v1.2.3-55-g7522 From c3a8cb57f19b390ac3437866aa17cf4e413e7145 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 8 Sep 2016 18:02:50 +0200 Subject: [pvs2] +x in scripts is helpful... --- remote/modules/pvs2/data/opt/openslx/scripts/systemd-pvsmgr | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 remote/modules/pvs2/data/opt/openslx/scripts/systemd-pvsmgr (limited to 'remote/modules') diff --git a/remote/modules/pvs2/data/opt/openslx/scripts/systemd-pvsmgr b/remote/modules/pvs2/data/opt/openslx/scripts/systemd-pvsmgr old mode 100644 new mode 100755 -- cgit v1.2.3-55-g7522 From 7ab4c0e0a857643a0e71a1a30b009efc214ea6b7 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 8 Sep 2016 18:32:55 +0200 Subject: [screen-standby] +x! +x everywhere! --- remote/modules/screen-standby/data/opt/openslx/scripts/screen-standby | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 remote/modules/screen-standby/data/opt/openslx/scripts/screen-standby (limited to 'remote/modules') diff --git a/remote/modules/screen-standby/data/opt/openslx/scripts/screen-standby b/remote/modules/screen-standby/data/opt/openslx/scripts/screen-standby old mode 100644 new mode 100755 -- cgit v1.2.3-55-g7522 From 36098629405622ca2eb6644997a3c1b057793d4b Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 9 Sep 2016 14:57:51 +0200 Subject: [pam-bwidm] Generate random ID so consecutive logins don't fail --- remote/modules/pam-bwidm/data/opt/openslx/bwidm_soap.xml | 8 +++++++- remote/modules/pam-bwidm/data/opt/openslx/scripts/pam_bwidm | 4 +++- 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/pam-bwidm/data/opt/openslx/bwidm_soap.xml b/remote/modules/pam-bwidm/data/opt/openslx/bwidm_soap.xml index ed456f9c..ec7f3ff8 100644 --- a/remote/modules/pam-bwidm/data/opt/openslx/bwidm_soap.xml +++ b/remote/modules/pam-bwidm/data/opt/openslx/bwidm_soap.xml @@ -1,6 +1,12 @@ - + https://bwlp-masterserver.ruf.uni-freiburg.de/shibboleth diff --git a/remote/modules/pam-bwidm/data/opt/openslx/scripts/pam_bwidm b/remote/modules/pam-bwidm/data/opt/openslx/scripts/pam_bwidm index ae62c7ee..92379719 100755 --- a/remote/modules/pam-bwidm/data/opt/openslx/scripts/pam_bwidm +++ b/remote/modules/pam-bwidm/data/opt/openslx/scripts/pam_bwidm @@ -138,7 +138,9 @@ if [ "x$PAM_TYPE" == "xauth" ]; then CT='Content-Type: application/vnd.paos+xml; charset=utf-8' NOW=$(date -u '+%Y-%m-%dT%H:%M:%SZ') HOST=$(echo "${USER_ECP_URL}" | awk -F '/' '{print $3}') - REQUEST=$(sed "s/%TIMESTAMP%/${NOW}/g" "${SOAP_ENVELOPE}") + RID="_c${RANDOM}a${RANDOM}f${RANDOM}f${RANDOM}e${RANDOM}e${RANDOM}" + RID="${RID:0:32}" + REQUEST=$(sed "s/%TIMESTAMP%/${NOW}/g;s/%REQUESTID%/${RID}/g" "${SOAP_ENVELOPE}") NETRC=$(mktemp -p /run/) [ -z "$NETRC" ] && NETRC="/run/netrc_$$_${USER}_${RANDOM}.tmp" touch "$NETRC" -- cgit v1.2.3-55-g7522 From 6c1cbb8e124a2a98b3144b822c6979ab171e2fd3 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 9 Sep 2016 15:37:39 +0200 Subject: [pvs2] Add iptables-helper file so pvs still works when a lecture uses firewalling --- remote/modules/pvs2/data/opt/openslx/iptables/rules.d/10-pvs | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100755 remote/modules/pvs2/data/opt/openslx/iptables/rules.d/10-pvs (limited to 'remote/modules') diff --git a/remote/modules/pvs2/data/opt/openslx/iptables/rules.d/10-pvs b/remote/modules/pvs2/data/opt/openslx/iptables/rules.d/10-pvs new file mode 100755 index 00000000..a24491fa --- /dev/null +++ b/remote/modules/pvs2/data/opt/openslx/iptables/rules.d/10-pvs @@ -0,0 +1,11 @@ +#!/bin/ash + +# Allow PVS ports +# Control connection - server and client perspective +iptables -I ipt-helper-INPUT 1 -i br0 -p tcp --dport 5194 -j ACCEPT +iptables -I ipt-helper-OUTPUT 1 -o br0 -p tcp --dport 5194 -j ACCEPT +# UDP discovery - server and client perspective +iptables -I ipt-helper-INPUT 1 -i br0 -p udp --dport 3492 -j ACCEPT +iptables -I ipt-helper-OUTPUT 1 -o br0 -p udp --dport 3492 -j ACCEPT +# VNC connection - incoming (client) only - small range as we use -autoport +iptables -I ipt-helper-INPUT 1 -i br0 -p tcp --dport 54112:54122 -j ACCEPT -- cgit v1.2.3-55-g7522 From 4c2f9d060635e7c99e00a42eb2f0eb75c57a9b67 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 14 Sep 2016 14:05:46 +0200 Subject: [vmware] 4 CPU cores on win xp --- .../vmware/includes/create_vmware_config_file.inc | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmware_config_file.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmware_config_file.inc index 9e0bfe4f..54af0dbc 100644 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmware_config_file.inc +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmware_config_file.inc @@ -62,35 +62,37 @@ case "$vmostype" in winnet*64|win*2003*64|windowsnet*64) vmostype="winnetstandard-64" MAXMEM="8000" + MAXCORES="8" ;; winnet*|win*2003*|windowsnet*) vmostype="winnetstandard" MAXMEM="4000" + MAXCORES="8" ;; winxphome*|windowsxphome*) vmostype="winxphome" MAXMEM="4000" - MAXCORES="1" + MAXCORES="2" ;; winxp*64|windowsxp*64) vmostype="winxppro-64" MAXMEM="8000" - MAXCORES="2" + MAXCORES="8" ;; winxp*|windowsxp*) vmostype="winxppro" MAXMEM="4000" - MAXCORES="1" + MAXCORES="4" ;; winvista-64) vmostype="winvista-64" MAXMEM="16000" - MAXCORES="2" + MAXCORES="4" ;; windows7-64) vmostype="windows7-64" MAXMEM="32000" - MAXCORES="4" + MAXCORES="8" ;; windows8-64) vmostype="windows8-64" @@ -128,11 +130,13 @@ case "$vmostype" in ;; win*) MAXMEM="8000" + MAXCORES="1" ;; dos|msdos*|ms-dos*) vmostype="dos" shfolders="FALSE" MAXMEM="128" + MAXCORES="1" ;; macos*64) vmostype="freebsd-64" -- cgit v1.2.3-55-g7522 From a73e54f5d98c74914fc8cd3ef0419cf3df409477 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 14 Sep 2016 22:04:54 +0200 Subject: [run-virt] openslx.exe: Windows NT4.0/2000 compatibility --- remote/modules/run-virt/winres/winres.c | 141 ++++++++++++++++++++++++++------ 1 file changed, 117 insertions(+), 24 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/run-virt/winres/winres.c b/remote/modules/run-virt/winres/winres.c index 1c5650b8..dc4d2858 100644 --- a/remote/modules/run-virt/winres/winres.c +++ b/remote/modules/run-virt/winres/winres.c @@ -43,6 +43,7 @@ static const ssize_t KEYLEN = 16; #define SETTINGS_FILE "B:\\OPENSLX.INI" #define SETTINGS_FILE_W L"B:\\OPENSLX.INI" +static HINSTANCE hKernel32, hShell32; static OSVERSIONINFO winVer; static BOOL bGetShares = FALSE; static netdrive_t drives[DRIVEMAX]; @@ -69,6 +70,7 @@ struct { } remap; static BOOL _createMissingRemap = FALSE; +static void setPowerState(); static int setResolution(); static int muteSound(); static int setShutdownText(); @@ -186,27 +188,69 @@ exit_func: bInProc = FALSE; } -static void loadPaths() +typedef HRESULT (*GFPTYPE)(HWND, int, HANDLE, DWORD, wchar_t*); +typedef HRESULT (*GSFTYPE)(HWND, int, ITEMIDLIST**); +typedef BOOL (*ID2PTYPE)(const ITEMIDLIST*, wchar_t*); + +/** + * Load given path (CSIDL). Store in default (must be allocated to hold at least MAX_PATH+1 chars). + * If it could not be retrieved by CSIDL and envName is not NULL, it will be read from the + * environment if possible. + * fallback will be used if everything else fails. + * fallback can be NULL, in which case the fallback is empty. + */ +static void loadPath(wchar_t *dest, int csidl, wchar_t *envName, wchar_t *fallback) { - // Determine a couple of default directories - if (SHGetFolderPathW(HWND_DESKTOP, CSIDL_PROGRAM_FILES, NULL, SHGFP_TYPE_CURRENT, programsPath) != S_OK) { - DWORD ret = GetEnvironmentVariableW(L"ProgramFiles", programsPath, MAX_PATH+1); - if (ret == 0 || ret > MAX_PATH) { - StringCchPrintfW(programsPath, MAX_PATH+1, L"C:\\Program Files"); + if (hShell32 != NULL) { + GFPTYPE aGetFolderPath = (GFPTYPE)GetProcAddress(hShell32, "SHGetFolderPathW"); + if (aGetFolderPath != NULL) { + if ((aGetFolderPath)(HWND_DESKTOP, csidl, NULL, SHGFP_TYPE_CURRENT, dest) == S_OK) + return; } - } - if (SHGetFolderPathW(HWND_DESKTOP, CSIDL_WINDOWS, NULL, SHGFP_TYPE_CURRENT, windowsPath) != S_OK) { - DWORD ret = GetEnvironmentVariableW(L"windir", windowsPath, MAX_PATH+1); - if (ret == 0 || ret > MAX_PATH) { - StringCchPrintfW(windowsPath, MAX_PATH+1, L"C:\\WINDOWS"); + // Fallback + GSFTYPE aGetSpecialFolder = (GSFTYPE)GetProcAddress(hShell32, "SHGetSpecialFolderLocation"); + ID2PTYPE aPathToId = (ID2PTYPE)GetProcAddress(hShell32, "SHGetPathFromIDListW"); + if (aGetSpecialFolder != NULL && aPathToId != NULL) { + ITEMIDLIST *list = NULL; + HRESULT ret1 = (aGetSpecialFolder)(HWND_DESKTOP, csidl, &list); + BOOL ret2 = FALSE; + if (ret1 == 0) { + ret2 = (aPathToId)(list, dest); + } + if (list != NULL) { + CoTaskMemFree(list); + } + if (ret2) + return; } } - if (SHGetFolderPathW(HWND_DESKTOP, CSIDL_DESKTOPDIRECTORY, NULL, SHGFP_TYPE_CURRENT, desktopPath) != S_OK) { - desktopPath[0] = 0; + if (envName != NULL) { + // Fallback + DWORD ret = GetEnvironmentVariableW(envName, dest, MAX_PATH+1); + if (ret > 0 && ret <= MAX_PATH) + return; + } + if (fallback != NULL) { + StringCchPrintfW(programsPath, MAX_PATH+1, fallback); + return; } + *dest = '\0'; +} + +static void loadPaths() +{ + // Determine a couple of default directories + // dest, id, env, fallback + loadPath(programsPath, CSIDL_PROGRAM_FILES, L"ProgramFiles", L"C:\\Program Files"); + loadPath(windowsPath, CSIDL_WINDOWS, L"windir", L"C:\\WINDOWS"); + loadPath(desktopPath, CSIDL_DESKTOPDIRECTORY, NULL, NULL); if (GetTempPathW(MAX_PATH+1, tempPath) == 0) { - tempPath[0] = 0; + DWORD ret = GetEnvironmentVariableW(L"TEMP", tempPath, MAX_PATH+1); + if (ret == 0 || ret > MAX_PATH) { + tempPath[0] = 0; + } } + //wlog(L"Programs: %s, Windows: %s, Desktop: %s, Temp: %s", programsPath, windowsPath, desktopPath, tempPath); StringCchPrintfW(logFile, LOGFILELEN, L"%s\\%s", desktopPath, L"openslx.log"); FILE *tfh = _wfopen(logFile, L"a+"); if (tfh == NULL) { @@ -242,11 +286,20 @@ static void loadPaths() int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { + hKernel32 = LoadLibraryW(L"kernel32.dll"); + if (hKernel32 == NULL) { + alog("Cannot load kernel32.dll"); + } + hShell32 = LoadLibraryW(L"shell32.dll"); + if (hShell32 == NULL) { + alog("Cannot load shell32.dll"); + } winVer.dwOSVersionInfoSize = sizeof(winVer); BOOL retVer = GetVersionEx(&winVer); CoInitialize(NULL); _startTime = GetTickCount(); loadPaths(); + loadPaths(); if (lpCmdLine != NULL && strstr(lpCmdLine, "debug") != NULL) { alog("Windows Version %d.%d", (int)winVer.dwMajorVersion, (int)winVer.dwMinorVersion); } @@ -255,12 +308,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine muteSound(); // Disable screen saver as it might give the false impression that the session is securely locked SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, FALSE, NULL, 0); - // Disable standby and idle-mode (this is a VM!) - if (winVer.dwMajorVersion >= 6) { // Vista+ - SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED | ES_AWAYMODE_REQUIRED); - } else { // XP/2003 - SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED); - } + // Same with standby + setPowerState(); // Any network shares to mount? readShareFile(); if (bGetShares || _remapMode != RM_NONE) { @@ -291,6 +340,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine TranslateMessage(&Msg); DispatchMessage(&Msg); } + FreeLibrary(hKernel32); return 0; } @@ -333,6 +383,25 @@ static int execute(wchar_t *path, wchar_t *arguments) return (int)exitCode; } +typedef EXECUTION_STATE (WINAPI *TETYPE)(EXECUTION_STATE); + +static void setPowerState() +{ + // Disable standby and idle-mode (this is a VM!) + if (hKernel32 == NULL || winVer.dwMajorVersion < 5 || (winVer.dwMajorVersion == 5 && winVer.dwMinorVersion < 1)) + return; + TETYPE aExecState = (TETYPE)GetProcAddress(hKernel32, "SetThreadExecutionState"); + if (aExecState == NULL) { + alog("Cannot get SetThreadExecutionState from kernel32.dll"); + return; + } + if (winVer.dwMajorVersion >= 6) { // Vista+ + (aExecState)(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED | ES_AWAYMODE_REQUIRED); + } else { // XP/2003 + (aExecState)(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED); + } +} + static int setResolution() { int ret; @@ -931,6 +1000,9 @@ static BOOL patchRegPath(BOOL *patchOk, BOOL *anyMapped, HKEY hKey, wchar_t *let return FALSE; } +typedef HANDLE (WINAPI *SNTYPE)(DWORD, DWORD); +typedef BOOL (WINAPI *P32TYPE)(HANDLE, PROCESSENTRY32W*); + static void patchUserPaths(wchar_t *letter) { LONG ret; @@ -989,15 +1061,36 @@ static void patchUserPaths(wchar_t *letter) return; } // Kill explorer + // Late binding + if (hKernel32 == NULL || winVer.dwMajorVersion < 5 || (winVer.dwMajorVersion == 5 && winVer.dwMinorVersion < 1)) { + return; + } + SNTYPE aCreateSnapshot; + P32TYPE aProcessFirst, aProcessNext; + aCreateSnapshot = (SNTYPE)GetProcAddress(hKernel32, "CreateToolhelp32Snapshot"); + if (aCreateSnapshot == NULL) { + alog("No CreateToolhelp32Snapshot in kernel.dll"); + return; + } + aProcessFirst = (P32TYPE)GetProcAddress(hKernel32, "Process32FirstW"); + if (aProcessFirst == NULL) { + alog("No Process32FirstW in kernel.dll"); + return; + } + aProcessNext = (P32TYPE)GetProcAddress(hKernel32, "Process32NextW"); + if (aProcessNext == NULL) { + alog("No Process32NextW in kernel.dll"); + return; + } PROCESSENTRY32W entry; entry.dwSize = sizeof(PROCESSENTRY32W); - HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); - if (snapshot != INVALID_HANDLE_VALUE && Process32FirstW(snapshot, &entry)) { + HANDLE snapshot = (aCreateSnapshot)(TH32CS_SNAPPROCESS, 0); + if (snapshot != INVALID_HANDLE_VALUE && (aProcessFirst)(snapshot, &entry)) { do { if (_wcsicmp(entry.szExeFile, L"explorer.exe") == 0) { HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID); if (hProcess == NULL) { - alog("Opening explorer.exe failed"); + alog("Cannot OpenProcess explorer.exe: Remapped paths will not work properly (GetLastError=%d)", (int)GetLastError()); } else { if (TerminateProcess(hProcess, 23)) { killOk = TRUE; @@ -1005,7 +1098,7 @@ static void patchUserPaths(wchar_t *letter) CloseHandle(hProcess); } } - } while (Process32NextW(snapshot, &entry)); + } while ((aProcessNext)(snapshot, &entry)); } else { alog("Could not get process list"); } -- cgit v1.2.3-55-g7522 From 53c4d5f4e5ed5e16006429c3781f1648664b692a Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 20 Sep 2016 18:52:56 +0200 Subject: [printergui] Support username prefix SLX_* option --- remote/modules/printergui/data/opt/openslx/scripts/run-virt_print | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'remote/modules') diff --git a/remote/modules/printergui/data/opt/openslx/scripts/run-virt_print b/remote/modules/printergui/data/opt/openslx/scripts/run-virt_print index ba352778..2f98b1ff 100755 --- a/remote/modules/printergui/data/opt/openslx/scripts/run-virt_print +++ b/remote/modules/printergui/data/opt/openslx/scripts/run-virt_print @@ -53,6 +53,12 @@ else errlog "printergui-nogs" "Warning: Cannot validate file prior to printing: gs binary not found" fi +# Set username prefix if found +. /opt/openslx/config +if [ -n "$SLX_PRINT_USER_PREFIX" ]; then + export PWGUI_USERPREFIX="$SLX_PRINT_USER_PREFIX" +fi + # Try to print $PRINTERGUI "$USER" "$FILE" RET=$? -- cgit v1.2.3-55-g7522 From 0ab2253cc5896d1e63d9bb591b75d094dc254427 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 20 Sep 2016 19:06:21 +0200 Subject: [vmware] Force USB 2.0 --- .../vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'remote/modules') diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc index edbaeddc..974c9839 100644 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc @@ -75,6 +75,11 @@ if ! grep -q -i "^usb\.present" "${TMPCONFIG}"; then fi sed -i '/^usb\.generic\.autoconnect/Id' "${TMPCONFIG}" echo 'usb.generic.autoconnect = "TRUE"' >> "${TMPCONFIG}" +# USB 3.0 support changes quality and has different side effects +# with every minor release of vmware. Always force 2.0 for now. +# TODO: Get it fixed by vmware? +sed -i '/^ehci\.present/Id;/^usb_xhci\.present/Id' "${TMPCONFIG}" +echo 'ehci.present = "TRUE"' >> "${TMPCONFIG}" # shared folders if [ "$HGFS_DISABLED" = "FALSE" ]; then -- cgit v1.2.3-55-g7522 From 7b171ef04afab139b3243894ff195ce8a58f9341 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 4 Oct 2016 14:31:18 +0200 Subject: [pvs2] Implement hybrid mode where the manager is running on the second virtual desktop --- .../pvs2/data/opt/openslx/scripts/setup-pvsmgr | 8 +------ .../openslx/vmchooser/sessionstart.d/50-PVSclient | 26 ++++++++++++++++++++-- 2 files changed, 25 insertions(+), 9 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr b/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr index f58ce099..f39e03aa 100755 --- a/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr +++ b/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr @@ -2,11 +2,5 @@ openbox & -. /opt/openslx/config -if [ -n "$SLX_PVS_CONFIG_URL" ]; then - [ -z "$UID" ] && UID="$(id -u)" - [ -z "$HOME" ] && HOME="$(getent passwd "$UID" | head -n 1 | awk -F ':' '{print $6}')" - wget -O "$HOME/.config/openslx/pvs2/pvs2.ini" "$SLX_PVS_CONFIG_URL" -fi +exec /opt/openslx/bin/pvsmgr "$@" -exec /opt/openslx/bin/pvsmgr --manager-only diff --git a/remote/modules/pvs2/data/opt/openslx/vmchooser/sessionstart.d/50-PVSclient b/remote/modules/pvs2/data/opt/openslx/vmchooser/sessionstart.d/50-PVSclient index 0b13b39b..a2d56049 100755 --- a/remote/modules/pvs2/data/opt/openslx/vmchooser/sessionstart.d/50-PVSclient +++ b/remote/modules/pvs2/data/opt/openslx/vmchooser/sessionstart.d/50-PVSclient @@ -1,6 +1,6 @@ #!/bin/ash -# SESSION_TYPE can be either 'VSESSION' or 'XSESSION' - currently not evaluated +# SESSION_TYPE can be either 'VSESSION' or 'XSESSION' # detect session command of the PVS-Manager session by looking at the xsession file PVSMGR_SESSION_CMD= @@ -17,10 +17,32 @@ if [ -n "${PVSMGR_SESSION_CMD}" ]; then # do not start pvsclient if we are running the pvs manager session [ "x${SESSION_CMD}" == "x${PVSMGR_SESSION_CMD}" ] && exit 0 fi + +. /opt/openslx/config +if [ -n "$SLX_PVS_CONFIG_URL" ]; then + [ -z "$UID" ] && UID="$(id -u)" + [ -z "$HOME" ] && HOME="$(getent passwd "$UID" | head -n 1 | awk -F ':' '{print $6}')" + wget -O "$HOME/.config/openslx/pvs2/pvs2.ini" "$SLX_PVS_CONFIG_URL" +fi + # If the ENV var PVS has been set by vmchooser start pvsclient -if [ -n "$PVS_AUTO_CONNECT" -a "$PVS_AUTO_CONNECT" == "TRUE" ]; then +if [ "$PVS_AUTO_CONNECT" == "TRUE" ]; then pvsstartup --auto & else pvsstartup & fi + +# Finally, handle hybrid mode where the pvsmgr is launched on the second desktop +# alongside the actual vm. (make sure this is a VSESSION!) +if [ "$SESSION_TYPE" == "VSESSION" ]; then + { + wt="PVS2-Manager" + pvsmgr --manager-only & + for i in 250 250 500 500 1000; do + usleep $(( i * 1000 )) || sleep 1 + wmctrl -r "$wt" -t 1 + done + } & +fi + exit 0 -- cgit v1.2.3-55-g7522 From b14ba5392a5d05156c824ee722c85217a684e0a6 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 5 Oct 2016 13:17:30 +0200 Subject: [run-virt] Finish support for runscript in openslx.exe and setup_virtual_floppy --- .../scripts/includes/setup_virtual_floppy.inc | 20 ++++++++++++-------- .../data/opt/openslx/vmchooser/data/openslx.exe | Bin 61952 -> 53248 bytes remote/modules/run-virt/winres/compile | 2 +- remote/modules/run-virt/winres/winres.c | 17 +++++++++++++++-- 4 files changed, 28 insertions(+), 11 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc index 3fd5c109..d9ae052c 100644 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc +++ b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc @@ -50,7 +50,16 @@ else done fi -# Info file +wait "$WGET" + +# Check downloaded runscript, handle extension marker +EXT= +if [ -s "$RUNSCRIPT" ]; then + EXT=$(head -n 1 "$RUNSCRIPT" | grep -o -i '^EXT=.*$' | cut -d '=' -f 2-) + [ -n "$EXT" ] && [ "x${EXT:0:1}" != "x." ] && EXT=".$EXT" +fi + +# Write info file UNAME= [ -s "${HOME}/.account" ] && UNAME=$(cat "${HOME}/.account") [ -z "${UNAME}" ] && UNAME=$(whoami) @@ -61,6 +70,7 @@ resolution=${RESOLUTION} createMissingRemap=${SHARE_CREATE_MISSING_REMAP} remapMode=${SHARE_REMAP_MODE_INI} homeDrive=${SHARE_HOME_DRIVE} +scriptExt=${EXT} [remap] documents=${SHARE_DOCUMENTS} @@ -70,12 +80,6 @@ media=${SHARE_MEDIA} other=${SHARE_OTHER} HIER -wait "$WGET" -EXT= -if [ -s "$RUNSCRIPT" ]; then - EXT=$(head -n 1 "$RUNSCRIPT" | grep -o -i '^EXT=.*$' | cut -d '=' -f 2-) -fi - # Copy all them there filez into floppy image mcopy -i "${FLOPPYIMG}" "${TMPDIR}/openslx.ini" "${TMPDIR}/HOSTRES.TXT" "${SHARES}" "::/" mcopy -i "${FLOPPYIMG}" "$VMCHOOSER_DIR/data/openslx.exe" "::/" @@ -89,7 +93,7 @@ mcopy -s -i "${FLOPPYIMG}" "$VMCHOOSER_DIR/data/linux" "::/" # User supplied runscript if [ -n "$EXT" ]; then sed -i '1d' "${RUNSCRIPT}" - mcopy -i "${FLOPPYIMG}" "${RUNSCRIPT}" "::/runscript.${EXT}" + mcopy -i "${FLOPPYIMG}" "${RUNSCRIPT}" "::/runscript${EXT}" fi rm -f -- "${SHARES}" "${TMPDIR}/openslx.ini" "${TMPDIR}/HOSTRES.TXT" diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/data/openslx.exe b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/openslx.exe index 8b98311a..c0904c92 100755 Binary files a/remote/modules/run-virt/data/opt/openslx/vmchooser/data/openslx.exe and b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/openslx.exe differ diff --git a/remote/modules/run-virt/winres/compile b/remote/modules/run-virt/winres/compile index 772571fb..da2f59eb 100755 --- a/remote/modules/run-virt/winres/compile +++ b/remote/modules/run-virt/winres/compile @@ -2,7 +2,7 @@ rm -- winres.exe i686-w64-mingw32-windres -i winres.rc -o resource.res -O coff -i686-w64-mingw32-gcc -Wall -Wextra -pedantic -Wno-unused-parameter -std=c99 -Os -Wl,--subsystem,windows -o winres.exe winres.c resource.res -lole32 -luuid -lgdi32 -lws2_32 -lshell32 -lmpr +i686-w64-mingw32-gcc -Wall -Wextra -pedantic -Wno-unused-parameter -flto -std=c99 -Os -Wl,--subsystem,windows -o winres.exe winres.c resource.res -lole32 -luuid -lgdi32 -lws2_32 -lshell32 -lmpr -lshlwapi rm -- resource.res if strip winres.exe; then echo "Successfully created winres.exe" diff --git a/remote/modules/run-virt/winres/winres.c b/remote/modules/run-virt/winres/winres.c index dc4d2858..d92b6521 100644 --- a/remote/modules/run-virt/winres/winres.c +++ b/remote/modules/run-virt/winres/winres.c @@ -4,6 +4,7 @@ #define WIN32_LEAN_AND_MEAN #define _UNICODE #define UNICODE +#define NO_SHLWAPI_STRFCNS #include #include #include @@ -21,6 +22,8 @@ #include #include #include +#include +#include DEFINE_GUID(ID_IAudioEndpointVolume, 0x5CDF2C82, 0x841E, 0x4546, 0x97, 0x22, 0x0C, 0xF7, 0x40, 0x78, 0x22, 0x9A); DEFINE_GUID(ID_IMMDeviceEnumerator, 0xa95664d2, 0x9614, 0x4f35, 0xa7,0x46, 0xde,0x8d,0xb6,0x36,0x17,0xe6); @@ -61,6 +64,9 @@ static int _folderStatus = FS_UNKNOWN; // -1 = Not handled yet, 0 = patching fai static int _remapMode = RM_NONE; static const char* _remapHomeDrive = NULL; +#define SCRIPTFILELEN (50) +char _scriptFile[SCRIPTFILELEN]; + struct { BOOL documents; BOOL downloads; @@ -282,6 +288,9 @@ static void loadPaths() buffer[1] = ':'; buffer[2] = '\0'; _remapHomeDrive = strdup(buffer); + // Get extension for autorun script + GetPrivateProfileStringA("openslx", "scriptExt", "", buffer, sizeof(buffer), SETTINGS_FILE); + StringCchPrintfA(_scriptFile, SCRIPTFILELEN, "B:\\runscript%s", buffer); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) @@ -296,10 +305,9 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine } winVer.dwOSVersionInfoSize = sizeof(winVer); BOOL retVer = GetVersionEx(&winVer); - CoInitialize(NULL); + CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); _startTime = GetTickCount(); loadPaths(); - loadPaths(); if (lpCmdLine != NULL && strstr(lpCmdLine, "debug") != NULL) { alog("Windows Version %d.%d", (int)winVer.dwMajorVersion, (int)winVer.dwMinorVersion); } @@ -334,6 +342,10 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine alog("Could not create timer for resolution setting: %d", (int)GetLastError()); } } + // Runscript (if any) + if (PathFileExistsA(_scriptFile)) { + ShellExecuteA(NULL, "open", _scriptFile, NULL, "B:\\", SW_SHOWNORMAL); + } // Message pump MSG Msg; while(GetMessage(&Msg, NULL, 0, 0) > 0) { @@ -341,6 +353,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine DispatchMessage(&Msg); } FreeLibrary(hKernel32); + FreeLibrary(hShell32); return 0; } -- cgit v1.2.3-55-g7522 From f8ba46c3558cc5fb823f3a5a768f00777366af8c Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 5 Oct 2016 13:20:36 +0200 Subject: [kernel-vanilla] 4.4.23 --- remote/modules/kernel-vanilla/module.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'remote/modules') diff --git a/remote/modules/kernel-vanilla/module.conf b/remote/modules/kernel-vanilla/module.conf index 795a97eb..ac647258 100644 --- a/remote/modules/kernel-vanilla/module.conf +++ b/remote/modules/kernel-vanilla/module.conf @@ -1,5 +1,5 @@ REQUIRED_BINARIES="" REQUIRED_LIBRARIES="" REQUIRED_DIRECTORIES="" -REQUIRED_KERNEL="4.4.17" +REQUIRED_KERNEL="4.4.23" REQUIRED_GIT="git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git" -- cgit v1.2.3-55-g7522 From 5bf92c41bae430daea1973f8e082ec3848895f7a Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 5 Oct 2016 13:21:11 +0200 Subject: [vmware] 12.5.0 --- remote/modules/vmware/module.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'remote/modules') diff --git a/remote/modules/vmware/module.conf b/remote/modules/vmware/module.conf index 02f65c03..60762614 100644 --- a/remote/modules/vmware/module.conf +++ b/remote/modules/vmware/module.conf @@ -1,4 +1,4 @@ -REQUIRED_DOWNLOAD_BASE="http://softwareupdate.vmware.com/cds/vmw-desktop/ws/12.1.1/3770994/linux/core/" +REQUIRED_DOWNLOAD_BASE="http://softwareupdate.vmware.com/cds/vmw-desktop/ws/12.5.0/4352439/linux/core/" REQUIRED_TYPE="workstation" REQUIRED_MODULES="kernel" REQUIRED_DIRECTORIES=" -- cgit v1.2.3-55-g7522 From 51c5f7cbd618fc2e67cb96fb0a31c3cae44090d1 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 6 Oct 2016 18:19:48 +0200 Subject: [run-virt/udhcpc] Fix passing on domain suffix and search domains to VMs via nat1 --- .../data/opt/openslx/scripts/udhcpc-openslx | 41 +++++++++++++--------- .../data/opt/openslx/scripts/systemd-run_virt_env | 18 ++++++---- .../opt/openslx/vmchooser/config/udhcpd-nat1.conf | 5 +-- 3 files changed, 40 insertions(+), 24 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/dhcpc-busybox/data/opt/openslx/scripts/udhcpc-openslx b/remote/modules/dhcpc-busybox/data/opt/openslx/scripts/udhcpc-openslx index dd8cd8ba..776f3f3b 100755 --- a/remote/modules/dhcpc-busybox/data/opt/openslx/scripts/udhcpc-openslx +++ b/remote/modules/dhcpc-busybox/data/opt/openslx/scripts/udhcpc-openslx @@ -87,16 +87,29 @@ case "$1" in # Update resolver configuration file CONF="" + # Own domain suffix if [ -n "$domain" ]; then - printf -v CONF "${CONF}domain $domain\n" + : elif [ -n "$dns_fqdn" ]; then domain="${dns_fqdn#*.}" - printf -v CONF "${CONF}domain $domain\n" elif [ -n "$SLX_NET_DOMAIN" ]; then domain="$SLX_NET_DOMAIN" - printf -v CONF "${CONF}domain $domain\n" fi + if [ -n "$domain" ]; then + printf -v CONF "${CONF}domain ${domain%% *}\n" + fi + # Add domain to list of search domains if not in there yet + if [ -n "$domain" ] && [ -n "$search" ]; then + FOUND=no + for sd in $search; do + [ "x$sd" = "x$domain" ] && FOUND=yes + done + [ "$FOUND" = "no" ] && search="$domain $search" + elif [ -n "$domain" ]; then + search="$domain" + fi + # Search domains if [ -n "$search" ]; then printf -v CONF "${CONF}search $search\n" elif [ -n "$SLX_SEARCH_DOMAIN" ]; then @@ -125,6 +138,15 @@ case "$1" in if [ "$interface" == "br0" ]; then # Update IP sed -i "s/^\(SLX_PXE_CLIENT_IP=\).*$/\1'$ip'/" /opt/openslx/config + # Write DOMAIN and SEARCH to /opt/openslx/config if empty + if [ -z "$SLX_NET_DOMAIN" ] && [ -n "$domain" ]; then + sed -i "/^SLX_NET_DOMAIN=/d" /opt/openslx/config + echo "SLX_NET_DOMAIN='$domain'" >> /opt/openslx/config + fi + if [ -z "$SLX_NET_SEARCH" ] && [ -n "$search" ]; then + sed -i "/^SLX_NET_SEARCH=/d" /opt/openslx/config + echo "SLX_NET_SEARCH='$search'" >> /opt/openslx/config + fi # Only if network is not ready yet if [ ! -e "/run/network/network-ready" ]; then @@ -150,16 +172,6 @@ case "$1" in fi fi - # if domain is given from dhcp, save it to openslx config for later use in VMs - if [ -n "$domain" ]; then - # check if SLX_NET_DOMAIN is in the config at all - if grep '^SLX_NET_DOMAIN=' /opt/openslx/config 2>/dev/null; then - sed -i "s/^\(SLX_NET_DOMAIN=\).*$/\1'$domain'/" /opt/openslx/config - else - # not set, add it - echo "SLX_NET_DOMAIN='$domain'" >> /opt/openslx/config - fi - fi # Update /etc/issue for proper spacing /opt/openslx/scripts/openslx-create_issue touch "/run/network/network-ready" @@ -200,9 +212,6 @@ case "$1" in # "default route exists" target if [ -n "$router" ] && [ ! -e "/run/network/gateway-ready" ]; then touch "/run/network/gateway-ready" - # Write to openslx-config - echo "# Config written by openslx-dhcp-script (3)" >> /opt/openslx/config - echo "SLX_DNS='$dns'" >> /opt/openslx/config systemctl start network-gateway.target & fi diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/systemd-run_virt_env b/remote/modules/run-virt/data/opt/openslx/scripts/systemd-run_virt_env index ba3122a1..506c4fff 100755 --- a/remote/modules/run-virt/data/opt/openslx/scripts/systemd-run_virt_env +++ b/remote/modules/run-virt/data/opt/openslx/scripts/systemd-run_virt_env @@ -168,17 +168,23 @@ echo "1" >/proc/sys/net/ipv4/conf/br0/forwarding 2>/dev/null ### iptables -t nat -A POSTROUTING -o br0 -s 192.168.0.0/16 -j MASQUERADE for wait in 1 1 2 2 3 end; do - grep '^SLX_DNS' "/opt/openslx/config" > /dev/null && break - [ "$wait" == "end" ] && echo "No DNS config found, using google dns" && break - echo "Waiting for DNS config.." + [ -n "$SLX_DNS" ] && [ -n "$SLX_NET_SEARCH" ] && break + if [ "$wait" == "end" ]; then + echo "No DNS config found, using google dns" + break + fi + echo "Waiting for DNS & search-domain config.." sleep "$wait" + . /opt/openslx/config done # read the DNS configuration and configure the udhcpd -[ -z "${SLX_DNS}" ] && SLX_DNS="8.8.8.8" -sed -i "s,DNSSERVER,${SLX_DNS},;s,DOMAIN,${SLX_NET_DOMAIN}," \ - "${DHCP_NAT_CONF}" +[ -z "${SLX_DNS}" ] && SLX_DNS="8.8.8.8 8.8.4.4" +[ -z "${SLX_NET_DOMAIN}" ] && SLX_NET_DOMAIN="virtual.site" +[ -z "${SLX_NET_SEARCH}" ] && SLX_NET_SEARCH="virtual.site" +sed -i "s#%DNSSERVER%#${SLX_DNS}#;s#%DOMAIN%#${SLX_NET_DOMAIN}#;s#%SEARCH%#${SLX_NET_SEARCH}#" "${DHCP_NAT_CONF}" +# Make sure the primary vm running (we most likely never run more than one at a time anyways) always gets the same ip echo "static_lease $(echo "$macaddrprefix:$macaddrsuffix" | sed 's/%VMID%/01/') 192.168.101.20" >> "${DHCP_NAT_CONF}" mkdir -p /var/lib/udhcpd diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/config/udhcpd-nat1.conf b/remote/modules/run-virt/data/opt/openslx/vmchooser/config/udhcpd-nat1.conf index bca1397c..95d8ebc0 100644 --- a/remote/modules/run-virt/data/opt/openslx/vmchooser/config/udhcpd-nat1.conf +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/config/udhcpd-nat1.conf @@ -31,11 +31,12 @@ lease_file /var/lib/udhcpd/udhcpd-nat1.leases # location of the pid file pidfile /var/run/udhcpd-nat1.pid -option dns DNSSERVER +option dns %DNSSERVER% option subnet 255.255.255.0 option router 192.168.101.1 option wins 192.168.101.10 -option domain DOMAIN virtual.site +option domain %DOMAIN% +option search %SEARCH% option lprsrv 192.168.101.1 #option ntpsrv NTPSERVER -- cgit v1.2.3-55-g7522 From 786df0669f73375d4bf5703c422e910839b7717f Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 10 Oct 2016 19:37:42 +0200 Subject: [pvs2] Use command line option for config file location; use new client side exam mode config --- remote/modules/pvs2/data/opt/openslx/bin/pvsstartup | 9 ++++----- .../pvs2/data/opt/openslx/scripts/setup-pvsmgr | 9 +++++++++ .../pvs2/data/opt/openslx/scripts/systemd-pvsmgr | 10 +--------- .../openslx/vmchooser/sessionstart.d/50-PVSclient | 21 ++++++++++++++++----- 4 files changed, 30 insertions(+), 19 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/pvs2/data/opt/openslx/bin/pvsstartup b/remote/modules/pvs2/data/opt/openslx/bin/pvsstartup index dc7bd48a..16a01708 100755 --- a/remote/modules/pvs2/data/opt/openslx/bin/pvsstartup +++ b/remote/modules/pvs2/data/opt/openslx/bin/pvsstartup @@ -4,15 +4,14 @@ timediff=5 counter=0 . /opt/openslx/config -if [ -n "$SLX_PVS_CONFIG_URL" ]; then - [ -z "$UID" ] && UID="$(id -u)" - [ -z "$HOME" ] && HOME="$(getent passwd "$UID" | head -n 1 | awk -F ':' '{print $6}')" - wget -O "$HOME/.config/openslx/pvs2/pvs2.ini" "$SLX_PVS_CONFIG_URL" +EXAM= +if [ -n "$SLX_EXAM" ]; then + EXAM="--exam-mode" fi while [ $timediff -gt 3 ]; do start="$(date +%s)" - pvsclient "$@" + pvsclient $EXAM "$@" ret=$? end="$(date +%s)" /opt/openslx/pvs2/kb-unlock.sh diff --git a/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr b/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr index f39e03aa..be44e87e 100755 --- a/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr +++ b/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr @@ -1,5 +1,14 @@ #!/bin/ash +. /opt/openslx/config +DST="/opt/openslx/pvs2/pvs2.ini" + +# Try to get fresh version from server +if [ -n "$SLX_PVS_CONFIG_URL" ]; then + wget -T 5 -O "${DST}.new" "$SLX_PVS_CONFIG_URL" + [ -s "${DST}.new" ] && mv -f "${DST}.new" "${DST}" +fi + openbox & exec /opt/openslx/bin/pvsmgr "$@" diff --git a/remote/modules/pvs2/data/opt/openslx/scripts/systemd-pvsmgr b/remote/modules/pvs2/data/opt/openslx/scripts/systemd-pvsmgr index 34ae61d5..1a56e8d0 100755 --- a/remote/modules/pvs2/data/opt/openslx/scripts/systemd-pvsmgr +++ b/remote/modules/pvs2/data/opt/openslx/scripts/systemd-pvsmgr @@ -5,18 +5,10 @@ DST="/opt/openslx/pvs2/pvs2.ini" # Try to get fresh version from server if [ -n "$SLX_PVS_CONFIG_URL" ]; then - wget -O "${DST}.new" "$SLX_PVS_CONFIG_URL" + wget -T 10 -O "${DST}.new" "$SLX_PVS_CONFIG_URL" [ -s "${DST}.new" ] && mv -f "${DST}.new" "${DST}" fi -# Patch exam mode according to what our fetched config says -if [ -n "$SLX_EXAM" ]; then - EMODE=True -else - EMODE=False -fi -sed -i "/^examMode/d;/^\\[General\\]/a examMode=$EMODE" "$DST" - # If this is a dedicated PVS station, make it launch right away if [ -n "$SLX_PVS_DEDICATED" ] && cd /opt/openslx/xsessions; then for file in *.desktop; do diff --git a/remote/modules/pvs2/data/opt/openslx/vmchooser/sessionstart.d/50-PVSclient b/remote/modules/pvs2/data/opt/openslx/vmchooser/sessionstart.d/50-PVSclient index a2d56049..5ff03227 100755 --- a/remote/modules/pvs2/data/opt/openslx/vmchooser/sessionstart.d/50-PVSclient +++ b/remote/modules/pvs2/data/opt/openslx/vmchooser/sessionstart.d/50-PVSclient @@ -18,18 +18,29 @@ if [ -n "${PVSMGR_SESSION_CMD}" ]; then [ "x${SESSION_CMD}" == "x${PVSMGR_SESSION_CMD}" ] && exit 0 fi +# Download fresh copy of config file if possible . /opt/openslx/config +PVSCONFIG= if [ -n "$SLX_PVS_CONFIG_URL" ]; then [ -z "$UID" ] && UID="$(id -u)" [ -z "$HOME" ] && HOME="$(getent passwd "$UID" | head -n 1 | awk -F ':' '{print $6}')" - wget -O "$HOME/.config/openslx/pvs2/pvs2.ini" "$SLX_PVS_CONFIG_URL" + mkdir -p "$HOME/.tmp" + if wget -T 5 -O "$HOME/.tmp/pvs2.ini.tmp" "$SLX_PVS_CONFIG_URL"; then + mv -f "$HOME/.tmp/pvs2.ini.tmp" "$HOME/.tmp/pvs2.ini" + fi + if ! [ -s "$HOME/.tmp/pvs2.ini" ] && [ -s "/opt/openslx/pvs2/pvs2.ini" ]; then + cp -f "/opt/openslx/pvs2/pvs2.ini" "$HOME/.tmp/pvs2.ini" + fi + if [ -s "$HOME/.tmp/pvs2.ini" ]; then + PVSCONFIG="--config=$HOME/.tmp/pvs2.ini" + fi fi # If the ENV var PVS has been set by vmchooser start pvsclient if [ "$PVS_AUTO_CONNECT" == "TRUE" ]; then - pvsstartup --auto & + pvsstartup "$PVSCONFIG" --auto & else - pvsstartup & + pvsstartup "$PVSCONFIG" & fi # Finally, handle hybrid mode where the pvsmgr is launched on the second desktop @@ -37,8 +48,8 @@ fi if [ "$SESSION_TYPE" == "VSESSION" ]; then { wt="PVS2-Manager" - pvsmgr --manager-only & - for i in 250 250 500 500 1000; do + pvsmgr "$PVSCONFIG" --manager-only & + for i in 100 100 200 200 200 300 500 500 1000; do usleep $(( i * 1000 )) || sleep 1 wmctrl -r "$wt" -t 1 done -- cgit v1.2.3-55-g7522 From a0ddd91d14a371ec692fa711c9e40cb6590e24f7 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 10 Oct 2016 19:55:27 +0200 Subject: [pvs2] Let's try this.... --- remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr b/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr index be44e87e..aaaf85d2 100755 --- a/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr +++ b/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr @@ -1,15 +1,16 @@ #!/bin/ash . /opt/openslx/config -DST="/opt/openslx/pvs2/pvs2.ini" # Try to get fresh version from server +CONF= if [ -n "$SLX_PVS_CONFIG_URL" ]; then - wget -T 5 -O "${DST}.new" "$SLX_PVS_CONFIG_URL" - [ -s "${DST}.new" ] && mv -f "${DST}.new" "${DST}" + DST="$(mktemp)" + wget -T 5 -O "${DST}" "$SLX_PVS_CONFIG_URL" + [ -s "${DST}" ] && CONF="--config=${DST}" fi openbox & -exec /opt/openslx/bin/pvsmgr "$@" +exec /opt/openslx/bin/pvsmgr "$CONF" "$@" -- cgit v1.2.3-55-g7522 From 49b0840fe6f510e88d53894675784a6813cf910e Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 11 Oct 2016 18:07:40 +0200 Subject: [pvs2] Ship own lock script that will minimize and maximize vmware to release its mouse/keyboard grab --- .../pvs2/data/opt/openslx/pvs2/lockDesktop.sh | 25 ++++++++++++++++++++++ remote/modules/pvs2/module.build | 3 ++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100755 remote/modules/pvs2/data/opt/openslx/pvs2/lockDesktop.sh (limited to 'remote/modules') diff --git a/remote/modules/pvs2/data/opt/openslx/pvs2/lockDesktop.sh b/remote/modules/pvs2/data/opt/openslx/pvs2/lockDesktop.sh new file mode 100755 index 00000000..c9cfc421 --- /dev/null +++ b/remote/modules/pvs2/data/opt/openslx/pvs2/lockDesktop.sh @@ -0,0 +1,25 @@ +#!/bin/ash + +# Problem: While any application (e.g. VMware) is holding the mouse and +# keyboard grab, xscreensaver couldn't grab them, so it will ignore the +# locking request. Without the keyboard grab, all input would still go +# to the vmware window below the black screen, which is, you know, bad, +# since you cannot enter your password to unlock the workstation again. + +# So we minimize vmware, lock the screen, and then restore vmware. +# TODO: Add other virtualizers (vbox, kvm) later if needed. +WINDOWS=$(xdotool search --class vmplayer) +for window in $WINDOWS; do + xdotool windowminimize $window +done +# move mouse pointer to the center of the screen to avoid some problems with ghost clicks +xdotool mousemove --polar 0 0 --sync + +# now actually lock +xscreensaver-command --lock + +# above lock call is blocking, so now xscreensaver should be active - let's restore vmware +for window in $WINDOWS; do + xdotool windowmap $window +done + diff --git a/remote/modules/pvs2/module.build b/remote/modules/pvs2/module.build index 970c3c00..607b6d5f 100644 --- a/remote/modules/pvs2/module.build +++ b/remote/modules/pvs2/module.build @@ -26,7 +26,8 @@ build() { # copy external scripts under 'sample_configuration' mkdir -p "${MODULE_BUILD_DIR}/opt/openslx/pvs2/" if [ -d "${SRCDIR}/sample_configuration" ]; then - cp "${SRCDIR}/sample_configuration"/{kb-lock,kb-unlock,lockDesktop,switchToManager,switchBack}.sh "${MODULE_BUILD_DIR}/opt/openslx/pvs2/" \ + # Do not copy lockDesktop.sh - we ship a modified one + cp "${SRCDIR}/sample_configuration"/{kb-lock,kb-unlock,switchToManager,switchBack}.sh "${MODULE_BUILD_DIR}/opt/openslx/pvs2/" \ || perror "Could not copy external scripts to '${MODULE_BUILD_DIR}/opt/openslx/pvs2/'!" chmod +x "${MODULE_BUILD_DIR}/opt/openslx/pvs2"/*.sh \ || perror "Could not set executable bit for external scripts." -- cgit v1.2.3-55-g7522 From 7f3850df826f892f19ee47c9fb99344540aff8c8 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 11 Oct 2016 18:08:53 +0200 Subject: [xscreensaver] Create .xscreensaver to disable fading and apply our own dpms timeouts --- remote/modules/run-virt/winres/winres.c | 53 ++++++++++++++++++++-- .../data/etc/X11/Xsession.d/95-xscreensaver | 33 ++++++++++++-- 2 files changed, 77 insertions(+), 9 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/run-virt/winres/winres.c b/remote/modules/run-virt/winres/winres.c index d92b6521..44654161 100644 --- a/remote/modules/run-virt/winres/winres.c +++ b/remote/modules/run-virt/winres/winres.c @@ -33,6 +33,7 @@ DEFINE_GUID(ID_MMDeviceEnumerator, 0xBCDE0395, 0xE52F, 0x467C, 0x8E, 0x3D, 0xC4, typedef struct { const char* path; + const char* pathIp; const char* letter; const char* shortcut; const char* user; @@ -46,6 +47,8 @@ static const ssize_t KEYLEN = 16; #define SETTINGS_FILE "B:\\OPENSLX.INI" #define SETTINGS_FILE_W L"B:\\OPENSLX.INI" +static BOOL _debug = FALSE; + static HINSTANCE hKernel32, hShell32; static OSVERSIONINFO winVer; static BOOL bGetShares = FALSE; @@ -309,6 +312,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine _startTime = GetTickCount(); loadPaths(); if (lpCmdLine != NULL && strstr(lpCmdLine, "debug") != NULL) { + _debug = TRUE; alog("Windows Version %d.%d", (int)winVer.dwMajorVersion, (int)winVer.dwMinorVersion); } // Mute sound by default @@ -564,6 +568,37 @@ static char* getToken(char **ptr, BOOL doDup) return dest; } +const char* uncReplaceFqdnByIp(const char* path) +{ + if (path == NULL || path[0] != '\\' || path[1] != '\\') + return NULL; + const char *host = path + 2; + const char *rest = strchr(host, '\\'); + if (rest == NULL || rest - host >= 200) + return NULL; + char name[201]; + strncpy(name, host, rest - host); + name[rest-host] = '\0'; + if (_debug) { + alog("Trying to resolve '%s'...", name); + } + struct hostent *remote = gethostbyname(name); + if (remote == NULL || remote->h_addrtype != AF_INET || remote->h_addr_list[0] == 0) + return NULL; + struct in_addr addr; + addr.s_addr = *(u_long*)remote->h_addr_list[0]; + char *ip = inet_ntoa(addr); + if (ip == NULL) + return NULL; + size_t len = 2 /* \\ */ + strlen(ip) /* 1.2.3.4 */ + strlen(rest) /* \path\to\share */ + 1 /* nullchar */; + char *retval = malloc(len); + snprintf(retval, len, "\\\\%s%s", ip, rest); + if (_debug) { + alog("Turned '%s' into '%s'", path, retval); + } + return retval; +} + #define FREENULL(x) do { free((void*)(x)); (x) = NULL; } while (0) static void readShareFile() @@ -595,6 +630,9 @@ static void readShareFile() if (d->path == NULL || d->path[0] == '\0') goto drive_fail; d->success = FALSE; + // Hack: For unknown reasons, with some servers mounting fails using a fqdn, but using the ip address instead succeeds. + d->pathIp = uncReplaceFqdnByIp(d->path); + // idx++; continue; drive_fail: @@ -749,11 +787,14 @@ static void postSuccessfulMount(const netdrive_t *d, wchar_t *letter) } } -static BOOL mountNetworkShare(const netdrive_t *d) +static BOOL mountNetworkShare(const netdrive_t *d, BOOL useIp) { wchar_t path[BUFLEN] = L"", user[BUFLEN] = L"", pass[BUFLEN] = L"", letter[10] = L"", shortcut[BUFLEN] = L""; int ok = -1; - ok &= MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)d->path, -1, (LPWSTR)path, BUFLEN) > 0; + if (useIp && d->pathIp[0] == '\0') + return FALSE; + const char *uncPath = useIp ? d->pathIp : d->path; + ok &= MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)uncPath, -1, (LPWSTR)path, BUFLEN) > 0; if (d->letter != NULL) { ok &= MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)d->letter, -1, (LPWSTR)letter, 10) > 0; } @@ -767,7 +808,7 @@ static BOOL mountNetworkShare(const netdrive_t *d) ok &= MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)d->shortcut, -1, (LPWSTR)shortcut, BUFLEN) > 0; } if (!ok || path[0] == 0) { // Convert failed/no path - return true anyways since retrying wouldn't change anything - alog("mountNetworkShare: utf8 to utf16 failed, or path empty (src: '%s')", d->path); + alog("mountNetworkShare: utf8 to utf16 failed, or path empty (src: '%s')", uncPath); return TRUE; } DWORD retval; @@ -826,7 +867,9 @@ static BOOL mountNetworkShares() break; if (drives[i].success) continue; - if (mountNetworkShare(&drives[i])) { + if (mountNetworkShare(&drives[i], FALSE)) { + drives[i].success = TRUE; + } else if (mountNetworkShare(&drives[i], TRUE)) { drives[i].success = TRUE; } else { failCount++; @@ -870,7 +913,7 @@ static void remapViaSharedFolder() } } // Map vmware shared folder - mountNetworkShare(&d); + mountNetworkShare(&d, FALSE); } static char* xorString(const uint8_t* text, int len, const uint8_t* key) diff --git a/remote/modules/xscreensaver/data/etc/X11/Xsession.d/95-xscreensaver b/remote/modules/xscreensaver/data/etc/X11/Xsession.d/95-xscreensaver index 385a8280..fc6588ae 100755 --- a/remote/modules/xscreensaver/data/etc/X11/Xsession.d/95-xscreensaver +++ b/remote/modules/xscreensaver/data/etc/X11/Xsession.d/95-xscreensaver @@ -1,8 +1,33 @@ #!/bin/ash -if ! which xscreensaver; then - echo "Failed to find xscreensaver in '$PATH'!" - return 1 +if which xscreensaver; then + [ -z "$UID" ] && UID=$(id -u) + [ -z "$HOME" ] && HOME="$(getent passwd "$UID" | head -n 1 | awk -F ':' '{print $6}')" + if ! [ -s "$HOME/.xscreensaver" ]; then + . /opt/openslx/config + NUM=${SLX_SCREEN_STANDBY_TIMEOUT} + if [ -n "$NUM" ] && [ "$NUM" -gt 60 ]; then + SECS=0$(( NUM % 60 )) + MINS=0$(( ( NUM / 60 ) % 60 )) + HRS=0$(( ( NUM / 3600 ) % 60 )) + STANDBY="${HRS:$(( ${#HRS} - 2 )):2}:${MINS:$(( ${#MINS} - 2 )):2}:${SECS:$(( ${#SECS} - 2 )):2}" + else + STANDBY=0:00:00 + fi + cat > "$HOME/.xscreensaver" </dev/null -chmod 0777 "${VMCHOOSER_DIR}/data/loopimg/fd.img" - -# use dos formatter copied into stage3 -mkdosfs "${VMCHOOSER_DIR}/data/loopimg/fd.img" -mount -n -t msdos -o loop,umask=000 "${VMCHOOSER_DIR}/data/loopimg/fd.img" "${VMCHOOSER_DIR}/fd-loop" - # setup more scratch space for virtual machines, if configured mkdir -p /tmp/virt /var/log/samba /run/samba -- cgit v1.2.3-55-g7522 From ac5ba52862a31ae9da83b325fa832cdebb3b90a1 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 12 Oct 2016 19:40:32 +0200 Subject: [rootfs/hwstats] Use 66% RAM as /tmp tmpfs instead of 60G so we can detect and report when running out of memory --- .../data/opt/openslx/scripts/cron-system_usage_update | 9 ++++++++- .../data/opt/openslx/scripts/systemd-setup_partitions | 8 ++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/hardware-stats/data/opt/openslx/scripts/cron-system_usage_update b/remote/modules/hardware-stats/data/opt/openslx/scripts/cron-system_usage_update index 74486508..ff5adc70 100755 --- a/remote/modules/hardware-stats/data/opt/openslx/scripts/cron-system_usage_update +++ b/remote/modules/hardware-stats/data/opt/openslx/scripts/cron-system_usage_update @@ -21,6 +21,13 @@ for SESSION in $(loginctl | awk '{print $1}'); do fi done +# Also report usage of /tmp and swap +TMP=$(df -P /tmp | grep -m1 ^/tmp) +TMP_SIZE=$(echo $TMP | awk '{print $2}') +TMP_FREE=$(echo $TMP | awk '{print $4}') +SWAP_FREE=$(grep -m1 ^SwapFree: /proc/meminfo | awk '{print $2}') + curl -s --data-urlencode "type=~runstate" --data-urlencode "uuid=$UUID" --data-urlencode "used=$USED" \ - --data-urlencode "user=$Name" "$SLX_REMOTE_LOG" > /dev/null 2>&1 + --data-urlencode "user=$Name" --data-urlencode "tmpsize=$TMP_SIZE" --data-urlencode "tmpfree=$TMP_FREE" \ + --data-urlencode "swapfree=$SWAP_FREE" "$SLX_REMOTE_LOG" > /dev/null 2>&1 diff --git a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions index 0c352241..c8e680f0 100755 --- a/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions +++ b/remote/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions @@ -152,9 +152,13 @@ done mount -a -# Make huge tmpfs if nothing could be mounted for /tmp +# Make tmpfs if nothing could be mounted for /tmp +# 2016-10-12: Use a sane size of 66% which should be generous enough and prevent the machine from +# just crashing if RAM is too full. We previously hugely oversized since vmware wants at least as +# much free space as the VMs RAM; however, this requirement can be disabled with a vmx setting, +# which we're now doing. if [ "$HAVE_TEMP" = "no" ]; then - mount_temp -t tmpfs -o size=60G none + mount_temp -t tmpfs -o size=66% none slxlog "partition-temp" "Running /tmp on tmpfs only!" "/etc/disk.partition" fi if [ "$HAVE_SWAP" = "no" ]; then -- cgit v1.2.3-55-g7522 From 6f5e3b10421e7f7fcee2aa4d628ce5f8a8076831 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 13 Oct 2016 12:49:17 +0200 Subject: [hardware-stats] Try to display a warning to active users when running out of tmp/swap --- .../opt/openslx/scripts/cron-system_usage_update | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'remote/modules') diff --git a/remote/modules/hardware-stats/data/opt/openslx/scripts/cron-system_usage_update b/remote/modules/hardware-stats/data/opt/openslx/scripts/cron-system_usage_update index ff5adc70..38f1deb9 100755 --- a/remote/modules/hardware-stats/data/opt/openslx/scripts/cron-system_usage_update +++ b/remote/modules/hardware-stats/data/opt/openslx/scripts/cron-system_usage_update @@ -31,3 +31,55 @@ curl -s --data-urlencode "type=~runstate" --data-urlencode "uuid=$UUID" --data-u --data-urlencode "user=$Name" --data-urlencode "tmpsize=$TMP_SIZE" --data-urlencode "tmpfree=$TMP_FREE" \ --data-urlencode "swapfree=$SWAP_FREE" "$SLX_REMOTE_LOG" > /dev/null 2>&1 +# Warn user if tmp or swap usage is high; system might crash soon +WARN= +if [ "$SWAP_FREE" -gt 0 ] && [ "$SWAP_FREE" -lt 500000 ]; then # less than 500MB swap + WARN="$WARN +Der Arbeitsspeicher des Computers ist fast voll. +The computer is running out of RAM." +fi +if [ "$TMP_FREE" -lt 500000 ]; then + WARN="$WARN +Es verbleibt wenig temporärer Speicher für die Arbeitsdaten der laufenden VM. +Little temporary storage is left for the current VM." +fi + +if [ -n "$WARN" ]; then + WARN="$WARN + +Bitte sichern Sie Ihre Arbeit und starten Sie den PC neu. +Please save your work and reboot this machine. + +Sie können einen bwLehrpool-Admin bitten, eine größere ID-44-Partition einzurichten. +You could ask a bwLehrpool administrator to create a larger ID-44 partition." + for d in $(who | awk '{print $2}' | sort -u); do + if [ "${d:0:1}" = ":" ]; then + # X11 + export DISPLAY=$d + export XAUTHORITY=$(ps a | grep " $DISPLAY " | grep -o -- '-auth.*$' | grep -m1 -v grep | awk '{print $2}') + notify-send -u critical "System instabil" "$WARN" + unset DISPLAY XAUTHORITY + elif [ "${d:0:3}" = "tty" ]; then + # Regular tty + cat > "/dev/$d" < "/dev/pts/${d:3}" <&2 + exit 1 +fi + +if ! curl -H "Expect:" -f -s -S --connect-timeout 5 "$URL" > /dev/null; then + echo "Kann den Debug-Report-Server in Freiburg nicht erreichen. :-(" >&2 + exit 1 +fi + +rm -rf /tmp/debug-report +mkdir -p /tmp/debug-report/{static,generated} + +if [ ! -d /tmp/debug-report ]; then + echo "FEHLER: Konnte /tmp/debug-report nicht erstellen!" >&2 + exit 1 +fi + +if ! cd /tmp/debug-report; then + echo "Cannot go to /tmp/debug-report" + exit 1 +fi + +cat > err-desc < metadata +hwclock >> metadata +date >> metadata +for srv in $SLX_NTP_SERVER 0.de.pool.ntp.org; do + ntpdate -u -q -p 2 -t 1 "$srv" >> metadata 2> /dev/null && break +done +echo -n "..." + +cp /opt/openslx/config /tmp/udhcpclog static/ 2> /dev/null +echo -n "." + +FILES=$(find /tmp/vmware* /tmp/virt /tmp/vmchooser* -type f \( -name "*.log" -o -name "*.conf" -o -name "*.xml" \) 2> /dev/null) +if [ -n "$FILES" ]; then + tar ckf static/vm-related.tar $FILES +fi + +echo -n "." + +cp /var/log/Xorg.0.lo* static/ 2> /dev/null +cp /var/log/{auth.log,kdm.log,syslog,messages,user.log} static/ 2> /dev/null +cp /proc/{cpu,mem}info static/ 2> /dev/null +echo -n "." + +for tool in $TOOLS; do + $tool > "generated/${tool}-out" 2> "generated/${tool}-err" + echo -n "." +done + +ip a > "generated/ip-a-out" 2> "generated/ip-a-err" +echo -n "." + +systemctl status > "generated/systemctl-status-out" 2> "generated/systemctl-status-err" +echo -n "." + +ps auxf > "generated/ps-out" 2> "generated/ps-err" +echo -n "." + +find generated/ -type f -name "*-err" -size 0 -delete > /dev/null 2>/dev/null + +echo "..fertig!" + +cd /tmp +rm -f -- error-report.tar.gz +echo -n "Packe Fehlerbericht ein..." +if ! tar czf error-report.tar.gz debug-report; then + echo "Fehler beim Packen des Berichts!" >&2 + exit 1 +fi +echo "....fertig!" + +echo -n "Lade Fehlerbericht hoch...." +if ! curl -H "Expect:" -f -s -S -F "file=@error-report.tar.gz;filename=report" "$URL" > /dev/null; then + echo "Fehler beim Hochladen des Fehlerberichts :-(" >&2 + exit 1 +fi + +echo "Fehlerbericht erfolgreich versendet!" + diff --git a/remote/modules/debug-report-bwlp/module.build b/remote/modules/debug-report-bwlp/module.build new file mode 100644 index 00000000..1be608b8 --- /dev/null +++ b/remote/modules/debug-report-bwlp/module.build @@ -0,0 +1,23 @@ +fetch_source() { + : +} + +build() { + + for BIN in $REQUIRED_BINARIES; do + OPT="${BIN:0:1}" + [[ "$BIN" == @* ]] && BIN=$(echo "$BIN" | cut -c 2-) + BIN_LOCATION=$(which ${BIN}) + if [ ! -z ${BIN_LOCATION} -a -e ${BIN_LOCATION} ]; then + tarcopy "$(get_link_chain ${BIN_LOCATION})" "${MODULE_BUILD_DIR}" + elif [ "$OPT" != "@" ]; then + perror "'${BIN}' not found on system." + else + pwarning "'${BIN}' not found on the system." + fi + done +} + +post_copy() { + : +} diff --git a/remote/modules/debug-report-bwlp/module.conf b/remote/modules/debug-report-bwlp/module.conf new file mode 100644 index 00000000..45830ef8 --- /dev/null +++ b/remote/modules/debug-report-bwlp/module.conf @@ -0,0 +1,4 @@ +REQUIRED_BINARIES=" + curl + nano +" diff --git a/remote/modules/debug-report-bwlp/module.conf.debian b/remote/modules/debug-report-bwlp/module.conf.debian new file mode 100644 index 00000000..14ae2d29 --- /dev/null +++ b/remote/modules/debug-report-bwlp/module.conf.debian @@ -0,0 +1,4 @@ +REQUIRED_INSTALLED_PACKAGES=" + curl + nano +" diff --git a/remote/modules/debug-report-bwlp/module.conf.opensuse b/remote/modules/debug-report-bwlp/module.conf.opensuse new file mode 100644 index 00000000..14ae2d29 --- /dev/null +++ b/remote/modules/debug-report-bwlp/module.conf.opensuse @@ -0,0 +1,4 @@ +REQUIRED_INSTALLED_PACKAGES=" + curl + nano +" diff --git a/remote/modules/debug-report-bwlp/module.conf.ubuntu b/remote/modules/debug-report-bwlp/module.conf.ubuntu new file mode 100644 index 00000000..14ae2d29 --- /dev/null +++ b/remote/modules/debug-report-bwlp/module.conf.ubuntu @@ -0,0 +1,4 @@ +REQUIRED_INSTALLED_PACKAGES=" + curl + nano +" diff --git a/remote/targets/stage32-bwlp/debug-report-bwlp b/remote/targets/stage32-bwlp/debug-report-bwlp new file mode 120000 index 00000000..54a528ce --- /dev/null +++ b/remote/targets/stage32-bwlp/debug-report-bwlp @@ -0,0 +1 @@ +../../modules/debug-report-bwlp \ No newline at end of file -- cgit v1.2.3-55-g7522 From fb05f1d65f3b3e3c8a8f1c957dc28efca591c159 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 18 Oct 2016 14:41:58 +0200 Subject: [nvidia_*] Update to 367.57 --- remote/modules/nvidia_kernel/module.conf | 2 +- remote/modules/nvidia_libs/module.conf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/nvidia_kernel/module.conf b/remote/modules/nvidia_kernel/module.conf index 7832f59b..b05fa883 100644 --- a/remote/modules/nvidia_kernel/module.conf +++ b/remote/modules/nvidia_kernel/module.conf @@ -1,4 +1,4 @@ -REQUIRED_VERSION="361.28" +REQUIRED_VERSION="367.57" REQUIRED_NVIDIA="NVIDIA-Linux-x86_64-$REQUIRED_VERSION.run" REQUIRED_URL="http://download.nvidia.com/XFree86/Linux-x86_64/$REQUIRED_VERSION/$REQUIRED_NVIDIA" diff --git a/remote/modules/nvidia_libs/module.conf b/remote/modules/nvidia_libs/module.conf index 60e507eb..45069ac2 100644 --- a/remote/modules/nvidia_libs/module.conf +++ b/remote/modules/nvidia_libs/module.conf @@ -1,4 +1,4 @@ -REQUIRED_VERSION="361.28" +REQUIRED_VERSION="367.57" REQUIRED_NVIDIA="NVIDIA-Linux-x86_64-$REQUIRED_VERSION.run" REQUIRED_URL="http://download.nvidia.com/XFree86/Linux-x86_64/$REQUIRED_VERSION/$REQUIRED_NVIDIA" -- cgit v1.2.3-55-g7522 From 419453f8fc8de36d286e47e9225353f46121f948 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 18 Oct 2016 14:43:50 +0200 Subject: [kernel-vanilla] Switch to 4.8.2 --- remote/modules/kernel-vanilla/module.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'remote/modules') diff --git a/remote/modules/kernel-vanilla/module.conf b/remote/modules/kernel-vanilla/module.conf index ac647258..70a2859b 100644 --- a/remote/modules/kernel-vanilla/module.conf +++ b/remote/modules/kernel-vanilla/module.conf @@ -1,5 +1,5 @@ REQUIRED_BINARIES="" REQUIRED_LIBRARIES="" REQUIRED_DIRECTORIES="" -REQUIRED_KERNEL="4.4.23" +REQUIRED_KERNEL="4.8.2" REQUIRED_GIT="git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git" -- cgit v1.2.3-55-g7522 From 36c645c98e760c20706fe88e8c44b76526dfdbfc Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 18 Oct 2016 15:15:31 +0200 Subject: [debug_report] Make it more good and less bad --- .../debug/data/opt/openslx/bin/debug_report | 36 ++++++++++++++++------ 1 file changed, 26 insertions(+), 10 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/debug/data/opt/openslx/bin/debug_report b/remote/modules/debug/data/opt/openslx/bin/debug_report index 4cdfae4e..40f0c310 100755 --- a/remote/modules/debug/data/opt/openslx/bin/debug_report +++ b/remote/modules/debug/data/opt/openslx/bin/debug_report @@ -1,4 +1,5 @@ -#!/bin/ash +#!/bin/bash +# bash because of {,} expansion TOOLS=" journalctl @@ -8,6 +9,7 @@ TOOLS=" lsusb lsmod mount + dmidecode " URL="http://132.230.8.113/error_report.php" @@ -30,37 +32,49 @@ if [ ! -d /tmp/debug-report ]; then exit 1 fi -cd /tmp/debug-report +if ! cd /tmp/debug-report; then + echo "Cannot go to /tmp/debug-report" + exit 1 +fi cat > err-desc < metadata +echo "TIME INFORMATION (hwclock, date):" > metadata hwclock >> metadata date >> metadata -for srv in 132.230.1.9 $SLX_NTP_SERVER 0.de.pool.ntp.org; do - ntpdate -u -q -p 2 -t 1 "$srv" >> metadata && break +for srv in $SLX_NTP_SERVER 0.de.pool.ntp.org; do + ntpdate -u -q -p 2 -t 1 "$srv" >> metadata 2> /dev/null && break done echo -n "..." cp /opt/openslx/config /tmp/udhcpclog static/ 2> /dev/null echo -n "." -find /tmp/vmware* -name "*.log" -exec cp {} static/ \; 2> /dev/null +FILES=$(find /tmp/vmware* /tmp/virt /tmp/vmchooser* -type f \( -name "*.log" -o -name "*.conf" -o -name "*.xml" \) 2> /dev/null) +if [ -n "$FILES" ]; then + tar ckf static/vm-related.tar $FILES +fi + echo -n "." cp /var/log/Xorg.0.lo* static/ 2> /dev/null cp /var/log/{auth.log,kdm.log,syslog,messages,user.log} static/ 2> /dev/null -cp /proc/cpuinfo static/ 2> /dev/null +cp /proc/{cpu,mem}info static/ 2> /dev/null echo -n "." for tool in $TOOLS; do @@ -74,13 +88,15 @@ echo -n "." systemctl status > "generated/systemctl-status-out" 2> "generated/systemctl-status-err" echo -n "." -ps aux > "generated/ps-out" 2> "generated/ps-err" +ps auxf > "generated/ps-out" 2> "generated/ps-err" echo -n "." +find generated/ -type f -name "*-err" -size 0 -delete > /dev/null 2>/dev/null + echo "..fertig!" cd /tmp -rm -f error-report.tar.gz +rm -f -- error-report.tar.gz echo -n "Packe Fehlerbericht ein..." if ! tar czf error-report.tar.gz debug-report; then echo "Fehler beim Packen des Berichts!" >&2 -- cgit v1.2.3-55-g7522 From 9346d24e07d9e988e08cc1447d1f4b150925a6f7 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 19 Oct 2016 12:07:04 +0200 Subject: [vmware/run-virt] Try to rename includes to what they actually do --- .../includes/create_static_directory_structure.inc | 23 +++ .../includes/create_vmhome_preferences_file.inc | 1 + .../vmware/includes/create_vmware_config_file.inc | 190 --------------------- .../includes/determine_hardware_limitations.inc | 185 ++++++++++++++++++++ .../vmchooser/vmware/includes/parse_vmx.inc | 182 -------------------- .../vmware/includes/write_config_files.inc | 29 ---- .../vmchooser/vmware/includes/write_final_vmx.inc | 189 ++++++++++++++++++++ .../opt/openslx/vmchooser/vmware/run-virt.include | 22 +-- 8 files changed, 410 insertions(+), 411 deletions(-) create mode 100644 remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_static_directory_structure.inc delete mode 100644 remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmware_config_file.inc create mode 100644 remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/determine_hardware_limitations.inc delete mode 100644 remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_config_files.inc create mode 100644 remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_final_vmx.inc (limited to 'remote/modules') diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_static_directory_structure.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_static_directory_structure.inc new file mode 100644 index 00000000..96363de3 --- /dev/null +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_static_directory_structure.inc @@ -0,0 +1,23 @@ +############################### +# Include: Write config files # +############################### + +writelog "Redo directory: ${redodir}" +writelog "Config directory: ${confdir}" +writelog "Config file: ${conffile}" +writelog "vmhome/dndlogs: ${vmhome}/dndlogs" + +# create vmware directories +mkdir -p "$redodir" >/dev/null 2>&1 +mkdir -p "$confdir" >/dev/null 2>&1 +mkdir -p "$vmhome/dndlogs" >/dev/null 2>&1 +touch "$vmhome/dndlogs/dndlog.conf" >/dev/null 2>&1 + +# link to conffile if confdir != redodir +[ "$confdir" != "$redodir" ] && ln -s "$conffile" "$redodir/run-vmware.conf" >/dev/null 2>&1 + +# own nvram. We need it for floppy drive b, default nvram has just drive a +if ! cp "/opt/openslx/vmchooser/vmware/nvram" "$confdir/nvram"; then + slxlog "virt-vmware-nvram" "Could not copy nvram from '/opt/openslx/vmchooser/vmware/nvram' '$confdir/nvram'" +fi + diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmhome_preferences_file.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmhome_preferences_file.inc index b618041c..d50402f3 100644 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmhome_preferences_file.inc +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmhome_preferences_file.inc @@ -68,4 +68,5 @@ create_vmhome_preferences_file() { echo 'pref.hotkey.rightControl = "true"' >> "$vmhome/preferences" fi writelog "Vmware preferences file created in $vmhome." + true } diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmware_config_file.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmware_config_file.inc deleted file mode 100644 index 54af0dbc..00000000 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmware_config_file.inc +++ /dev/null @@ -1,190 +0,0 @@ -######################################## -# Include: Create vmware startup files # -######################################## - -writelog "Creating vmware configuration file: $conffile" - -MAXMEM="9999999" -MAXCORES="4" -shfolders="TRUE" -sound="es1371" - -# define hardware configuration depending on the guest OS used -# this needs to be fixed and is the base for the creation of new VMs -case "$vmostype" in - win31*|windows31*) - vmostype="win31" - shfolders="FALSE" - sound="sb16" - MAXMEM="32" - MAXCORES="1" - ;; - winnt*|windowsnt*) - vmostype="winnt" - shfolders="FALSE" - sound="sb16" - MAXMEM="1000" - MAXCORES="2" - ;; - win95*|windows95*) - vmostype="win95" - shfolders="FALSE" - MAXMEM="96" - MAXCORES="1" - ;; - win98*|windows98*) - vmostype="win98" - MAXMEM="256" - MAXCORES="1" - ;; - winme*|windowsme*) - vmostype="winme" - MAXMEM="384" - MAXCORES="1" - ;; - win2000|windows2000|win2000pro*) - vmostype="win2000pro" - MAXMEM="4000" - MAXCORES="2" - ;; - win2000srv*|windows2000srv*|win2000serv*|windows2000serv*) - vmostype="win2000serv" - shfolders="FALSE" - MAXMEM="4000" - MAXCORES="4" - ;; - win2000adv*|windows2000adv*|win2000dat*|windows2000dat*) - vmostype="win2000advserv" - shfolders="FALSE" - MAXMEM="8000" - MAXCORES="8" - ;; - winnet*64|win*2003*64|windowsnet*64) - vmostype="winnetstandard-64" - MAXMEM="8000" - MAXCORES="8" - ;; - winnet*|win*2003*|windowsnet*) - vmostype="winnetstandard" - MAXMEM="4000" - MAXCORES="8" - ;; - winxphome*|windowsxphome*) - vmostype="winxphome" - MAXMEM="4000" - MAXCORES="2" - ;; - winxp*64|windowsxp*64) - vmostype="winxppro-64" - MAXMEM="8000" - MAXCORES="8" - ;; - winxp*|windowsxp*) - vmostype="winxppro" - MAXMEM="4000" - MAXCORES="4" - ;; - winvista-64) - vmostype="winvista-64" - MAXMEM="16000" - MAXCORES="4" - ;; - windows7-64) - vmostype="windows7-64" - MAXMEM="32000" - MAXCORES="8" - ;; - windows8-64) - vmostype="windows8-64" - MAXMEM="32000" - MAXCORES="8" - ;; - windows9-64) - vmostype="windows9-64" - MAXMEM="64000" - MAXCORES="8" - ;; - winvista) - vmostype="winvista" - MAXMEM="8000" - MAXCORES="2" - ;; - windows7) - vmostype="windows7" - MAXMEM="8000" - MAXCORES="4" - ;; - windows8) - vmostype="windows8" - MAXMEM="8000" - MAXCORES="4" - ;; - windows9) - vmostype="windows9" - MAXMEM="8000" - MAXCORES="4" - ;; - win*64) - MAXMEM="16000" - MAXCORES="4" - ;; - win*) - MAXMEM="8000" - MAXCORES="1" - ;; - dos|msdos*|ms-dos*) - vmostype="dos" - shfolders="FALSE" - MAXMEM="128" - MAXCORES="1" - ;; - macos*64) - vmostype="freebsd-64" - MAXMEM="4000" - MAXCORES="2" - ;; - macos*) - vmostype="freebsd" - MAXMEM="4000" - MAXCORES="1" - ;; - beos*) - vmostype="other" - shfolders="FALSE" - ;; - # Unknown guestOS setting in .xml - this encompasses linux too, - # as there is a multitude of different distributions. Perhaps further - # action will be needed if this leads to problems with exotic OSs. - *64) - vmostype="other-64" - # shfolders="FALSE" - MAXMEM="123456" - MAXCORES="4" - ;; - *) - vmostype="other" - # shfolders="FALSE" - MAXMEM="8000" - MAXCORES="1" - ;; -esac - -real_core_count="$cpu_cores" -[ "$cpu_cores" -gt "$MAXCORES" ] && cpu_cores="$MAXCORES" - -# It currently makes no sense to set the virtual number of cores -# to a different value than the virtual number of cores per virtual CPU. -cores_per_socket="$cpu_cores" - -if [ "x$shfolders" != "xFALSE" ] && [ "$SHARE_REMAP_MODE" != 1 ]; then - HGFS_DISABLED="FALSE" -else - HGFS_DISABLED="TRUE" -fi - -[ "$mem" -ge "$MAXMEM" ] && mem="$MAXMEM" -[ "$hwver" -lt "7" -a "$mem" -gt "3500" ] && mem="3500" - -# set the appropriate permissions for the vmware config file -chmod u+rwx "${conffile}" >/dev/null 2>&1 - diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/determine_hardware_limitations.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/determine_hardware_limitations.inc new file mode 100644 index 00000000..84d959ea --- /dev/null +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/determine_hardware_limitations.inc @@ -0,0 +1,185 @@ +######################################## +# Include: Determine hw limitations depending on hwver and guest os # +######################################## + +MAXMEM="9999999" +MAXCORES="4" +shfolders="TRUE" +sound="es1371" + +# define hardware configuration depending on the guest OS used +# this needs to be fixed and is the base for the creation of new VMs +case "$vmostype" in + win31*|windows31*) + vmostype="win31" + shfolders="FALSE" + sound="sb16" + MAXMEM="32" + MAXCORES="1" + ;; + winnt*|windowsnt*) + vmostype="winnt" + shfolders="FALSE" + sound="sb16" + MAXMEM="1000" + MAXCORES="2" + ;; + win95*|windows95*) + vmostype="win95" + shfolders="FALSE" + MAXMEM="96" + MAXCORES="1" + ;; + win98*|windows98*) + vmostype="win98" + MAXMEM="256" + MAXCORES="1" + ;; + winme*|windowsme*) + vmostype="winme" + MAXMEM="384" + MAXCORES="1" + ;; + win2000|windows2000|win2000pro*) + vmostype="win2000pro" + MAXMEM="4000" + MAXCORES="2" + ;; + win2000srv*|windows2000srv*|win2000serv*|windows2000serv*) + vmostype="win2000serv" + shfolders="FALSE" + MAXMEM="4000" + MAXCORES="4" + ;; + win2000adv*|windows2000adv*|win2000dat*|windows2000dat*) + vmostype="win2000advserv" + shfolders="FALSE" + MAXMEM="8000" + MAXCORES="8" + ;; + winnet*64|win*2003*64|windowsnet*64) + vmostype="winnetstandard-64" + MAXMEM="8000" + MAXCORES="8" + ;; + winnet*|win*2003*|windowsnet*) + vmostype="winnetstandard" + MAXMEM="4000" + MAXCORES="8" + ;; + winxphome*|windowsxphome*) + vmostype="winxphome" + MAXMEM="4000" + MAXCORES="2" + ;; + winxp*64|windowsxp*64) + vmostype="winxppro-64" + MAXMEM="8000" + MAXCORES="8" + ;; + winxp*|windowsxp*) + vmostype="winxppro" + MAXMEM="4000" + MAXCORES="4" + ;; + winvista-64) + vmostype="winvista-64" + MAXMEM="16000" + MAXCORES="4" + ;; + windows7-64) + vmostype="windows7-64" + MAXMEM="32000" + MAXCORES="8" + ;; + windows8-64) + vmostype="windows8-64" + MAXMEM="32000" + MAXCORES="8" + ;; + windows9-64) + vmostype="windows9-64" + MAXMEM="64000" + MAXCORES="8" + ;; + winvista) + vmostype="winvista" + MAXMEM="8000" + MAXCORES="2" + ;; + windows7) + vmostype="windows7" + MAXMEM="8000" + MAXCORES="4" + ;; + windows8) + vmostype="windows8" + MAXMEM="8000" + MAXCORES="4" + ;; + windows9) + vmostype="windows9" + MAXMEM="8000" + MAXCORES="4" + ;; + win*64) + MAXMEM="16000" + MAXCORES="4" + ;; + win*) + MAXMEM="8000" + MAXCORES="1" + ;; + dos|msdos*|ms-dos*) + vmostype="dos" + shfolders="FALSE" + MAXMEM="128" + MAXCORES="1" + ;; + macos*64) + vmostype="freebsd-64" + MAXMEM="4000" + MAXCORES="2" + ;; + macos*) + vmostype="freebsd" + MAXMEM="4000" + MAXCORES="1" + ;; + beos*) + vmostype="other" + shfolders="FALSE" + ;; + # Unknown guestOS setting in .xml - this encompasses linux too, + # as there is a multitude of different distributions. Perhaps further + # action will be needed if this leads to problems with exotic OSs. + *64) + vmostype="other-64" + # shfolders="FALSE" + MAXMEM="123456" + MAXCORES="4" + ;; + *) + vmostype="other" + # shfolders="FALSE" + MAXMEM="8000" + MAXCORES="1" + ;; +esac + +real_core_count="$cpu_cores" +[ "$cpu_cores" -gt "$MAXCORES" ] && cpu_cores="$MAXCORES" + +# It currently makes no sense to set the virtual number of cores +# to a different value than the virtual number of cores per virtual CPU. +cores_per_socket="$cpu_cores" + +if [ "x$shfolders" != "xFALSE" ] && [ "$SHARE_REMAP_MODE" != 1 ]; then + HGFS_DISABLED="FALSE" +else + HGFS_DISABLED="TRUE" +fi + +[ "$mem" -ge "$MAXMEM" ] && mem="$MAXMEM" +[ "$HWVER" -lt "7" -a "$mem" -gt "3500" ] && mem="3500" + diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc index 974c9839..dec80e1d 100644 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc @@ -4,187 +4,5 @@ writelog "Parsing virtual machine description file..." -# check for vmdk file marker %VM_DISK_PATH% and put vmdk path in it's place: also VM_DISK_MODE -# and VM_DISK_REDOLOGDIR. -# IMAGE=$(grep -io '> "${TMPCONFIG}" -echo 'ethernet0.address = "'"${macaddr}"'"' >> "${TMPCONFIG}" - -# DVD, CDROM -# XXX: For now it's safe to assume ide channel 1 is free, as we support only one HDD, and if it's IDE, it's on channel 0 -cat >> "${TMPCONFIG}" <<-HEREEND -ide1:0.present = "$cdrom0" -ide1:0.autodetect = "TRUE" -ide1:0.fileName = "auto detect" -ide1:0.deviceType = "cdrom-raw" -ide1:1.present = "$cdrom1" -ide1:1.autodetect = "TRUE" -ide1:1.fileName = "auto detect" -ide1:1.deviceType = "cdrom-raw" -HEREEND - -if [ -n "$FLOPPYIMG" ]; then - floppy1="TRUE" -else - floppy1="FALSE" -fi - -# Floppies: -cat >> "${TMPCONFIG}" <<-HEREEND -floppy0.present = "$floppy0" -floppy0.startConnected = "FALSE" -floppy0.autodetect = "TRUE" -floppy0.fileName = "auto detect" -floppy1.present = "$floppy1" -floppy1.startConnected = "TRUE" -floppy1.fileType = "file" -floppy1.fileName = "$FLOPPYIMG" -HEREEND - -writelog "numvcpus = ${cpu_cores} - maxvcpus=${real_core_count}" - -# RAM, CPUs -cat >> "${TMPCONFIG}" <<-HEREEND -numvcpus = "$cpu_cores" -cpuid.coresPerSocket = "$cores_per_socket" -maxvcpus = "$real_core_count" -memsize = "$mem" -MemAllowAutoScaleDown = "FALSE" -MemTrimRate = "-1" -HEREEND - -# USB fallback: Only write usb config if there's none -if ! grep -q -i "^usb\.present" "${TMPCONFIG}"; then - # Nothing found, go ahead - if [ -n "$SLX_EXAM" ]; then - # Exam mode: Default to no USB - sed -i '/^usb\./Id' "${TMPCONFIG}" - echo 'usb.present = "FALSE"' >> "${TMPCONFIG}" - else - cat >> "${TMPCONFIG}" <<-HEREEND - usb.present = "TRUE" - HEREEND - fi -fi -sed -i '/^usb\.generic\.autoconnect/Id' "${TMPCONFIG}" -echo 'usb.generic.autoconnect = "TRUE"' >> "${TMPCONFIG}" -# USB 3.0 support changes quality and has different side effects -# with every minor release of vmware. Always force 2.0 for now. -# TODO: Get it fixed by vmware? -sed -i '/^ehci\.present/Id;/^usb_xhci\.present/Id' "${TMPCONFIG}" -echo 'ehci.present = "TRUE"' >> "${TMPCONFIG}" - -# shared folders -if [ "$HGFS_DISABLED" = "FALSE" ]; then - cat >> "${TMPCONFIG}" <<-HEREEND - sharedFolder.option = "alwaysEnabled" - sharedFolder0.present = "$shfolders" - sharedFolder0.enabled = "$shfolders" - sharedFolder0.expiration = "never" - sharedFolder0.guestName = "$homesharename" - sharedFolder0.hostPath = "$homesharepath" - sharedFolder0.readAccess = "TRUE" - sharedFolder0.writeAccess = "TRUE" - sharedFolder1.present = "$shfolders" - sharedFolder1.enabled = "$shfolders" - sharedFolder1.expiration = "never" - sharedFolder1.guestName = "$commonsharename" - sharedFolder1.hostPath = "$commonsharepath" - sharedFolder1.readAccess = "TRUE" - sharedFolder1.writeAccess = "FALSE" - sharedFolder.maxNum = "2" - hgfs.mapRootShare = "TRUE" - hgfs.linkRootShare = "TRUE" - HEREEND -fi - -# Isolation tools: settings -cat >> "${TMPCONFIG}" <<-HEREEND -isolation.tools.hgfs.disable = "$HGFS_DISABLED" -isolation.tools.dnd.disable = "FALSE" -isolation.tools.copy.enable = "TRUE" -isolation.tools.paste.enabled = "TRUE" -HEREEND - -# Serial, parallel: Empty, nothing is being currently set. TODO later. - -# Graphics, GPU: 3D will be enabled (even if vmware doesn't support the chip) if we whitelisted it. -if [ -n "$SLX_VMWARE_3D" ]; then - writelog "FORCE3D set - overriding 3D in vmx file." - echo 'mks.gl.allowBlacklistedDrivers = "TRUE"' >> "${TMPCONFIG}" - # We override... play safe and cap the hwVersion to 10, since some i915 chips goofed up with 12 - # Investigate if we might have to do this in other cases where we don't override - if grep -qi '^mks.enable3d.*true' "${TMPCONFIG}"; then - vmw_cap_hw_version "10" - fi -else - writelog "FORCE3D not set - 3D will only work if GPU/driver is whitelisted by vmware." -fi - -# Disable DPI scaling information passing via vmware tools -sed -i '/^gui.applyHostDisplayScaling/Id' "${TMPCONFIG}" -echo 'gui.applyHostDisplayScalingToGuest = "FALSE"' >> "${TMPCONFIG}" - -# Additinal exam mode settings -if [ -n "$SLX_EXAM" ]; then - echo 'gui.restricted = "true"' >> "${TMPCONFIG}" -fi - -# Hack resolution if we know the desired one is not in the default list of vmx_svga -# For now, only do it on the odd ones, as we don't know if this has any side effects -# This seems unnecessary on Win7 but is required on WinXP - need more research for other OSs -case "$RESOLUTION" in - 1600x900|2560x1440|2880x1800|3200x1800) - X=${RESOLUTION%x*} - Y=${RESOLUTION#*x} - BYTES=$(( ( ( X * Y * 4 + 65535 ) / 65536 ) * 65536 )) - [ "$BYTES" -lt 16777216 ] && BYTES=16777216 - cat >> "${TMPCONFIG}" <<-EOF - svga.autodetect = "FALSE" - svga.vramSize = $BYTES - svga.maxWidth = $X - svga.maxHeight = $Y - EOF - ;; -esac - -# Killing duplicate lines (output much nicer than sort -u): -awk '!a[$0]++' "${TMPCONFIG}" > "${TMPCONFIG}.tmp" && mv -f "${TMPCONFIG}.tmp" "${TMPCONFIG}" - -# Apply $maxhardwareversion to final VMX HWVER=$(grep -i -m1 '^virtualHW.version *= *' "${TMPCONFIG}" | awk -F '=' '{print $2}' | sed -r 's/[^0-9]//g') -if [ -n "$HWVER" ] && [ "$HWVER" -gt "$maxhardwareversion" ]; then - writelog "Hardware version capped to $maxhardwareversion (was $HWVER)" - sed -i 's/^virtualHW\.version.*$/virtualHW.version = "'$maxhardwareversion'"/I' "${TMPCONFIG}" - HWVER="$maxhardwareversion" -fi - -# Enable nested virtualization if not specified in remote vmx -if [ -e "/run/hwinfo" ] && ! grep -qi '^vhv\.enable' "${TMPCONFIG}" \ - && grep -qE '^flags\s*:.*\b(ept|npt)\b' "/proc/cpuinfo" \ - && [ "$HWVER" -ge "9" ]; then - . "/run/hwinfo" - [ "${HW_KVM}" = "ENABLED" ] && echo 'vhv.enable = "TRUE"' >> "${TMPCONFIG}" -fi -# TODO: Need a way to check if supported by hardware before enabling! -#grep -qi '^vpmc\.enable' "${TMPCONFIG}" || echo 'vpmc.enable = "TRUE"' >> "${TMPCONFIG}" - -# Disable space check warnings -sed -i '/^mainMem.freeSpaceCheck/Id' "${TMPCONFIG}" -echo 'mainMem.freeSpaceCheck = "FALSE"' >> "${TMPCONFIG}" - -# At last_ Let's copy it to $confdir/run-vmware.conf -if cp -p "${TMPCONFIG}" "$conffile"; then - writelog "Copied TMPDIR/IMGUUID ${TMPCONFIG} to conffile ${conffile}" -else - writelog "Could not copy TMPDIR/IMGUUID -${TMPCONFIG}- to conffile ${conffile}!" - cleanexit 1 -fi diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_config_files.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_config_files.inc deleted file mode 100644 index 555688bf..00000000 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_config_files.inc +++ /dev/null @@ -1,29 +0,0 @@ -############################### -# Include: Write config files # -############################### - -writelog "Redo directory: ${redodir}" -writelog "Config directory: ${confdir}" -writelog "Config file: ${conffile}" -writelog "vmhome/dndlogs: ${vmhome}/dndlogs" - -# create vmware directories -mkdir -p "$redodir" >/dev/null 2>&1 -mkdir -p "$confdir" >/dev/null 2>&1 -mkdir -p "$vmhome/dndlogs" >/dev/null 2>&1 -touch "$vmhome/dndlogs/dndlog.conf" >/dev/null 2>&1 - -# create preferences file ${vmhome}/preferences -source "${VMWAREINCLUDEDIR}/create_vmhome_preferences_file.inc" && create_vmhome_preferences_file - -# create VMware config file (conffile) -source "${VMWAREINCLUDEDIR}/create_vmware_config_file.inc" - -# link to conffile if confdir != redodir -[ "$confdir" != "$redodir" ] && ln -s "$conffile" "$redodir/run-vmware.conf" >/dev/null 2>&1 - -# own nvram. We need it for floppy drive b, default nvram has just drive a -if ! cp "/opt/openslx/vmchooser/vmware/nvram" "$confdir/nvram"; then - slxlog "virt-vmware-nvram" "Could not copy nvram from '/opt/openslx/vmchooser/vmware/nvram' '$confdir/nvram'" -fi - diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_final_vmx.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_final_vmx.inc new file mode 100644 index 00000000..41548154 --- /dev/null +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_final_vmx.inc @@ -0,0 +1,189 @@ + +# check for vmdk file marker %VM_DISK_PATH% and put vmdk path in it's place: also VM_DISK_MODE +# and VM_DISK_REDOLOGDIR. +sed -i 's#%VM_DISK_PATH%#'"$vm_diskfile"'#g' "${TMPCONFIG}" +sed -i 's#%VM_DISK_MODE%#'"independent-nonpersistent"'#g' "${TMPCONFIG}" +sed -i 's#%VM_DISK_REDOLOGDIR%#'"$redodir"'#g' "${TMPCONFIG}" + +# Ethernet: All we do is entering a generated MAC, as we do not want to interfere +# in the possible case no networking is wanted. +writelog "Guest MAC: $macaddr" +echo 'ethernet0.addressType = "static"' >> "${TMPCONFIG}" +echo 'ethernet0.address = "'"${macaddr}"'"' >> "${TMPCONFIG}" + +# DVD, CDROM +# XXX: For now it's safe to assume ide channel 1 is free, as we support only one HDD, and if it's IDE, it's on channel 0 +cat >> "${TMPCONFIG}" <<-HEREEND +ide1:0.present = "$cdrom0" +ide1:0.autodetect = "TRUE" +ide1:0.fileName = "auto detect" +ide1:0.deviceType = "cdrom-raw" +ide1:1.present = "$cdrom1" +ide1:1.autodetect = "TRUE" +ide1:1.fileName = "auto detect" +ide1:1.deviceType = "cdrom-raw" +HEREEND + +if [ -n "$FLOPPYIMG" ]; then + floppy1="TRUE" +else + floppy1="FALSE" +fi + +# Floppies: +cat >> "${TMPCONFIG}" <<-HEREEND +floppy0.present = "$floppy0" +floppy0.startConnected = "FALSE" +floppy0.autodetect = "TRUE" +floppy0.fileName = "auto detect" +floppy1.present = "$floppy1" +floppy1.startConnected = "TRUE" +floppy1.fileType = "file" +floppy1.fileName = "$FLOPPYIMG" +HEREEND + +writelog "numvcpus = ${cpu_cores} - maxvcpus=${real_core_count}" + +# RAM, CPUs +cat >> "${TMPCONFIG}" <<-HEREEND +numvcpus = "$cpu_cores" +cpuid.coresPerSocket = "$cores_per_socket" +maxvcpus = "$real_core_count" +memsize = "$mem" +MemAllowAutoScaleDown = "FALSE" +MemTrimRate = "-1" +HEREEND + +# USB fallback: Only write usb config if there's none +if ! grep -q -i "^usb\.present" "${TMPCONFIG}"; then + # Nothing found, go ahead + if [ -n "$SLX_EXAM" ]; then + # Exam mode: Default to no USB + sed -i '/^usb\./Id' "${TMPCONFIG}" + echo 'usb.present = "FALSE"' >> "${TMPCONFIG}" + else + cat >> "${TMPCONFIG}" <<-HEREEND + usb.present = "TRUE" + HEREEND + fi +fi +sed -i '/^usb\.generic\.autoconnect/Id' "${TMPCONFIG}" +echo 'usb.generic.autoconnect = "TRUE"' >> "${TMPCONFIG}" +# USB 3.0 support changes quality and has different side effects +# with every minor release of vmware. Always force 2.0 for now. +# TODO: Get it fixed by vmware? +sed -i '/^ehci\.present/Id;/^usb_xhci\.present/Id' "${TMPCONFIG}" +echo 'ehci.present = "TRUE"' >> "${TMPCONFIG}" + +# shared folders +if [ "$HGFS_DISABLED" = "FALSE" ]; then + cat >> "${TMPCONFIG}" <<-HEREEND + sharedFolder.option = "alwaysEnabled" + sharedFolder0.present = "$shfolders" + sharedFolder0.enabled = "$shfolders" + sharedFolder0.expiration = "never" + sharedFolder0.guestName = "$homesharename" + sharedFolder0.hostPath = "$homesharepath" + sharedFolder0.readAccess = "TRUE" + sharedFolder0.writeAccess = "TRUE" + sharedFolder1.present = "$shfolders" + sharedFolder1.enabled = "$shfolders" + sharedFolder1.expiration = "never" + sharedFolder1.guestName = "$commonsharename" + sharedFolder1.hostPath = "$commonsharepath" + sharedFolder1.readAccess = "TRUE" + sharedFolder1.writeAccess = "FALSE" + sharedFolder.maxNum = "2" + hgfs.mapRootShare = "TRUE" + hgfs.linkRootShare = "TRUE" + HEREEND +fi + +# Isolation tools: settings +cat >> "${TMPCONFIG}" <<-HEREEND +isolation.tools.hgfs.disable = "$HGFS_DISABLED" +isolation.tools.dnd.disable = "FALSE" +isolation.tools.copy.enable = "TRUE" +isolation.tools.paste.enabled = "TRUE" +HEREEND + +# Serial, parallel: Empty, nothing is being currently set. TODO later. + +# Graphics, GPU: 3D will be enabled (even if vmware doesn't support the chip) if we whitelisted it. +if [ -n "$SLX_VMWARE_3D" ]; then + writelog "FORCE3D set - overriding 3D in vmx file." + echo 'mks.gl.allowBlacklistedDrivers = "TRUE"' >> "${TMPCONFIG}" + # We override... play safe and cap the hwVersion to 10, since some i915 chips goofed up with 12 + # Investigate if we might have to do this in other cases where we don't override + if grep -qi '^mks.enable3d.*true' "${TMPCONFIG}"; then + vmw_cap_hw_version "10" + fi +else + writelog "FORCE3D not set - 3D will only work if GPU/driver is whitelisted by vmware." +fi + +# Disable DPI scaling information passing via vmware tools +sed -i '/^gui.applyHostDisplayScaling/Id' "${TMPCONFIG}" +echo 'gui.applyHostDisplayScalingToGuest = "FALSE"' >> "${TMPCONFIG}" + +# Additinal exam mode settings +if [ -n "$SLX_EXAM" ]; then + echo 'gui.restricted = "true"' >> "${TMPCONFIG}" +fi + +# Hack resolution if we know the desired one is not in the default list of vmx_svga +# For now, only do it on the odd ones, as we don't know if this has any side effects +# This seems unnecessary on Win7 but is required on WinXP - need more research for other OSs +case "$RESOLUTION" in + 1600x900|2560x1440|2880x1800|3200x1800) + X=${RESOLUTION%x*} + Y=${RESOLUTION#*x} + BYTES=$(( ( ( X * Y * 4 + 65535 ) / 65536 ) * 65536 )) + [ "$BYTES" -lt 16777216 ] && BYTES=16777216 + cat >> "${TMPCONFIG}" <<-EOF + svga.autodetect = "FALSE" + svga.vramSize = $BYTES + svga.maxWidth = $X + svga.maxHeight = $Y + EOF + ;; +esac + +# Killing duplicate lines (output much nicer than sort -u): +awk '!a[$0]++' "${TMPCONFIG}" > "${TMPCONFIG}.tmp" && mv -f "${TMPCONFIG}.tmp" "${TMPCONFIG}" + +# Apply $maxhardwareversion to final VMX +if [ -n "$HWVER" ] && [ "$HWVER" -gt "$maxhardwareversion" ]; then + writelog "Hardware version capped to $maxhardwareversion (was $HWVER)" + sed -i 's/^virtualHW\.version.*$/virtualHW.version = "'$maxhardwareversion'"/I' "${TMPCONFIG}" + HWVER="$maxhardwareversion" +fi + +# Enable nested virtualization if not specified in remote vmx +if [ -e "/run/hwinfo" ] && ! grep -qi '^vhv\.enable' "${TMPCONFIG}" \ + && grep -qE '^flags\s*:.*\b(ept|npt)\b' "/proc/cpuinfo" \ + && [ "$HWVER" -ge "9" ]; then + . "/run/hwinfo" + [ "${HW_KVM}" = "ENABLED" ] && echo 'vhv.enable = "TRUE"' >> "${TMPCONFIG}" +fi +# TODO: Need a way to check if supported by hardware before enabling! +#grep -qi '^vpmc\.enable' "${TMPCONFIG}" || echo 'vpmc.enable = "TRUE"' >> "${TMPCONFIG}" + +# Disable space check warnings +sed -i '/^mainMem.freeSpaceCheck/Id' "${TMPCONFIG}" +echo 'mainMem.freeSpaceCheck = "FALSE"' >> "${TMPCONFIG}" + +# See if there are any USB devices connected that we want to pass through immediately +get_usb_devices 'usb.autoConnect.deviceXXXXX = "0x%VENDOR%:0x%PRODUCT%"' \ + | sed -r 's/0x0+/0x/g' \ + | awk '{sub(/XXXXX/,NR-1)}1' \ + >> "${TMPCONFIG}" + +# At last_ Let's copy it to $confdir/run-vmware.conf +if cp -p "${TMPCONFIG}" "$conffile"; then + writelog "Copied TMPDIR/IMGUUID ${TMPCONFIG} to conffile ${conffile}" +else + writelog "Could not copy TMPDIR/IMGUUID -${TMPCONFIG}- to conffile ${conffile}!" + cleanexit 1 +fi + diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include index 4d263272..08188b58 100644 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include @@ -42,24 +42,26 @@ if [ "$LEGACY" ]; then # set_vmware_startup_file source "${VMWAREINCLUDEDIR}/write_config_files_legacy.inc" && write_config_files_legacy else - # write configuration files - source "${VMWAREINCLUDEDIR}/write_config_files.inc" + # get information from downloaded vmx + source "${VMWAREINCLUDEDIR}/parse_vmx.inc" + + # determine limitations wrt RAM and CPU count of VM + source "${VMWAREINCLUDEDIR}/determine_hardware_limitations.inc" + + # create file and directory structure for vmware setup + source "${VMWAREINCLUDEDIR}/create_static_directory_structure.inc" + + # create preferences file ${vmhome}/preferences + source "${VMWAREINCLUDEDIR}/create_vmhome_preferences_file.inc" && create_vmhome_preferences_file # parse the given vmx file - source "${VMWAREINCLUDEDIR}/parse_vmx.inc" + source "${VMWAREINCLUDEDIR}/write_final_vmx.inc" fi # logging and stdout # needs writelog() from vmchooser-run_virt source "${VMWAREINCLUDEDIR}/logging.inc" && logging -# See if there are any USB devices connected that we want to pass through immediately -get_usb_devices 'usb.autoConnect.deviceXXXXX = "0x%VENDOR%:0x%PRODUCT%"' \ - | sed -r 's/0x0+/0x/g' \ - | awk '{sub(/XXXXX/,NR-1)}1' \ - >> "$conffile" - - # For debugging cp "$conffile" "/tmp/vmware-last-config" -- cgit v1.2.3-55-g7522 From 7c70ebde186c9589bd6e56f04d9f9bab682a3c14 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 19 Oct 2016 15:07:25 +0200 Subject: [run-virt] More cleanup; kill legacy support, rename and move includes, kill dead code --- .../data/opt/openslx/scripts/includes/TEST.sh | 6 - .../opt/openslx/scripts/includes/check_lpd.inc | 13 - .../includes/check_runvirt_needed_files.inc | 53 ---- .../includes/check_runvirt_xml_sanity_legacy.inc | 26 -- .../opt/openslx/scripts/includes/detect_legacy.inc | 34 --- .../scripts/includes/get_xml_file_dir_legacy.inc | 50 ---- .../scripts/includes/get_xml_file_variables.inc | 103 ------- .../includes/get_xml_file_variables_legacy.inc | 120 -------- .../includes/print_runvirt_console_logo.inc | 12 - .../includes/set_runvirt_hardware_variables.inc | 102 ------- .../set_runvirt_hardware_variables_legacy.inc | 87 ------ .../scripts/includes/set_runvirt_variables.inc | 26 -- .../openslx/scripts/includes/setup_firewall.inc | 12 - .../scripts/includes/setup_image_access.inc | 71 ----- .../openslx/scripts/includes/setup_printer_lpd.inc | 33 --- .../opt/openslx/scripts/includes/setup_sound.inc | 64 ----- .../scripts/includes/setup_virtual_floppy.inc | 101 ------- .../scripts/includes/setup_vm_hypervisor.inc | 22 -- .../scripts/includes/start_windowmanager.inc | 27 -- .../opt/openslx/scripts/includes/usb_detector.inc | 77 ----- .../includes/vmchooser_runvirt_functions.inc | 76 ----- .../data/opt/openslx/scripts/vmchooser-run_virt | 116 +------- .../check_runvirt_needed_files.inc | 53 ++++ .../vmchooser/run-virt-includes/detect_legacy.inc | 34 +++ .../run-virt-includes/get_xml_file_variables.inc | 103 +++++++ .../set_runvirt_hardware_variables.inc | 102 +++++++ .../run-virt-includes/set_runvirt_variables.inc | 26 ++ .../vmchooser/run-virt-includes/setup_firewall.inc | 12 + .../run-virt-includes/setup_image_access.inc | 71 +++++ .../run-virt-includes/setup_printer_lpd.inc | 46 +++ .../vmchooser/run-virt-includes/setup_sound.inc | 65 +++++ .../run-virt-includes/setup_virtual_floppy.inc | 101 +++++++ .../run-virt-includes/setup_vm_hypervisor.inc | 34 +++ .../run-virt-includes/start_windowmanager.inc | 27 ++ .../vmchooser/run-virt-includes/usb_detector.inc | 77 +++++ .../vmchooser_runvirt_functions.inc | 79 ++++++ .../data/opt/openslx/vmchooser/vmchooser-run_virt | 116 ++++++++ .../includes/create_vmware_config_file_legacy.inc | 316 --------------------- .../vmware/includes/log_config_summary.inc | 62 ++++ .../openslx/vmchooser/vmware/includes/logging.inc | 64 ----- .../vmware/includes/set_hardware_legacy.inc | 152 ---------- .../vmware/includes/write_config_files_legacy.inc | 29 -- .../opt/openslx/vmchooser/vmware/run-virt.include | 35 +-- 43 files changed, 1021 insertions(+), 1814 deletions(-) delete mode 100755 remote/modules/run-virt/data/opt/openslx/scripts/includes/TEST.sh delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/check_lpd.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/check_runvirt_needed_files.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/check_runvirt_xml_sanity_legacy.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/detect_legacy.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/get_xml_file_dir_legacy.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/get_xml_file_variables.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/get_xml_file_variables_legacy.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/print_runvirt_console_logo.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/set_runvirt_hardware_variables.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/set_runvirt_hardware_variables_legacy.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/set_runvirt_variables.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_firewall.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_image_access.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_printer_lpd.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_sound.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_vm_hypervisor.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/start_windowmanager.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/usb_detector.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/vmchooser_runvirt_functions.inc mode change 100755 => 120000 remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/check_runvirt_needed_files.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/detect_legacy.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/set_runvirt_hardware_variables.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/set_runvirt_variables.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_firewall.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_image_access.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_printer_lpd.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_sound.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_virtual_floppy.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_vm_hypervisor.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/start_windowmanager.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/usb_detector.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/vmchooser_runvirt_functions.inc create mode 100755 remote/modules/run-virt/data/opt/openslx/vmchooser/vmchooser-run_virt delete mode 100644 remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmware_config_file_legacy.inc create mode 100644 remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc delete mode 100644 remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/logging.inc delete mode 100644 remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/set_hardware_legacy.inc delete mode 100644 remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_config_files_legacy.inc (limited to 'remote/modules') diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/TEST.sh b/remote/modules/run-virt/data/opt/openslx/scripts/includes/TEST.sh deleted file mode 100755 index fd5f755d..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/TEST.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -. usb_detector.inc - -get_usb_devices "bla=%VENDOR% kacke=%PRODUCT%" 0:6 0:7 0:e 0:10 - diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/check_lpd.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/check_lpd.inc deleted file mode 100644 index cfaf811e..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/check_lpd.inc +++ /dev/null @@ -1,13 +0,0 @@ -############################################ -# Include: Checking whether lpd is running # -############################################ - -# Check if tcpsvd is running. Do this down here so we do not check -# immediately after trying to spawn it, as this could result in -# success even if it's not really working. - -if ! kill -0 "$PID_LPD"; then - slxlog "virt-lpd" "Could not start tcpsvd/lpd for virtual machine session" - notify_user "Durcksystem" "Das Drucksystem konnte nicht initialisiert werden. Druckfunktion nicht verfügbar." -fi - diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/check_runvirt_needed_files.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/check_runvirt_needed_files.inc deleted file mode 100644 index fbb0bc70..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/check_runvirt_needed_files.inc +++ /dev/null @@ -1,53 +0,0 @@ -################################################################# -# Include: Check for important files used by vmchooser_run-virt # -################################################################# - -# WARNING: This is perhaps vestigial! - -filecheck() { - filecheck=$(LANG=us ls -lh ${diskfile} 2>&1) - writelog "Filecheck:\n${filecheck}\n" - noimage=$(echo ${filecheck} | grep -i "no such file or directory" | wc -l) - rightsfile=${diskfile} - - # check if link - if [ -L "${diskfile}" ]; then - # take link target - rightsfile=$(ls -lh ${diskfile} 2>&1 | awk -F '-> *' '{print $2}') - rightsfile=${vmdir}/${rightsfile} - filecheck=$(LANG=us ls -lh ${rightsfile} 2>&1) - fi - - # does file exist - if [ "${noimage}" -ge "1" ]; then - writelog "Virtual Machine Image Problem:\c " - writelog "\tThe image you've specified doesn't exist." - writelog "Filecheck says:\c " - writelog "\t\t${diskfile}:\n\t\t\tNo such file or directory" - writelog "Hint:\c " - writelog "\t\t\tCompare spelling of the image with your options.\n" - exit 1 - fi - # readable by calling user - if ! [ -r "${diskfile}" >/dev/null 2>&1 \ - -o -r "${diskfile}" >/dev/null 2>&1 ]; then - writelog "Vmware Image Problem:\c " - writelog "\tThe image you've specified has wrong rights." - writelog "Filecheck says:\t\t$(echo ${filecheck} \ - | awk '{print $1" "$3" "$4}') ${rightsfile}" - writelog "Hint:\t\t\tChange rights with: chmod a+r ${rightsfile}\n" - exit 1 - fi - - # writable (for persistent-mode)? - if ! [ -w "${diskfile}" >/dev/null 2>&1 \ - -o -w "${diskfile}" >/dev/null 2>&1 ] \ - && [ "${np}" = "independent-persistent" ]; then - writelog "Vmware Image Problem:\c " - writelog "\tThe image you have specified has wrong rights." - writelog "Filecheck says:\t\t$(echo ${filecheck} \ - | awk '{print $1" "$3" "$4}') ${rightsfile}" - writelog "Hint:\t\t\tUse nonpersistent-mode or change rights to rw\n" - exit 1 - fi -} diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/check_runvirt_xml_sanity_legacy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/check_runvirt_xml_sanity_legacy.inc deleted file mode 100644 index 0e720a06..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/check_runvirt_xml_sanity_legacy.inc +++ /dev/null @@ -1,26 +0,0 @@ -####################################################### -# Include: check xml file for sanity (legacy, old way # -####################################################### - -# test if the xml file is valid -if ! [ -r "${xmlfile}" ]; then - writelog "${xmlfile} not a readable XML file!" - slxlog "virt-nonreadable-xml" "XML file not readable: $xmlfile" - error_user "Die XML-Datei der gewählten Sitzung ist nicht lesbar oder existiert nicht" - exit 1 -fi - -# test if XML file -if ! grep -q '/dev/null >&2; then - writelog "wget ${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}. Triggering legacy mode." - else - writelog "wget ${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID} successful." - if [ ! -s "$TMPCONFIG" ]; then - writelog "Server sent zero byte virtual machine description file. Triggering legacy mode." - else - writelog "Triggering current (non-legacy) mode." - LEGACY= # everything worked - clear legacy mode variable (so we use the "current" mode) - fi - fi -fi - diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/get_xml_file_dir_legacy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/get_xml_file_dir_legacy.inc deleted file mode 100644 index c3c6f7b3..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/get_xml_file_dir_legacy.inc +++ /dev/null @@ -1,50 +0,0 @@ -######################################################### -# Include: Get xml file and directory (legacy, old way) # -######################################################### - -## Added for persistent support. -diskmode='nonpersistent' -if [[ "$(grep --extended-regexp \ - '< *short_description *param=".+ --persistent--"' "$1")" ]]; then - diskmode='persistent' - imageFilePath="$(grep -io '"${LOGFILE}" - fi -fi - -# absolute or relative path? -xmlfile=$1 -if ls "${xmlfile}" 2>/dev/null | grep '/' >/dev/null 2>&1; then - xmlpath=$(dirname "${xmlfile}") - xmlfile=$(basename "${xmlfile}") -else - xmlpath=${vmchooser_xmlpath} -fi -# full path -xmlfile="${xmlpath}/${xmlfile%.xml}.xml" - -DO_PROFILE="$(grep -c -E -i '<\s*profile\s*param="?(true|yes)"?' "$xmlfile")" - diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/get_xml_file_variables.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/get_xml_file_variables.inc deleted file mode 100644 index b7ed648c..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/get_xml_file_variables.inc +++ /dev/null @@ -1,103 +0,0 @@ -########################################### -# Include: Set hardware related variables # -########################################### - -writelog "Starting configuration..." -writelog "\tLogfile:\t\t${LOGFILE}" -writelog "\t/tmp info:\t\t$(df -h | grep " /tmp$" | awk '{print $2}') \c" -writelog "$(grep "/tmp " /proc/mounts | awk '{print $1" "$2" "$3" "$4}')" -writelog "\tVM XML dir:\t\t$(dirname "${xmlfile}")" -writelog "\tXML file:\t\t${xmlfile}" -writelog "Enable 3D:\t\t${enable3d}" -writelog "VM config:" - -# # Name of the virt image -imgname=$(grep -io ' "$LOGF" 2>&1 - RET=$? - if [ "$RET" != "0" ]; then - slxlog "runvirt-firewall" "Error setting up firewall rules for lecture $IMGUUID (Exit code $RET)" "$LOGF" - fi - return 0 -} diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_image_access.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_image_access.inc deleted file mode 100644 index 3c4ed330..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_image_access.inc +++ /dev/null @@ -1,71 +0,0 @@ -########################################################### -# Include: Setup dnbd for image access, nfs/cifs fallback # -########################################################### - -writelog "Now in setup_image_access.inc ..." - -# Try to use dnbd3 to access the image -unset vm_diskfile -unset vm_revision -unset dnbd3_fuse_mount_point -unset dnbd3_tmplog -if ! which dnbd3-fuse; then - writelog "Can't use dnbd3 as dnbd3-fuse binary is not in PATH" -elif [ -z "$SLX_DNBD3_SERVERS" ] || [ "x$SLX_VM_DNBD3" != "xyes" ]; then - writelog "Can't use dnbd3 as no servers are given in config, or SLX_VM_DNBD3 is not set to yes" -else - # Mount path for images mounted with dnbd3-fuse - dnbd3_fuse_mount_point="$TMPDIR/dnbd3fuse.mnt" - mkdir -p "${dnbd3_fuse_mount_point}" - # start dnbd3-fuse in subshell - dnbd3_tmplog="$TMPDIR/dnbd3fuse.log" - dnbd3_exitflag="$TMPDIR/dnbd3exit$RANDOM" - rm -f -- "$dnbd3_exitflag" - ( - dnbd3-fuse -f -o allow_other,max_readahead=262144 -h "$SLX_DNBD3_SERVERS" -i "${imgrelpath}" "${dnbd3_fuse_mount_point}" > "$dnbd3_tmplog" 2>&1 - RET=$? - touch "$dnbd3_exitflag" - if [ "$RET" != "0" ]; then - writelog "dnbd3-fuse stopped working (Exit code $RET)" - slxlog "virt-dnbd3-fuse" "dnbd3-fuse stopped/refused serving '${imgrelpath}' from '${SLX_DNBD3_SERVERS}' with error code: $RET" "${dnbd3_tmplog}" - fi - ) & - # give it a bit of time - usleep 250000 - # check if we have the image - for TIMEOUT in 0.5 1 1 OUT; do - if [ -r "${dnbd3_fuse_mount_point}/img" ]; then - vm_revision="$(grep -m 1 "^Revision:" "${dnbd3_fuse_mount_point}/status" | cut -d" " -f2)" - vm_diskfile="${dnbd3_fuse_mount_point}/img" - writelog "DNBD3: $imgrelpath on $vm_diskfile with rid $vm_revision" - vmpath="$vm_diskfile" - break - fi - [ "$TIMEOUT" = "OUT" -o -e "$dnbd3_exitflag" ] && break - sleep "$TIMEOUT" - done - - if [ -z "$vm_diskfile" ]; then - slxlog "virt-dnbd3" "No dnbd3 server for ${imgrelpath} found, trying NFS/CIFS..." "$dnbd3_tmplog" - writelog "No working dnbd3 server found :-(" - fi -fi - -# $vm_diskfile will be empty if dnbd3 is not used or failed. Let's try to fall back to NFS/CIFS via file system -if [ -z "$vm_diskfile" ]; then - new_vmpath=$(ls "${vmpath}.r"* | grep -E -o '\.r[0-9]+$' | grep -o -E '[0-9]+' | sort -n | tail -n 1) - [ -n "$new_vmpath" ] && vmpath="${vmpath}.r${new_vmpath}" - vm_diskfile="$vmpath" -fi - -# Check if virtual machine container file exists -if ! [ -e "${vmpath}" ]; then - slxlog "virt-image-missing" "VM image $vmpath not found!" - writelog "Virtual machine image ${vmpath} not found!" - error_user "Das Image für die gewählte Virtuelle Maschine konnte nicht gefunden werden. -Versuchen Sie zunächst, den Computer komplett neu zu starten. Sollte das Problem bestehen bleiben, wenden Sie sich bitte an den Support." - cleanexit 1 -fi - -writelog "Virtual machine disk file: $vm_diskfile" - diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_printer_lpd.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_printer_lpd.inc deleted file mode 100644 index ee0b2c70..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_printer_lpd.inc +++ /dev/null @@ -1,33 +0,0 @@ -##################################### -# Include: Setup printer daemon LPD # -##################################### - -QUEUE="STANDARD" # This has to match the queue you configured in your VM -SPOOLDIR= - -### Disabled: 100megs is not enough, some jobs are HUGE, try to use temp which should be on disk -## Try using user's tmpfs home first, as it gets wiped on logout -#if [ -n "${HOME}" ] && [ -w "${HOME}" ]; then -# SPOOLDIR="${HOME}/.spool" -# mkdir -p "${SPOOLDIR}/${QUEUE}" -#fi -# If failed, try to fall back to /tmp - -if [ -z "${SPOOLDIR}" ] || [ ! -w "${SPOOLDIR}/${QUEUE}" ]; then - SPOOLDIR="${TMPDIR}/printergui-${RANDOM}" - rm -rf -- "${SPOOLDIR}" - if ! mkdir -p "${SPOOLDIR}/${QUEUE}"; then - slxlog "virt-spooldir" "Could not create spool directory ($SPOOLDIR) for $USER - printing will not work!" - # TODO: Warn user - fi - chmod 0700 "${SPOOLDIR}/${QUEUE}" -fi - -# Start the lpdaemon listening on the given port -# TODO: externalize with something like runvirt.d (other parts might benefit from that too) -tcpsvd -E 192.168.101.1 5515 \ - lpd "$SPOOLDIR" \ - ash -c "/opt/openslx/scripts/run-virt_print '${USER}' \"${SPOOLDIR}/${QUEUE}/\$DATAFILE\"" & - -# PID to kill the process -PID_LPD="$!" diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_sound.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_sound.inc deleted file mode 100644 index 201c0ff5..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_sound.inc +++ /dev/null @@ -1,64 +0,0 @@ -######################## -# Include: Setup sound # -######################## -# 8086:1e20: Sound card in bwPX4 - -writelog "Starting sound setup ..." - -if lspci -n | grep -E -i '8086:1e20( |$)'; then - VOL="100%" # bwPC 4: Speaker too quiet :-( -else - VOL="85%" -fi - -if true; then - # detecting which card is to be used - writelog "Detecting which sound card to use ..." - PROC="/proc/asound/cards" - if [ ! -r "$PROC" ]; then - writelog "'${PROC}' not found or not readable." - SOUND_CARD_INDEX=0 - SOUND_CARD_COUNT=1 - else - # Try to filter HDMI cards first - SOUND_CARD_INDEX=$(grep -v -i 'HDMI' "${PROC}" | grep -E -o '^[[:space:]]{0,2}[0-9]+[[:space:]]+' | head -n 1) - # If empty, try again with all - [ -z "${SOUND_CARD_INDEX}" ] && SOUND_CARD_INDEX=$(cat "${PROC}" | grep -E -o '^[[:space:]]{0,2}[0-9]+[[:space:]]+' | head -n 1) - if [ -z "${SOUND_CARD_INDEX}" ]; then - writelog "No sound card found." - SOUND_CARD_INDEX=0 - fi - SOUND_CARD_COUNT=$(grep -E '^[[:space:]]{0,2}[0-9]+[[:space:]]+' "${PROC}" | wc -l) - fi - - SOUND_CARD_INDEX="$(grep -E -o '[0-9]+' <<<$SOUND_CARD_INDEX)" - writelog "Detected sound card index is: $SOUND_CARD_INDEX" - writelog "Sound card count: $SOUND_CARD_COUNT" - - # Adjust sound volume (playback)... Random mixer names we have encountered during testing - writelog "Setting up volume..." - amixer -q -c "$SOUND_CARD_INDEX" sset 'Master' "$VOL" unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'PCM' "$VOL" unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'CD' "$VOL" unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Headphone' "$VOL" unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Front' "$VOL" unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Speaker' "$VOL" unmute - # Recording. It seems that (most) devices need the volume set to 0, so you - # don't hear your own mic input, but should be unmuted. Also on some cards, - # you need to set the cap option on the mic you want to use, while other cards - # will just ignore that option. - # Plus, most cards have a Capture mixer, which needs to be set to cap too, and - # have its volume turned up. (There'll probably be some cards that need yet - # another setup, but this works for now on 4 tested cards) - amixer -q -c "$SOUND_CARD_INDEX" sset 'Rear Mic Boost' "50%" cap unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Rear Mic' "0%" cap unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Front Mic Boost' "50%" cap unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Front Mic' "0%" cap unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Mic Boost' "50%" cap unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Mic' "0%" cap unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Capture' "100%" cap unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Input Source' 'Front Mic' # Let's hope nobody uses rear mic... - # fix random static noise when starting vmplayer when module snd_pcsp (not pcspkr) is loaded - amixer -q -c pcsp sset Master "0%" mute - writelog "Done setting up volume." -fi >> "${LOGFILE}" 2>&1 diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc deleted file mode 100644 index d9ae052c..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc +++ /dev/null @@ -1,101 +0,0 @@ -#!/bin/bash -############################################## -# Include: Setup virtual floppy for drive b: # -############################################## - -declare -rg FLOPPYIMG="${TMPDIR}/floppy.img" -declare -rg TMPHOME="${HOME}" -declare -rg RUNSCRIPT="${TMPDIR}/runscript.tmp" - -wget -T 6 -O "${RUNSCRIPT}" "${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}/runscript" > /dev/null & -WGET=$! - -dd "if=/dev/zero" "of=${FLOPPYIMG}" count=1440 bs=1024 -chmod 0600 "${FLOPPYIMG}" -mkfs.fat "${FLOPPYIMG}" || mkfs.vfat "${FLOPPYIMG}" || mkdosfs "${FLOPPYIMG}" - -# Create file with resolution information etc. -. "/opt/openslx/inc/shares" -if [ -z "$SHARE_REMAP_MODE" ]; then - SHARE_REMAP_MODE_INI="0" - SHARE_REMAP_MODE="3" -else - SHARE_REMAP_MODE_INI="$SHARE_REMAP_MODE" -fi -[ -z "$SHARE_CREATE_MISSING_REMAP" ] && SHARE_CREATE_MISSING_REMAP="1" -declare -rg RESOLUTION=$(xrandr | grep -o -E 'connected\s*(primary)?\s*[0-9]+x[0-9]+\+0\+0' \ - | grep -o -E -m1 '[0-9]+x[0-9]+') - -# Legacy: HOSTRES.TXT -cat > "${TMPDIR}/HOSTRES.TXT" <<-HIER -${RESOLUTION} -HIER - -# Create file for network shares to mount -declare -rg SHARES="${TMPDIR}/shares.dat" -touch "${SHARES}" -chmod 0600 "${SHARES}" -if ! pwdaemon --query "${TMPHOME}/.pwsocket" > "${SHARES}"; then - slxlog "virt-pwdaemon" "Could not start pwdaemon" -else - sed -i 's/^/192.168.101.1\t/' "${SHARES}" # TODO: Depending on nettype (in case we have != nat some day) - if [ "${SHARE_REMAP_MODE}" = 1 -o "${SHARE_REMAP_MODE}" = 2 ] && [ -e "${TMPHOME}/.home" ]; then - NETHOME=$(cat "${TMPHOME}/.home") - [ -z "$SHARE_HOME_DRIVE" ] && SHARE_HOME_DRIVE="H:" - # Tab between items, so spaces can be used! - echo "${NETHOME} ${SHARE_HOME_DRIVE} Home-Verzeichnis" >> "${SHARES}" - fi - for VAR in ${!SHARE_LINE_*}; do - echo "${!VAR}" >> "${SHARES}" - done -fi - -wait "$WGET" - -# Check downloaded runscript, handle extension marker -EXT= -if [ -s "$RUNSCRIPT" ]; then - EXT=$(head -n 1 "$RUNSCRIPT" | grep -o -i '^EXT=.*$' | cut -d '=' -f 2-) - [ -n "$EXT" ] && [ "x${EXT:0:1}" != "x." ] && EXT=".$EXT" -fi - -# Write info file -UNAME= -[ -s "${HOME}/.account" ] && UNAME=$(cat "${HOME}/.account") -[ -z "${UNAME}" ] && UNAME=$(whoami) -cat > "${TMPDIR}/openslx.ini" <<-HIER -[openslx] -username=${UNAME} -resolution=${RESOLUTION} -createMissingRemap=${SHARE_CREATE_MISSING_REMAP} -remapMode=${SHARE_REMAP_MODE_INI} -homeDrive=${SHARE_HOME_DRIVE} -scriptExt=${EXT} - -[remap] -documents=${SHARE_DOCUMENTS} -downloads=${SHARE_DOWNLOADS} -desktop=${SHARE_DESKTOP} -media=${SHARE_MEDIA} -other=${SHARE_OTHER} -HIER - -# Copy all them there filez into floppy image -mcopy -i "${FLOPPYIMG}" "${TMPDIR}/openslx.ini" "${TMPDIR}/HOSTRES.TXT" "${SHARES}" "::/" -mcopy -i "${FLOPPYIMG}" "$VMCHOOSER_DIR/data/openslx.exe" "::/" -# Copy guest configuration (with added information) config.xml to be accessed -# via virtual floppy -mcopy -i "${FLOPPYIMG}" "$xmlfile" "::/config.xml" - -# Copying linux directory: -mcopy -s -i "${FLOPPYIMG}" "$VMCHOOSER_DIR/data/linux" "::/" - -# User supplied runscript -if [ -n "$EXT" ]; then - sed -i '1d' "${RUNSCRIPT}" - mcopy -i "${FLOPPYIMG}" "${RUNSCRIPT}" "::/runscript${EXT}" -fi - -rm -f -- "${SHARES}" "${TMPDIR}/openslx.ini" "${TMPDIR}/HOSTRES.TXT" -unset SHARES VAR NETHOME UNAME - diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_vm_hypervisor.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_vm_hypervisor.inc deleted file mode 100644 index 33fd363b..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_vm_hypervisor.inc +++ /dev/null @@ -1,22 +0,0 @@ -########################################################################## -# Include: Setup virtual machine hypervisor via vm-specific include file # -########################################################################## - -# Get all virtual machine specific stuff from the respective include file -if [ ! -e "$VMCHOOSER_DIR/$xmlvirt/run-virt.include" ] ; then - slxlog "virt-plugin-missing" "Could not find run-virt.include for $xmlvirt ($VMCHOOSER_DIR/$xmlvirt/run-virt.include)" - writelog "Failed because of missing ${xmlvirt} plugin." - error_user "Konnte den Virtualisierer '$xmlvirt' nicht finden. Starten der Virtuellen Maschine fehlgeschlagen. - Starten Sie den Computer neu und wenden Sie sich an den Support, wenn das Problem weiterhin besteht." - cleanexit 1 -fi - - self="${xmlvirt}" - -# Now including the hypervisor specific include file: -if ! source "$VMCHOOSER_DIR/$xmlvirt/run-virt.include"; then - slxlog "virt-plugin-error" "run-virt.include for $xmlvirt could not be sourced (contains syntax errors?)" "$xmlvirt" - writelog "Erroneous run-virt.include for $xmlvirt" - error_user "Das Start-Script für den Virtualisierer '$xmlvirt' ist fehlerhaft. - Starten Sie den Computer neu und wenden Sie sich an den Support, wenn das Problem weiterhin besteht." -fi diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/start_windowmanager.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/start_windowmanager.inc deleted file mode 100644 index da43f341..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/start_windowmanager.inc +++ /dev/null @@ -1,27 +0,0 @@ -#################################################### -# Include: Start windowmanager for easier handling # -#################################################### - -# Some problems may arise with windows opening in background when -# using eg. vmware without a window manager. - -FOUND_WM= -for dm in openbox kwin xfwm4 metacity blackbox twm fvwm2 ; do - if which $dm >/dev/null 2>&1 ; then - if [ "$dm" = "fvwm2" ] ; then - echo "EdgeScroll 0 0" > ${redodir}/fvwm - writelog "Starting fvwm2." - fvwm2 -f ${redodir}/fvwm >/dev/null 2>&1 & - else - writelog "Starting ${dm}." - $dm >/dev/null 2>&1 & - fi - FOUND_WM=1 - break - fi -done - -if [ -z "$FOUND_WM" ]; then - slxlog "virt-windowmanager" "Could not find any window manager to use!" - notify_user "Konnte keinen Window Manager finden. (Das ist schlecht!)" -fi diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/usb_detector.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/usb_detector.inc deleted file mode 100644 index a2d442e4..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/usb_detector.inc +++ /dev/null @@ -1,77 +0,0 @@ -# Helper function that will scan /dev/bus/usb for devices matching specific classes -# and then output the corresponding device ids. This can be used for selective -# handover of devices to a virtual machine - -declare -rg PASSTHROUGH_USB_DEVICES="2 0:5 0:6 0:7 0:14 0:16 0:17 239" - -# $1: expression to fill with device information. -# valid placeholders are: -# %VENDOR% - device vendor id -# %PRODUCT% - device product id -# $2-n: device classes to include in output -get_usb_devices_int() { - [ -z "$TMPDIR" ] && TMPDIR="/tmp" - local EXP=$1 - shift - if [ -z "$EXP" ]; then - writelog --quiet "No ouput expression template passed to get_usb_devices" - cleanexit 1 - fi - if [ $# -eq 0 ]; then - writelog --quiet "No device classes given to get_usb_devices" - cleanexit 1 - fi - local MATCH=';' - while [ $# -gt 0 ]; do - MATCH+="$1;" - [[ "$1" != *:* ]] && MATCH+="0:$1;" - shift - done - local dev= - local key value trailing - trailing= - local tmp="${TMPDIR}/lsusb.$$.$RANDOM" - for dev in /dev/bus/usb/*/*; do - if ! lsusb -D "$dev" > "$tmp" 2>/dev/null; then - writelog --quiet "Cannot lsusb $dev" - continue - fi - local DC= - local OK= - local VENDOR= - local PRODUCT= - while read -r key value trailing || [ -n "$key" ]; do - if [[ "$key" == "idVendor" ]]; then - [[ "$value" == 0x* ]] && VENDOR="${value:2}" - elif [[ "$key" == "idProduct" ]]; then - [[ "$value" == 0x* ]] && PRODUCT="${value:2}" - elif [ -z "$DC" ]; then - # No bDeviceClass seen yet - if [[ "$key" == "bDeviceClass" ]]; then - DC="$value" - [[ "$MATCH" == *";${DC};"* ]] && OK=yo - fi - else - # #DeviceClass is generic, look at sub class - if [[ "$key" == "bInterfaceClass" ]]; then - [[ "$MATCH" == *";${DC}:${value};"* ]] && OK=yo - fi - fi - if [ -n "$OK" -a -n "$VENDOR" -a -n "$PRODUCT" ]; then - echo "$EXP" | sed "s/%VENDOR%/${VENDOR}/g;s/%PRODUCT%/${PRODUCT}/g" - break - fi - done < "$tmp" - done - rm -f -- "$tmp" -} - -get_usb_devices() { - if which lsusb 2>/dev/null >&2 && lsusb --help 2>&1 | grep -q -- '-D' 2>/dev/null; then - [ $# -eq 1 ] && set -- "$1" $PASSTHROUGH_USB_DEVICES # no quotes here! - get_usb_devices_int "$@" | sort -u - else - writelog --quiet "Cannot scan usb bus: lsusb not found or doesn't support -D" - fi -} - diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/vmchooser_runvirt_functions.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/vmchooser_runvirt_functions.inc deleted file mode 100644 index af9758e2..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/vmchooser_runvirt_functions.inc +++ /dev/null @@ -1,76 +0,0 @@ -####################################################### -# Include: Set functions needed by vmchooser-run_virt # -####################################################### - -# function to write to stdout and logfile -writelog() { - local DATE=$(date +%Y-%m-%d-%H-%M-%S) - # write to stdout? - if [ "x$1" = "x--quiet" ]; then - shift - else - echo -e "$DATE: $@" - fi - # log into file - echo -e "$DATE: $@" >> "${LOGFILE}" -} - -notify_user() { - local TOPIC="$1" - shift - notify-send -u normal "$TOPIC" "$@" - writelog "Notify: **${TOPIC}**: $*" -} - -error_user() { - local TOPIC="$1" - shift - local MSG TITLE BODY - if [ $# -gt 0 ]; then - MSG=" $TOPIC -$*" - TITLE="$TOPIC" - BODY="$*" - else - MSG="$TOPIC" - TITLE="ERROR" - BODY="$TOPIC" - fi - /opt/openslx/cups/printergui --error "$MSG" && return - # printergui might not exist, try fallback here - # unfortunately, i can only think of notify+sleep right now - notify-send -u critical "$TITLE" "$BODY" - sleep 10 -} - -# Clean exit will be called at the end of vmchooser-run_virt -cleanexit() { - sleep 1 - # Ummount dnbd3-fuse - if [ -n "$dnbd3_fuse_mount_point" ] && [ -e "$dnbd3_fuse_mount_point/img" ]; then - for timeout in 1 1 1 FAIL; do - fusermount -u "$dnbd3_fuse_mount_point" && break - writelog "dnbd3 still busy...." - [ "$timeout" = "FAIL" ] && break - sleep "$timeout" - done - fi - # Kill LPD - [ -n "${PID_LPD}" ] && kill "${PID_LPD}" - - # If we're not in debug mode, remove all temporary files - if [ -n "${TMPDIR}" -a -z "$SLX_DEBUG" ]; then - rm -rf -- "${TMPDIR}" - fi - - [ $# -gt 0 ] && exit "$1" - exit 129 # No exit code was given :/ -} - -rv_clean_string() { - if [ "$#" -ge 1 ]; then - echo "$@" | tr '[A-Z]' '[a-z]' | tr -d -c '[a-z0-9\-]' - else - tr '[A-Z]' '[a-z]' | tr -d -c '[a-z0-9\-]' - fi -} diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt b/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt deleted file mode 100755 index ea3cfe8e..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/bash -# Full bash required -# ----------------------------------------------------------------------------- -# Copyright (c) 2007..2010 - RZ Uni FR -# Copyright (c) 2007..2013 - OpenSLX GmbH -# -# This program is free software distributed under the GPL version 2. -# See http://openslx.org/COPYING -# -# If you have any feedback please consult http://openslx.org/feedback and -# send your suggestions, praise, or complaints to feedback@openslx.org -# -# General information about OpenSLX can be found at http://openslx.org/ -# ----------------------------------------------------------------------------- -# run-virt.sh -# - This is the generic wrapper for the several virtualization solutions. -# The idea is to setup a set of variables used by at least two different -# tools and then include the specific plugin which configures the speci- -# fied virtualization tool. -################################################################################ - -RUNVIRTINCLUDEDIR=/opt/openslx/scripts/includes -xmlfile="$1" - -# Functions needed by vmchooser-run_virt (writelog(), cleanexit(), rv_clean_string()) -source ${RUNVIRTINCLUDEDIR}/vmchooser_runvirt_functions.inc && trap 'trap "" SIGINT SIGTERM; cleanexit' SIGINT SIGTERM -# Define default dirs / get configs -source ${RUNVIRTINCLUDEDIR}/set_runvirt_variables.inc -# Function to detect whether we can use the new way (vmx via http) or the old way (legacy): -source ${RUNVIRTINCLUDEDIR}/detect_legacy.inc # This yields LEGACY, IMGUUID, IMGVMX -# For scanning for certain usb classes -source "${RUNVIRTINCLUDEDIR}/usb_detector.inc" - -if [ "$LEGACY" ]; then - # check for important files used (filecheck()) - vestigial? - source ${RUNVIRTINCLUDEDIR}/check_runvirt_needed_files.inc - # Get XML file and dir, legacy (old way) - source ${RUNVIRTINCLUDEDIR}/get_xml_file_dir_legacy.inc # xmlfile=$1 - # xml file sanity checks, legacy - source ${RUNVIRTINCLUDEDIR}/check_runvirt_xml_sanity_legacy.inc - # print console logo - source ${RUNVIRTINCLUDEDIR}/print_runvirt_console_logo.inc - # Read needed variables from XML file - source ${RUNVIRTINCLUDEDIR}/get_xml_file_variables_legacy.inc - # Declaration of hardware relatedt variables - source ${RUNVIRTINCLUDEDIR}/set_runvirt_hardware_variables_legacy.inc - # Sound setup the rest of the environment and run the configured vm - source ${RUNVIRTINCLUDEDIR}/setup_sound.inc - # Start printer daemon - source ${RUNVIRTINCLUDEDIR}/setup_printer_lpd.inc - # Setup virtual floppy b: for windows guests with config.xml, openslx.exe etc. - source ${RUNVIRTINCLUDEDIR}/setup_virtual_floppy.inc - # Try to use dnbd3 to access the image, nfs/cifs fallback - source ${RUNVIRTINCLUDEDIR}/setup_image_access.inc - # Get all virtual machine specific stuff from the respective include file - source ${RUNVIRTINCLUDEDIR}/setup_vm_hypervisor.inc - # start a windowmanager for easier handling - source ${RUNVIRTINCLUDEDIR}/start_windowmanager.inc - # Check if tcpsvd is running. Do not check immediately after spawning, - # as this could result in success even if it's not really working. - source ${RUNVIRTINCLUDEDIR}/check_lpd.inc -else - # check for important files used (filecheck()) - vestigial? - # This include does not currently work. TODO. - # source ${RUNVIRTINCLUDEDIR}/check_runvirt_needed_files.inc && filecheck - - # Firewall - source "${RUNVIRTINCLUDEDIR}/setup_firewall.inc" || writelog "Could not source setup_firewall" - setup_firewall || writelog "Could not run setup_firewall" - - # Read needed variables from XML file - source ${RUNVIRTINCLUDEDIR}/get_xml_file_variables.inc - - # Sound setup the rest of the environment and run the configured vm - source ${RUNVIRTINCLUDEDIR}/setup_sound.inc - - # Declaration of hardware relatedt variables - source ${RUNVIRTINCLUDEDIR}/set_runvirt_hardware_variables.inc - - # Start printer daemon - source ${RUNVIRTINCLUDEDIR}/setup_printer_lpd.inc - - # Setup virtual floppy b: for windows guests with config.xml, openslx.exe etc. - source ${RUNVIRTINCLUDEDIR}/setup_virtual_floppy.inc - - # Get all virtual machine specific stuff from the respective include file - source ${RUNVIRTINCLUDEDIR}/setup_image_access.inc - - # start a windowmanager for easier handling - source ${RUNVIRTINCLUDEDIR}/setup_vm_hypervisor.inc - - # Try to use dnbd3 to access the image, nfs/cifs fallback - source ${RUNVIRTINCLUDEDIR}/start_windowmanager.inc - - # Check if tcpsvd is running. Do not check immediately after spawning, - # as this could result in success even if it's not really working. - source ${RUNVIRTINCLUDEDIR}/check_lpd.inc - -fi - -# This will start the VM -writelog "VM command: eval ${VIRTCMD} ${VIRTCMDOPTS}" - -# Transported from vmware-runvirt include -sync - -eval ${VIRTCMD} ${VIRTCMDOPTS} -writelog "Bye." - -# Postrun for commands after virtualization finishes -if [ -n "${POSTRUN}" ]; then - eval ${POSTRUN} >/dev/null 2>&1 -fi - -cleanexit 0 diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt b/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt new file mode 120000 index 00000000..447f98bc --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt @@ -0,0 +1 @@ +/opt/openslx/vmchooser/vmchooser-run_virt \ No newline at end of file diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/check_runvirt_needed_files.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/check_runvirt_needed_files.inc new file mode 100644 index 00000000..fbb0bc70 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/check_runvirt_needed_files.inc @@ -0,0 +1,53 @@ +################################################################# +# Include: Check for important files used by vmchooser_run-virt # +################################################################# + +# WARNING: This is perhaps vestigial! + +filecheck() { + filecheck=$(LANG=us ls -lh ${diskfile} 2>&1) + writelog "Filecheck:\n${filecheck}\n" + noimage=$(echo ${filecheck} | grep -i "no such file or directory" | wc -l) + rightsfile=${diskfile} + + # check if link + if [ -L "${diskfile}" ]; then + # take link target + rightsfile=$(ls -lh ${diskfile} 2>&1 | awk -F '-> *' '{print $2}') + rightsfile=${vmdir}/${rightsfile} + filecheck=$(LANG=us ls -lh ${rightsfile} 2>&1) + fi + + # does file exist + if [ "${noimage}" -ge "1" ]; then + writelog "Virtual Machine Image Problem:\c " + writelog "\tThe image you've specified doesn't exist." + writelog "Filecheck says:\c " + writelog "\t\t${diskfile}:\n\t\t\tNo such file or directory" + writelog "Hint:\c " + writelog "\t\t\tCompare spelling of the image with your options.\n" + exit 1 + fi + # readable by calling user + if ! [ -r "${diskfile}" >/dev/null 2>&1 \ + -o -r "${diskfile}" >/dev/null 2>&1 ]; then + writelog "Vmware Image Problem:\c " + writelog "\tThe image you've specified has wrong rights." + writelog "Filecheck says:\t\t$(echo ${filecheck} \ + | awk '{print $1" "$3" "$4}') ${rightsfile}" + writelog "Hint:\t\t\tChange rights with: chmod a+r ${rightsfile}\n" + exit 1 + fi + + # writable (for persistent-mode)? + if ! [ -w "${diskfile}" >/dev/null 2>&1 \ + -o -w "${diskfile}" >/dev/null 2>&1 ] \ + && [ "${np}" = "independent-persistent" ]; then + writelog "Vmware Image Problem:\c " + writelog "\tThe image you have specified has wrong rights." + writelog "Filecheck says:\t\t$(echo ${filecheck} \ + | awk '{print $1" "$3" "$4}') ${rightsfile}" + writelog "Hint:\t\t\tUse nonpersistent-mode or change rights to rw\n" + exit 1 + fi +} diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/detect_legacy.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/detect_legacy.inc new file mode 100644 index 00000000..8bdfd8b1 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/detect_legacy.inc @@ -0,0 +1,34 @@ +######################################################## +# Include: Detect, whether runvirt runs in legacy mode # +######################################################## + +# Legacy mode: As runvirt has been before. +# New mode: uuid in xml _and_ vmx given via http. + +writelog "Detecting current/legacy mode ..." + +# First, let's try to extract an imguuid from xmlfile: +declare -rg IMGUUID=$(grep -i -o '/dev/null >&2; then + writelog "wget ${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}. Triggering legacy mode." + else + writelog "wget ${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID} successful." + if [ ! -s "$TMPCONFIG" ]; then + writelog "Server sent zero byte virtual machine description file. Triggering legacy mode." + else + writelog "Triggering current (non-legacy) mode." + LEGACY= # everything worked - clear legacy mode variable (so we use the "current" mode) + fi + fi +fi + diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc new file mode 100644 index 00000000..b7ed648c --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc @@ -0,0 +1,103 @@ +########################################### +# Include: Set hardware related variables # +########################################### + +writelog "Starting configuration..." +writelog "\tLogfile:\t\t${LOGFILE}" +writelog "\t/tmp info:\t\t$(df -h | grep " /tmp$" | awk '{print $2}') \c" +writelog "$(grep "/tmp " /proc/mounts | awk '{print $1" "$2" "$3" "$4}')" +writelog "\tVM XML dir:\t\t$(dirname "${xmlfile}")" +writelog "\tXML file:\t\t${xmlfile}" +writelog "Enable 3D:\t\t${enable3d}" +writelog "VM config:" + +# # Name of the virt image +imgname=$(grep -io ' "$LOGF" 2>&1 + RET=$? + if [ "$RET" != "0" ]; then + slxlog "runvirt-firewall" "Error setting up firewall rules for lecture $IMGUUID (Exit code $RET)" "$LOGF" + fi + return 0 +} diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_image_access.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_image_access.inc new file mode 100644 index 00000000..3c4ed330 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_image_access.inc @@ -0,0 +1,71 @@ +########################################################### +# Include: Setup dnbd for image access, nfs/cifs fallback # +########################################################### + +writelog "Now in setup_image_access.inc ..." + +# Try to use dnbd3 to access the image +unset vm_diskfile +unset vm_revision +unset dnbd3_fuse_mount_point +unset dnbd3_tmplog +if ! which dnbd3-fuse; then + writelog "Can't use dnbd3 as dnbd3-fuse binary is not in PATH" +elif [ -z "$SLX_DNBD3_SERVERS" ] || [ "x$SLX_VM_DNBD3" != "xyes" ]; then + writelog "Can't use dnbd3 as no servers are given in config, or SLX_VM_DNBD3 is not set to yes" +else + # Mount path for images mounted with dnbd3-fuse + dnbd3_fuse_mount_point="$TMPDIR/dnbd3fuse.mnt" + mkdir -p "${dnbd3_fuse_mount_point}" + # start dnbd3-fuse in subshell + dnbd3_tmplog="$TMPDIR/dnbd3fuse.log" + dnbd3_exitflag="$TMPDIR/dnbd3exit$RANDOM" + rm -f -- "$dnbd3_exitflag" + ( + dnbd3-fuse -f -o allow_other,max_readahead=262144 -h "$SLX_DNBD3_SERVERS" -i "${imgrelpath}" "${dnbd3_fuse_mount_point}" > "$dnbd3_tmplog" 2>&1 + RET=$? + touch "$dnbd3_exitflag" + if [ "$RET" != "0" ]; then + writelog "dnbd3-fuse stopped working (Exit code $RET)" + slxlog "virt-dnbd3-fuse" "dnbd3-fuse stopped/refused serving '${imgrelpath}' from '${SLX_DNBD3_SERVERS}' with error code: $RET" "${dnbd3_tmplog}" + fi + ) & + # give it a bit of time + usleep 250000 + # check if we have the image + for TIMEOUT in 0.5 1 1 OUT; do + if [ -r "${dnbd3_fuse_mount_point}/img" ]; then + vm_revision="$(grep -m 1 "^Revision:" "${dnbd3_fuse_mount_point}/status" | cut -d" " -f2)" + vm_diskfile="${dnbd3_fuse_mount_point}/img" + writelog "DNBD3: $imgrelpath on $vm_diskfile with rid $vm_revision" + vmpath="$vm_diskfile" + break + fi + [ "$TIMEOUT" = "OUT" -o -e "$dnbd3_exitflag" ] && break + sleep "$TIMEOUT" + done + + if [ -z "$vm_diskfile" ]; then + slxlog "virt-dnbd3" "No dnbd3 server for ${imgrelpath} found, trying NFS/CIFS..." "$dnbd3_tmplog" + writelog "No working dnbd3 server found :-(" + fi +fi + +# $vm_diskfile will be empty if dnbd3 is not used or failed. Let's try to fall back to NFS/CIFS via file system +if [ -z "$vm_diskfile" ]; then + new_vmpath=$(ls "${vmpath}.r"* | grep -E -o '\.r[0-9]+$' | grep -o -E '[0-9]+' | sort -n | tail -n 1) + [ -n "$new_vmpath" ] && vmpath="${vmpath}.r${new_vmpath}" + vm_diskfile="$vmpath" +fi + +# Check if virtual machine container file exists +if ! [ -e "${vmpath}" ]; then + slxlog "virt-image-missing" "VM image $vmpath not found!" + writelog "Virtual machine image ${vmpath} not found!" + error_user "Das Image für die gewählte Virtuelle Maschine konnte nicht gefunden werden. +Versuchen Sie zunächst, den Computer komplett neu zu starten. Sollte das Problem bestehen bleiben, wenden Sie sich bitte an den Support." + cleanexit 1 +fi + +writelog "Virtual machine disk file: $vm_diskfile" + diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_printer_lpd.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_printer_lpd.inc new file mode 100644 index 00000000..2fb9310a --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_printer_lpd.inc @@ -0,0 +1,46 @@ +##################################### +# Include: Setup printer daemon LPD # +##################################### + +QUEUE="STANDARD" # This has to match the queue you configured in your VM +SPOOLDIR= + +### Disabled: 100megs is not enough, some jobs are HUGE, try to use temp which should be on disk +## Try using user's tmpfs home first, as it gets wiped on logout +#if [ -n "${HOME}" ] && [ -w "${HOME}" ]; then +# SPOOLDIR="${HOME}/.spool" +# mkdir -p "${SPOOLDIR}/${QUEUE}" +#fi +# If failed, try to fall back to /tmp + +if [ -z "${SPOOLDIR}" ] || [ ! -w "${SPOOLDIR}/${QUEUE}" ]; then + SPOOLDIR="${TMPDIR}/printergui-${RANDOM}" + rm -rf -- "${SPOOLDIR}" + if ! mkdir -p "${SPOOLDIR}/${QUEUE}"; then + slxlog "virt-spooldir" "Could not create spool directory ($SPOOLDIR) for $USER - printing will not work!" + # TODO: Warn user + fi + chmod 0700 "${SPOOLDIR}/${QUEUE}" +fi + +# Start the lpdaemon listening on the given port +# TODO: externalize with something like runvirt.d (other parts might benefit from that too) +tcpsvd -E 192.168.101.1 5515 \ + lpd "$SPOOLDIR" \ + ash -c "/opt/openslx/scripts/run-virt_print '${USER}' \"${SPOOLDIR}/${QUEUE}/\$DATAFILE\"" & + +# PID to kill the process +PID_LPD="$!" + +{ + sleep 2 + # Check if tcpsvd is running. Do this a little delayed so we do not check + # immediately after trying to spawn it, as this could result in + # success even if it's not really working. + + if ! kill -0 "$PID_LPD"; then + slxlog "virt-lpd" "Could not start tcpsvd/lpd for virtual machine session" + notify_user "Durcksystem" "Das Drucksystem konnte nicht initialisiert werden. Druckfunktion nicht verfügbar." + fi +} & + diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_sound.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_sound.inc new file mode 100644 index 00000000..6230aa3a --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_sound.inc @@ -0,0 +1,65 @@ +#!/bin/bash <-- Add shebang even though it's sourced so vim highlights bash specific features properly +######################## +# Include: Setup sound # +######################## +# 8086:1e20: Sound card in bwPX4 + +writelog "Starting sound setup ..." + +if lspci -n | grep -E -i '8086:1e20( |$)'; then + VOL="100%" # bwPC 4: Speaker too quiet :-( +else + VOL="85%" +fi + +if true; then + # detecting which card is to be used + writelog "Detecting which sound card to use ..." + PROC="/proc/asound/cards" + if [ ! -r "$PROC" ]; then + writelog "'${PROC}' not found or not readable." + SOUND_CARD_INDEX=0 + SOUND_CARD_COUNT=1 + else + # Try to filter HDMI cards first + SOUND_CARD_INDEX=$(grep -v -i 'HDMI' "${PROC}" | grep -E -o '^[[:space:]]{0,2}[0-9]+[[:space:]]+' | head -n 1) + # If empty, try again with all + [ -z "${SOUND_CARD_INDEX}" ] && SOUND_CARD_INDEX=$(cat "${PROC}" | grep -E -o '^[[:space:]]{0,2}[0-9]+[[:space:]]+' | head -n 1) + if [ -z "${SOUND_CARD_INDEX}" ]; then + writelog "No sound card found." + SOUND_CARD_INDEX=0 + fi + SOUND_CARD_COUNT=$(grep -E '^[[:space:]]{0,2}[0-9]+[[:space:]]+' "${PROC}" | wc -l) + fi + + SOUND_CARD_INDEX="$(grep -E -o '[0-9]+' <<<$SOUND_CARD_INDEX)" + writelog "Detected sound card index is: $SOUND_CARD_INDEX" + writelog "Sound card count: $SOUND_CARD_COUNT" + + # Adjust sound volume (playback)... Random mixer names we have encountered during testing + writelog "Setting up volume..." + amixer -q -c "$SOUND_CARD_INDEX" sset 'Master' "$VOL" unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'PCM' "$VOL" unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'CD' "$VOL" unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Headphone' "$VOL" unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Front' "$VOL" unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Speaker' "$VOL" unmute + # Recording. It seems that (most) devices need the volume set to 0, so you + # don't hear your own mic input, but should be unmuted. Also on some cards, + # you need to set the cap option on the mic you want to use, while other cards + # will just ignore that option. + # Plus, most cards have a Capture mixer, which needs to be set to cap too, and + # have its volume turned up. (There'll probably be some cards that need yet + # another setup, but this works for now on 4 tested cards) + amixer -q -c "$SOUND_CARD_INDEX" sset 'Rear Mic Boost' "50%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Rear Mic' "0%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Front Mic Boost' "50%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Front Mic' "0%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Mic Boost' "50%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Mic' "0%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Capture' "100%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Input Source' 'Front Mic' # Let's hope nobody uses rear mic... + # fix random static noise when starting vmplayer when module snd_pcsp (not pcspkr) is loaded + amixer -q -c pcsp sset Master "0%" mute + writelog "Done setting up volume." +fi >> "${LOGFILE}" 2>&1 diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_virtual_floppy.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_virtual_floppy.inc new file mode 100644 index 00000000..d9ae052c --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_virtual_floppy.inc @@ -0,0 +1,101 @@ +#!/bin/bash +############################################## +# Include: Setup virtual floppy for drive b: # +############################################## + +declare -rg FLOPPYIMG="${TMPDIR}/floppy.img" +declare -rg TMPHOME="${HOME}" +declare -rg RUNSCRIPT="${TMPDIR}/runscript.tmp" + +wget -T 6 -O "${RUNSCRIPT}" "${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}/runscript" > /dev/null & +WGET=$! + +dd "if=/dev/zero" "of=${FLOPPYIMG}" count=1440 bs=1024 +chmod 0600 "${FLOPPYIMG}" +mkfs.fat "${FLOPPYIMG}" || mkfs.vfat "${FLOPPYIMG}" || mkdosfs "${FLOPPYIMG}" + +# Create file with resolution information etc. +. "/opt/openslx/inc/shares" +if [ -z "$SHARE_REMAP_MODE" ]; then + SHARE_REMAP_MODE_INI="0" + SHARE_REMAP_MODE="3" +else + SHARE_REMAP_MODE_INI="$SHARE_REMAP_MODE" +fi +[ -z "$SHARE_CREATE_MISSING_REMAP" ] && SHARE_CREATE_MISSING_REMAP="1" +declare -rg RESOLUTION=$(xrandr | grep -o -E 'connected\s*(primary)?\s*[0-9]+x[0-9]+\+0\+0' \ + | grep -o -E -m1 '[0-9]+x[0-9]+') + +# Legacy: HOSTRES.TXT +cat > "${TMPDIR}/HOSTRES.TXT" <<-HIER +${RESOLUTION} +HIER + +# Create file for network shares to mount +declare -rg SHARES="${TMPDIR}/shares.dat" +touch "${SHARES}" +chmod 0600 "${SHARES}" +if ! pwdaemon --query "${TMPHOME}/.pwsocket" > "${SHARES}"; then + slxlog "virt-pwdaemon" "Could not start pwdaemon" +else + sed -i 's/^/192.168.101.1\t/' "${SHARES}" # TODO: Depending on nettype (in case we have != nat some day) + if [ "${SHARE_REMAP_MODE}" = 1 -o "${SHARE_REMAP_MODE}" = 2 ] && [ -e "${TMPHOME}/.home" ]; then + NETHOME=$(cat "${TMPHOME}/.home") + [ -z "$SHARE_HOME_DRIVE" ] && SHARE_HOME_DRIVE="H:" + # Tab between items, so spaces can be used! + echo "${NETHOME} ${SHARE_HOME_DRIVE} Home-Verzeichnis" >> "${SHARES}" + fi + for VAR in ${!SHARE_LINE_*}; do + echo "${!VAR}" >> "${SHARES}" + done +fi + +wait "$WGET" + +# Check downloaded runscript, handle extension marker +EXT= +if [ -s "$RUNSCRIPT" ]; then + EXT=$(head -n 1 "$RUNSCRIPT" | grep -o -i '^EXT=.*$' | cut -d '=' -f 2-) + [ -n "$EXT" ] && [ "x${EXT:0:1}" != "x." ] && EXT=".$EXT" +fi + +# Write info file +UNAME= +[ -s "${HOME}/.account" ] && UNAME=$(cat "${HOME}/.account") +[ -z "${UNAME}" ] && UNAME=$(whoami) +cat > "${TMPDIR}/openslx.ini" <<-HIER +[openslx] +username=${UNAME} +resolution=${RESOLUTION} +createMissingRemap=${SHARE_CREATE_MISSING_REMAP} +remapMode=${SHARE_REMAP_MODE_INI} +homeDrive=${SHARE_HOME_DRIVE} +scriptExt=${EXT} + +[remap] +documents=${SHARE_DOCUMENTS} +downloads=${SHARE_DOWNLOADS} +desktop=${SHARE_DESKTOP} +media=${SHARE_MEDIA} +other=${SHARE_OTHER} +HIER + +# Copy all them there filez into floppy image +mcopy -i "${FLOPPYIMG}" "${TMPDIR}/openslx.ini" "${TMPDIR}/HOSTRES.TXT" "${SHARES}" "::/" +mcopy -i "${FLOPPYIMG}" "$VMCHOOSER_DIR/data/openslx.exe" "::/" +# Copy guest configuration (with added information) config.xml to be accessed +# via virtual floppy +mcopy -i "${FLOPPYIMG}" "$xmlfile" "::/config.xml" + +# Copying linux directory: +mcopy -s -i "${FLOPPYIMG}" "$VMCHOOSER_DIR/data/linux" "::/" + +# User supplied runscript +if [ -n "$EXT" ]; then + sed -i '1d' "${RUNSCRIPT}" + mcopy -i "${FLOPPYIMG}" "${RUNSCRIPT}" "::/runscript${EXT}" +fi + +rm -f -- "${SHARES}" "${TMPDIR}/openslx.ini" "${TMPDIR}/HOSTRES.TXT" +unset SHARES VAR NETHOME UNAME + diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_vm_hypervisor.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_vm_hypervisor.inc new file mode 100644 index 00000000..ce15524f --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_vm_hypervisor.inc @@ -0,0 +1,34 @@ +########################################################################## +# Include: Setup virtual machine hypervisor via vm-specific include file # +########################################################################## + +# Get all virtual machine specific stuff from the respective include file +if [ ! -e "$VMCHOOSER_DIR/$xmlvirt/run-virt.include" ] ; then + slxlog "virt-plugin-missing" "Could not find run-virt.include for $xmlvirt ($VMCHOOSER_DIR/$xmlvirt/run-virt.include)" + writelog "Failed because of missing ${xmlvirt} plugin." + error_user "Konnte den Virtualisierer '$xmlvirt' nicht finden. Starten der Virtuellen Maschine fehlgeschlagen. + Starten Sie den Computer neu und wenden Sie sich an den Support, wenn das Problem weiterhin besteht." + cleanexit 1 +fi + +self="${xmlvirt}" + +if ! bash -n "$VMCHOOSER_DIR/$xmlvirt/run-virt.include"; then + slxlog "virt-plugin-syntax" "run-virt.include for $xmlvirt contains syntax errors (bash -n run-virt.include failed)" + writelog "Erroneous run-virt.include for $xmlvirt (syntax check)" + error_user "Das Start-Script für den Virtualisierer '$xmlvirt' ist fehlerhaft. + Starten Sie den Computer neu und wenden Sie sich an den Support, wenn das Problem weiterhin besteht." + cleanexit 1 +fi + +setup_vm_commandline () { + # Now including the hypervisor specific include file: + if ! source "$VMCHOOSER_DIR/$xmlvirt/run-virt.include"; then + slxlog "virt-plugin-error" "run-virt.include for $xmlvirt could not be sourced properly." + writelog "Erroneous run-virt.include for ${xmlvirt}? Source returned != 0" + error_user "Das Start-Script für den Virtualisierer '$xmlvirt' hat einen fehlercode zurückgegeben. + Starten Sie den Computer neu, falls es beim Ausführen der VM zu Problemen kommt + und wenden Sie sich an den Support, wenn das Problem weiterhin besteht." + fi +} + diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/start_windowmanager.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/start_windowmanager.inc new file mode 100644 index 00000000..da43f341 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/start_windowmanager.inc @@ -0,0 +1,27 @@ +#################################################### +# Include: Start windowmanager for easier handling # +#################################################### + +# Some problems may arise with windows opening in background when +# using eg. vmware without a window manager. + +FOUND_WM= +for dm in openbox kwin xfwm4 metacity blackbox twm fvwm2 ; do + if which $dm >/dev/null 2>&1 ; then + if [ "$dm" = "fvwm2" ] ; then + echo "EdgeScroll 0 0" > ${redodir}/fvwm + writelog "Starting fvwm2." + fvwm2 -f ${redodir}/fvwm >/dev/null 2>&1 & + else + writelog "Starting ${dm}." + $dm >/dev/null 2>&1 & + fi + FOUND_WM=1 + break + fi +done + +if [ -z "$FOUND_WM" ]; then + slxlog "virt-windowmanager" "Could not find any window manager to use!" + notify_user "Konnte keinen Window Manager finden. (Das ist schlecht!)" +fi diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/usb_detector.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/usb_detector.inc new file mode 100644 index 00000000..a2d442e4 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/usb_detector.inc @@ -0,0 +1,77 @@ +# Helper function that will scan /dev/bus/usb for devices matching specific classes +# and then output the corresponding device ids. This can be used for selective +# handover of devices to a virtual machine + +declare -rg PASSTHROUGH_USB_DEVICES="2 0:5 0:6 0:7 0:14 0:16 0:17 239" + +# $1: expression to fill with device information. +# valid placeholders are: +# %VENDOR% - device vendor id +# %PRODUCT% - device product id +# $2-n: device classes to include in output +get_usb_devices_int() { + [ -z "$TMPDIR" ] && TMPDIR="/tmp" + local EXP=$1 + shift + if [ -z "$EXP" ]; then + writelog --quiet "No ouput expression template passed to get_usb_devices" + cleanexit 1 + fi + if [ $# -eq 0 ]; then + writelog --quiet "No device classes given to get_usb_devices" + cleanexit 1 + fi + local MATCH=';' + while [ $# -gt 0 ]; do + MATCH+="$1;" + [[ "$1" != *:* ]] && MATCH+="0:$1;" + shift + done + local dev= + local key value trailing + trailing= + local tmp="${TMPDIR}/lsusb.$$.$RANDOM" + for dev in /dev/bus/usb/*/*; do + if ! lsusb -D "$dev" > "$tmp" 2>/dev/null; then + writelog --quiet "Cannot lsusb $dev" + continue + fi + local DC= + local OK= + local VENDOR= + local PRODUCT= + while read -r key value trailing || [ -n "$key" ]; do + if [[ "$key" == "idVendor" ]]; then + [[ "$value" == 0x* ]] && VENDOR="${value:2}" + elif [[ "$key" == "idProduct" ]]; then + [[ "$value" == 0x* ]] && PRODUCT="${value:2}" + elif [ -z "$DC" ]; then + # No bDeviceClass seen yet + if [[ "$key" == "bDeviceClass" ]]; then + DC="$value" + [[ "$MATCH" == *";${DC};"* ]] && OK=yo + fi + else + # #DeviceClass is generic, look at sub class + if [[ "$key" == "bInterfaceClass" ]]; then + [[ "$MATCH" == *";${DC}:${value};"* ]] && OK=yo + fi + fi + if [ -n "$OK" -a -n "$VENDOR" -a -n "$PRODUCT" ]; then + echo "$EXP" | sed "s/%VENDOR%/${VENDOR}/g;s/%PRODUCT%/${PRODUCT}/g" + break + fi + done < "$tmp" + done + rm -f -- "$tmp" +} + +get_usb_devices() { + if which lsusb 2>/dev/null >&2 && lsusb --help 2>&1 | grep -q -- '-D' 2>/dev/null; then + [ $# -eq 1 ] && set -- "$1" $PASSTHROUGH_USB_DEVICES # no quotes here! + get_usb_devices_int "$@" | sort -u + else + writelog --quiet "Cannot scan usb bus: lsusb not found or doesn't support -D" + fi +} + diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/vmchooser_runvirt_functions.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/vmchooser_runvirt_functions.inc new file mode 100644 index 00000000..c0d17dbe --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/vmchooser_runvirt_functions.inc @@ -0,0 +1,79 @@ +####################################################### +# Include: Set functions needed by vmchooser-run_virt # +####################################################### + +# function to write to stdout and logfile +writelog() { + local DATE=$(date +%Y-%m-%d-%H-%M-%S) + # write to stdout? + if [ "x$1" = "x--quiet" ]; then + shift + else + echo -e "$DATE: $@" + fi + # log into file + echo -e "$DATE: $@" >> "${LOGFILE}" +} + +notify_user() { + local TOPIC="$1" + shift + notify-send -u normal "$TOPIC" "$@" + writelog "Notify: **${TOPIC}**: $*" +} + +error_user() { + local TOPIC="$1" + shift + local MSG TITLE BODY + if [ $# -gt 0 ]; then + MSG=" $TOPIC +$*" + TITLE="$TOPIC" + BODY="$*" + else + MSG="$TOPIC" + TITLE="ERROR" + BODY="$TOPIC" + fi + # Zenity should yield the nicest result + zenity --error --title "$TITLE" --text "$BODY" && return + # QnD abuse printergui for error message as it's blocking + /opt/openslx/cups/printergui --error "$MSG" && return + # printergui might not exist, try fallback here + # unfortunately, i can only think of notify+sleep right now + notify-send -u critical "$TITLE" "$BODY" + sleep 10 +} + +# Clean exit will be called at the end of vmchooser-run_virt +cleanexit() { + sleep 1 + # Ummount dnbd3-fuse + if [ -n "$dnbd3_fuse_mount_point" ] && [ -e "$dnbd3_fuse_mount_point/img" ]; then + for timeout in 1 1 1 FAIL; do + fusermount -u "$dnbd3_fuse_mount_point" && break + writelog "dnbd3 still busy...." + [ "$timeout" = "FAIL" ] && break + sleep "$timeout" + done + fi + # Kill LPD + [ -n "${PID_LPD}" ] && kill "${PID_LPD}" + + # If we're not in debug mode, remove all temporary files + if [ -n "${TMPDIR}" -a -z "$SLX_DEBUG" ]; then + rm -rf -- "${TMPDIR}" + fi + + [ $# -gt 0 ] && exit "$1" + exit 129 # No exit code was given :/ +} + +rv_clean_string() { + if [ "$#" -ge 1 ]; then + echo "$@" | tr '[A-Z]' '[a-z]' | tr -d -c '[a-z0-9\-]' + else + tr '[A-Z]' '[a-z]' | tr -d -c '[a-z0-9\-]' + fi +} diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/vmchooser-run_virt b/remote/modules/run-virt/data/opt/openslx/vmchooser/vmchooser-run_virt new file mode 100755 index 00000000..10943c51 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/vmchooser-run_virt @@ -0,0 +1,116 @@ +#!/bin/bash +# Full bash required +# ----------------------------------------------------------------------------- +# Copyright (c) 2007..2010 - RZ Uni FR +# Copyright (c) 2007..2013 - OpenSLX GmbH +# +# This program is free software distributed under the GPL version 2. +# See http://openslx.org/COPYING +# +# If you have any feedback please consult http://openslx.org/feedback and +# send your suggestions, praise, or complaints to feedback@openslx.org +# +# General information about OpenSLX can be found at http://openslx.org/ +# ----------------------------------------------------------------------------- +# run-virt.sh +# - This is the generic wrapper for the several virtualization solutions. +# The idea is to setup a set of variables used by at least two different +# tools and then include the specific plugin which configures the speci- +# fied virtualization tool. +################################################################################ + +RUNVIRTINCLUDEDIR=/opt/openslx/vmchooser/run-virt-includes +xmlfile="$1" + +# Functions needed by vmchooser-run_virt (writelog(), cleanexit(), rv_clean_string()) +if ! source "${RUNVIRTINCLUDEDIR}/vmchooser_runvirt_functions.inc"; then + slxlog "run-virt" "Could not source ${RUNVIRTINCLUDEDIR}/vmchooser_runvirt_functions.inc" + exit 1 +fi + +trap 'trap "" SIGINT SIGTERM; cleanexit' SIGINT SIGTERM +# Define default dirs / get configs +source "${RUNVIRTINCLUDEDIR}/set_runvirt_variables.inc" +# Function to detect whether we can use the new way (vmx via http) or the old way (legacy): +source "${RUNVIRTINCLUDEDIR}/detect_legacy.inc" # This yields LEGACY, IMGUUID, IMGVMX + +if [ "$LEGACY" ]; then + + # No longer supported - yay + + error_user "Legacy Mode" " +Die gewählte VM ist eine 'Legacy VM', für die unvollständige +Metadaten auf dem bwLehrpool-Server hinterlegt sind. Diese +werden nicht mehr unterstützt. Um diese VM weiterhin nutzen +zu können, muss sie mittels der bwLehrpool-Suite heruntergeladen, +einmal gebootet, und wieder hochgeladen werden. +(Bei der Gelegenheit könnten z.B. auch gleich anfallende Updates +eingespielt werden.) +" + cleanexit 1 + + # End legacy warning +fi + +# Proper meta data received - proceed normally + +# check for important files used (filecheck()) - vestigial? +# This include does not currently work. TODO. +# source ${RUNVIRTINCLUDEDIR}/check_runvirt_needed_files.inc && filecheck + +# Read needed variables from XML file +source ${RUNVIRTINCLUDEDIR}/get_xml_file_variables.inc + +# Helper that looks for virtualizer-specific include, show error to user if not found +source "${RUNVIRTINCLUDEDIR}/setup_vm_hypervisor.inc" + +# For scanning for certain usb classes +source "${RUNVIRTINCLUDEDIR}/usb_detector.inc" + +# Firewall +source "${RUNVIRTINCLUDEDIR}/setup_firewall.inc" || writelog "Could not source setup_firewall" +setup_firewall || writelog "Could not run setup_firewall" + +# Sound setup +source ${RUNVIRTINCLUDEDIR}/setup_sound.inc + +# Declaration of hardware relatedt variables +source ${RUNVIRTINCLUDEDIR}/set_runvirt_hardware_variables.inc + +# Start printer daemon +source ${RUNVIRTINCLUDEDIR}/setup_printer_lpd.inc + +# Setup virtual floppy b: for windows guests with config.xml, openslx.exe etc. +source ${RUNVIRTINCLUDEDIR}/setup_virtual_floppy.inc + +# Try to use dnbd3 to access the image, nfs/cifs fallback +source ${RUNVIRTINCLUDEDIR}/setup_image_access.inc + +# Window manager required for handling of popups etc. +source ${RUNVIRTINCLUDEDIR}/start_windowmanager.inc + +# Source run-virt.include of virtualizer +setup_vm_commandline + +# It should have set this variable if all went well +if [ -z "${VIRTCMD}" ]; then + error_user "Fehler beim Starten der VM-Sitzung" " +Das Start-Script für den Virtualisierer $xmlvirt hat kein Kommando +zum Starten der Sitzung definiert. Kann Sitzung nicht initialisieren." + slxlog "virt-plugin-error" "run-virt.include for $xmlvirt did not set VIRTCMD" + cleanexit 1 +fi + +writelog "VM command: eval ${VIRTCMD} ${VIRTCMDOPTS}" +# This will start the VM +eval ${VIRTCMD} ${VIRTCMDOPTS} + +writelog "Virtualizer exited. Bye." + +# Postrun for commands after virtualization finishes +if [ -n "${POSTRUN}" ]; then + eval ${POSTRUN} >/dev/null 2>&1 +fi + +cleanexit 0 + diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmware_config_file_legacy.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmware_config_file_legacy.inc deleted file mode 100644 index df6e6f39..00000000 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmware_config_file_legacy.inc +++ /dev/null @@ -1,316 +0,0 @@ -######################################## -# Include: Create vmware startup files # -######################################## - -create_vmware_config_file_legacy() { - echo "# This configuration file was generated by $0" > "$conffile" - - MAXMEM="9999999" - MAXCORES="4" - shfolders="TRUE" - sound="es1371" - - # define hardware configuration depending on the guest OS used - # this needs to be fixed and is the base for the creation of new VMs - case "$vmostype" in - win31*|windows31*) - vmostype="win31" - shfolders="FALSE" - sound="sb16" - MAXMEM="32" - MAXCORES="1" - ;; - winnt*|windowsnt*) - vmostype="winnt" - shfolders="FALSE" - sound="sb16" - MAXMEM="1000" - MAXCORES="2" - ;; - win95*|windows95*) - vmostype="win95" - shfolders="FALSE" - MAXMEM="96" - MAXCORES="1" - ;; - win98*|windows98*) - vmostype="win98" - MAXMEM="256" - MAXCORES="1" - ;; - winme*|windowsme*) - vmostype="winme" - MAXMEM="384" - MAXCORES="1" - ;; - win2000|windows2000|win2000pro*) - vmostype="win2000pro" - MAXMEM="4000" - MAXCORES="2" - ;; - win2000srv*|windows2000srv*|win2000serv*|windows2000serv*) - vmostype="win2000serv" - shfolders="FALSE" - MAXMEM="4000" - MAXCORES="4" - ;; - win2000adv*|windows2000adv*|win2000dat*|windows2000dat*) - vmostype="win2000advserv" - shfolders="FALSE" - MAXMEM="8000" - MAXCORES="8" - ;; - winnet*64|win*2003*64|windowsnet*64) - vmostype="winnetstandard-64" - MAXMEM="8000" - ;; - winnet*|win*2003*|windowsnet*) - vmostype="winnetstandard" - MAXMEM="4000" - ;; - winxphome*|windowsxphome*) - vmostype="winxphome" - MAXMEM="4000" - MAXCORES="1" - ;; - winxp*64|windowsxp*64) - vmostype="winxppro-64" - MAXMEM="8000" - MAXCORES="2" - ;; - winxp*|windowsxp*) - vmostype="winxppro" - MAXMEM="4000" - MAXCORES="1" - ;; - winvista*64|windowsvista*64) - vmostype="winvista-64" - MAXMEM="16000" - MAXCORES="2" - ;; - winvista*|windowsvista*) - vmostype="winvista" - MAXMEM="8000" - MAXCORES="2" - ;; - win7*64|windows7*64) - vmostype="windows7-64" - MAXMEM="32000" - MAXCORES="4" - ;; - win7*|windows7*) - vmostype="windows7" - MAXMEM="8000" - MAXCORES="4" - ;; - win8*64|windows8*64) - vmostype="windows8-64" - MAXMEM="32000" - MAXCORES="4" - ;; - win8*|windows8*) - vmostype="windows8" - MAXMEM="8000" - MAXCORES="4" - ;; - win*64) - MAXMEM="16000" - MAXCORES="4" - ;; - win*) - MAXMEM="8000" - ;; - dos|msdos*|ms-dos*) - vmostype="dos" - shfolders="FALSE" - MAXMEM="128" - ;; - macos*64) - vmostype="freebsd-64" - MAXMEM="4000" - MAXCORES="2" - ;; - macos*) - vmostype="freebsd" - MAXMEM="4000" - MAXCORES="1" - ;; - beos*) - vmostype="other" - shfolders="FALSE" - ;; - # Unknown guestOS setting in .xml - use conservative defaults - *64) - vmostype="other-64" - shfolders="FALSE" - MAXMEM="123456" - MAXCORES="4" - ;; - *) - vmostype="other" - shfolders="FALSE" - MAXMEM="8000" - MAXCORES="1" - ;; - esac - real_core_count="$cpu_cores" - [ "$cpu_cores" -gt "$MAXCORES" ] && cpu_cores="$MAXCORES" - # It currently makes no sense to set the virtual number of cores - # to a different value than the virtual number of cores per virtual CPU. - cores_per_socket="$cpu_cores" - - if [ "x$shfolders" != "xFALSE" ] && [ "$SHARE_REMAP_MODE" != 1 ]; then - enable_share='sharedFolder.option = "alwaysEnabled"' - HGFS_DISABLED="FALSE" - else - enable_share= - HGFS_DISABLED="TRUE" - fi - - [ "$mem" -ge "$MAXMEM" ] && mem="$MAXMEM" - [ "$hwver" -lt "7" -a "$mem" -gt "3500" ] && mem="3500" - - if [ -n "$FLOPPYIMG" ]; then - floppy1="TRUE" - else - floppy1="FALSE" - fi - - cat >> "$conffile" <<-HEREEND - .encoding = "UTF-8" - config.version = "8" - - # general hardware (ehci, 3d accel) - ehci.present = "TRUE" - $FORCE3D - mks.enable3d = "$enable3d" - - monitor.virtual_mmu = "automatic" - monitor.virtual_exec = "automatic" - - # id - virtualHW.version = "$hwver" - displayName = "$displayname" - guestOS = "$vmostype" - - # CPU/MEM - numvcpus = "$cpu_cores" - cpuid.coresPerSocket = "$cores_per_socket" - maxvcpus = "$real_core_count" - memsize = "$mem" - MemAllowAutoScaleDown = "FALSE" - MemTrimRate = "-1" - - # ide-disks - ide0:0.present = "$ide" - ide0:0.fileName = "$vm_diskfile" - ## Edited for persistent mode. - ide0:0.mode = "independent-${diskmode}" - ## - ide1:0.present = "$cdrom0" - ide1:0.autodetect = "TRUE" - ide1:0.fileName = "auto detect" - ide1:0.deviceType = "cdrom-raw" - ide1:1.present = "$cdrom1" - ide1:1.autodetect = "TRUE" - ide1:1.fileName = "auto detect" - ide1:1.deviceType = "cdrom-raw" - - # scsi-disks - scsi0.present = "$scsi" - scsi0:0.present = "$scsi" - scsi0:0.fileName = "$vm_diskfile" - scsi0.virtualDev = "$hddrv" - ## Edited for persistent mode. - scsi0:0.mode = "independent-${diskmode}"$stateFileConfiguration - ## - - # floppies - floppy0.present = "$floppy0" - floppy0.startConnected = "TRUE" - floppy0.autodetect = "TRUE" - floppy0.fileName = "auto detect" - - # we need floppy b: for the client configuration - floppy1.present = "$floppy1" - floppy1.readonly = "TRUE" - floppy1.startConnected = "TRUE" - floppy1.fileType = "file" - floppy1.fileName = "$FLOPPYIMG" - - # nics - ethernet0.present = "TRUE" - ethernet0.addressType = "static" - $network_virtualDev - #ethernet0.connectionType = "hostonly" - ethernet0.connectionType = "custom" - ethernet0.vnet = "$hostdev" - ethernet0.address = "00:50:56:$macaddrsuffix" - ethernet0.wakeOnPcktRcv = "FALSE" - - # sound - sound.present = "TRUE" - $sound_fileName - sound.virtualdev = "$sound" - pciSound.enableVolumeControl = "FALSE" - sound.enableVolumeControl = "FALSE" - - # svga - svga.autodetect = "TRUE" - - # usb - usb.present = "TRUE" - usb.generic.autoconnect = "TRUE" - - # pci configuration - usb.pciSlotNumber = "16" - ethernet0.pciSlotNumber = "17" - sound.pciSlotNumber = "18" - ehci.pciSlotNumber = "19" - scsi0.pciSlotNumber = "20" - - $PCIE - - # shared folders - $enable_share - sharedFolder0.present = "$shfolders" - sharedFolder0.enabled = "$shfolders" - sharedFolder0.expiration = "never" - sharedFolder0.guestName = "$homesharename" - sharedFolder0.hostPath = "$homesharepath" - sharedFolder0.readAccess = "TRUE" - sharedFolder0.writeAccess = "TRUE" - sharedFolder1.present = "$shfolders" - sharedFolder1.enabled = "$shfolders" - sharedFolder1.expiration = "never" - sharedFolder1.guestName = "$commonsharename" - sharedFolder1.hostPath = "$commonsharepath" - sharedFolder1.readAccess = "TRUE" - sharedFolder1.writeAccess = "TRUE" - sharedFolder.maxNum = "2" - - # dirs/configs - tmpDirectory = "$redodir" - redoLogDir = "$redodir" - mainMem.useNamedFile = "TRUE" - snapshot.disabled = "TRUE" - tools.syncTime = "TRUE" - isolation.tools.hgfs.disable = "$HGFS_DISABLED" - hgfs.mapRootShare = "TRUE" - isolation.tools.dnd.disable = "FALSE" - isolation.tools.copy.enable = "TRUE" - isolation.tools.paste.enabled = "TRUE" - - # serial port - serial0.present = "$serial" - $serialdev - - # parallel port - parallel0.present = "$parallel" - parallel0.bidirectional = "$paralbidi" - $paraldev - HEREEND - - # set the appropriate permissions for the vmware config file - chmod u+rwx "${conffile}" >/dev/null 2>&1 -} diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc new file mode 100644 index 00000000..f7f09c65 --- /dev/null +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc @@ -0,0 +1,62 @@ +################################################## +# Include: Print vm config summary into log file # +################################################## + +# log script information +writelog "# File created by $0 (VMware version ${vmware_version})\n# on $(date)\n" +## Edited for persistent mode. +writelog "Starting with ${diskmode} mode ...\n" +## + +# write all results to logfile +# log disksetup +writelog "Directories:" +writelog "\tConfdir:\t${confdir}" +writelog "\tConffile:\t${conffile}" +writelog "\tRedodir:\t${redodir}" +writelog "\tVMhome:\t\t${vmhome}" +writelog "\t/tmp info: $(grep "/tmp " /proc/mounts) $(df -h | grep " /tmp$" | awk '{print $2}')" +# hw setup +writelog "Hardware:" +writelog "\tMAC:\t\t$macaddr" +if [ -n "${network_card}" ]; then + writelog "\tNet Adaptor:\t${network_card}" +fi +writelog "\tMem:\t\t${mem} MB" + +# echo nur wenn hostmem gesetzt +[ -n "${hostmem}" ] && writelog "\tHostmem:\t${hostmem} MB" +writelog "\tMax. res.:\t${xres}x${yres}" +writelog "\tCD-ROM1:\t${cdrom0}" +writelog "\tCD-ROM2:\t${cdrom1}" +writelog "\tFloppy_A:\t${floppy0}" +if [ "${serial}" = "TRUE" ]; then + writelog "\tSerial Port:\t${serialdev}" +fi +if [ "${parallel}" = "TRUE" ]; then + writelog "\tParallel Port:\t${paraldev}" +fi + +writelog "Shared folders:" +if [ "${HGFS_DISABLED}" = "FALSE" ]; then + writelog "\tNo shared folders enabled." +else + writelog "\Shared folders enabled." +fi + +# image +writelog "Diskimage:" +writelog "\tDiskfile:\t${diskfile}" +writelog "\tDisktype:\t${hddrv}" +writelog "\tHWVersion:\t${hwver}" +writelog "\tVMostype:\t${vmostype}" + +# misc +writelog "Misc:" +writelog "\tDisplayname:\t${displayname}" +if [ "${cap3d}" = "TRUE" -a "${enable3d}" = "TRUE" ]; then + writelog "\t3D Graphics:\tenabled" +fi +# empty line at end +writelog "" + diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/logging.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/logging.inc deleted file mode 100644 index f7ee634a..00000000 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/logging.inc +++ /dev/null @@ -1,64 +0,0 @@ -############################### -# Include: Logging and stdout # -############################### - -logging() { - # log script information - writelog "# File created by $0 (VMware version ${vmware_version})\n# on $(date)\n" - ## Edited for persistent mode. - writelog "Starting with ${diskmode} mode ...\n" - ## - - # write all results to logfile - # log disksetup - writelog "Directories:" - writelog "\tConfdir:\t${confdir}" - writelog "\tConffile:\t${conffile}" - writelog "\tRedodir:\t${redodir}" - writelog "\tVMhome:\t\t${vmhome}" - writelog "\t/tmp info: $(grep "/tmp " /proc/mounts) $(df -h | grep " /tmp$" | awk '{print $2}')" - # hw setup - writelog "Hardware:" - writelog "\tMAC:\t\t$macaddr" - if [ -n "${network_card}" ]; then - writelog "\tNet Adaptor:\t${network_card}" - fi - writelog "\tMem:\t\t${mem} MB" - - # echo nur wenn hostmem gesetzt - [ -n "${hostmem}" ] && writelog "\tHostmem:\t${hostmem} MB" - writelog "\tMax. res.:\t${xres}x${yres}" - writelog "\tCD-ROM1:\t${cdrom0}" - writelog "\tCD-ROM2:\t${cdrom1}" - writelog "\tFloppy_A:\t${floppy0}" - if [ "${serial}" = "TRUE" ]; then - writelog "\tSerial Port:\t${serialdev}" - fi - if [ "${parallel}" = "TRUE" ]; then - writelog "\tParallel Port:\t${paraldev}" - fi - - writelog "Shared folders:" - if [ "${HGFS_DISABLED}" = "FALSE" ]; then - writelog "\tNo shared folders enabled." - else - writelog "\Shared folders enabled." - fi - - # image - writelog "Diskimage:" - writelog "\tDiskfile:\t${diskfile}" - writelog "\tDisktype:\t${hddrv}" - writelog "\tHWVersion:\t${hwver}" - writelog "\tVMostype:\t${vmostype}" - - # misc - writelog "Misc:" - writelog "\tDisplayname:\t${displayname}" - if [ "${cap3d}" = "TRUE" -a "${enable3d}" = "TRUE" ]; then - writelog "\t3D Graphics:\tenabled" - fi - # empty line at end - writelog "" - -} diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/set_hardware_legacy.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/set_hardware_legacy.inc deleted file mode 100644 index 22718839..00000000 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/set_hardware_legacy.inc +++ /dev/null @@ -1,152 +0,0 @@ -######################################### -# Include: Hardware checks and settings # -######################################### - -set_hardware_legacy() { - -# use different network card (default e1000, vlance, vmxnet) -if [ -n "${network_card}" ]; then - network_virtualDev="ethernet0.virtualDev = \"${network_card}\"" -else - network_virtualDev='ethernet0.virtualDev = "e1000"' -fi - -# use different network card (default e1000, vlance, vmxnet) -hostdev="/dev/vmnet1" -case "${network_kind}" in - bridge|bridged) - hostdev="/dev/vmnet0" - ;; - nat) - hostdev="/dev/vmnet1" - ;; - hostonly|host-only) - hostdev="/dev/vmnet2" - ;; -esac - -# set standard sound card, overwrite depending on OS (options sb16, es1371, hdaudio) -sound="es1371" - -# set sound card explicitly if there is more than one card in the host system -sound_fileName='sound.fileName = "-1" -sound.autodetect = "TRUE"' - -# check for 3D configuration setting -case "$enable3d" in - true|yes) - enable3d="TRUE" - ;; - *) - enable3d="FALSE" - ;; -esac - -# check for whitelisted HW-3D -FORCE3D="" -if [ -n "$SLX_VMWARE_3D" ]; then - FORCE3D='mks.gl.allowBlacklistedDrivers = "TRUE"' -fi - -# serial/parallel port defined (e.g. "ttyS0, lp0" or "autodetect") -case "$serial" in - tty*) - if [ -e "/dev/$serial" ]; then - serialdev="serial0.filename = \"/dev/${serial}\"" - serial="TRUE" - else - serialdev="# no serial port configured" - serial="FALSE" - fi - ;; - auto*) - serialdev="serial0.autodetect = \"TRUE\"" - serial="TRUE" - ;; - *) - serialdev="# no serial port configured" - serial="FALSE" - ;; -esac - -case "$parallel" in - lp*|parport*) - if [ -e "/dev/$parallel" ]; then - paraldev="parallel0.filename = \"/dev/${parallel}\"" - paralbidi="TRUE" - parallel="TRUE" - else - paraldev="# no parallel port configured" - paralbidi="FALSE" - parallel="FALSE" - fi - ;; - auto*) - paraldev="parallel0.autodetect = \"TRUE\"" - paralbidi="TRUE" - parallel="TRUE" - ;; - *) - paraldev="# no parallel port configured" - paralbidi="FALSE" - parallel="FALSE" - ;; -esac - -# check if ide/scsi and hwver of image -# read only the first 30 lines to be sure -imghead=$(head -n 30 "${diskfile}") - -## Added to handle persistent snapshots. -if [[ "$originalVMDKFilePath" ]]; then - echo "Select \"${originalVMDKFilePath}\" as information base for \"${diskfile}\"." - imghead=$(head -n 30 "$originalVMDKFilePath") && \ - - # Support suspend mode. - stateFilePath="$(readlink -f "$(dirname "$diskfile")/"*.vmss)" && \ - if [ -f "$stateFilePath" ]; then - echo "Found state file \"$stateFilePath\"." && \ - stateFileConfiguration=" - checkpoint.vmState = \"$stateFilePath\"" - fi - POSTRUN="stateFilePath=\"\$(readlink -f \"${confdir}/\"*.vmss)\" && memoryFilePath=\"\$(readlink -f \"${confdir}/\"*.vmem)\" && [ -f \"\$stateFilePath\" ] && echo \"Saving state and memory file \\\"\$stateFilePath\\\" and \\\"\$memoryFilePath\\\".\" && mv -f \"\$stateFilePath\" \"$(dirname "$diskfile")/\" && mv -f \"\$memoryFilePath\" \"$(dirname "$diskfile")/\"" -fi - -## -hwver=$(echo "${imghead}" | grep -m1 -ia "ddb.virtualHWVersion" | awk -F '"' '{print $2}') - - -if [ -z "$override_hddtype" ]; then - hddrv=$(echo "${imghead}" | grep -m1 -ia "ddb.adapterType" | awk -F '"' '{print $2}') -else - hddrv=$override_hddtype -fi - -PCIE= -case "${hddrv}" in - ide) - ide="TRUE" - scsi="FALSE" - ;; - lsisas*) - ide="FALSE" - scsi="TRUE" - PCIE='pciBridge4.present = "TRUE" - pciBridge4.virtualDev = "pcieRootPort" - pciBridge4.functions = "8"' - ;; - lsilogic|buslogic) - ide="FALSE" - scsi="TRUE" - ;; - scsi) - ide="FALSE" - scsi="TRUE" - hddrv="lsilogic" - ;; - *) - slxlog "virt-vmware-hdd" "vmware: Unknown HDD adapter type $hddrv" - ;; -esac - -} diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_config_files_legacy.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_config_files_legacy.inc deleted file mode 100644 index 52a341ba..00000000 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_config_files_legacy.inc +++ /dev/null @@ -1,29 +0,0 @@ -############################### -# Include: Write config files # -############################### - -write_config_files_legacy() { - # create vmware directories - mkdir -p "$redodir" >/dev/null 2>&1 - mkdir -p "$confdir" >/dev/null 2>&1 - mkdir -p "$vmhome/dndlogs" >/dev/null 2>&1 - touch "$vmhome/dndlogs/dndlog.conf" >/dev/null 2>&1 - - # create preferences file ${vmhome}/preferences - source "${VMWAREINCLUDEDIR}/create_vmhome_preferences_file.inc" && create_vmhome_preferences_file - - # create VMware config file (conffile) - source "${VMWAREINCLUDEDIR}/create_vmware_config_file_legacy.inc" && create_vmware_config_file_legacy - - # link to conffile if confdir != redodir - [ "$confdir" != "$redodir" ] && ln -s "$conffile" "$redodir/run-vmware.conf" >/dev/null 2>&1 - - # sync is needed to ensure that data is really written to virtual disk - # TODO: Move to general run-virt, right before exec of vm - sync - - # own nvram. We need it for floppy drive b, default nvram has just drive a - if ! cp "/opt/openslx/vmchooser/vmware/nvram" "$confdir/nvram"; then - slxlog "virt-vmware-nvram" "Could not copy nvram from '/opt/openslx/vmchooser/vmware/nvram' '$confdir/nvram'" - fi -} diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include index 08188b58..84679ebf 100644 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include @@ -33,34 +33,23 @@ vmw_cap_hw_version() { [ "$1" -lt "$maxhardwareversion" ] && maxhardwareversion="$1" } -if [ "$LEGACY" ]; then - # hardware checks - source "${VMWAREINCLUDEDIR}/set_hardware_legacy.inc" && set_hardware_legacy - # write configuration files - # write_config_files calls: - # set_vmhome_preferences_header - # set_vmware_startup_file - source "${VMWAREINCLUDEDIR}/write_config_files_legacy.inc" && write_config_files_legacy -else - # get information from downloaded vmx - source "${VMWAREINCLUDEDIR}/parse_vmx.inc" +# get information from downloaded vmx +source "${VMWAREINCLUDEDIR}/parse_vmx.inc" - # determine limitations wrt RAM and CPU count of VM - source "${VMWAREINCLUDEDIR}/determine_hardware_limitations.inc" +# determine limitations wrt RAM and CPU count of VM +source "${VMWAREINCLUDEDIR}/determine_hardware_limitations.inc" - # create file and directory structure for vmware setup - source "${VMWAREINCLUDEDIR}/create_static_directory_structure.inc" +# create file and directory structure for vmware setup +source "${VMWAREINCLUDEDIR}/create_static_directory_structure.inc" - # create preferences file ${vmhome}/preferences - source "${VMWAREINCLUDEDIR}/create_vmhome_preferences_file.inc" && create_vmhome_preferences_file +# create preferences file ${vmhome}/preferences +source "${VMWAREINCLUDEDIR}/create_vmhome_preferences_file.inc" && create_vmhome_preferences_file - # parse the given vmx file - source "${VMWAREINCLUDEDIR}/write_final_vmx.inc" -fi +# parse the given vmx file +source "${VMWAREINCLUDEDIR}/write_final_vmx.inc" -# logging and stdout -# needs writelog() from vmchooser-run_virt -source "${VMWAREINCLUDEDIR}/logging.inc" && logging +# print summary - needs writelog() from vmchooser-run_virt +source "${VMWAREINCLUDEDIR}/log_config_summary.inc" # For debugging cp "$conffile" "/tmp/vmware-last-config" -- cgit v1.2.3-55-g7522 From a94c302b999d353104d0e962afbef44de9a13919 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 20 Oct 2016 17:42:57 +0200 Subject: [debug_report] Include dmesg explicitly --- remote/modules/debug-report-bwlp/data/opt/openslx/bin/debug_report | 1 + 1 file changed, 1 insertion(+) (limited to 'remote/modules') diff --git a/remote/modules/debug-report-bwlp/data/opt/openslx/bin/debug_report b/remote/modules/debug-report-bwlp/data/opt/openslx/bin/debug_report index 40f0c310..e0d7a9b8 100755 --- a/remote/modules/debug-report-bwlp/data/opt/openslx/bin/debug_report +++ b/remote/modules/debug-report-bwlp/data/opt/openslx/bin/debug_report @@ -9,6 +9,7 @@ TOOLS=" lsusb lsmod mount + dmesg dmidecode " -- cgit v1.2.3-55-g7522 From 400a9ca77e79278e49e7957d7bde0660641a961b Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 20 Oct 2016 19:22:35 +0200 Subject: [nvidia_kernel] Actually build nvidia-drm.ko --- remote/modules/nvidia_kernel/module.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'remote/modules') diff --git a/remote/modules/nvidia_kernel/module.build b/remote/modules/nvidia_kernel/module.build index cbe38d6a..22a0dcc7 100644 --- a/remote/modules/nvidia_kernel/module.build +++ b/remote/modules/nvidia_kernel/module.build @@ -39,7 +39,7 @@ build() { local NVIDIA_MODULES="$MODULE_BUILD_DIR/lib/modules/nvidia/" mkdir -p "$NVIDIA_MODULES" pinfo "Copying kernel modules..." - for file in nvidia.ko nvidia-uvm.ko nvidia-modeset.ko; do + for file in nvidia.ko nvidia-uvm.ko nvidia-modeset.ko nvidia-drm.ko; do RESULT=$(find "$ROOTUPPERDIR/NVIDIA/kernel" -name "$file" | head -n 1) [ -z "$RESULT" ] && perror "Could not find built module $file in ./NVIDIA/kernel" pinfo "Fetching ${file}..." -- cgit v1.2.3-55-g7522 From daa8b9fd8255d9033637c304241deba8d7f3bd58 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 21 Oct 2016 17:27:16 +0200 Subject: [run-virt/...] More cleanup, refactoring, comments --- .../opt/openslx/vmchooser/qemukvm/run-virt.include | 12 +- .../check_runvirt_needed_files.inc | 53 --- .../vmchooser/run-virt-includes/detect_legacy.inc | 34 -- .../run-virt-includes/download_vm_metadata.inc | 34 ++ .../run-virt-includes/get_xml_file_variables.inc | 131 +++---- .../set_runvirt_hardware_variables.inc | 21 +- .../run-virt-includes/set_runvirt_variables.inc | 2 +- .../run-virt-includes/setup_image_access.inc | 81 +++-- .../run-virt-includes/setup_vm_hypervisor.inc | 26 +- .../vmchooser_runvirt_functions.inc | 19 + .../data/opt/openslx/vmchooser/vmchooser-run_virt | 41 ++- .../openslx/vmchooser/virtualbox/machine.include | 6 +- .../openslx/vmchooser/virtualbox/run-virt.include | 400 ++++++--------------- .../vmchooser/virtualbox/virtualbox.include | 4 +- .../includes/determine_hardware_limitations.inc | 56 +-- .../vmware/includes/log_config_summary.inc | 9 +- .../includes/set_vmware_include_variables.inc | 5 - .../vmchooser/vmware/includes/write_final_vmx.inc | 2 +- .../opt/openslx/vmchooser/vmware/run-virt.include | 2 +- 19 files changed, 359 insertions(+), 579 deletions(-) delete mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/check_runvirt_needed_files.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/detect_legacy.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/download_vm_metadata.inc (limited to 'remote/modules') diff --git a/remote/modules/qemukvm/data/opt/openslx/vmchooser/qemukvm/run-virt.include b/remote/modules/qemukvm/data/opt/openslx/vmchooser/qemukvm/run-virt.include index 29360159..81bf9218 100644 --- a/remote/modules/qemukvm/data/opt/openslx/vmchooser/qemukvm/run-virt.include +++ b/remote/modules/qemukvm/data/opt/openslx/vmchooser/qemukvm/run-virt.include @@ -44,16 +44,16 @@ mkdir -m 1777 -p ${QKTMPDIR} 2>/dev/null diskfile=${vmpath} # check the file type -if echo ${imgname} | grep -iE "img|qcow|vmdk" >/dev/null 2>&1; then - imgtype=$(echo ${imgname##*.} | tr "[a-z]" "[A-Z]") +if echo ${IMG_BASENAME} | grep -iE "img|qcow|vmdk" >/dev/null 2>&1; then + imgtype=$(echo ${IMG_BASENAME##*.} | tr "[a-z]" "[A-Z]") else - writelog "${imgname} is not a valid image type (img|qcow*|vmdk), exiting!" + writelog "${IMG_BASENAME} is not a valid image type (img|qcow*|vmdk), exiting!" exit 1 fi # set the emulator/virtualization options for various operating systems sound="es1370" -case "${vmostype}" in +case "${VM_OS_TYPE}" in beos*) VIRTCMDOPTS="qemu-system-i386 -machine accel=tcg" sound="sb16" @@ -91,8 +91,8 @@ esac #VIRTCMDOPTS="${VIRTCMDOPTS} -alt-grab" # display name, remove blanks because of cmdline problems -displayname=$(echo ${displayname} | sed -e "s, ,-,g;s,(,[,g;s,),],g") -VIRTCMDOPTS="${VIRTCMDOPTS} -name ${displayname}" +VM_DISPLAYNAME=$(echo ${VM_DISPLAYNAME} | sed -e "s, ,-,g;s,(,[,g;s,),],g") +VIRTCMDOPTS="${VIRTCMDOPTS} -name ${VM_DISPLAYNAME}" writelog "Directories:" writelog "\tTMPDIR:\t\t\t$QKTMPDIR" diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/check_runvirt_needed_files.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/check_runvirt_needed_files.inc deleted file mode 100644 index fbb0bc70..00000000 --- a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/check_runvirt_needed_files.inc +++ /dev/null @@ -1,53 +0,0 @@ -################################################################# -# Include: Check for important files used by vmchooser_run-virt # -################################################################# - -# WARNING: This is perhaps vestigial! - -filecheck() { - filecheck=$(LANG=us ls -lh ${diskfile} 2>&1) - writelog "Filecheck:\n${filecheck}\n" - noimage=$(echo ${filecheck} | grep -i "no such file or directory" | wc -l) - rightsfile=${diskfile} - - # check if link - if [ -L "${diskfile}" ]; then - # take link target - rightsfile=$(ls -lh ${diskfile} 2>&1 | awk -F '-> *' '{print $2}') - rightsfile=${vmdir}/${rightsfile} - filecheck=$(LANG=us ls -lh ${rightsfile} 2>&1) - fi - - # does file exist - if [ "${noimage}" -ge "1" ]; then - writelog "Virtual Machine Image Problem:\c " - writelog "\tThe image you've specified doesn't exist." - writelog "Filecheck says:\c " - writelog "\t\t${diskfile}:\n\t\t\tNo such file or directory" - writelog "Hint:\c " - writelog "\t\t\tCompare spelling of the image with your options.\n" - exit 1 - fi - # readable by calling user - if ! [ -r "${diskfile}" >/dev/null 2>&1 \ - -o -r "${diskfile}" >/dev/null 2>&1 ]; then - writelog "Vmware Image Problem:\c " - writelog "\tThe image you've specified has wrong rights." - writelog "Filecheck says:\t\t$(echo ${filecheck} \ - | awk '{print $1" "$3" "$4}') ${rightsfile}" - writelog "Hint:\t\t\tChange rights with: chmod a+r ${rightsfile}\n" - exit 1 - fi - - # writable (for persistent-mode)? - if ! [ -w "${diskfile}" >/dev/null 2>&1 \ - -o -w "${diskfile}" >/dev/null 2>&1 ] \ - && [ "${np}" = "independent-persistent" ]; then - writelog "Vmware Image Problem:\c " - writelog "\tThe image you have specified has wrong rights." - writelog "Filecheck says:\t\t$(echo ${filecheck} \ - | awk '{print $1" "$3" "$4}') ${rightsfile}" - writelog "Hint:\t\t\tUse nonpersistent-mode or change rights to rw\n" - exit 1 - fi -} diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/detect_legacy.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/detect_legacy.inc deleted file mode 100644 index 8bdfd8b1..00000000 --- a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/detect_legacy.inc +++ /dev/null @@ -1,34 +0,0 @@ -######################################################## -# Include: Detect, whether runvirt runs in legacy mode # -######################################################## - -# Legacy mode: As runvirt has been before. -# New mode: uuid in xml _and_ vmx given via http. - -writelog "Detecting current/legacy mode ..." - -# First, let's try to extract an imguuid from xmlfile: -declare -rg IMGUUID=$(grep -i -o '/dev/null >&2; then - writelog "wget ${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}. Triggering legacy mode." - else - writelog "wget ${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID} successful." - if [ ! -s "$TMPCONFIG" ]; then - writelog "Server sent zero byte virtual machine description file. Triggering legacy mode." - else - writelog "Triggering current (non-legacy) mode." - LEGACY= # everything worked - clear legacy mode variable (so we use the "current" mode) - fi - fi -fi - diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/download_vm_metadata.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/download_vm_metadata.inc new file mode 100644 index 00000000..b1995d09 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/download_vm_metadata.inc @@ -0,0 +1,34 @@ +######################################################## +# Include: Detect, whether runvirt runs in legacy mode # +######################################################## + +# Legacy mode: As runvirt has been before. +# New mode: uuid in xml _and_ vmx given via http. + +writelog "Detecting current/legacy mode ..." + +declare -rg TMPCONFIG="$TMPDIR/vmconfig.tmp" + +writelog "IMGUUID extracted: $IMGUUID" + +# Assume legacy mode by default, only trigger "current" mode if everything else below worked +LEGACY=yes +if [ -z "$IMGUUID" ]; then # Keine uuid: Abbruch, Legacy + writelog "Could not extract a uuid param from ${xmlfile}. Triggering legacy mode." +else + # Now getting template file: + if ! wget -T 6 -O "$TMPCONFIG" "${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}" 2>/dev/null >&2; then + writelog "wget ${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}. Triggering legacy mode." + else + writelog "wget ${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID} successful." + if [ ! -s "$TMPCONFIG" ]; then + writelog "Server sent zero byte virtual machine description file. Triggering legacy mode." + else + writelog "Triggering current (non-legacy) mode." + LEGACY= # everything worked - clear legacy mode variable (so we use the "current" mode) + fi + fi +fi + +readonly LEGACY + diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc index b7ed648c..eb699ec0 100644 --- a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc @@ -1,103 +1,62 @@ -########################################### -# Include: Set hardware related variables # -########################################### +############################################ +# Include: Get needed values from XML file # +############################################ -writelog "Starting configuration..." -writelog "\tLogfile:\t\t${LOGFILE}" -writelog "\t/tmp info:\t\t$(df -h | grep " /tmp$" | awk '{print $2}') \c" -writelog "$(grep "/tmp " /proc/mounts | awk '{print $1" "$2" "$3" "$4}')" -writelog "\tVM XML dir:\t\t$(dirname "${xmlfile}")" -writelog "\tXML file:\t\t${xmlfile}" -writelog "Enable 3D:\t\t${enable3d}" -writelog "VM config:" +writelog "Parsing XML..." + +declare -rg VMSTORE_PATH=/mnt/vmstore + +# Need some lean and mean xml parser some day in the far future +get_xml () { + grep -Pio "<$1"'\s+param=[^"]*".*' "${xmlfile}" \ + | awk -F '"' '{ print $2 }' \ + | sed 's/&/+/g;s/"/"/g;s/<//g' +} # # Name of the virt image -imgname=$(grep -io ' "$dnbd3_tmplog" 2>&1 + dnbd3-fuse -f -o allow_other,max_readahead=262144 -h "$SLX_DNBD3_SERVERS" -i "${SRC_IMG_RELATIVE}" "${dnbd3_fuse_mount_point}" > "$dnbd3_tmplog" 2>&1 RET=$? touch "$dnbd3_exitflag" if [ "$RET" != "0" ]; then writelog "dnbd3-fuse stopped working (Exit code $RET)" - slxlog "virt-dnbd3-fuse" "dnbd3-fuse stopped/refused serving '${imgrelpath}' from '${SLX_DNBD3_SERVERS}' with error code: $RET" "${dnbd3_tmplog}" + slxlog "virt-dnbd3-fuse" "dnbd3-fuse stopped/refused serving '${SRC_IMG_RELATIVE}' from '${SLX_DNBD3_SERVERS}' with error code: $RET" "${dnbd3_tmplog}" fi ) & # give it a bit of time @@ -36,36 +44,55 @@ else for TIMEOUT in 0.5 1 1 OUT; do if [ -r "${dnbd3_fuse_mount_point}/img" ]; then vm_revision="$(grep -m 1 "^Revision:" "${dnbd3_fuse_mount_point}/status" | cut -d" " -f2)" - vm_diskfile="${dnbd3_fuse_mount_point}/img" - writelog "DNBD3: $imgrelpath on $vm_diskfile with rid $vm_revision" - vmpath="$vm_diskfile" + VM_DISKFILE_RO="${dnbd3_fuse_mount_point}/img" + writelog "DNBD3: $SRC_IMG_RELATIVE on $VM_DISKFILE_RO with rid $vm_revision" break fi [ "$TIMEOUT" = "OUT" -o -e "$dnbd3_exitflag" ] && break sleep "$TIMEOUT" done - if [ -z "$vm_diskfile" ]; then - slxlog "virt-dnbd3" "No dnbd3 server for ${imgrelpath} found, trying NFS/CIFS..." "$dnbd3_tmplog" + if [ -z "$VM_DISKFILE_RO" ]; then + slxlog "virt-dnbd3" "No dnbd3 server for ${SRC_IMG_RELATIVE} found, trying NFS/CIFS..." "$dnbd3_tmplog" writelog "No working dnbd3 server found :-(" fi +} + +# See if we should setup dnbd3 image access at all +if ! which dnbd3-fuse; then + writelog "Can't use dnbd3 as dnbd3-fuse binary is not in PATH" +elif [ -z "$SRC_IMG_RELATIVE" ]; then + writelog "Can't use dnbd3 as SRC_IMG_RELATIVE is not set" +elif [ -z "$SLX_DNBD3_SERVERS" ] || [ "x$SLX_VM_DNBD3" != "xyes" ]; then + writelog "Can't use dnbd3 as no servers are given in config, or SLX_VM_DNBD3 is not set to yes" +else + setup_dnbd3 fi -# $vm_diskfile will be empty if dnbd3 is not used or failed. Let's try to fall back to NFS/CIFS via file system -if [ -z "$vm_diskfile" ]; then - new_vmpath=$(ls "${vmpath}.r"* | grep -E -o '\.r[0-9]+$' | grep -o -E '[0-9]+' | sort -n | tail -n 1) - [ -n "$new_vmpath" ] && vmpath="${vmpath}.r${new_vmpath}" - vm_diskfile="$vmpath" +# VM_DISKFILE_RO will be empty if dnbd3 is not used or failed to connect. +# Let's try to fall back to NFS/CIFS via file system +if [ -z "$VM_DISKFILE_RO" ]; then + # Maybe we're reading a dnbd3 directory with RIDs encoded into the filename - use latest one + rid_suffix=$(ls -1 "${SRC_IMG_ABSOLUTE}.r"* | grep -E -o '\.r[0-9]+$' | grep -o -E '[0-9]+$' | sort -n | tail -n 1) + if [ -n "$rid_suffix" ]; then + # found + VM_DISKFILE_RO="${SRC_IMAGE_ABSOLUTE}.r${rid_suffix}" + elif [ -e "$SRC_IMAGE_ABSOLUTE" ]; then + # try name we got from xml in the first place + VM_DISKFILE_RO="$SRC_IMAGE_ABSOLUTE" + fi fi # Check if virtual machine container file exists -if ! [ -e "${vmpath}" ]; then - slxlog "virt-image-missing" "VM image $vmpath not found!" - writelog "Virtual machine image ${vmpath} not found!" +if [ -z "$VM_DISKFILE_RO" ] || ! [ -e "${VM_DISKFILE_RO}" ]; then + slxlog "virt-image-missing" "VM image $VM_DISKFILE_RO not found!" + writelog "Virtual machine image ${VM_DISKFILE_RO} not found!" error_user "Das Image für die gewählte Virtuelle Maschine konnte nicht gefunden werden. Versuchen Sie zunächst, den Computer komplett neu zu starten. Sollte das Problem bestehen bleiben, wenden Sie sich bitte an den Support." cleanexit 1 fi -writelog "Virtual machine disk file: $vm_diskfile" +readonly VM_DISKFILE_RO + +writelog "Disk file to use: $VM_DISKFILE_RO" diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_vm_hypervisor.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_vm_hypervisor.inc index ce15524f..7709a85d 100644 --- a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_vm_hypervisor.inc +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_vm_hypervisor.inc @@ -3,30 +3,30 @@ ########################################################################## # Get all virtual machine specific stuff from the respective include file -if [ ! -e "$VMCHOOSER_DIR/$xmlvirt/run-virt.include" ] ; then - slxlog "virt-plugin-missing" "Could not find run-virt.include for $xmlvirt ($VMCHOOSER_DIR/$xmlvirt/run-virt.include)" - writelog "Failed because of missing ${xmlvirt} plugin." - error_user "Konnte den Virtualisierer '$xmlvirt' nicht finden. Starten der Virtuellen Maschine fehlgeschlagen. +if [ ! -e "$VMCHOOSER_DIR/$PLUGIN_ID/run-virt.include" ] ; then + slxlog "virt-plugin-missing" "Could not find run-virt.include for $PLUGIN_ID ($VMCHOOSER_DIR/$PLUGIN_ID/run-virt.include)" + writelog "Failed because of missing ${PLUGIN_ID} plugin." + error_user "Konnte den Virtualisierer '$PLUGIN_ID' nicht finden. Starten der Virtuellen Maschine fehlgeschlagen. Starten Sie den Computer neu und wenden Sie sich an den Support, wenn das Problem weiterhin besteht." cleanexit 1 fi -self="${xmlvirt}" +self="${PLUGIN_ID}" -if ! bash -n "$VMCHOOSER_DIR/$xmlvirt/run-virt.include"; then - slxlog "virt-plugin-syntax" "run-virt.include for $xmlvirt contains syntax errors (bash -n run-virt.include failed)" - writelog "Erroneous run-virt.include for $xmlvirt (syntax check)" - error_user "Das Start-Script für den Virtualisierer '$xmlvirt' ist fehlerhaft. +if ! bash -n "$VMCHOOSER_DIR/$PLUGIN_ID/run-virt.include"; then + slxlog "virt-plugin-syntax" "run-virt.include for $PLUGIN_ID contains syntax errors (bash -n run-virt.include failed)" + writelog "Erroneous run-virt.include for $PLUGIN_ID (syntax check)" + error_user "Das Start-Script für den Virtualisierer '$PLUGIN_ID' ist fehlerhaft. Starten Sie den Computer neu und wenden Sie sich an den Support, wenn das Problem weiterhin besteht." cleanexit 1 fi setup_vm_commandline () { # Now including the hypervisor specific include file: - if ! source "$VMCHOOSER_DIR/$xmlvirt/run-virt.include"; then - slxlog "virt-plugin-error" "run-virt.include for $xmlvirt could not be sourced properly." - writelog "Erroneous run-virt.include for ${xmlvirt}? Source returned != 0" - error_user "Das Start-Script für den Virtualisierer '$xmlvirt' hat einen fehlercode zurückgegeben. + if ! source "$VMCHOOSER_DIR/$PLUGIN_ID/run-virt.include"; then + slxlog "virt-plugin-error" "run-virt.include for $PLUGIN_ID could not be sourced properly." + writelog "Erroneous run-virt.include for ${PLUGIN_ID}? Source returned != 0" + error_user "Das Start-Script für den Virtualisierer '$PLUGIN_ID' hat einen fehlercode zurückgegeben. Starten Sie den Computer neu, falls es beim Ausführen der VM zu Problemen kommt und wenden Sie sich an den Support, wenn das Problem weiterhin besteht." fi diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/vmchooser_runvirt_functions.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/vmchooser_runvirt_functions.inc index c0d17dbe..7519a48d 100644 --- a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/vmchooser_runvirt_functions.inc +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/vmchooser_runvirt_functions.inc @@ -77,3 +77,22 @@ rv_clean_string() { tr '[A-Z]' '[a-z]' | tr -d -c '[a-z0-9\-]' fi } + +# Check if the given variables are set (empty or not) +isset() { + while [ $# -gt 0 ]; do + [ -z "${!1+x}" ] && return 1 + shift + done + return 0 +} + +# Check if the given variables are not empty +notempty() { + while [ $# -gt 0 ]; do + [ -z "${!1}" ] && return 1 + shift + done + return 0 +} + diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/vmchooser-run_virt b/remote/modules/run-virt/data/opt/openslx/vmchooser/vmchooser-run_virt index 10943c51..b945cca2 100755 --- a/remote/modules/run-virt/data/opt/openslx/vmchooser/vmchooser-run_virt +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/vmchooser-run_virt @@ -19,8 +19,8 @@ # fied virtualization tool. ################################################################################ -RUNVIRTINCLUDEDIR=/opt/openslx/vmchooser/run-virt-includes -xmlfile="$1" +declare -rg RUNVIRTINCLUDEDIR=/opt/openslx/vmchooser/run-virt-includes +declare -rg xmlfile="$1" # Functions needed by vmchooser-run_virt (writelog(), cleanexit(), rv_clean_string()) if ! source "${RUNVIRTINCLUDEDIR}/vmchooser_runvirt_functions.inc"; then @@ -29,10 +29,20 @@ if ! source "${RUNVIRTINCLUDEDIR}/vmchooser_runvirt_functions.inc"; then fi trap 'trap "" SIGINT SIGTERM; cleanexit' SIGINT SIGTERM + # Define default dirs / get configs source "${RUNVIRTINCLUDEDIR}/set_runvirt_variables.inc" -# Function to detect whether we can use the new way (vmx via http) or the old way (legacy): -source "${RUNVIRTINCLUDEDIR}/detect_legacy.inc" # This yields LEGACY, IMGUUID, IMGVMX + +# Read needed variables from XML file +source "${RUNVIRTINCLUDEDIR}/get_xml_file_variables.inc" + +# Download meta data from server (e.g. vmx for vmware) +source "${RUNVIRTINCLUDEDIR}/download_vm_metadata.inc" + +if ! isset IMGUUID TMPCONFIG TMPDIR USER; then + slxlog "run-virt" "Internal sanity check failed: One of IMGUUID TMPCONFIG TMPDIR USER is not set." + cleanexit 1 +fi if [ "$LEGACY" ]; then @@ -54,13 +64,6 @@ fi # Proper meta data received - proceed normally -# check for important files used (filecheck()) - vestigial? -# This include does not currently work. TODO. -# source ${RUNVIRTINCLUDEDIR}/check_runvirt_needed_files.inc && filecheck - -# Read needed variables from XML file -source ${RUNVIRTINCLUDEDIR}/get_xml_file_variables.inc - # Helper that looks for virtualizer-specific include, show error to user if not found source "${RUNVIRTINCLUDEDIR}/setup_vm_hypervisor.inc" @@ -72,22 +75,22 @@ source "${RUNVIRTINCLUDEDIR}/setup_firewall.inc" || writelog "Could not source s setup_firewall || writelog "Could not run setup_firewall" # Sound setup -source ${RUNVIRTINCLUDEDIR}/setup_sound.inc +source "${RUNVIRTINCLUDEDIR}/setup_sound.inc" # Declaration of hardware relatedt variables -source ${RUNVIRTINCLUDEDIR}/set_runvirt_hardware_variables.inc +source "${RUNVIRTINCLUDEDIR}/set_runvirt_hardware_variables.inc" # Start printer daemon -source ${RUNVIRTINCLUDEDIR}/setup_printer_lpd.inc +source "${RUNVIRTINCLUDEDIR}/setup_printer_lpd.inc" # Setup virtual floppy b: for windows guests with config.xml, openslx.exe etc. -source ${RUNVIRTINCLUDEDIR}/setup_virtual_floppy.inc +source "${RUNVIRTINCLUDEDIR}/setup_virtual_floppy.inc" # Try to use dnbd3 to access the image, nfs/cifs fallback -source ${RUNVIRTINCLUDEDIR}/setup_image_access.inc +source "${RUNVIRTINCLUDEDIR}/setup_image_access.inc" # Window manager required for handling of popups etc. -source ${RUNVIRTINCLUDEDIR}/start_windowmanager.inc +source "${RUNVIRTINCLUDEDIR}/start_windowmanager.inc" # Source run-virt.include of virtualizer setup_vm_commandline @@ -95,9 +98,9 @@ setup_vm_commandline # It should have set this variable if all went well if [ -z "${VIRTCMD}" ]; then error_user "Fehler beim Starten der VM-Sitzung" " -Das Start-Script für den Virtualisierer $xmlvirt hat kein Kommando +Das Start-Script für den Virtualisierer $PLUGIN_ID hat kein Kommando zum Starten der Sitzung definiert. Kann Sitzung nicht initialisieren." - slxlog "virt-plugin-error" "run-virt.include for $xmlvirt did not set VIRTCMD" + slxlog "virt-plugin-error" "run-virt.include for $PLUGIN_ID did not set VIRTCMD" cleanexit 1 fi diff --git a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/machine.include b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/machine.include index 1f0b209a..344ccc48 100644 --- a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/machine.include +++ b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/machine.include @@ -11,10 +11,14 @@ # ----------------------------------------------------------------------------- # Include file (general template) for run-virt.include of the virtualbox plugin +# TODO: Move this server side (just like vmware) +# !! A lot of variable names have changed and are NOT updated here !! +# Oh and for the love of god remove the above comment when this works again + cat << EOF > "${machconfig}" - + diff --git a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/run-virt.include b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/run-virt.include index 1b116f32..59dd712d 100755 --- a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/run-virt.include +++ b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/run-virt.include @@ -14,261 +14,165 @@ # - component for virtualbox of the vmchooser plugin vmchooser-run_virt ################################################################################ +[ -r /run/hwinfo ] && source /run/hwinfo + ################################################################################ ### declaration of default variables ################################################################################ -VMCHOOSERVBOX="/opt/openslx/vmchooser/${self}" -confdir="${TMPDIR}/vbox" # dir for configs -export VBOX_USER_HOME=${confdir} # instead of $HOME/.VirtualBox -# define dirs and files which can be removed after exit, be carefull! -# TODO: Machanism not in use anymore. A better approach would be anyways to -# Define a fixed directory which can be deleted recursively on exit. $TMPDIR -# would be a start. -#RMDIRS="${snapshotdir} ${confdir} /tmp/virt/.vbox-${USER}-ipc" -# rm -rf ${RMDIRS} 2>/dev/null -machfolder="${confdir}/Machines" -# use vm_shortname for dir and config names since vm_name can be very long -machconfig="${machfolder}/${vm_shortname}/${vm_shortname}.xml" -diskfolder="${confdir}/HardDisks" -snapshotdir=${machfolder}/${vm_shortname}/Snapshots -mkdir -p ${diskfolder} ${snapshotdir} 2>/dev/null -[ -z "${diskless}" ] && diskless=0 # check if diskless var empty? -guestaudio="HDA" # default guest audio controller (SB16, AC97, HDA) -vb_network_card="82540EM" # default guest network adaptor (Am79C970A, Am79C973, 82540EM) +if ! isset VM_NAME_CLEAN IMG_BASENAME SRC_IMG_ABSOLUTE VM_OS_TYPE; then + env=$(mktemp) + env > "$env" + slxlog -d "virt-vbox-init" "A required variable is not set." "$env" + writelog "Incomplete variable set passed from main run-virt" + error_user "Wichtige variablen, die das VBox Plugin benötigt, wurden nicht +gesetzt. Kann die VM nicht starten." + cleanexit 1 +fi + +declare -rg VMCHOOSERVBOX="/opt/openslx/vmchooser/${self}" +declare -rg VBOX_ROOT="${TMPDIR}/vbox" # dir for configs +declare -rg VBOX_MACHINES_DIR="${VBOX_ROOT}/Machines" +declare -rg VBOX_SNAPSHOT_DIR="${VBOX_MACHINES_DIR}/${VM_NAME_CLEAN}/Snapshots" +declare -rg VBOX_HDD_DIR="${VBOX_ROOT}/HardDisks" +declare -rg VBOX_HDD_LINK="${VBOX_HDD_DIR}/${IMG_BASENAME}" + +export VBOX_USER_HOME="${VBOX_ROOT}" # instead of $HOME/.VirtualBox + +# use VM_NAME_CLEAN for dir and config names since VM_DISPLAYNAME can be very long +VBOX_MACHINE_CONFIG="${VBOX_MACHINES_DIR}/${VM_NAME_CLEAN}/${VM_NAME_CLEAN}.xml" +mkdir -p "${VBOX_HDD_DIR}" "${VBOX_SNAPSHOT_DIR}" 2>/dev/null enable2d="true" # default setting for accelerated 2D grapics (OS dependent) vram="128" # set default graphics ram +snapshotuuid="34f617be-192a-46b3-a8ae-bce1029e093f" # snapshot UUID is static -# configure our own rwimg, empty image which we provide -if [ "${imgmode}" = "rwimg" ]; then - imgname="${vm_shortname}.vdi" # what is our rwimg called? - vmpath=${imgpath}/${imgname} - if ! [ -e "${vmpath}" ]; then - cat /opt/openslx/vmchooser/virtualbox/rwimg.vdi.gz | gunzip > "${vmpath}" +# link to image, determine extension (type) +imgfmt=$(echo ${SRC_IMG_ABSOLUTE##*.} | tr '[a-z]' '[A-Z]') +if [ -n "$VM_DISKFILE_RW" ]; then + ln -sf "${VM_DISKFILE_RW}" "${VBOX_HDD_LINK}" +else + ln -sf "${VM_DISKFILE_RO}" "${VBOX_HDD_LINK}" + # image is RO, we only support VDI? + if [ "$imgfmt" != "VDI" ]; then + writelog "Image is not VDI, cannot create snapshot.." + error_log "Die gewählte VM nutzt VBox, hat aber kein VDI image (sondern '$imgfmt'), kann VM nicht starten." + cleanexit 1 fi fi -# link to image -diskfile="${diskfolder}/${imgname}" -[ ${diskless} -eq 0 ] && ln -sf ${vmpath} ${diskfile} - -# check the file type -if echo ${imgname} | grep -qiE "vdi|vhd" && [ ${diskless} -eq 0 ]; then - imgfmt=$(echo ${imgname##*.} | tr "[a-z]" "[A-Z]") -elif [ ${diskless} -eq 0 ]; then - writelog "${imgname} is not a valid image format (vdi|vhd), exiting!" - cleanexit 1 -fi - -npaging="false" # nested paging: Default: not enabled -enablevt="false" # VT: Default: not enabled -[ ${vtflag} -eq 0 ] && cpu_cores=1 # check for VT, if not available only 1 cpu supported -[ ${vtflag} -eq 1 ] && enablevt="true" # Setting some default variables shfolders="TRUE" +enablevt="true" # set some base configuration depending on the guest operating system -case "${vmostype}" in - win31*) - guestaudio="SB16" - vb_network_card="Am79C973" - vmostype="Windows31" +case "${VM_OS_TYPE}" in + Windows31) mem="32" vram="16" cpu_cores=1 enablevt="false" shfolders="FALSE" - ;; - winnt*) - guestaudio="SB16" - vb_network_card="Am79C973" - vmostype="Windows31" - mem="32" + ;; + WindowsNT) + mem="4096" vram="16" - cpu_cores=1 + cpu_cores=4 enablevt="false" shfolders="FALSE" - ;; - win95*) - vmostype="Windows95" - guestaudio="SB16" - vb_network_card="Am79C973" - mem="92" + ;; + Windows95) + mem="128" vram="32" cpu_cores=1 enablevt="false" shfolders="FALSE" - ;; - win98*) - vmostype="Windows98" - guestaudio="SB16" - vb_network_card="Am79C973" + ;; + Windows98) mem="256" vram="64" cpu_cores=1 shfolders="FALSE" - ;; - winme*) - vmostype="WindowsMe" - guestaudio="AC97" - vb_network_card="Am79C973" + ;; + WindowsMe) mem="256" vram="64" cpu_cores=1 shfolders="FALSE" - ;; - winxp*|windowsxp*) - vmostype="WindowsXP" - guestaudio="AC97" - ;; - winvista*|windowsvista*) - vmostype="WindowsVista" - ;; - windows7*) - vmostype="Windows7" - ;; - windows8*) - vmostype="Windows8" - ;; - linux*|*ubuntu*|*suse*|debian*|*sci*) - if echo "${vmostype}" | grep -q "64"; then - vmostype="Linux26_64" - # check for vtflag - if [ ${vtflag} -ne 1 ]; then - writelog "You are trying to boot a 64 bit OS without a VT enabled CPU" - writelog "This is not supported, exiting!" - cleanexit 1 - fi - # check if host is only 32 bit, then use only 1 cpu (only 1 supported) - if echo "${host_arch}" | grep -qE "i.86"; then - cpu_cores=1 - fi - else - vmostype="Linux26" - fi - ;; - os2*) + ;; + WindowsXP) + ;; + WindowsVista) + ;; + Windows7) + ;; + Windows8) + ;; + OS2eCS) mem="256" - vmostype="OS2eCS" cpu_cores=1 enable2d="false" - ;; - macos*|MacOS*) - vmostype="MacOS" + ;; + MacOS) enable2d="false" - ;; + ;; + Linux*) + ;; *) - vmostype="Other" + VM_OS_TYPE="Other" enable2d="false" - ;; + ;; esac +if [ "$HW_KVM" != "ENABLED" ]; then + enablevt="false" + cpu_cores=1 # check for VT, if not available only 1 cpu supported +fi + writelog "Directories:" -writelog "\tConfig dir:\t\t$confdir" -writelog "\tMachines dir:\t\t$machfolder" -writelog "\tMachine config:\t\t$machconfig" -[ ${diskless} -eq 0 ] && writelog "\tHardDisks dir:\t\t$diskfolder" +writelog "\tConfig dir:\t\t$VBOX_ROOT" +writelog "\tMachines dir:\t\t$VBOX_MACHINES_DIR" +writelog "\tMachine config:\t\t$VBOX_MACHINE_CONFIG" ################################################################################ ### Hardware checks ################################################################################ # remove ':' from MAC addr for vbox and generate a VDE (virtual device ethernet) -# MAC addr from the first one (put in prefix 0DE) +# MAC addr from the first one (put in prefix 00DE) macaddr=$(echo ${macaddr} | sed 's/://g') vdemacaddr=$(echo ${macaddr} | sed 's/^..../00DE/g') machineuuid="00000000-0000-0000-0000-${macaddr}" # machine UUID, MAC addr part of it machineuuid=$(echo ${machineuuid} | tr "[A-Z]" "[a-z]") # cosmetical, since UUID in lower case -# get UUID of VBox image, if not diskless -[ ${diskless} -eq 0 ] && diskuuid=$(VBoxManage -q showvdiinfo ${diskfile} \ - | grep UUID | grep -v "Parent UUID" | awk '{print $2}' \ - | grep -v use ) # nec. for VBox >= 4 -imgtype="Immutable" # make disk immutable -snapshotuuid="34f617be-192a-46b3-a8ae-bce1029e093f" # snapshot UUID is static -imageuuid=${snapshotuuid} # imageuuid in machine.include, default snapshotuuid - -# check if rw image -# remove disk and add rwimg if set -if echo "${imgmode}" | grep -q rw; then - # lock existing? - if [ -e "${vmpath}.lock" ]; then - writelog "This rw image is already in use." - writelog "Found lock: ${vmpath}.lock, exiting!" - writelog "Remove lock if you are sure that this is not the case" - cleanexit 1 - # image rw? - elif ! [ -w ${vmpath} ]; then - writelog "You defined mode rw, but image ${vmpath} is not rw! \c" - writelog "Please correct, exiting!" - cleanexit 1 - fi - touch "${vmpath}.lock" # add lock - #RMDIRS="${RMDIRS} ${vmpath}.lock" # remove lock after VM stopped TODO See note at the top +# get UUID of VBox image +diskuuid=$(VBoxManage -q showvdiinfo ${VBOX_HDD_LINK} \ + | grep UUID | grep -v "Parent UUID" | awk '{print $2}' \ + | grep -v use ) # nec. for VBox >= 4 + + +if [ -n "$VM_DISKFILE_RW" ]; then + # Image is already RW - easy imgtype="Normal" - imageuuid=${diskuuid} # replace image uuid in machine config -elif [ ${diskless} -eq 0 ]; then - # use temp disk as snapshot - cat ${VMCHOOSERVBOX}/empty-diff.vdi.gz \ - | gunzip > "${snapshotdir}/{${snapshotuuid}}.vdi" - # patch the disk file uuid into the snapshot vdi file - dd if=${diskfile} of="${snapshotdir}/{${snapshotuuid}}.vdi" seek=424 \ - skip=392 bs=1 count=16 conv=notrunc + imageuuid=${diskuuid} +else + # use temp disk as snapshot to get CoW + imgtype="Immutable" # make disk immutable + imageuuid=${snapshotuuid} + < "${VMCHOOSERVBOX}/empty-diff.vdi.gz" gunzip > "${VBOX_SNAPSHOT_DIR}/{${snapshotuuid}}.vdi" + # patch the disk file uuid into the snapshot vdi file: + # We read from offset 424 in the source HDD and write to offset 392 in out prepared + # CoW container. 16 bytes will be copied, which is the binary UUID + # TODO: This requires the image to be a vdi/vdh; Afaik, vbox supports vmdk, + # so this code would break in that case. Can we use the diskuuid we got via + # VBoxManage, convert to binary, and patch it + dd if=${VBOX_HDD_LINK} of="${VBOX_SNAPSHOT_DIR}/{${snapshotuuid}}.vdi" seek=424 \ + skip=392 bs=16 count=1 conv=notrunc fi -# TODO: MEM muss noch angepasst werden. Maschine crasht wenn mehr als 50% MEM -# memory part equal to vmware plugin -# percentage of memory to use for virtualbox in standard case -#if [ -n "${forcemem}" ]; then -# mem="${forcemem}" -#else -# permem=30 -# if [ "${totalmem}" -ge "1600" ]; then -# permem=40 -# fi -# # check if /tmp is on harddisk -# if grep -qe "/dev/.* /tmp " /proc/mounts ; then -# permem=60 -# id44="1" -# # Hack, if more than 2,5G RAM use 40% of Ram and write vmem into Ram as well -# # (40% vmware | 40% confdir(vmem...) | 20% host -# # VMplayer 2+ issue -# # TODO: makes this sense for vbox? -# #if [ "${totalmem}" -ge "2500" ]; then -# #permem=40 -# #rmdir ${snapshotdir} -# #snapshotdirold=${snapshotdir} -# #snapshotdir=/dev/shm/${self}/${USER}/${VM_ID} -# #mkdir -p ${snapshotdir} -# #ln -sf ${snapshotdir} ${snapshotdirold} -# #fi -# fi -# mem=$(expr ${totalmem} / 100 \* ${permem}) -# if [ "${id44}" = "1" ]; then -# hostmem=$(expr ${totalmem} - ${mem}) -# else -# hostmem=$(expr ${totalmem} - ${mem} - ${mem}) -# fi -# #permem=40 -# #mem=$(expr ${totalmem} * ${permem}) -#fi - -# translate network cards -case "${network_card}" in - e1000) - vb_network_card="82540EM" - ;; - virtio) - vb_network_card="virtio" - ;; - *) - network_card="pcnet" - vb_network_card="Am79C973" -esac - # translate network kinds (nat, bridged, host-only) +# TODO: Server should prepare this in returned xml case "${network_kind}" in bridge*) network_kind='HostOnlyInterface name="vboxnet0"' @@ -280,57 +184,19 @@ case "${network_kind}" in network_kind='HostOnlyInterface name="vboxnet1"' esac -# configure 3d settings -case "${enable3d}" in - *true*|*yes*) - enable3d="true" - ;; - *) - enable3d="false" - ;; -esac +boot="HardDisk" -# translate boot, use if set else set to HardDisk -# usually support for a,c,d,n, stands for Floppy, HD, CD-ROM, Network -# support nfs and tftp as well -case ${boot} in - n*|tftp) - boot="Network" - if [ "${network_kind}" = "NAT" ] && [ -n "${virtualbox_tftpdir}" ]; then - vm_name=${vm_shortname} # use vm_shortname to avoid Problems /w TFTP in NAT - mkdir -p ${confdir}/TFTP # link TFTP dir for NAT TFTP boots - if [ -e ${virtualbox_tftpdir}/pxelinux.0 ]; then - cp ${virtualbox_tftpdir}/pxelinux.0 ${confdir}/TFTP/${vm_name}.pxe - else - writelog "${virtualbox_tftpdir}/pxelinux.0 not found!" - writelog "Network boot won't work, exiting!" - cleanexit 1 - fi - for i in $(ls ${virtualbox_tftpdir}); do - ln -sf ${virtualbox_tftpdir}/${i} ${confdir}/TFTP/${i} - done - fi - ;; - # later maybe c|disk|hd*|sd*) for HD and d|cd*) for CD-ROM - *) - boot="HardDisk" - ;; -esac - -vrdpport=${remotedesktopport} # external GUI - -[ ${diskless} -eq 0 ] && writelog "\tSnapshots dir:\t\t$snapshotdir" +writelog "\tSnapshots dir:\t\t$VBOX_SNAPSHOT_DIR" writelog "Diskimage:" -[ ${diskless} -eq 0 ] && writelog "\tDisk file:\t\t$diskfile" -[ ${diskless} -eq 0 ] && writelog "\tDisk format:\t\t$imgfmt" -[ ${diskless} -eq 0 ] && writelog "\tDisk type:\t\t$imgtype" - writelog "\tVMostype:\t\t$vmostype" - writelog "\tMachine UUID:\t\t$machineuuid" -[ ${diskless} -eq 0 ] && writelog "\tDisk UUID:\t\t$diskuuid" +writelog "\tDisk file:\t\t$VBOX_HDD_LINK" +writelog "\tDisk type:\t\t$imgtype" +writelog "\tVMostype:\t\t$VM_OS_TYPE" +writelog "\tMachine UUID:\t\t$machineuuid" +writelog "\tDisk UUID:\t\t$diskuuid" writelog "Virtual Hardware:" writelog "\tCPU cores:\t\t${cpu_cores}\c" -[ ${vtflag} -eq 0 ] && writelog "" -[ ${vtflag} -eq 1 ] && writelog " (VT enabled CPU)" +writelog "" +[ "$HW_KVM" = "ENABLED" ] && writelog " (VT enabled CPU)" writelog "\tGuest RAM:\t\t${mem} MB" # echo nur wenn hostmem gesetzt [ -n "${hostmem}" ] && writelog "\tHost RAM:\t\t${hostmem} MB" @@ -338,10 +204,7 @@ writelog "\tMAC address:\t\t$macaddr" writelog "\tNetwork card:\t\t${vb_network_card}" writelog "\tNetwork kind:\t\t${network_kind}" writelog "\tBooting from:\t\t${boot}\c" -[ ${diskless} -eq 0 ] && writelog "" -[ ${diskless} -eq 1 ] && writelog " 'diskless'" -# TODO: server start activate via xml, etc... -#writelog "\tGuest VRDP port:\t${vrdpport}" +writelog "" writelog "\tCD-ROM1:\t\t${cdrom0}" #writelog "\tCD-ROM2:\t\t${cdrom1}" writelog "\tFloppy_A:\t\t${floppy0}" @@ -357,60 +220,31 @@ writelog "\tShared Folders '${sharename}':\t${sharepath}" # Shares given? if [ "x$shfolders" != "xFALSE" ]; then - sharelist=" + sharelist=" " else - sharelist='' + sharelist='' fi -source ${VMCHOOSERVBOX}/virtualbox.include # create Virtualbox.xml +source "${VMCHOOSERVBOX}/virtualbox.include" # create Virtualbox.xml # remove snapshot disk when using rw images if [ "${imgtype}" != "Immutable" ]; then - sed -i "/${snapshotuuid}/d" "${confdir}/VirtualBox.xml" + sed -i "/${snapshotuuid}/d" "${VBOX_ROOT}/VirtualBox.xml" fi # TODO: add rawdisk if requested #"raw.vmdk" format="VMDK" type="Writethrough"/> -source ${VMCHOOSERVBOX}/machine.include # create machine.xml +source "${VMCHOOSERVBOX}/machine.include" # create machine.xml # remove CD-ROM if not available if [ "${cdrom0}" != "TRUE" ]; then - sed -i "/HostDrive/d" ${machconfig} - sed -i '/AttachedDevice.*type="DVD"/d' ${machconfig} - sed -i "//d" ${machconfig} -fi - -# if diskless remove all disks -if [ ${diskless} -eq 1 ]; then - sed -i "//d" ${machconfig} -fi - -# define redirects -if [ ${redirects} -ge 1 ]; then - (( i=1 )) - writelog "\tGuest redirects:\t\c" - while [ ${i} -le ${redirects} ]; do - extradataitem='" - extradatahostport="HostPort\" value=\"${redirect_hport[$i]}\"/>" - extradataguestport="GuestPort\" value=\"${redirect_gport[$i]}\"/>" - sed -i "s,, ${extradataitem}${extradataguestport}\n\ - ${extradataitem}${extradatahostport}\n\ - ${extradataitem}${extradataprotocol}\n\ - ," "${machconfig}" - writelog "${tabspace}${redirect_name[$i]} port: ${redirect_hport[$i]}" - tabspace='\t\t\t\t' - (( i=$i+1 )) - done + sed -i "/HostDrive/d" "${VBOX_MACHINE_CONFIG}" + sed -i '/AttachedDevice.*type="DVD"/d' "${VBOX_MACHINE_CONFIG}" + sed -i "//d" "${VBOX_MACHINE_CONFIG}" fi ################################################################################ diff --git a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.include b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.include index 62143c54..70a036a8 100644 --- a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.include +++ b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.include @@ -11,7 +11,7 @@ # ----------------------------------------------------------------------------- # Include file (general template) for run-virt.include of the virtualbox plugin -cat << EOF > "${confdir}/VirtualBox.xml" +cat << EOF > "${VBOX_ROOT}/VirtualBox.xml" @@ -27,7 +27,7 @@ cat << EOF > "${confdir}/VirtualBox.xml" - + diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/determine_hardware_limitations.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/determine_hardware_limitations.inc index 84d959ea..11ea2e3a 100644 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/determine_hardware_limitations.inc +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/determine_hardware_limitations.inc @@ -9,116 +9,116 @@ sound="es1371" # define hardware configuration depending on the guest OS used # this needs to be fixed and is the base for the creation of new VMs -case "$vmostype" in +case "$VM_OS_TYPE" in win31*|windows31*) - vmostype="win31" + VM_OS_TYPE="win31" shfolders="FALSE" sound="sb16" MAXMEM="32" MAXCORES="1" ;; winnt*|windowsnt*) - vmostype="winnt" + VM_OS_TYPE="winnt" shfolders="FALSE" sound="sb16" MAXMEM="1000" MAXCORES="2" ;; win95*|windows95*) - vmostype="win95" + VM_OS_TYPE="win95" shfolders="FALSE" MAXMEM="96" MAXCORES="1" ;; win98*|windows98*) - vmostype="win98" + VM_OS_TYPE="win98" MAXMEM="256" MAXCORES="1" ;; winme*|windowsme*) - vmostype="winme" + VM_OS_TYPE="winme" MAXMEM="384" MAXCORES="1" ;; win2000|windows2000|win2000pro*) - vmostype="win2000pro" + VM_OS_TYPE="win2000pro" MAXMEM="4000" MAXCORES="2" ;; win2000srv*|windows2000srv*|win2000serv*|windows2000serv*) - vmostype="win2000serv" + VM_OS_TYPE="win2000serv" shfolders="FALSE" MAXMEM="4000" MAXCORES="4" ;; win2000adv*|windows2000adv*|win2000dat*|windows2000dat*) - vmostype="win2000advserv" + VM_OS_TYPE="win2000advserv" shfolders="FALSE" MAXMEM="8000" MAXCORES="8" ;; winnet*64|win*2003*64|windowsnet*64) - vmostype="winnetstandard-64" + VM_OS_TYPE="winnetstandard-64" MAXMEM="8000" MAXCORES="8" ;; winnet*|win*2003*|windowsnet*) - vmostype="winnetstandard" + VM_OS_TYPE="winnetstandard" MAXMEM="4000" MAXCORES="8" ;; winxphome*|windowsxphome*) - vmostype="winxphome" + VM_OS_TYPE="winxphome" MAXMEM="4000" MAXCORES="2" ;; winxp*64|windowsxp*64) - vmostype="winxppro-64" + VM_OS_TYPE="winxppro-64" MAXMEM="8000" MAXCORES="8" ;; winxp*|windowsxp*) - vmostype="winxppro" + VM_OS_TYPE="winxppro" MAXMEM="4000" MAXCORES="4" ;; winvista-64) - vmostype="winvista-64" + VM_OS_TYPE="winvista-64" MAXMEM="16000" MAXCORES="4" ;; windows7-64) - vmostype="windows7-64" + VM_OS_TYPE="windows7-64" MAXMEM="32000" MAXCORES="8" ;; windows8-64) - vmostype="windows8-64" + VM_OS_TYPE="windows8-64" MAXMEM="32000" MAXCORES="8" ;; windows9-64) - vmostype="windows9-64" + VM_OS_TYPE="windows9-64" MAXMEM="64000" MAXCORES="8" ;; winvista) - vmostype="winvista" + VM_OS_TYPE="winvista" MAXMEM="8000" MAXCORES="2" ;; windows7) - vmostype="windows7" + VM_OS_TYPE="windows7" MAXMEM="8000" MAXCORES="4" ;; windows8) - vmostype="windows8" + VM_OS_TYPE="windows8" MAXMEM="8000" MAXCORES="4" ;; windows9) - vmostype="windows9" + VM_OS_TYPE="windows9" MAXMEM="8000" MAXCORES="4" ;; @@ -131,36 +131,36 @@ case "$vmostype" in MAXCORES="1" ;; dos|msdos*|ms-dos*) - vmostype="dos" + VM_OS_TYPE="dos" shfolders="FALSE" MAXMEM="128" MAXCORES="1" ;; macos*64) - vmostype="freebsd-64" + VM_OS_TYPE="freebsd-64" MAXMEM="4000" MAXCORES="2" ;; macos*) - vmostype="freebsd" + VM_OS_TYPE="freebsd" MAXMEM="4000" MAXCORES="1" ;; beos*) - vmostype="other" + VM_OS_TYPE="other" shfolders="FALSE" ;; # Unknown guestOS setting in .xml - this encompasses linux too, # as there is a multitude of different distributions. Perhaps further # action will be needed if this leads to problems with exotic OSs. *64) - vmostype="other-64" + VM_OS_TYPE="other-64" # shfolders="FALSE" MAXMEM="123456" MAXCORES="4" ;; *) - vmostype="other" + VM_OS_TYPE="other" # shfolders="FALSE" MAXMEM="8000" MAXCORES="1" diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc index f7f09c65..e6776882 100644 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc @@ -46,14 +46,13 @@ fi # image writelog "Diskimage:" -writelog "\tDiskfile:\t${diskfile}" -writelog "\tDisktype:\t${hddrv}" -writelog "\tHWVersion:\t${hwver}" -writelog "\tVMostype:\t${vmostype}" +writelog "\tDiskfile:\t${VM_DISKFILE_RO}" +writelog "\tHWVersion:\t${HWVER}" +writelog "\tVMostype:\t${VM_OS_TYPE}" # misc writelog "Misc:" -writelog "\tDisplayname:\t${displayname}" +writelog "\tDisplayname:\t${VM_DISPLAYNAME}" if [ "${cap3d}" = "TRUE" -a "${enable3d}" = "TRUE" ]; then writelog "\t3D Graphics:\tenabled" fi diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/set_vmware_include_variables.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/set_vmware_include_variables.inc index 0c45ee59..da820bc6 100644 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/set_vmware_include_variables.inc +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/set_vmware_include_variables.inc @@ -3,8 +3,6 @@ ##################################################################### set_vmware_include_variables() { - [ "$mem" -gt 3800 -a "$(uname -m)" != "x86_64" ] && mem=3800 - # temporary disk space for logs, etc... redodir="/tmp/virt/vmware/${USER}.$$" @@ -14,9 +12,6 @@ set_vmware_include_variables() { # configfile conffile="${confdir}/run-vmware.conf" - # diskfile - diskfile="${vmpath}" - # users vmware config folder [ -z "${HOME}" ] && HOME=$(getent passwd "$(whoami)" | awk -F ':' '{print $6}') vmhome="${HOME}/.vmware" diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_final_vmx.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_final_vmx.inc index 41548154..e664f02f 100644 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_final_vmx.inc +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_final_vmx.inc @@ -1,7 +1,7 @@ # check for vmdk file marker %VM_DISK_PATH% and put vmdk path in it's place: also VM_DISK_MODE # and VM_DISK_REDOLOGDIR. -sed -i 's#%VM_DISK_PATH%#'"$vm_diskfile"'#g' "${TMPCONFIG}" +sed -i 's#%VM_DISK_PATH%#'"$VM_DISKFILE_RO"'#g' "${TMPCONFIG}" sed -i 's#%VM_DISK_MODE%#'"independent-nonpersistent"'#g' "${TMPCONFIG}" sed -i 's#%VM_DISK_REDOLOGDIR%#'"$redodir"'#g' "${TMPCONFIG}" diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include index 84679ebf..f66bc9b8 100644 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include @@ -20,7 +20,7 @@ ################################################################################ VMWAREINCLUDEDIR=/opt/openslx/vmchooser/vmware/includes -vmostype=$(rv_clean_string "$vmostype") +VM_OS_TYPE=$(rv_clean_string "$VM_OS_TYPE") # declaration of default variables for vmware source "${VMWAREINCLUDEDIR}/set_vmware_include_variables.inc" && set_vmware_include_variables -- cgit v1.2.3-55-g7522 From c274a008fd2a67388db1064a1ae1753018ef30d0 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 24 Oct 2016 14:01:03 +0200 Subject: [run-virt] Fix misspelled variable, extract UUID from xml again --- .../openslx/vmchooser/run-virt-includes/download_vm_metadata.inc | 2 -- .../openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc | 4 ++++ .../opt/openslx/vmchooser/run-virt-includes/setup_image_access.inc | 6 +++--- .../opt/openslx/vmchooser/vmware/includes/log_config_summary.inc | 1 - 4 files changed, 7 insertions(+), 6 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/download_vm_metadata.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/download_vm_metadata.inc index b1995d09..974a5626 100644 --- a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/download_vm_metadata.inc +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/download_vm_metadata.inc @@ -9,8 +9,6 @@ writelog "Detecting current/legacy mode ..." declare -rg TMPCONFIG="$TMPDIR/vmconfig.tmp" -writelog "IMGUUID extracted: $IMGUUID" - # Assume legacy mode by default, only trigger "current" mode if everything else below worked LEGACY=yes if [ -z "$IMGUUID" ]; then # Keine uuid: Abbruch, Legacy diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc index eb699ec0..d40d97bb 100644 --- a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc @@ -13,6 +13,8 @@ get_xml () { | sed 's/&/+/g;s/"/"/g;s/<//g' } +IMGUUID=$(get_xml "uuid") + # # Name of the virt image SRC_IMG_ABSOLUTE=$(get_xml "image_path") SRC_IMG_RELATIVE=$(get_xml "image_name") @@ -48,12 +50,14 @@ PLUGIN_ID=$(grep -o 'virtualmachine param=.*"' "${xmlfile}" \ # it will yield the default entries later on. VM_OS_TYPE=$(get_xml "os") +readonly IMGUUID readonly SRC_IMG_ABSOLUTE SRC_IMG_RELATIVE readonly IMG_BASENAME readonly VM_DISPLAYNAME VM_NAME_CLEAN readonly PLUGIN_ID readonly VM_OS_TYPE +writelog "VM UUID: $IMGUUID" writelog "Virtualization plugin: $PLUGIN_ID" writelog "VM name: $VM_DISPLAYNAME" writelog "VM short name: $VM_NAME_CLEAN" diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_image_access.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_image_access.inc index 4eb66028..4240d9ca 100644 --- a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_image_access.inc +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_image_access.inc @@ -76,10 +76,10 @@ if [ -z "$VM_DISKFILE_RO" ]; then rid_suffix=$(ls -1 "${SRC_IMG_ABSOLUTE}.r"* | grep -E -o '\.r[0-9]+$' | grep -o -E '[0-9]+$' | sort -n | tail -n 1) if [ -n "$rid_suffix" ]; then # found - VM_DISKFILE_RO="${SRC_IMAGE_ABSOLUTE}.r${rid_suffix}" - elif [ -e "$SRC_IMAGE_ABSOLUTE" ]; then + VM_DISKFILE_RO="${SRC_IMG_ABSOLUTE}.r${rid_suffix}" + elif [ -e "$SRC_IMG_ABSOLUTE" ]; then # try name we got from xml in the first place - VM_DISKFILE_RO="$SRC_IMAGE_ABSOLUTE" + VM_DISKFILE_RO="$SRC_IMG_ABSOLUTE" fi fi diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc index e6776882..41986b2a 100644 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc @@ -26,7 +26,6 @@ writelog "\tMem:\t\t${mem} MB" # echo nur wenn hostmem gesetzt [ -n "${hostmem}" ] && writelog "\tHostmem:\t${hostmem} MB" -writelog "\tMax. res.:\t${xres}x${yres}" writelog "\tCD-ROM1:\t${cdrom0}" writelog "\tCD-ROM2:\t${cdrom1}" writelog "\tFloppy_A:\t${floppy0}" -- cgit v1.2.3-55-g7522 From 9dc8ddb39b7cf8fbd3b857ddac06a7a653f28202 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 24 Oct 2016 16:17:38 +0200 Subject: [hardware-stats] Write more stuff to /run/hwinfo Added virtual cpu core count, system model, system manufacturer --- .../opt/openslx/scripts/systemd-hardware_stats | 40 +++++++++++++++------- 1 file changed, 27 insertions(+), 13 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats b/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats index 5a776054..6f4e25ec 100755 --- a/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats +++ b/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats @@ -49,7 +49,10 @@ fi # 3) Uptime in seconds UPTIME=$(grep -o -E '^[0-9]+' /proc/uptime) -# 4) Number of real CPU cores +# 4) Number of real and virtual CPU cores +# Virtual, cheap way +VCORES=$(grep '^processor\s' /proc/cpuinfo | sort -u | wc -l) +# Real cores CPUCORES=$(cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | sort -u | wc -l) # Fallback 1... if [ -z "$CPUCORES" ] || [ "$CPUCORES" = "0" ]; then @@ -143,24 +146,26 @@ fi # A) Read system model and manufacturer dmidec() { - local LMODEL=$(dmidecode "$@" 2>/dev/null | grep -v '^#' | grep -v '^Invalid' | sed 's/\s\s*/ /g;s/^ //;s/ $//') - case "$LMODEL" in + local RETVAL=$(dmidecode "$@" 2>/dev/null | grep -v '^#' | grep -v '^Invalid' | sed 's/\s\s*/ /g;s/^ //;s/ $//') + case "$RETVAL" in ""|*"Product Name"*|*"be filled"*|"unknown"|*"product name"*) - LMODEL="Unknown" + RETVAL="Unknown" ;; esac - echo "$LMODEL" + echo "$RETVAL" } -MODEL=$(dmidec -q -s system-product-name) -MANUF=$(dmidec -q -s system-manufacturer) + +HW_MODEL=$(dmidec -q -s system-product-name) +HW_MANUF=$(dmidec -q -s system-manufacturer) # Try fallback to baseboard -if [ "$MODEL" = "Unknown" ]; then - MODEL=$(dmidec -q -s baseboard-product-name) - MANUF=$(dmidec -q -s baseboard-manufacturer) +if [ "$HW_MODEL" = "Unknown" ]; then + HW_MODEL=$(dmidec -q -s baseboard-product-name) + HW_MANUF=$(dmidec -q -s baseboard-manufacturer) fi -if [ "$MANUF" != "Unknown" ]; then - MODEL="$MODEL ($MANUF)" +MODEL="$HW_MODEL" +if [ "$HW_MANUF" != "Unknown" ]; then + MODEL="$MODEL ($HW_MANUF)" fi # n) Dump raw data to a file @@ -169,7 +174,7 @@ cat > "$DATAFILE" <<-EOF ############################### CPU ##################################### Sockets: $(grep '^physical id' /proc/cpuinfo | sort -u | wc -l) Real cores: $CPUCORES -Virtual cores: $(grep '^processor' /proc/cpuinfo | sort -u | wc -l) +Virtual cores: $VCORES ######################## Partition tables ############################### EOF cat "$FDISK" >> "$DATAFILE" @@ -198,11 +203,20 @@ HDDCOUNT=0 for size in $(cat "$FDISK" | grep -E '^Disk /dev.*[0-9]{11,} bytes' | grep -o -E '[0-9]{11,}'); do [ "$size" -gt 50000000000 ] && HDDCOUNT=$(( HDDCOUNT + 1 )) done +bashesc () { + sed s/\'/\'\"\'\"\'/g <<<$* +} +HW_MANUF=$(bashesc "$HW_MANUF") +HW_MODEL=$(bashesc "$HW_MODEL") cat > "/run/hwinfo" <> "${LOGFILE}" 2>&1 + writelog --quiet "Setting up volume..." + ( + amixer -q -c "$SOUND_CARD_INDEX" sset 'Master' "$VOL" unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'PCM' "100%" unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'CD' "100%" unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Headphone' "100%" unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Front' "100%" unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Speaker' "100%" unmute + # Recording. It seems that (most) devices need the volume set to 0, so you + # don't hear your own mic input, but should be unmuted. Also on some cards, + # you need to set the cap option on the mic you want to use, while other cards + # will just ignore that option. + # Plus, most cards have a Capture mixer, which needs to be set to cap too, and + # have its volume turned up. (There'll probably be some cards that need yet + # another setup, but this works for now on 4 tested cards) + amixer -q -c "$SOUND_CARD_INDEX" sset 'Rear Mic Boost' "50%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Rear Mic' "0%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Front Mic Boost' "50%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Front Mic' "0%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Mic Boost' "50%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Mic' "0%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Capture' "100%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Input Source' 'Mic' + amixer -q -c "$SOUND_CARD_INDEX" sset 'Input Source' 'Front Mic' # Let's hope nobody uses rear mic... + # fix random static noise when starting vmplayer when module snd_pcsp (not pcspkr) is loaded + amixer -q -c pcsp sset Master "0%" mute 2>/dev/null >&2 + ) 2>&1 | grep -v 'amixer: Unable to find' + writelog --quiet "Done setting up volume." +fi >> "${LOGFILE}" 2>&1 # Don't pipe here since it would spawn a subshell so all variable modifications would be lost + -- cgit v1.2.3-55-g7522 From 384df9e1905d442ca97f5793a39fa93be3992176 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 28 Oct 2016 14:37:12 +0200 Subject: [kernel-vanilla] 4.8.5 --- remote/modules/kernel-vanilla/module.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'remote/modules') diff --git a/remote/modules/kernel-vanilla/module.conf b/remote/modules/kernel-vanilla/module.conf index 70a2859b..ff83a9c8 100644 --- a/remote/modules/kernel-vanilla/module.conf +++ b/remote/modules/kernel-vanilla/module.conf @@ -1,5 +1,5 @@ REQUIRED_BINARIES="" REQUIRED_LIBRARIES="" REQUIRED_DIRECTORIES="" -REQUIRED_KERNEL="4.8.2" +REQUIRED_KERNEL="4.8.5" REQUIRED_GIT="git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git" -- cgit v1.2.3-55-g7522 From ae59090a83b784ec95821b82d9b0f11c8691bba7 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 28 Oct 2016 16:27:38 +0200 Subject: [beamergui] Fix discrepancy in varialbe name across usages --- .../modules/beamergui/data/opt/openslx/scripts/beamergui-mode_setter | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/beamergui/data/opt/openslx/scripts/beamergui-mode_setter b/remote/modules/beamergui/data/opt/openslx/scripts/beamergui-mode_setter index 8fe9b4b6..b747d257 100755 --- a/remote/modules/beamergui/data/opt/openslx/scripts/beamergui-mode_setter +++ b/remote/modules/beamergui/data/opt/openslx/scripts/beamergui-mode_setter @@ -68,7 +68,7 @@ if [ ${#OUTPUTNAMES[@]} -eq 2 ]; then SMALL=yes fi done - if [ -z "$BEAMER" ] && [ -n "$MAYBEAMER" ] && [ -n "$SMALLONE" ]; then + if [ -z "$BEAMER" ] && [ -n "$MAYBEAMER" ] && [ -n "$SMALL" ]; then # This is a hack on top of the other hack; we already treat outputs reporting a sufficiently large width # as beamers, as we have encountered such devices in the wild. However, we might have just a large TV connected # that is intended to be used just like a beamer to present the screen to the audience. So if we have a screen @@ -175,6 +175,6 @@ if [ ${#OUTPUTNAMES[@]} -eq 2 ]; then fi fi else - echo "\e[32mOther than two outputs.\e[0m" + echo -e "\e[32mOther than two outputs.\e[0m" fi -- cgit v1.2.3-55-g7522 From 3993c50b546d9c6c60437a4fc7bca0589ff5f158 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 31 Oct 2016 11:14:09 +0100 Subject: [vmware] Update to 12.5.1 --- remote/modules/vmware/module.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'remote/modules') diff --git a/remote/modules/vmware/module.conf b/remote/modules/vmware/module.conf index 60762614..d3a84d80 100644 --- a/remote/modules/vmware/module.conf +++ b/remote/modules/vmware/module.conf @@ -1,4 +1,4 @@ -REQUIRED_DOWNLOAD_BASE="http://softwareupdate.vmware.com/cds/vmw-desktop/ws/12.5.0/4352439/linux/core/" +REQUIRED_DOWNLOAD_BASE="http://softwareupdate.vmware.com/cds/vmw-desktop/ws/12.5.1/4542065/linux/core/" REQUIRED_TYPE="workstation" REQUIRED_MODULES="kernel" REQUIRED_DIRECTORIES=" -- cgit v1.2.3-55-g7522 From bc9bf92025c2dbe1742da1af39a9738ea7c9eb55 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 31 Oct 2016 15:56:27 +0100 Subject: [run-virt] Use xmlstarlet for xml operations --- .../vmchooser/run-virt-includes/get_xml_file_variables.inc | 4 +--- .../vmchooser/run-virt-includes/vmchooser_runvirt_functions.inc | 9 +++++++++ remote/modules/run-virt/module.conf | 1 + remote/modules/run-virt/module.conf.ubuntu | 2 ++ 4 files changed, 13 insertions(+), 3 deletions(-) (limited to 'remote/modules') diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc index d40d97bb..cf0d545b 100644 --- a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc @@ -8,9 +8,7 @@ declare -rg VMSTORE_PATH=/mnt/vmstore # Need some lean and mean xml parser some day in the far future get_xml () { - grep -Pio "<$1"'\s+param=[^"]*".*' "${xmlfile}" \ - | awk -F '"' '{ print $2 }' \ - | sed 's/&/+/g;s/"/"/g;s/<//g' + xmlextract "//settings/eintrag/${1}/@param" "${xmlfile}" } IMGUUID=$(get_xml "uuid") diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/vmchooser_runvirt_functions.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/vmchooser_runvirt_functions.inc index 7519a48d..ca475da0 100644 --- a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/vmchooser_runvirt_functions.inc +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/vmchooser_runvirt_functions.inc @@ -96,3 +96,12 @@ notempty() { return 0 } +## +# Extract given xpath from given xml file +# e.g.: xmlextract '//node/nestednode/@attribute' "$file" +# @param +# @return Plain text, UTF-8 +xmlextract() { + xmlstarlet sel -T -E utf-8 -t -v "$1" "$2" +} + diff --git a/remote/modules/run-virt/module.conf b/remote/modules/run-virt/module.conf index 73155f89..cc1b34a6 100644 --- a/remote/modules/run-virt/module.conf +++ b/remote/modules/run-virt/module.conf @@ -3,5 +3,6 @@ REQUIRED_BINARIES=" mcopy pwdaemon slxfwtool + xmlstarlet " diff --git a/remote/modules/run-virt/module.conf.ubuntu b/remote/modules/run-virt/module.conf.ubuntu index b06efa7a..b6008fa0 100644 --- a/remote/modules/run-virt/module.conf.ubuntu +++ b/remote/modules/run-virt/module.conf.ubuntu @@ -1,9 +1,11 @@ REQUIRED_INSTALLED_PACKAGES=" usbutils mtools + xmlstarlet " REQUIRED_CONTENT_PACKAGES=" usbutils mtools + xmlstarlet " -- cgit v1.2.3-55-g7522 From 43f7a7de8c3c240c4b9755da170389c4a52e40cb Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 31 Oct 2016 16:06:08 +0100 Subject: ....aaaand it's done! --- .../opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc | 1 - 1 file changed, 1 deletion(-) (limited to 'remote/modules') diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc index cf0d545b..fdacc69c 100644 --- a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc @@ -6,7 +6,6 @@ writelog "Parsing XML..." declare -rg VMSTORE_PATH=/mnt/vmstore -# Need some lean and mean xml parser some day in the far future get_xml () { xmlextract "//settings/eintrag/${1}/@param" "${xmlfile}" } -- cgit v1.2.3-55-g7522 From f5fe048ba2069514b3e395869ff7b30c3f7bb013 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 31 Oct 2016 16:44:48 +0100 Subject: [pvs2] Restart pvsmgr on exit-code != 0 --- .../modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'remote/modules') diff --git a/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr b/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr index aaaf85d2..5531518a 100755 --- a/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr +++ b/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr @@ -12,5 +12,19 @@ fi openbox & -exec /opt/openslx/bin/pvsmgr "$CONF" "$@" +timediff=5 +counter=0 + +while [ $timediff -gt 3 ]; do + start="$(date +%s)" + /opt/openslx/bin/pvsmgr "$CONF" "$@" + ret=$? + [ "$ret" == "0" ] && break + end="$(date +%s)" + timediff=$(( end - start )) + counter=$(( counter + 1 )) + [ $counter -gt 8 ] && break +done + +exit $ret -- cgit v1.2.3-55-g7522