VirtualBox.tmpl.spec revision 257927abbaa6d9774427049fcbea552cda362281
af062818b47340eef15700d2f0211576ba3506eevboxsync# Spec file for creating VirtualBox rpm packages
af062818b47340eef15700d2f0211576ba3506eevboxsync# Copyright (C) 2006-2011 Oracle Corporation
af062818b47340eef15700d2f0211576ba3506eevboxsync# This file is part of VirtualBox Open Source Edition (OSE), as
af062818b47340eef15700d2f0211576ba3506eevboxsync# available from http://www.virtualbox.org. This file is free software;
af062818b47340eef15700d2f0211576ba3506eevboxsync# you can redistribute it and/or modify it under the terms of the GNU
af062818b47340eef15700d2f0211576ba3506eevboxsync# General Public License as published by the Free Software Foundation,
af062818b47340eef15700d2f0211576ba3506eevboxsync# in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
af062818b47340eef15700d2f0211576ba3506eevboxsync# distribution. VirtualBox OSE is distributed in the hope that it will
af062818b47340eef15700d2f0211576ba3506eevboxsync# be useful, but WITHOUT ANY WARRANTY of any kind.
af062818b47340eef15700d2f0211576ba3506eevboxsync%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
af062818b47340eef15700d2f0211576ba3506eevboxsyncVirtualBox is a powerful PC virtualization solution allowing
af062818b47340eef15700d2f0211576ba3506eevboxsyncyou to run a wide range of PC operating systems on your Linux
af062818b47340eef15700d2f0211576ba3506eevboxsyncsystem. This includes Windows, Linux, FreeBSD, DOS, OpenBSD
af062818b47340eef15700d2f0211576ba3506eevboxsyncand others. VirtualBox comes with a broad feature set and
af062818b47340eef15700d2f0211576ba3506eevboxsyncexcellent performance, making it the premier virtualization
af062818b47340eef15700d2f0211576ba3506eevboxsync# Mandriva: prevent replacing 'echo' by 'gprintf'
af062818b47340eef15700d2f0211576ba3506eevboxsyncinstall -m 755 -d $RPM_BUILD_ROOT/usr/share/applications
af062818b47340eef15700d2f0211576ba3506eevboxsyncinstall -m 755 -d $RPM_BUILD_ROOT/usr/share/icons/hicolor
af062818b47340eef15700d2f0211576ba3506eevboxsyncinstall -m 755 -d $RPM_BUILD_ROOT%{_defaultdocdir}/virtualbox
af062818b47340eef15700d2f0211576ba3506eevboxsyncinstall -m 755 -d $RPM_BUILD_ROOT/usr/lib/virtualbox
af062818b47340eef15700d2f0211576ba3506eevboxsyncinstall -m 755 -d $RPM_BUILD_ROOT/usr/lib/virtualbox/ExtensionPacks
af062818b47340eef15700d2f0211576ba3506eevboxsyncinstall -m 755 -d $RPM_BUILD_ROOT/usr/share/virtualbox
af062818b47340eef15700d2f0211576ba3506eevboxsyncinstall -m 755 -d $RPM_BUILD_ROOT/usr/share/mime/packages
af062818b47340eef15700d2f0211576ba3506eevboxsyncmv VBoxEFI32.fd $RPM_BUILD_ROOT/usr/lib/virtualbox || true
af062818b47340eef15700d2f0211576ba3506eevboxsyncmv VBoxEFI64.fd $RPM_BUILD_ROOT/usr/lib/virtualbox || true
af062818b47340eef15700d2f0211576ba3506eevboxsyncmv components $RPM_BUILD_ROOT/usr/lib/virtualbox/components
af062818b47340eef15700d2f0211576ba3506eevboxsyncmv *.so.4 $RPM_BUILD_ROOT/usr/lib/virtualbox || true
af062818b47340eef15700d2f0211576ba3506eevboxsync %{__python} ./vboxapisetup.py install --prefix %{_prefix} --root $RPM_BUILD_ROOT)
af062818b47340eef15700d2f0211576ba3506eevboxsyncmv VBoxSysInfo.sh $RPM_BUILD_ROOT/usr/share/virtualbox
af062818b47340eef15700d2f0211576ba3506eevboxsyncmv VBoxCreateUSBNode.sh $RPM_BUILD_ROOT/usr/share/virtualbox
af062818b47340eef15700d2f0211576ba3506eevboxsync for i in *; do
af062818b47340eef15700d2f0211576ba3506eevboxsync install -d $RPM_BUILD_ROOT/usr/share/icons/hicolor/$i/apps
af062818b47340eef15700d2f0211576ba3506eevboxsync mv $i/virtualbox.png $RPM_BUILD_ROOT/usr/share/icons/hicolor/$i/apps
af062818b47340eef15700d2f0211576ba3506eevboxsync install -d $RPM_BUILD_ROOT/usr/share/icons/hicolor/$i/mimetypes
af062818b47340eef15700d2f0211576ba3506eevboxsync mv $i/* $RPM_BUILD_ROOT/usr/share/icons/hicolor/$i/mimetypes || true
af062818b47340eef15700d2f0211576ba3506eevboxsyncmv virtualbox.xml $RPM_BUILD_ROOT/usr/share/mime/packages
af062818b47340eef15700d2f0211576ba3506eevboxsyncfor i in VBoxManage VBoxSVC VBoxSDL VirtualBox VBoxHeadless VBoxExtPackHelperApp VBoxBalloonCtrl vboxwebsrv webtest; do
af062818b47340eef15700d2f0211576ba3506eevboxsyncfor i in VBoxSDL VirtualBox VBoxHeadless VBoxNetDHCP VBoxNetAdpCtl; do
af062818b47340eef15700d2f0211576ba3506eevboxsync chmod 4511 $RPM_BUILD_ROOT/usr/lib/virtualbox/$i; done
af062818b47340eef15700d2f0211576ba3506eevboxsync --save-module-symvers /tmp/vboxdrv-Module.symvers \
af062818b47340eef15700d2f0211576ba3506eevboxsync KBUILD_VERBOSE= KERN_DIR=$d/build MODULE_DIR=$RPM_BUILD_ROOT/$d/misc -j4 \
af062818b47340eef15700d2f0211576ba3506eevboxsync KBUILD_VERBOSE= KERN_DIR=$d/build MODULE_DIR=$RPM_BUILD_ROOT/$d/misc -j4 \
af062818b47340eef15700d2f0211576ba3506eevboxsync KBUILD_VERBOSE= KERN_DIR=$d/build MODULE_DIR=$RPM_BUILD_ROOT/$d/misc -j4 \
af062818b47340eef15700d2f0211576ba3506eevboxsyncfor i in rdesktop-vrdp.tar.gz rdesktop-vrdp-keymaps additions/VBoxGuestAdditions.iso; do
af062818b47340eef15700d2f0211576ba3506eevboxsyncif [ -d accessible ]; then
af062818b47340eef15700d2f0211576ba3506eevboxsyncinstall -D -m 755 vboxdrv.init $RPM_BUILD_ROOT%{_initrddir}/vboxdrv
af062818b47340eef15700d2f0211576ba3506eevboxsyncln -sf ../etc/init.d/vboxdrv $RPM_BUILD_ROOT/sbin/rcvboxdrv
af062818b47340eef15700d2f0211576ba3506eevboxsyncinstall -D -m 755 vboxballoonctrl-service.init $RPM_BUILD_ROOT%{_initrddir}/vboxballoonctrl-service
af062818b47340eef15700d2f0211576ba3506eevboxsyncinstall -D -m 755 vboxweb-service.init $RPM_BUILD_ROOT%{_initrddir}/vboxweb-service
af062818b47340eef15700d2f0211576ba3506eevboxsyncln -sf ../etc/init.d/vboxballoonctrl-service $RPM_BUILD_ROOT/sbin/rcvboxballoonctrl-service
af062818b47340eef15700d2f0211576ba3506eevboxsyncln -sf ../etc/init.d/vboxweb-service $RPM_BUILD_ROOT/sbin/rcvboxweb-service
af062818b47340eef15700d2f0211576ba3506eevboxsyncln -s /usr/share/virtualbox/src/vboxhost $RPM_BUILD_ROOT/usr/src/vboxhost-%VER%
af062818b47340eef15700d2f0211576ba3506eevboxsyncmv virtualbox.desktop $RPM_BUILD_ROOT/usr/share/applications/virtualbox.desktop
af062818b47340eef15700d2f0211576ba3506eevboxsyncmv VBox.png $RPM_BUILD_ROOT/usr/share/pixmaps/VBox.png
af062818b47340eef15700d2f0211576ba3506eevboxsync[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox
af062818b47340eef15700d2f0211576ba3506eevboxsync# check for active VMs of the installed (old) package
af062818b47340eef15700d2f0211576ba3506eevboxsyncif [ -n "$VBOXSVC_PID" ]; then
af062818b47340eef15700d2f0211576ba3506eevboxsync # executed before the new package is installed!
af062818b47340eef15700d2f0211576ba3506eevboxsync if [ -f /etc/init.d/vboxballoonctrl-service ]; then
af062818b47340eef15700d2f0211576ba3506eevboxsync # try graceful termination; terminate the balloon control service first
af062818b47340eef15700d2f0211576ba3506eevboxsync /etc/init.d/vboxballoonctrl-service stop 2>/dev/null || true
af062818b47340eef15700d2f0211576ba3506eevboxsync # try graceful termination; terminate the webservice first
af062818b47340eef15700d2f0211576ba3506eevboxsync /etc/init.d/vboxweb-service stop 2>/dev/null || true
af062818b47340eef15700d2f0211576ba3506eevboxsync # ask the daemon to terminate immediately
af062818b47340eef15700d2f0211576ba3506eevboxsync echo "A copy of VirtualBox is currently running. Please close it and try again."
af062818b47340eef15700d2f0211576ba3506eevboxsync echo "Please note that it can take up to ten seconds for VirtualBox (in particular"
af062818b47340eef15700d2f0211576ba3506eevboxsync echo "the VBoxSVC daemon) to finish running."
af062818b47340eef15700d2f0211576ba3506eevboxsync# check for old installation
af062818b47340eef15700d2f0211576ba3506eevboxsync if [ "x$INSTALL_DIR" != "x" -a -d "$INSTALL_DIR" ]; then
af062818b47340eef15700d2f0211576ba3506eevboxsync echo "An old installation of VirtualBox was found. To install this package the"
af062818b47340eef15700d2f0211576ba3506eevboxsync echo "old package has to be removed first. Have a look at /etc/vbox/vbox.cfg to"
af062818b47340eef15700d2f0211576ba3506eevboxsync echo "determine the installation directory of the previous installation. After"
af062818b47340eef15700d2f0211576ba3506eevboxsync echo "uninstalling the old package remove the file /etc/vbox/vbox.cfg."
af062818b47340eef15700d2f0211576ba3506eevboxsync# XXX remove old modules from previous versions (disable with INSTALL_NO_VBOXDRV=1 in /etc/default/virtualbox)
af062818b47340eef15700d2f0211576ba3506eevboxsync find /lib/modules -name "vboxdrv\.*" 2>/dev/null|xargs rm -f 2> /dev/null || true
af062818b47340eef15700d2f0211576ba3506eevboxsync find /lib/modules -name "vboxnetflt\.*" 2>/dev/null|xargs rm -f 2> /dev/null || true
af062818b47340eef15700d2f0211576ba3506eevboxsync find /lib/modules -name "vboxnetadp\.*" 2>/dev/null|xargs rm -f 2> /dev/null || true
af062818b47340eef15700d2f0211576ba3506eevboxsync[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox
af062818b47340eef15700d2f0211576ba3506eevboxsync# remove old cruft
af062818b47340eef15700d2f0211576ba3506eevboxsync echo "Found old version of /etc/init.d/vboxdrv.sh, removing."
af062818b47340eef15700d2f0211576ba3506eevboxsync echo "Found old version of /etc/vbox/vbox.cfg, removing."
af062818b47340eef15700d2f0211576ba3506eevboxsync# install udev rule (disable with INSTALL_NO_UDEV=1 in /etc/default/virtualbox)
af062818b47340eef15700d2f0211576ba3506eevboxsyncif [ -d /etc/udev/rules.d -a "$INSTALL_NO_UDEV" != "1" ]; then
af062818b47340eef15700d2f0211576ba3506eevboxsync if [ "$udev_ver" = "" -o "$udev_ver" -lt 55 ]; then
af062818b47340eef15700d2f0211576ba3506eevboxsync usb_createnode="/usr/share/virtualbox/VBoxCreateUSBNode.sh"
af062818b47340eef15700d2f0211576ba3506eevboxsync echo "KERNEL=${udev_fix}\"vboxdrv\", NAME=\"vboxdrv\", OWNER=\"root\", GROUP=\"root\", MODE=\"0600\"" \
af062818b47340eef15700d2f0211576ba3506eevboxsync echo "SUBSYSTEM=${udev_fix}\"usb_device\", ACTION=${udev_fix}\"add\", RUN=\"${usb_createnode} \$major \$minor \$attr{bDeviceClass}\"" \
af062818b47340eef15700d2f0211576ba3506eevboxsync echo "SUBSYSTEM=${udev_fix}\"usb\", ACTION=${udev_fix}\"add\", ENV{DEVTYPE}==\"usb_device\", RUN=\"${usb_createnode} \$major \$minor \$attr{bDeviceClass}\"" \
af062818b47340eef15700d2f0211576ba3506eevboxsync echo "SUBSYSTEM=${udev_fix}\"usb_device\", ACTION=${udev_fix}\"remove\", RUN=\"${usb_createnode} --remove \$major \$minor\"" \
af062818b47340eef15700d2f0211576ba3506eevboxsync echo "SUBSYSTEM=${udev_fix}\"usb\", ACTION=${udev_fix}\"remove\", ENV{DEVTYPE}==\"usb_device\", RUN=\"${usb_createnode} --remove \$major \$minor\"" \
af062818b47340eef15700d2f0211576ba3506eevboxsync# Remove old udev description file
af062818b47340eef15700d2f0211576ba3506eevboxsync rm -f /etc/udev/rules.d/60-vboxdrv.rules 2> /dev/null
af062818b47340eef15700d2f0211576ba3506eevboxsync# Build our device tree
af062818b47340eef15700d2f0211576ba3506eevboxsync if test -r "$i/dev"; then
af062818b47340eef15700d2f0211576ba3506eevboxsync sh ${usb_createnode} "$major" "$minor" "$class" ${usb_group} 2>/dev/null
af062818b47340eef15700d2f0211576ba3506eevboxsync# XXX SELinux: allow text relocation entries
af062818b47340eef15700d2f0211576ba3506eevboxsync chcon -t texrel_shlib_t /usr/lib/virtualbox/*VBox* > /dev/null 2>&1
af062818b47340eef15700d2f0211576ba3506eevboxsync chcon -t texrel_shlib_t /usr/lib/virtualbox/VirtualBox.so > /dev/null 2>&1
af062818b47340eef15700d2f0211576ba3506eevboxsync chcon -t texrel_shlib_t /usr/lib/virtualbox/VBoxAuth.so > /dev/null 2>&1
af062818b47340eef15700d2f0211576ba3506eevboxsync chcon -t texrel_shlib_t /usr/lib/virtualbox/components/VBox*.so > /dev/null 2>&1
af062818b47340eef15700d2f0211576ba3506eevboxsync chcon -t java_exec_t /usr/lib/virtualbox/VirtualBox > /dev/null 2>&1
af062818b47340eef15700d2f0211576ba3506eevboxsync chcon -t java_exec_t /usr/lib/virtualbox/VBoxSDL > /dev/null 2>&1
af062818b47340eef15700d2f0211576ba3506eevboxsync chcon -t java_exec_t /usr/lib/virtualbox/VBoxHeadless > /dev/null 2>&1
af062818b47340eef15700d2f0211576ba3506eevboxsync chcon -t java_exec_t /usr/lib/virtualbox/VBoxExtPackHelperApp > /dev/null 2>&1
af062818b47340eef15700d2f0211576ba3506eevboxsync chcon -t java_exec_t /usr/lib/virtualbox/VBoxBalloonCtrl > /dev/null 2>&1
af062818b47340eef15700d2f0211576ba3506eevboxsync chcon -t java_exec_t /usr/lib/virtualbox/vboxwebsrv > /dev/null 2>&1
af062818b47340eef15700d2f0211576ba3506eevboxsync# create users groups (disable with INSTALL_NO_GROUP=1 in /etc/default/virtualbox)
af062818b47340eef15700d2f0211576ba3506eevboxsync echo "Creating group 'vboxusers'. VM users must be member of that group!"
af062818b47340eef15700d2f0211576ba3506eevboxsync%{fillup_and_insserv -f -y -Y vboxdrv vboxballoonctrl-service vboxweb-service}
af062818b47340eef15700d2f0211576ba3506eevboxsyncupdate-mime-database /usr/share/mime &> /dev/null || :
af062818b47340eef15700d2f0211576ba3506eevboxsyncgtk-update-icon-cache -q /usr/share/icons/hicolor 2> /dev/null || :
af062818b47340eef15700d2f0211576ba3506eevboxsync# Disable module compilation with INSTALL_NO_VBOXDRV=1 in /etc/default/virtualbox
af062818b47340eef15700d2f0211576ba3506eevboxsyncif [ ! -f /lib/modules/`uname -r`/misc/vboxdrv.ko ]; then
af062818b47340eef15700d2f0211576ba3506eevboxsync # compile problem
af062818b47340eef15700d2f0211576ba3506eevboxsyncNo precompiled module for this kernel found -- trying to build one. Messages
af062818b47340eef15700d2f0211576ba3506eevboxsyncemitted during module compilation will be logged to $LOG.
af062818b47340eef15700d2f0211576ba3506eevboxsync# if INSTALL_NO_VBOXDRV is set to 1, remove all shipped modules
if [ -n "$DKMS" ]; then
if [ -n "$VBOXSVC_PID" ]; then
if [ -n "$DKMS" ]; then