summaryrefslogtreecommitdiffstats
path: root/remote/modules/vmware/data/opt/openslx/scripts/systemd-vmware_env
diff options
context:
space:
mode:
authorDirk2013-12-13 20:52:00 +0100
committerDirk2013-12-13 20:52:00 +0100
commitefd86cc8b5b138e4076bf1657ea888dc52e62901 (patch)
treedde241d9c0041f10584415e97c6b6f326e03cd3f /remote/modules/vmware/data/opt/openslx/scripts/systemd-vmware_env
parentMerge branch 'master' of git.openslx.org:openslx-ng/tm-scripts (diff)
downloadtm-scripts-efd86cc8b5b138e4076bf1657ea888dc52e62901.tar.gz
tm-scripts-efd86cc8b5b138e4076bf1657ea888dc52e62901.tar.xz
tm-scripts-efd86cc8b5b138e4076bf1657ea888dc52e62901.zip
Heavily reworked the networking for the various virtual machines:
There will be three types of network interfaces for virtual machines available all will be configured for every type of virtualization tool a) br0 is the direct host bridge into the local LAN (br0 already exists) vmnet0 for VMware vboxnet0 for VirtualBox kvmnet0* for Qemu/KVM b) nat1 is an internal bridge which "NATes" into the local LAN (with DHCP) vmnet1 for VMware vboxnet1 for VirtualBox kvmnet1* for Qemu/KVM c) vsw2 is an internal host bridge to connect software defined LANs to vmnet2 for VMware vboxnet2 for VirtualBox kvmnet2* for Qemu/KVM
Diffstat (limited to 'remote/modules/vmware/data/opt/openslx/scripts/systemd-vmware_env')
-rwxr-xr-xremote/modules/vmware/data/opt/openslx/scripts/systemd-vmware_env227
1 files changed, 36 insertions, 191 deletions
diff --git a/remote/modules/vmware/data/opt/openslx/scripts/systemd-vmware_env b/remote/modules/vmware/data/opt/openslx/scripts/systemd-vmware_env
index dc60e3d5..d80b28a6 100755
--- a/remote/modules/vmware/data/opt/openslx/scripts/systemd-vmware_env
+++ b/remote/modules/vmware/data/opt/openslx/scripts/systemd-vmware_env
@@ -1,5 +1,6 @@
-#!/opt/openslx/bin/ash
-# Copyright (c) 2009 - OpenSLX GmbH
+#!/bin/ash
+# -----------------------------------------------------------------------------
+# Copyright (c) 2013 - OpenSLX GmbH
#
# This program is free software distributed under the GPL version 2.
# See http://openslx.org/COPYING
@@ -9,154 +10,19 @@
#
# General information about OpenSLX can be found at http://openslx.org/
# -----------------------------------------------------------------------------
+# systemd-vmware_env
+# - This is the systemd configuration and provisioning script for the various
+# VMware modules and services
+################################################################################
VMWARE_CONF_DIR=/opt/openslx/vmchooser/vmware
VMCHOOSER_CONF_DIR=/opt/openslx/vmchooser/config
-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.."
- sleep "$wait"
-done
-
-#source config file
-. "/opt/openslx/config"
-. "${VMWARE_CONF_DIR}/vmware.conf" || slxlog "vmware-conf" "Could not source '${VMWARE_CONF_DIR}/vmware.conf' in $0" "${VMWARE_CONF_DIR}/vmware.conf"
-
-vm_dhcpd() {
-
- #from plugins/vmware/init-hooks/60-have-servconfig/vm-dhcpd.sh
-
- # read the DNS configuration and if available set WPAD configuration
- [ -z "${SLX_DNS}" ] && SLX_DNS="8.8.8.8"
- [ -n "${wpad}" ] && wpad_config="option wpad ${wpad}"
-
- # configuring dhcpd stub for virtual networks
-cat > "${VMWARE_CONF_DIR}/udhcpd.conf" << EOF
-# general udhcpd configuration file for virtual machines written by $0
-
-# start and end of the IP lease block
-start CNETWORK.20
-end CNETWORK.100
-
-# interface that udhcpd will use
-interface NWIF
-
-# how long an offered address is reserved (leased) in seconds
-offer_time 6000
-
-# location of the leases file
-lease_file LEASEFILE
-
-# location of the pid file
-pidfile PIDFILE
-
-option dns ${SLX_DNS}
-option subnet 255.255.255.0
-option router CNETWORK.1
-option wins CNETWORK.10
-option domain ${SLX_NET_DOMAIN} virtual.site
-${wpad_config}
-
-# additional options known to udhcpd
-#subnet #timezone
-#router #timesvr
-#namesvr #dns
-#logsvr #cookiesvr
-#lprsvr #bootsize
-#domain #swapsvr
-#rootpath #ipttl
-#mtu #broadcast
-#wins #lease
-#ntpsrv #tftp
-#bootfile #wpad
-EOF
-
-}
-
-setup_network() {
- #from plugins/vmware/XX_vmware.sh
-
- mkdir -p "/tmp/virt/vmware" -m 1777
- mkdir -p "/dev/shm/vmware" -m 1777
- mkdir -p "/var/run/vmware" -m 1777
- mkdir -p "/etc/vmware/udhcpd"
-
- # variable might contain ",NAT" which is to be taken off
- if [ -n "$vmnet1" ] ; then
- local vmip="${vmnet1%/*}" # x.x.x.x/yy => 'x.x.x.x'">
- local vmsub=$(echo $vmip |sed 's,\(.*\)\..*,\1,') # x.x.x.x => x.x.x
- # setting up the udhcpd configuration
- sed -e "s,NWIF,vmnet1,;s,/misc/,/vmware/," \
- -e "s,CNETWORK,$vmsub,;s,PIDFILE,/var/run/vmware/udhcpd-vmnet1.pid," \
- -e "s,LEASEFILE,/var/run/vmware/udhcpd-vmnet1.leases," \
- "${VMWARE_CONF_DIR}/udhcpd.conf" > "/etc/vmware/udhcpd/udhcpd-vmnet1.conf"
- # setting the base samba configuration if available
- if [ -f "$VMCHOOSER_CONF_DIR/smb.conf" -a -f "/usr/sbin/smbd" ] ; then
- sed -e "s#NWIF#vmnet1,vmnet8#;s,PIDDIR,/var/run/vmware," \
- "${VMCHOOSER_CONF_DIR}/smb.conf" > "/etc/vmware/smb.conf"
- fi
- fi
-
- # vmware nat interface configuration
- if [ -n "$vmnet8" ] ; then
- local vmnet8ip="${vmnet8%/*}"
- local vmpx="${vmnet8#*/}"
- local vmsub=$(echo "$vmnet8ip" | sed 's,\(.*\)\..*,\1,') # x.x.x.x => x.x.x">
- # vmip is user for vmnet8 device
- # vmnet is user for config files nat.conf/dhcp
- local vmip="${vmsub}.1"
- local vmnet="${vmsub}.2"
- # setting up the udhcpd configuration
- sed -e "s,NWIF,vmnet8,;s,/misc/,/vmware/," \
- -e "s,CNETWORK,$vmsub,;s,PIDFILE,/var/run/vmware/udhcpd-vmnet8.pid," \
- -e "s,LEASEFILE,/var/run/vmware/udhcpd-vmnet8.leases," \
- ${VMWARE_CONF_DIR}/udhcpd.conf >/etc/vmware/udhcpd/udhcpd-vmnet8.conf
- # might be not needed any more ...
- echo "# Linux NAT configuration file" \
- > /etc/vmware/nat.conf
- echo "[host]" \
- >> /etc/vmware/nat.conf
- echo "ip = $vmnet/$vmpx" \
- >> /etc/vmware/nat.conf
- echo "device = /dev/vmnet8" \
- >> /etc/vmware/nat.conf
- echo "activeFTP = 1" \
- >> /etc/vmware/nat.conf
- echo "[udp]" \
- >> /etc/vmware/nat.conf
- echo "timeout = 60" \
- >> /etc/vmware/nat.conf
- echo "[incomingtcp]" \
- >> /etc/vmware/nat.conf
- echo "[incomingudp]" \
- >> /etc/vmware/nat.conf
- echo "00:50:56:F1:30:50" > /etc/vmware/vmnet-natd-8.mac
- fi
-
- ############################################################################
- # vmware stuff second part: setting up the environment
- # make udhcpd more silent
- touch "/var/run/vmware/udhcpd-vmnet1.leases" \
- "/var/run/vmware/udhcpd-vmnet8.leases"
-
- # create the needed devices which effects all vmware options
- # they are not created automatically via module load
- for i in "/dev/vmnet0 c 119 0" "/dev/vmnet1 c 119 1" \
- "/dev/vmnet8 c 119 8" "/dev/vmmon c 10 165"; do
- mknod $i # no ""
- done
-
- chmod 0700 /dev/vmnet*
-}
-
load_modules () {
local FAILED=""
- # VMplayer common stuff
+ # module stuff
insmod /lib/modules/vmware/vmmon.ko || FAILED="$FAILED vmmon"
insmod /lib/modules/vmware/vmnet.ko || FAILED="$FAILED vmnet"
- # VMplayer 3.X specific stuff
insmod /lib/modules/vmware/vmci.ko || FAILED="$FAILED vmci"
insmod /lib/modules/vmware/vmblock.ko || FAILED="$FAILED vmblock"
insmod /lib/modules/vmware/vsock.ko || FAILED="$FAILED vsock"
@@ -168,41 +34,30 @@ unload_modules () {
}
vmnetif () {
- # let point the path directly to the directory where the binary lives
- location="/usr/bin"
- if [ -n "$vmnet0" ] ; then
- # the path might be directly point to the plugin dir
- if ! $location/vmnet-bridge -d /var/run/vmnet-bridge-0.pid -n 0; then
- slxlog "vmware-bridge" "Launching $location/vmnet-bridge failed."
- fi
+ # create the needed devices which effects all vmware options
+ # they are not created automatically via module load
+ for device in "/dev/vmnet0 c 119 0" "/dev/vmnet1 c 119 1" \
+ "/dev/vmnet2 c 119 2" "/dev/vmmon c 10 165"; do
+ mknod ${device}
+ done
+ chmod 0700 /dev/vmnet*
+
+ # setup bridge (vmnet0), nat (vmnet1) and software defined networking (vmnet2) interfaces
+ if ! /usr/bin/vmnet-netifup -d /var/run/vmnet-netifup-vmnet0.pid /dev/vmnet0 vmnet0 ; then
+ slxlog "vmware-netifup" "Launching /usr/bin/vmnet-netifup for vmnet0 failed."
fi
- if [ -n "$vmnet1" ] ; then
- if ! $location/vmnet-netifup -d /var/run/vmnet-netifup-vmnet1.pid /dev/vmnet1 vmnet1; then
- slxlog "vmware-netifup" "Launching $location/vmnet-netifup for vmnet1 failed."
- fi
- ip addr add $vmnet1 dev vmnet1
- ip link set vmnet1 up
- if [ -n "$vmnet1nat" ] ; then
- echo "1" >/proc/sys/net/ipv4/conf/vmnet1/forwarding
- echo "1" >/proc/sys/net/ipv4/conf/br0/forwarding 2>/dev/null
- fi
- /opt/openslx/usr/sbin/udhcpd -S /etc/vmware/udhcpd/udhcpd-vmnet1.conf
+ ip link set dev vmnet0 up
+ brctl addif br0 vmnet0
+ if ! /usr/bin/vmnet-netifup -d /var/run/vmnet-netifup-vmnet1.pid /dev/vmnet1 vmnet1; then
+ slxlog "vmware-netifup" "Launching /usr/bin/vmnet-netifup for vmnet1 failed."
fi
- if [ -n "$vmnet8" ] ; then
- if ! $location/vmnet-netifup -d /var/run/vmnet-netifup-vmnet8.pid /dev/vmnet8 vmnet8; then
- slxlog "vmware-netifup" "Launching $location/vmnet-netifup for vmnet8 failed."
- fi
- ip addr add $vmnet8 dev vmnet8
- ip link set vmnet8 up
- echo "1" >/proc/sys/net/ipv4/conf/vmnet8/forwarding
- echo "1" >/proc/sys/net/ipv4/conf/br0/forwarding 2>/dev/null
- iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
- # /etc/vmware/vmnet-natd-8.mac simply contains a mac like 00:50:56:F1:30:50
- if ! $location/vmnet-natd -d /var/run/vmnet-natd-8.pid -m /etc/vmware/vmnet-natd-8.mac -c /etc/vmware/nat.conf; then
- slxlog "vmware-natd" "Launching $location/vmnet-natd for vmnet8 failed."
- fi
- /opt/openslx/usr/sbin/udhcpd -S /etc/vmware/udhcpd/udhcpd-vmnet8.conf
+ ip link set dev vmnet1 up
+ brctl addif nat1 vmnet1
+ if ! /usr/bin/vmnet-netifup -d /var/run/vmnet-netifup-vmnet2.pid /dev/vmnet2 vmnet2; then
+ slxlog "vmware-netifup" "Launching /usr/bin/vmnet-netifup for vmnet2 failed."
fi
+ ip link set dev vmnet2 up
+ brctl addif vsw2 vmnet2
}
vmblock () {
@@ -211,28 +66,24 @@ vmblock () {
fi
}
+# create required standard directories
+mkdir -p "/tmp/virt/vmware" "/dev/shm/vmware" "/run/vmware" -m 1777
-
+# FixMe: Should be rewritten for proper systemd operation
case "$1" in
start)
- #start: defines start function for initscript
- vm_dhcpd
- setup_network
# hack to access the first serial/parallel port
- chmod a+rw /dev/ttyS0
- chmod a+rw /dev/parport0
- mkdir -m 1777 -p /tmp/vmware
+ [ -c /dev/ttyS0 ] && chmod a+rw /dev/ttyS0
+ [ -c /dev/parport0 ] && chmod a+rw /dev/parport0
load_modules
vmnetif
vmblock
;;
stop)
#stop: defines stop function for initscript
- killall vmnet-netifup vmnet-natd vmnet-bridge vmware vmplayer \
- vmware-tray vmnet-dhcpd
+ killall vmnet-netifup vmnet-bridge vmware vmplayer vmware-tray
# might take a while until all services are shut down
- sleep 1
- umount -l /tmp/vmware 2>/dev/null
+ sleep 0.5
unload_modules
;;
@@ -244,11 +95,5 @@ case "$1" in
#status: defines status function for initscript
vmstatus
;;
- *)
- #usage: defines usage function for initscript
- ## print out usage
- echo "Usage: $0 {start, stop, restart, status}" >&2
- exit 1
- ;;
esac