1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
|
#!/bin/ash
#
# Copyright (c) 2007, 2008 - RZ Uni Freiburg
# Copyright (c) 2008 - OpenSLX GmbH
#
# This program/file 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 feedback to feedback@openslx.org
#
# General information about OpenSLX can be found at http://openslx.org
#
# TODO: nvram,functions
# check if we really need locations and config if we create our own
# vmware start script ...
# to be decided where: Stage1 or here in Stage3 -->
# write /etc/vmware/locations, /etc/vmware/config, /etc/init.d/vmware
# check if the configuration file is available
if [ -e /initramfs/plugin-conf/vmware.conf ]; then
# load needed variables
. /initramfs/plugin-conf/vmware.conf
# Test if this plugin is activated...
# TODO: err... I think we could save this test due of a changed
# plugin system
if [ $vmware_active -ne 0 ]; then
[ $DEBUGLEVEL -gt 0 ] && echo "executing the 'vmware' os-plugin ...";
# Load general configuration
. /initramfs/machine-setup
# we need to load the function file for:
# uri_token, testmkd
. /etc/functions
# D_INITDIR is defined in the following file:
. /etc/sysconfig/config
# prepare all needed vmware configuration files
testmkd /mnt/etc/vmware
# write the /etc/vmware/slxvmconfig file
# check for the several variables and write the several files
echo -e "# configuration file for vmware background services written in \
stage3 setup" > /mnt/etc/vmware/slxvmconfig
if [ "bridge" = 1 ] ; then
echo "vmnet0=true" >> /mnt/etc/vmware/slxvmconfig
fi
# write the common dhcpd.conf header
if [ -n "vmnet1" -o -n "vmnet8" ] ; then
local dnslist=
echo "# /etc/vmware/dhcpd.conf written in stage3 ...\nallow \
unknown-clients;\ndefault-lease-time 1800;\nmax-lease-time 7200;\n\
option domain-name-servers $dnslist;\noption domain-name \"vm.local\";" \
> /mnt/etc/vmware/dhcpd.conf
fi
if [ -n "vmnet1" ] ; then
local vmnt=${vmnet1%,*}
vmnet1=${vmnet%,*}
local vmip=${vmnet1%/*}
local vmpx=${vmnet1#*/}
echo "vmnet1=$vmip/$vmpx" >> /mnt/etc/vmware/slxvmconfig
[ -n "$vmnt" ] && echo "vmnet1nat=true" >> /mnt/etc/vmware/slxvmconfig
echo "subnet $(ipcalc -n $vmip/$vmpx|sed s/.*=//) netmask \
$(ipcalc -n $vmip/$vmpx|sed s/.*=//) {\n\trange $rstart $rend;\n\
\toption broadcast $(ipcalc -b $vmip/$vmpx|sed s/.*=//);\n\
\toption routers $vmip;\n}" > /mnt/etc/vmware/dhcpd.conf
fi
if [ -n "vmnet8" ] ; then
local vmip=${vmnet8%/*}
local vmpx=${vmnet8#*/}
echo "vmnet8=$vmip/$vmpx" >> /mnt/etc/vmware/slxvmconfig
echo "\nsubnet $(ipcalc -n $vmip/$vmpx|sed s/.*=//) netmask \
$(ipcalc -n $vmip/$vmpx|sed s/.*=//) {\n\trange $rstart $rend;\n\
\toption broadcast $(ipcalc -b $vmip/$vmpx|sed s/.*=//);\n\
\toption routers $vmip;\n}" > /mnt/etc/vmware/dhcpd.conf
# generate the NAT configuration file
echo "# Linux NAT configuration file\n[host]\nip = $vmip/$vmpx\n\
device = /dev/vmnet8\nactiveFTP = 1\n[udp]\ntimeout = 60\n[incomingtcp]\n\
[incomingudp]" > /mnt/etc/vmware/nat.conf
echo "00:50:56:F1:30:50" > /mnt/etc/vmware/vmnet-natd-8.mac
fi
echo " * vmware part 1"
#############################################################################
# vmware stuff first part: two scenarios
# * VM images in /usr/share/vmware - then simply link
# * VM images via additional mount (mount source NFS, NBD, ...)
# map slxgrp to pool, so it's better to understand
pool=${slxgrp}
# if we dont have slxgrp defined
[ -z "${pool}" ] && pool="default"
# get source of vmware image server (get type, server and path)
if strinstr "/" "${vmware_imagesrc}" ; then
vmimgprot=$(uri_token ${vmware_imagesrc} prot)
vmimgserv=$(uri_token ${vmware_imagesrc} server)
vmimgpath="$(uri_token ${vmware_imagesrc} path)"
fi
if [ -n "${vmimgserv}" ] ; then
testmkd /mnt/var/lib/vmware
case "${vmimgprot}" in
*nbd)
;;
lbdev)
# we expect the stuff on toplevel directory, filesystem type should be
# autodetected here ... (vmimgserv is blockdev here)
vmbdev=/dev/${vmimgserv}
waitfor ${vmbdev} 20000
echo -e "ext2\nreiserfs\nvfat\nxfs" >/etc/filesystems
mount -o ro ${vmbdev} /mnt/var/lib/vmware || error "$scfg_evmlm" nonfatal
;;
*)
# we expect nfs mounts here ...
for proto in tcp udp fail; do
[ $proto = "fail" ] && { error "$scfg_nfs" nonfatal;
noimg=yes; break;}
mount -n -t nfs -o ro,nolock,$proto ${vmimgserv}:${vmimgpath} \
/mnt/var/lib/vmware && break
done
;;
esac
fi
echo " * vmware part 2"
#############################################################################
# vmware stuff second part: setting up the environment
# create needed directories and files
for i in /etc/vmware/vmnet1/dhcpd /etc/vmware/vmnet8/nat \
/etc/vmware/vmnet8/dhcpd /var/run/vmware /etc/vmware/loopimg \
/etc/vmware/fd-loop /var/X11R6/bin /etc/X11/sessions; do
testmkd /mnt/$i
done
# create needed devices (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
done
# create the vmware startup configuration file /etc/vmware/locations
# fixme --> ToDo
# echo -e "answer VNET_8_NAT yes\nanswer VNET_8_HOSTONLY_HOSTADDR \n\
#192.168.100.1\nanswer VNET_8_HOSTONLY_NETMASK 255.255.255.0\n\
#file /etc/vmware/vmnet8/dhcpd/dhcpd.conf\n\
# remove_file /etc/vmware/not_configured" >/mnt/etc/vmware/locations
chmod 0700 /dev/vmnet*
chmod 1777 /mnt/etc/vmware/fd-loop
# loop file for exchanging information between linux and vmware guest
if modprobe ${MODPRV} loop; then
mdev -s
else
: #|| error "" nonfatal
fi
# mount a clean tempfs (bug in UnionFS prevents loopmount to work)
strinfile "unionfs" /proc/mounts && \
mount -n -o size=1500k -t tmpfs vm-loopimg /mnt/etc/vmware/loopimg
# create an empty floppy image of 1.4MByte size
dd if=/dev/zero of=/mnt/etc/vmware/loopimg/fd.img \
count=2880 bs=512 2>/dev/null
chmod 0777 /mnt/etc/vmware/loopimg/fd.img
# use dos formatter from rootfs (later stage4)
LD_LIBRARY_PATH=/mnt/lib /mnt/sbin/mkfs.msdos \
/mnt/etc/vmware/loopimg/fd.img >/dev/null 2>&1 #|| error
mount -n -t msdos -o loop,umask=000 /mnt/etc/vmware/loopimg/fd.img \
/mnt/etc/vmware/fd-loop
echo -e "usbfs\t\t/proc/bus/usb\tusbfs\t\tauto\t\t 0 0" >> /mnt/etc/fstab
# needed for VMware 5.5.3 and versions below
echo -e "\tmount -t usbfs usbfs /proc/bus/usb 2>/dev/null" \
>>/mnt/etc/${D_INITDIR}/boot.slx
# link /etc/init.d/vmware, so it starts uppon boot
if [ -f /mnt/etc/${D_INITDIR}/vmware ] ; then
rllinker "vmware" 20 2
else
error "df_errvmw" nonfatal
fi
chmod 1777 /mnt/var/run/vmware
# define a variable where gdm/kdm should look for additional sessions
# do we really need it? looks like we can delete it...
# export vmsessions=/var/lib/vmware/vmsessions
# we configured vmware, so we can delete the not_configured file
rm /mnt/etc/vmware/not_configured 2>/dev/null
# copy dhcpd.conf and nat for vmnet8 (nat)
# fixme: It should be possible to start just one vmware dhcp which should
# listen to both interfaces vmnet1 and vmnet8 ...
cp /mnt/opt/openslx/plugin-repo/vmware/dhcpd.conf \
/mnt/etc/vmware/vmnet8/dhcpd 2>/dev/null
cp /mnt/opt/openslx/plugin-repo/vmware/nat.conf \
/mnt/etc/vmware/vmnet8/nat 2>/dev/null
# TODO: perhaps we can a) kick out vmdir
# b) configure vmdir by plugin configuration
# TODO: How to start it. See Wiki. Currently a) implemnted
# a) we get get information and start the programm with
# /var/X11R6/bin/run-vmware.sh "$imagename" "$name_for_vmwindow" "$ostype_of_vm" "$kind_of_network"
# b) we write a wrapper and get the xml-file as attribute
cp /mnt/opt/openslx/plugin-repo/vmware/runvmware-v2 \
/mnt/var/X11R6/bin/run-vmware.sh
[ $DEBUGLEVEL -gt 0 ] && echo "done with 'vmware' os-plugin ...";
fi
fi
|