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
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
|
--- vboxadd.sh.orig 2016-11-23 16:24:46.000000000 +0100
+++ vboxadd.sh 2016-12-27 16:06:46.413895799 +0100
@@ -154,42 +154,9 @@
dev=/dev/vboxguest
userdev=/dev/vboxuser
-config=/var/lib/VBoxGuestAdditions/config
owner=vboxadd
group=1
-test_for_gcc_and_make()
-{
- which make > /dev/null 2>&1 || printf "\nThe make utility was not found. If the following module compilation fails then\nthis could be the reason and you should try installing it.\n"
- which gcc > /dev/null 2>&1 || printf "\nThe gcc utility was not found. If the following module compilation fails then\nthis could be the reason and you should try installing it.\n"
-}
-
-test_sane_kernel_dir()
-{
- KERN_VER=`uname -r`
- KERN_DIR="/lib/modules/$KERN_VER/build"
- if [ -d "$KERN_DIR" ]; then
- KERN_REL=`make -sC $KERN_DIR --no-print-directory kernelrelease 2>/dev/null || true`
- if [ -z "$KERN_REL" -o "x$KERN_REL" = "x$KERN_VER" ]; then
- return 0
- fi
- fi
- printf "\nThe headers for the current running kernel were not found. If the following\nmodule compilation fails then this could be the reason.\n"
- if [ "$system" = "redhat" ]; then
- if echo "$KERN_VER" | grep -q "uek"; then
- printf "The missing package can be probably installed with\nyum install kernel-uek-devel-$KERN_VER\n"
- else
- printf "The missing package can be probably installed with\nyum install kernel-devel-$KERN_VER\n"
- fi
- elif [ "$system" = "suse" ]; then
- KERN_VER_SUSE=`echo "$KERN_VER" | sed 's/.*-\([^-]*\)/\1/g'`
- KERN_VER_BASE=`echo "$KERN_VER" | sed 's/\(.*\)-[^-]*/\1/g'`
- printf "The missing package can be probably installed with\nzypper install kernel-$KERN_VER_SUSE-devel-$KERN_VER_BASE\n"
- elif [ "$system" = "debian" ]; then
- printf "The missing package can be probably installed with\napt-get install linux-headers-$KERN_VER\n"
- fi
-}
-
running_vboxguest()
{
lsmod | grep -q "vboxguest[^_-]"
@@ -261,13 +228,6 @@
start()
{
begin "Starting the VirtualBox Guest Additions ";
- if test -r $config; then
- . $config
- else
- fail "Configuration file $config not found"
- fi
- test -n "$INSTALL_DIR" -a -n "$INSTALL_VER" ||
- fail "Configuration file $config not complete"
uname -r | grep -q -E '^2\.6|^3|^4' 2>/dev/null &&
ps -A -o comm | grep -q '/*udevd$' 2>/dev/null ||
no_udev=1
@@ -378,218 +338,16 @@
return 0
}
-## Update the initramfs. Debian and Ubuntu put the graphics driver in, and
-# need the touch(1) command below. Everyone else that I checked just need
-# the right module alias file from depmod(1) and only use the initramfs to
-# load the root filesystem, not the boot splash. update-initramfs works
-# for the first two and dracut for every one else I checked. We are only
-# interested in distributions recent enough to use the KMS vboxvideo driver.
-## @param $1 kernel version to update for.
-update_module_dependencies()
-{
- depmod "${1}"
- rm -f "/lib/modules/${1}/initrd/vboxvideo"
- test -d "/lib/modules/${1}/initrd" &&
- test -f "/lib/modules/${1}/misc/vboxvideo.ko" &&
- touch "/lib/modules/${1}/initrd/vboxvideo"
- test -n "${QUICKSETUP}" && return
- if type dracut >/dev/null 2>&1; then
- dracut -f "/boot/initramfs-${1}.img" "${1}"
- elif type update-initramfs >/dev/null 2>&1; then
- update-initramfs -u -k "${1}"
- fi
-}
-
-# Remove any existing VirtualBox guest kernel modules from the disk, but not
-# from the kernel as they may still be in use
-cleanup_modules()
-{
- if [ -n "$(which dkms 2>/dev/null)" ]; then
- begin "Removing existing VirtualBox DKMS kernel modules"
- $DODKMS uninstall $OLDMODULES > $LOG
- succ_msg
- fi
- begin "Removing existing VirtualBox non-DKMS kernel modules"
- for i in $OLDMODULES; do
- find /lib/modules -name $i\* | xargs rm 2>/dev/null
- done
- succ_msg
-}
-
-# Build and install the VirtualBox guest kernel modules
-setup_modules()
-{
- # don't stop the old modules here -- they might be in use
- cleanup_modules
- begin "Building the VirtualBox Guest Additions kernel modules"
-
- # Short cut out if a dkms build succeeds
- if [ -n "$(which dkms 2>/dev/null)" ] &&
- $DODKMS install vboxguest $INSTALL_VER >> $LOG 2>&1; then
- succ_msg
- return 0
- fi
-
- test_for_gcc_and_make
- test_sane_kernel_dir
-
- echo
- begin "Building the main Guest Additions module"
- if ! $BUILDINTMP \
- --save-module-symvers /tmp/vboxguest-Module.symvers \
- --module-source $MODULE_SRC/vboxguest \
- --no-print-directory install >> $LOG 2>&1; then
- show_error "Look at $LOG to find out what went wrong"
- return 1
- fi
- succ_msg
- begin "Building the shared folder support module"
- if ! $BUILDINTMP \
- --use-module-symvers /tmp/vboxguest-Module.symvers \
- --module-source $MODULE_SRC/vboxsf \
- --no-print-directory install >> $LOG 2>&1; then
- show_error "Look at $LOG to find out what went wrong"
- return 1
- fi
- succ_msg
- begin "Building the graphics driver module"
- if ! $BUILDINTMP \
- --use-module-symvers /tmp/vboxguest-Module.symvers \
- --module-source $MODULE_SRC/vboxvideo \
- --no-print-directory install >> $LOG 2>&1; then
- show_error "Look at $LOG to find out what went wrong"
- fi
- succ_msg
- update_module_dependencies "${KERN_VER}"
- return 0
-}
-
-# Do non-kernel bits needed for the kernel modules to work properly (user
-# creation, udev, mount helper...)
-extra_setup()
-{
- begin "Doing non-kernel setup of the Guest Additions"
- echo "Creating user for the Guest Additions." >> $LOG
- # This is the LSB version of useradd and should work on recent
- # distributions
- useradd -d /var/run/vboxadd -g 1 -r -s /bin/false vboxadd >/dev/null 2>&1
- # And for the others, we choose a UID ourselves
- useradd -d /var/run/vboxadd -g 1 -u 501 -o -s /bin/false vboxadd >/dev/null 2>&1
-
- # Add a group "vboxsf" for Shared Folders access
- # All users which want to access the auto-mounted Shared Folders have to
- # be added to this group.
- groupadd -r -f vboxsf >/dev/null 2>&1
-
- # Create udev description file
- if [ -d /etc/udev/rules.d ]; then
- echo "Creating udev rule for the Guest Additions kernel module." >> $LOG
- udev_call=""
- udev_app=`which udevadm 2> /dev/null`
- if [ $? -eq 0 ]; then
- udev_call="${udev_app} version 2> /dev/null"
- else
- udev_app=`which udevinfo 2> /dev/null`
- if [ $? -eq 0 ]; then
- udev_call="${udev_app} -V 2> /dev/null"
- fi
- fi
- udev_fix="="
- if [ "${udev_call}" != "" ]; then
- udev_out=`${udev_call}`
- udev_ver=`expr "$udev_out" : '[^0-9]*\([0-9]*\)'`
- if [ "$udev_ver" = "" -o "$udev_ver" -lt 55 ]; then
- udev_fix=""
- fi
- fi
- ## @todo 60-vboxadd.rules -> 60-vboxguest.rules ?
- echo "KERNEL=${udev_fix}\"vboxguest\", NAME=\"vboxguest\", OWNER=\"vboxadd\", MODE=\"0660\"" > /etc/udev/rules.d/60-vboxadd.rules
- echo "KERNEL=${udev_fix}\"vboxuser\", NAME=\"vboxuser\", OWNER=\"vboxadd\", MODE=\"0666\"" >> /etc/udev/rules.d/60-vboxadd.rules
- fi
-
- # Put mount.vboxsf in the right place
- ln -sf "$lib_path/$PACKAGE/mount.vboxsf" /sbin
- # And an rc file to re-build the kernel modules and re-set-up the X server.
- ln -sf "$lib_path/$PACKAGE/vboxadd" /sbin/rcvboxadd
- ln -sf "$lib_path/$PACKAGE/vboxadd-x11" /sbin/rcvboxadd-x11
- # SELinux security context for the mount helper.
- if test -e /etc/selinux/config; then
- # This is correct. semanage maps this to the real path, and it aborts
- # with an error, telling you what you should have typed, if you specify
- # the real path. The "chcon" is there as a back-up in case this is
- # different on old guests.
- semanage fcontext -a -t mount_exec_t "/usr/lib/$PACKAGE/mount.vboxsf"
- chcon -t mount_exec_t "$lib_path/$PACKAGE/mount.vboxsf"
- fi
- succ_msg
-}
-
# setup_script
setup()
{
- if test -r $config; then
- . $config
- else
- fail "Configuration file $config not found"
- fi
- test -n "$INSTALL_DIR" -a -n "$INSTALL_VER" ||
- fail "Configuration file $config not complete"
- export BUILD_TYPE
- export USERNAME
-
- rm -f $LOG
- MODULE_SRC="$INSTALL_DIR/src/vboxguest-$INSTALL_VER"
- BUILDINTMP="$MODULE_SRC/build_in_tmp"
- DODKMS="$MODULE_SRC/do_dkms"
- chcon -t bin_t "$BUILDINTMP" > /dev/null 2>&1
- chcon -t bin_t "$DODKMS" > /dev/null 2>&1
-
- setup_modules
- mod_succ="$?"
- extra_setup
- if [ "$mod_succ" -eq "0" ]; then
- if running_vboxguest || running_vboxadd; then
- printf "You should restart your guest to make sure the new modules are actually used\n\n"
- else
- start
- fi
- fi
+ echo "Not implemented! Please use the virtualbox-kernel-addons.SlackBuild available at SlackBuilds.org instead."
}
# cleanup_script
cleanup()
{
- if test -r $config; then
- . $config
- test -n "$INSTALL_DIR" -a -n "$INSTALL_VER" ||
- fail "Configuration file $config not complete"
- DODKMS="$INSTALL_DIR/src/vboxguest-$INSTALL_VER/do_dkms"
- elif test -x ./do_dkms; then # Executing as part of the installer...
- DODKMS=./do_dkms
- else
- fail "Configuration file $config not found"
- fi
-
- # Delete old versions of VBox modules.
- cleanup_modules
- for i in /lib/modules/*; do
- update_module_dependencies "${i#/lib/modules/}"
- done
-
- # Remove old module sources
- for i in $OLDMODULES; do
- rm -rf /usr/src/$i-*
- done
-
- # Clean-up X11-related bits
- /sbin/rcvboxadd-x11 cleanup
-
- # Remove other files
- rm /sbin/mount.vboxsf 2>/dev/null
- rm /sbin/rcvboxadd 2>/dev/null
- rm /sbin/rcvboxadd-x11 2>/dev/null
- rm /etc/udev/rules.d/60-vboxadd.rules 2>/dev/null
- rm -f /lib/modules/*/initrd/vboxvideo
+ echo "Not implemented! Please use removepkg or pkgtool to remove virtualbox-addons and/or virtualbox-kernel-addons instead."
}
dmnstatus()
|