VirtualBox

source: vbox/trunk/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec@ 39323

Last change on this file since 39323 was 39223, checked in by vboxsync, 13 years ago

Installer/linux: nomenclature.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 14.3 KB
Line 
1#
2# Spec file for creating VirtualBox rpm packages
3#
4
5#
6# Copyright (C) 2006-2011 Oracle Corporation
7#
8# This file is part of VirtualBox Open Source Edition (OSE), as
9# available from http://www.virtualbox.org. This file is free software;
10# you can redistribute it and/or modify it under the terms of the GNU
11# General Public License as published by the Free Software Foundation,
12# in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
13# distribution. VirtualBox OSE is distributed in the hope that it will
14# be useful, but WITHOUT ANY WARRANTY of any kind.
15#
16
17%define %SPEC% 1
18%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
19
20Summary: Oracle VM VirtualBox
21Name: %NAME%
22Version: %BUILDVER%_%BUILDREL%
23Release: 1
24URL: http://www.virtualbox.org/
25Source: VirtualBox.tar.bz2
26License: GPLv2
27Group: Applications/System
28Vendor: Oracle Corporation
29BuildRoot: %BUILDROOT%
30Requires: %INITSCRIPTS% %LIBASOUND%
31
32%if %{?rpm_suse:1}%{!?rpm_suse:0}
33%debug_package
34%endif
35
36%MACROSPYTHON%
37
38
39%description
40VirtualBox is a powerful PC virtualization solution allowing
41you to run a wide range of PC operating systems on your Linux
42system. This includes Windows, Linux, FreeBSD, DOS, OpenBSD
43and others. VirtualBox comes with a broad feature set and
44excellent performance, making it the premier virtualization
45software solution on the market.
46
47
48%prep
49%setup -q
50DESTDIR=""
51unset DESTDIR
52
53
54%build
55
56
57%install
58# Mandriva: prevent replacing 'echo' by 'gprintf'
59export DONT_GPRINTIFY=1
60rm -rf $RPM_BUILD_ROOT
61install -m 755 -d $RPM_BUILD_ROOT/sbin
62install -m 755 -d $RPM_BUILD_ROOT%{_initrddir}
63install -m 755 -d $RPM_BUILD_ROOT/lib/modules
64install -m 755 -d $RPM_BUILD_ROOT/etc/vbox
65install -m 755 -d $RPM_BUILD_ROOT/usr/bin
66install -m 755 -d $RPM_BUILD_ROOT/usr/src
67install -m 755 -d $RPM_BUILD_ROOT/usr/share/applications
68install -m 755 -d $RPM_BUILD_ROOT/usr/share/pixmaps
69install -m 755 -d $RPM_BUILD_ROOT/usr/share/icons/hicolor
70install -m 755 -d $RPM_BUILD_ROOT%{_defaultdocdir}/virtualbox
71install -m 755 -d $RPM_BUILD_ROOT/usr/lib/virtualbox
72install -m 755 -d $RPM_BUILD_ROOT/usr/lib/virtualbox/ExtensionPacks
73install -m 755 -d $RPM_BUILD_ROOT/usr/share/virtualbox
74install -m 755 -d $RPM_BUILD_ROOT/usr/share/mime/packages
75mv VBoxEFI32.fd $RPM_BUILD_ROOT/usr/lib/virtualbox || true
76mv VBoxEFI64.fd $RPM_BUILD_ROOT/usr/lib/virtualbox || true
77mv *.gc $RPM_BUILD_ROOT/usr/lib/virtualbox
78mv *.r0 $RPM_BUILD_ROOT/usr/lib/virtualbox
79mv *.rel $RPM_BUILD_ROOT/usr/lib/virtualbox || true
80mv VBoxNetDHCP $RPM_BUILD_ROOT/usr/lib/virtualbox
81mv VBoxNetAdpCtl $RPM_BUILD_ROOT/usr/lib/virtualbox
82mv VBoxXPCOMIPCD $RPM_BUILD_ROOT/usr/lib/virtualbox
83mv components $RPM_BUILD_ROOT/usr/lib/virtualbox/components
84mv *.so $RPM_BUILD_ROOT/usr/lib/virtualbox
85mv *.so.4 $RPM_BUILD_ROOT/usr/lib/virtualbox || true
86mv VBoxTestOGL $RPM_BUILD_ROOT/usr/lib/virtualbox
87mv vboxshell.py $RPM_BUILD_ROOT/usr/lib/virtualbox
88(export VBOX_INSTALL_PATH=/usr/lib/virtualbox && \
89 cd ./sdk/installer && \
90 %{__python} ./vboxapisetup.py install --prefix %{_prefix} --root $RPM_BUILD_ROOT)
91rm -rf sdk/installer
92mv sdk $RPM_BUILD_ROOT/usr/lib/virtualbox
93mv nls $RPM_BUILD_ROOT/usr/share/virtualbox
94cp -a src $RPM_BUILD_ROOT/usr/share/virtualbox
95mv VBox.sh $RPM_BUILD_ROOT/usr/bin/VBox
96mv VBoxSysInfo.sh $RPM_BUILD_ROOT/usr/share/virtualbox
97mv VBoxCreateUSBNode.sh $RPM_BUILD_ROOT/usr/share/virtualbox
98cp icons/128x128/virtualbox.png $RPM_BUILD_ROOT/usr/share/pixmaps/virtualbox.png
99cd icons
100 for i in *; do
101 if [ -f $i/virtualbox.png ]; then
102 install -d $RPM_BUILD_ROOT/usr/share/icons/hicolor/$i/apps
103 mv $i/virtualbox.png $RPM_BUILD_ROOT/usr/share/icons/hicolor/$i/apps
104 fi
105 install -d $RPM_BUILD_ROOT/usr/share/icons/hicolor/$i/mimetypes
106 mv $i/* $RPM_BUILD_ROOT/usr/share/icons/hicolor/$i/mimetypes || true
107 rmdir $i
108 done
109cd -
110rmdir icons
111mv virtualbox.xml $RPM_BUILD_ROOT/usr/share/mime/packages
112for i in VBoxManage VBoxSVC VBoxSDL VirtualBox VBoxHeadless VBoxExtPackHelperApp VBoxBalloonCtrl vboxwebsrv webtest; do
113 mv $i $RPM_BUILD_ROOT/usr/lib/virtualbox; done
114for i in VBoxSDL VirtualBox VBoxHeadless VBoxNetDHCP VBoxNetAdpCtl; do
115 chmod 4511 $RPM_BUILD_ROOT/usr/lib/virtualbox/$i; done
116mv VBoxTunctl $RPM_BUILD_ROOT/usr/bin
117for d in /lib/modules/*; do
118 if [ -L $d/build ]; then
119 rm -f /tmp/vboxdrv-Module.symvers
120 ./src/vboxhost/vboxdrv/build_in_tmp \
121 --save-module-symvers /tmp/vboxdrv-Module.symvers \
122 KBUILD_VERBOSE= KERN_DIR=$d/build MODULE_DIR=$RPM_BUILD_ROOT/$d/misc -j4 \
123 %INSTMOD%
124 ./src/vboxhost/vboxnetflt/build_in_tmp \
125 --use-module-symvers /tmp/vboxdrv-Module.symvers \
126 KBUILD_VERBOSE= KERN_DIR=$d/build MODULE_DIR=$RPM_BUILD_ROOT/$d/misc -j4 \
127 %INSTMOD%
128 ./src/vboxhost/vboxnetadp/build_in_tmp \
129 --use-module-symvers /tmp/vboxdrv-Module.symvers \
130 KBUILD_VERBOSE= KERN_DIR=$d/build MODULE_DIR=$RPM_BUILD_ROOT/$d/misc -j4 \
131 %INSTMOD%
132 ./src/vboxhost/vboxpci/build_in_tmp \
133 --use-module-symvers /tmp/vboxdrv-Module.symvers \
134 KBUILD_VERBOSE= KERN_DIR=$d/build MODULE_DIR=$RPM_BUILD_ROOT/$d/misc -j4 \
135 %INSTMOD%
136 fi
137done
138mv kchmviewer $RPM_BUILD_ROOT/usr/lib/virtualbox
139for i in rdesktop-vrdp.tar.gz rdesktop-vrdp-keymaps additions/VBoxGuestAdditions.iso; do
140 mv $i $RPM_BUILD_ROOT/usr/share/virtualbox; done
141if [ -d accessible ]; then
142 mv accessible $RPM_BUILD_ROOT/usr/lib/virtualbox
143fi
144mv rdesktop-vrdp $RPM_BUILD_ROOT/usr/bin
145install -D -m 755 vboxdrv.init $RPM_BUILD_ROOT%{_initrddir}/vboxdrv
146%if %{?rpm_suse:1}%{!?rpm_suse:0}
147ln -sf ../etc/init.d/vboxdrv $RPM_BUILD_ROOT/sbin/rcvboxdrv
148%endif
149install -D -m 755 vboxballoonctrl-service.init $RPM_BUILD_ROOT%{_initrddir}/vboxballoonctrl-service
150install -D -m 755 vboxweb-service.init $RPM_BUILD_ROOT%{_initrddir}/vboxweb-service
151%if %{?rpm_suse:1}%{!?rpm_suse:0}
152ln -sf ../etc/init.d/vboxballoonctrl-service $RPM_BUILD_ROOT/sbin/rcvboxballoonctrl-service
153ln -sf ../etc/init.d/vboxweb-service $RPM_BUILD_ROOT/sbin/rcvboxweb-service
154%endif
155ln -s VBox $RPM_BUILD_ROOT/usr/bin/VirtualBox
156ln -s VBox $RPM_BUILD_ROOT/usr/bin/virtualbox
157ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxManage
158ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxmanage
159ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxSDL
160ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxsdl
161ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxVRDP
162ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxHeadless
163ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxheadless
164ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxBalloonCtrl
165ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxballoonctrl
166ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxwebsrv
167ln -s /usr/share/virtualbox/src/vboxhost $RPM_BUILD_ROOT/usr/src/vboxhost-%VER%
168mv virtualbox.desktop $RPM_BUILD_ROOT/usr/share/applications/virtualbox.desktop
169mv VBox.png $RPM_BUILD_ROOT/usr/share/pixmaps/VBox.png
170
171
172%pre
173# defaults
174[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox
175
176# check for active VMs of the installed (old) package
177VBOXSVC_PID=`pidof VBoxSVC 2>/dev/null || true`
178if [ -n "$VBOXSVC_PID" ]; then
179 # executed before the new package is installed!
180 if [ -f /etc/init.d/vboxballoonctrl-service ]; then
181 # try graceful termination; terminate the balloon control service first
182 /etc/init.d/vboxballoonctrl-service stop 2>/dev/null || true
183 fi
184 if [ -f /etc/init.d/vboxweb-service ]; then
185 # try graceful termination; terminate the webservice first
186 /etc/init.d/vboxweb-service stop 2>/dev/null || true
187 fi
188 # ask the daemon to terminate immediately
189 kill -USR1 $VBOXSVC_PID
190 sleep 1
191 if pidof VBoxSVC > /dev/null 2>&1; then
192 echo "A copy of VirtualBox is currently running. Please close it and try again."
193 echo "Please note that it can take up to ten seconds for VirtualBox (in particular"
194 echo "the VBoxSVC daemon) to finish running."
195 exit 1
196 fi
197fi
198
199# check for old installation
200if [ -r /etc/vbox/vbox.cfg ]; then
201 . /etc/vbox/vbox.cfg
202 if [ "x$INSTALL_DIR" != "x" -a -d "$INSTALL_DIR" ]; then
203 echo "An old installation of VirtualBox was found. To install this package the"
204 echo "old package has to be removed first. Have a look at /etc/vbox/vbox.cfg to"
205 echo "determine the installation directory of the previous installation. After"
206 echo "uninstalling the old package remove the file /etc/vbox/vbox.cfg."
207 exit 1
208 fi
209fi
210
211# XXX remove old modules from previous versions (disable with INSTALL_NO_VBOXDRV=1 in /etc/default/virtualbox)
212if [ "$INSTALL_NO_VBOXDRV" != "1" ]; then
213 find /lib/modules -name "vboxdrv\.*" 2>/dev/null|xargs rm -f 2> /dev/null || true
214 find /lib/modules -name "vboxnetflt\.*" 2>/dev/null|xargs rm -f 2> /dev/null || true
215 find /lib/modules -name "vboxnetadp\.*" 2>/dev/null|xargs rm -f 2> /dev/null || true
216 find /lib/modules -name "vboxpci\.*" 2>/dev/null|xargs rm -f 2> /dev/null || true
217fi
218
219
220%post
221#include installer-common.sh
222
223LOG="/var/log/vbox-install.log"
224
225# defaults
226[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox
227
228# remove old cruft
229if [ -f /etc/init.d/vboxdrv.sh ]; then
230 echo "Found old version of /etc/init.d/vboxdrv.sh, removing."
231 rm /etc/init.d/vboxdrv.sh
232fi
233if [ -f /etc/vbox/vbox.cfg ]; then
234 echo "Found old version of /etc/vbox/vbox.cfg, removing."
235 rm /etc/vbox/vbox.cfg
236fi
237rm -f /etc/vbox/module_not_compiled
238
239# XXX SELinux: allow text relocation entries
240%if %{?rpm_redhat:1}%{!?rpm_redhat:0}
241set_selinux_permissions /usr/lib/virtualbox /usr/share/virtualbox
242%endif
243
244# create users groups (disable with INSTALL_NO_GROUP=1 in /etc/default/virtualbox)
245if [ "$INSTALL_NO_GROUP" != "1" ]; then
246 echo
247 echo "Creating group 'vboxusers'. VM users must be member of that group!"
248 echo
249 groupadd -f vboxusers 2> /dev/null
250fi
251
252# install udev rule (disable with INSTALL_NO_UDEV=1 in /etc/default/virtualbox)
253# and /dev/vboxdrv and /dev/vboxusb/*/* device nodes
254install_device_node_setup root 0600 /usr/share/virtualbox "${usb_group}"
255%if %{?rpm_redhat:1}%{!?rpm_redhat:0}
256/sbin/chkconfig --add vboxdrv
257/sbin/chkconfig --add vboxballoonctrl-service
258/sbin/chkconfig --add vboxweb-service
259%endif
260%if %{?rpm_suse:1}%{!?rpm_suse:0}
261%{fillup_and_insserv -f -y -Y vboxdrv vboxballoonctrl-service vboxweb-service}
262%endif
263%if %{?rpm_mdv:1}%{!?rpm_mdv:0}
264/sbin/ldconfig
265%_post_service vboxdrv
266%_post_service vboxballoonctrl-service
267%_post_service vboxweb-service
268%update_menus
269%endif
270update-mime-database /usr/share/mime &> /dev/null || :
271update-desktop-database -q > /dev/null 2>&1 || :
272touch --no-create /usr/share/icons/hicolor
273gtk-update-icon-cache -q /usr/share/icons/hicolor 2> /dev/null || :
274
275# Disable module compilation with INSTALL_NO_VBOXDRV=1 in /etc/default/virtualbox
276BUILD_MODULES=0
277REGISTER_MODULES=1
278if [ ! -f /lib/modules/`uname -r`/misc/vboxdrv.ko ]; then
279 REGISTER_MODULES=0
280 if [ "$INSTALL_NO_VBOXDRV" != "1" ]; then
281 # compile problem
282 cat << EOF
283No precompiled module for this kernel found -- trying to build one. Messages
284emitted during module compilation will be logged to $LOG.
285
286EOF
287 BUILD_MODULES=1
288 fi
289fi
290# if INSTALL_NO_VBOXDRV is set to 1, remove all shipped modules
291if [ "$INSTALL_NO_VBOXDRV" = "1" ]; then
292 rm -f /lib/modules/*/misc/vboxdrv.ko
293 rm -f /lib/modules/*/misc/vboxnetflt.ko
294 rm -f /lib/modules/*/misc/vboxnetadp.ko
295 rm -f /lib/modules/*/misc/vboxpci.ko
296fi
297if [ $BUILD_MODULES -eq 1 ]; then
298 /etc/init.d/vboxdrv setup || true
299else
300 if lsmod | grep -q "vboxdrv[^_-]"; then
301 /etc/init.d/vboxdrv stop || true
302 fi
303 if [ $REGISTER_MODULES -eq 1 ]; then
304 DKMS=`which dkms 2>/dev/null`
305 if [ -n "$DKMS" ]; then
306 $DKMS remove -m vboxhost -v %VER% --all > /dev/null 2>&1 || true
307 fi
308 fi
309 /etc/init.d/vboxdrv start > /dev/null
310fi
311/etc/init.d/vboxballoonctrl-service start > /dev/null
312/etc/init.d/vboxweb-service start > /dev/null
313
314
315%preun
316# $1==0: remove the last version of the package
317# $1==1: install the first time
318# $1>=2: upgrade
319%if %{?rpm_suse:1}%{!?rpm_suse:0}
320%stop_on_removal vboxballoonctrl-service
321%stop_on_removal vboxweb-service
322%endif
323%if %{?rpm_mdv:1}%{!?rpm_mdv:0}
324%_preun_service vboxballoonctrl-service
325%_preun_service vboxweb-service
326%endif
327%if %{?rpm_redhat:1}%{!?rpm_redhat:0}
328if [ "$1" = 0 ]; then
329 /sbin/service vboxballoonctrl-service stop > /dev/null
330 /sbin/chkconfig --del vboxballoonctrl-service
331 /sbin/service vboxweb-service stop > /dev/null
332 /sbin/chkconfig --del vboxweb-service
333fi
334%endif
335
336if [ "$1" = 0 ]; then
337 # check for active VMs
338 VBOXSVC_PID=`pidof VBoxSVC 2>/dev/null || true`
339 if [ -n "$VBOXSVC_PID" ]; then
340 kill -USR1 $VBOXSVC_PID
341 sleep 1
342 if pidof VBoxSVC > /dev/null 2>&1; then
343 echo "A copy of VirtualBox is currently running. Please close it and try again."
344 echo "Please note that it can take up to ten seconds for VirtualBox (in particular"
345 echo "the VBoxSVC daemon) to finish running."
346 exit 1
347 fi
348 fi
349fi
350%if %{?rpm_suse:1}%{!?rpm_suse:0}
351%stop_on_removal vboxdrv
352%endif
353%if %{?rpm_mdv:1}%{!?rpm_mdv:0}
354%_preun_service vboxdrv
355%endif
356if [ "$1" = 0 ]; then
357%if %{?rpm_redhat:1}%{!?rpm_redhat:0}
358 /sbin/service vboxdrv stop > /dev/null
359 /sbin/chkconfig --del vboxdrv
360%endif
361 rm -f /etc/udev/rules.d/10-vboxdrv.rules
362 rm -f /etc/vbox/license_agreed
363 rm -f /etc/vbox/module_not_compiled
364fi
365DKMS=`which dkms 2>/dev/null`
366if [ -n "$DKMS" ]; then
367 $DKMS remove -m vboxhost -v %VER% --all > /dev/null 2>&1 || true
368fi
369
370
371%postun
372%if %{?rpm_redhat:1}%{!?rpm_redhat:0}
373if [ "$1" -ge 1 ]; then
374 /sbin/service vboxdrv restart > /dev/null 2>&1
375 /sbin/service vboxballoonctrl-service restart > /dev/null 2>&1
376 /sbin/service vboxweb-service restart > /dev/null 2>&1
377fi
378%endif
379%if %{?rpm_suse:1}%{!?rpm_suse:0}
380%restart_on_update vboxdrv vboxballoonctrl-service vboxweb-service
381%insserv_cleanup
382%endif
383%if %{?rpm_mdv:1}%{!?rpm_mdv:0}
384/sbin/ldconfig
385%{clean_desktop_database}
386%clean_menus
387%endif
388update-mime-database /usr/share/mime &> /dev/null || :
389update-desktop-database -q > /dev/null 2>&1 || :
390touch --no-create /usr/share/icons/hicolor
391gtk-update-icon-cache -q /usr/share/icons/hicolor 2> /dev/null || :
392rm -rf /usr/lib/virtualbox/ExtensionPacks
393
394
395%clean
396rm -rf $RPM_BUILD_ROOT
397
398
399%files
400%defattr(-,root,root)
401%doc LICENSE
402%doc UserManual*.pdf
403%doc VirtualBox*.chm
404%{_initrddir}/vboxdrv
405%{_initrddir}/vboxballoonctrl-service
406%{_initrddir}/vboxweb-service
407%{?rpm_suse: %{py_sitedir}/*}
408%{!?rpm_suse: %{python_sitelib}/*}
409%{?rpm_suse: /sbin/rcvboxdrv}
410%{?rpm_suse: /sbin/rcvboxballoonctrl-service}
411%{?rpm_suse: /sbin/rcvboxweb-service}
412/lib/modules
413/etc/vbox
414/usr/bin
415/usr/src/vbox*
416/usr/lib/virtualbox
417/usr/share/applications
418/usr/share/icons
419/usr/share/mime/packages
420/usr/share/pixmaps
421/usr/share/virtualbox
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette