VirtualBox

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

Last change on this file since 97134 was 96841, checked in by vboxsync, 2 years ago

Linux packaging: add dependency on packages containing libvulkan.so.1.

Across different Linux distributions that we support, libvulkan.so.1 is
provided by packages of different names. Here is the list:

Oracle Linux 7: vulkan (rpm)
Oracle Linux 8 and 9, Fedora 35-36: vulkan-loader (rpm)
openSUSE 15.3: libvulkan1 (rpm)

Ubuntu 18.04 - 22.04, Debian 10-11: libvulkan1 (deb)

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Author Date Id Revision
File size: 12.9 KB
Line 
1# $Id: VirtualBox.tmpl.spec 96841 2022-09-23 09:39:14Z vboxsync $
2## @file
3# Spec file for creating VirtualBox rpm packages
4#
5
6#
7# Copyright (C) 2006-2022 Oracle and/or its affiliates.
8#
9# This file is part of VirtualBox base platform packages, as
10# available from https://www.virtualbox.org.
11#
12# This program is free software; you can redistribute it and/or
13# modify it under the terms of the GNU General Public License
14# as published by the Free Software Foundation, in version 3 of the
15# License.
16#
17# This program is distributed in the hope that it will be useful, but
18# WITHOUT ANY WARRANTY; without even the implied warranty of
19# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20# General Public License for more details.
21#
22# You should have received a copy of the GNU General Public License
23# along with this program; if not, see <https://www.gnu.org/licenses>.
24#
25# SPDX-License-Identifier: GPL-3.0-only
26#
27
28%define %SPEC% 1
29%define %OSE% 1
30%define %PYTHON% 1
31%define %QHELP% 1
32%define VBOXDOCDIR %{_defaultdocdir}/%NAME%
33%global __requires_exclude_from ^/usr/lib/virtualbox/VBoxPython.*$|^/usr/lib/python.*$|^.*\\.py$
34%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
35
36Summary: Oracle VM VirtualBox
37Name: %NAME%
38Version: %BUILDVER%_%BUILDREL%
39Release: 1
40URL: http://www.virtualbox.org/
41Source: VirtualBox.tar
42License: GPLv2
43Group: Applications/System
44Vendor: Oracle Corporation
45BuildRoot: %BUILDROOT%
46Requires: %INITSCRIPTS% %LIBASOUND% %NETTOOLS% %LIBVULKAN%
47
48%if %{?rpm_suse:1}%{!?rpm_suse:0}
49%debug_package
50%endif
51
52%MACROSPYTHON%
53%if %{?__python3:1}%{!?__python3:0}
54%define vbox_python %{__python3}
55%define vbox_python_sitelib %{python3_sitelib}
56%else
57%define vbox_python %{__python}
58%{?rpm_suse: %define vbox_python_sitelib %{py_sitedir}}
59%{!?rpm_suse: %define vbox_python_sitelib %{python_sitelib}}
60%endif
61
62# Remove source code from debuginfo package, needed for Fedora 27 and later
63# as we build the binaries before creating the RPMs.
64%if 0%{?fedora} >= 27
65%undefine _debugsource_packages
66%undefine _debuginfo_subpackages
67%endif
68%if 0%{?rhel} >= 8
69%undefine _debugsource_packages
70%undefine _debuginfo_subpackages
71%endif
72
73%description
74VirtualBox is a powerful PC virtualization solution allowing
75you to run a wide range of PC operating systems on your Linux
76system. This includes Windows, Linux, FreeBSD, DOS, OpenBSD
77and others. VirtualBox comes with a broad feature set and
78excellent performance, making it the premier virtualization
79software solution on the market.
80
81
82%prep
83%setup -q
84DESTDIR=""
85unset DESTDIR
86
87
88%build
89
90
91%install
92# Mandriva: prevent replacing 'echo' by 'gprintf'
93export DONT_GPRINTIFY=1
94rm -rf $RPM_BUILD_ROOT
95install -m 755 -d $RPM_BUILD_ROOT/sbin
96install -m 755 -d $RPM_BUILD_ROOT%{_initrddir}
97install -m 755 -d $RPM_BUILD_ROOT/lib/modules
98install -m 755 -d $RPM_BUILD_ROOT/etc/vbox
99install -m 755 -d $RPM_BUILD_ROOT/usr/bin
100install -m 755 -d $RPM_BUILD_ROOT/usr/src
101install -m 755 -d $RPM_BUILD_ROOT/usr/share/applications
102install -m 755 -d $RPM_BUILD_ROOT/usr/share/pixmaps
103install -m 755 -d $RPM_BUILD_ROOT/usr/share/icons/hicolor
104install -m 755 -d $RPM_BUILD_ROOT%{VBOXDOCDIR}
105install -m 755 -d $RPM_BUILD_ROOT/usr/lib/virtualbox
106install -m 755 -d $RPM_BUILD_ROOT/usr/share/virtualbox
107install -m 755 -d $RPM_BUILD_ROOT/usr/share/mime/packages
108%if %{?with_python:1}%{!?with_python:0}
109(export VBOX_INSTALL_PATH=/usr/lib/virtualbox && \
110 cd ./sdk/installer && \
111 %{vbox_python} ./vboxapisetup.py install --prefix %{_prefix} --root $RPM_BUILD_ROOT)
112%endif
113rm -rf sdk/installer
114mv UnattendedTemplates $RPM_BUILD_ROOT/usr/share/virtualbox
115mv nls $RPM_BUILD_ROOT/usr/share/virtualbox
116cp -a src $RPM_BUILD_ROOT/usr/share/virtualbox
117mv VBox.sh $RPM_BUILD_ROOT/usr/bin/VBox
118mv VBoxSysInfo.sh $RPM_BUILD_ROOT/usr/share/virtualbox
119cp icons/128x128/virtualbox.png $RPM_BUILD_ROOT/usr/share/pixmaps/virtualbox.png
120cd icons
121 for i in *; do
122 if [ -f $i/virtualbox.* ]; then
123 install -d $RPM_BUILD_ROOT/usr/share/icons/hicolor/$i/apps
124 mv $i/virtualbox.* $RPM_BUILD_ROOT/usr/share/icons/hicolor/$i/apps
125 fi
126 install -d $RPM_BUILD_ROOT/usr/share/icons/hicolor/$i/mimetypes
127 mv $i/* $RPM_BUILD_ROOT/usr/share/icons/hicolor/$i/mimetypes || true
128 rmdir $i
129 done
130cd -
131rmdir icons
132mv virtualbox.xml $RPM_BUILD_ROOT/usr/share/mime/packages
133%if %{?is_ose:0}%{!?is_ose:1}
134%if "%BUILDREL%" == "el7"
135# For el7 we use gcc from devtoolset-4, which is not suitable for kernel work.
136# See the PATH trickery in src/VBox/Installer/linux/rpm/rules.
137old_path="$PATH"
138PATH=${PATH#/opt/rh/devtoolset-4/root/usr/bin:}
139%endif
140for d in /lib/modules/*; do
141 if [ -L $d/build ]; then
142 rm -f /tmp/vboxdrv-Module.symvers
143 ./src/vboxhost/build_in_tmp \
144 --save-module-symvers /tmp/vboxdrv-Module.symvers \
145 --module-source `pwd`/src/vboxhost/vboxdrv \
146 KBUILD_VERBOSE= KERN_VER=$(basename $d) INSTALL_MODULE_PATH=$RPM_BUILD_ROOT -j4 \
147 %INSTMOD%
148 ./src/vboxhost/build_in_tmp \
149 --use-module-symvers /tmp/vboxdrv-Module.symvers \
150 --module-source `pwd`/src/vboxhost/vboxnetflt \
151 KBUILD_VERBOSE= KERN_VER=$(basename $d) INSTALL_MODULE_PATH=$RPM_BUILD_ROOT -j4 \
152 %INSTMOD%
153 ./src/vboxhost/build_in_tmp \
154 --use-module-symvers /tmp/vboxdrv-Module.symvers \
155 --module-source `pwd`/src/vboxhost/vboxnetadp \
156 KBUILD_VERBOSE= KERN_VER=$(basename $d) INSTALL_MODULE_PATH=$RPM_BUILD_ROOT -j4 \
157 %INSTMOD%
158 if [ -e `pwd`/src/vboxhost/vboxpci ]; then
159 ./src/vboxhost/build_in_tmp \
160 --use-module-symvers /tmp/vboxdrv-Module.symvers \
161 --module-source `pwd`/src/vboxhost/vboxpci \
162 KBUILD_VERBOSE= KERN_VER=$(basename $d) INSTALL_MODULE_PATH=$RPM_BUILD_ROOT -j4 \
163 %INSTMOD%
164 fi
165 fi
166done
167%if "%BUILDREL%" == "el7"
168# For el7 restore PATH, see above.
169PATH="$old_path"
170unset old_path
171%endif
172rm -r src
173%endif
174for i in additions/VBoxGuestAdditions.iso; do
175 mv $i $RPM_BUILD_ROOT/usr/share/virtualbox; done
176ln -s VBox $RPM_BUILD_ROOT/usr/bin/VirtualBox
177ln -s VBox $RPM_BUILD_ROOT/usr/bin/virtualbox
178ln -s VBox $RPM_BUILD_ROOT/usr/bin/VirtualBoxVM
179ln -s VBox $RPM_BUILD_ROOT/usr/bin/virtualboxvm
180ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxManage
181ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxmanage
182test -f VBoxSDL && ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxSDL
183test -f VBoxSDL && ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxsdl
184ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxVRDP
185ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxHeadless
186ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxheadless
187ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxDTrace
188ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxAudioTest
189ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxdtrace
190ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxaudiotest
191ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxBugReport
192ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxbugreport
193ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxBalloonCtrl
194ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxballoonctrl
195ln -s VBox $RPM_BUILD_ROOT/usr/bin/VBoxAutostart
196ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxautostart
197test -f vboxwebsrv && ln -s VBox $RPM_BUILD_ROOT/usr/bin/vboxwebsrv
198ln -s /usr/lib/virtualbox/vbox-img $RPM_BUILD_ROOT/usr/bin/vbox-img
199ln -s /usr/lib/virtualbox/vboximg-mount $RPM_BUILD_ROOT/usr/bin/vboximg-mount
200ln -s /usr/share/virtualbox/src/vboxhost $RPM_BUILD_ROOT/usr/src/vboxhost-%VER%
201mv virtualbox.desktop $RPM_BUILD_ROOT/usr/share/applications/virtualbox.desktop
202mv VBox.png $RPM_BUILD_ROOT/usr/share/pixmaps/VBox.png
203%{!?is_ose: mv LICENSE $RPM_BUILD_ROOT%{VBOXDOCDIR}}
204mv UserManual*.pdf $RPM_BUILD_ROOT%{VBOXDOCDIR}
205%{?with_qhelp: mv UserManual*.qch UserManual*.qhc $RPM_BUILD_ROOT%{VBOXDOCDIR}}
206install -m 755 -d $RPM_BUILD_ROOT/usr/lib/debug/usr/lib/virtualbox
207%if %{?rpm_suse:1}%{!?rpm_suse:0}
208rm *.debug
209%else
210mv *.debug $RPM_BUILD_ROOT/usr/lib/debug/usr/lib/virtualbox
211%endif
212mv * $RPM_BUILD_ROOT/usr/lib/virtualbox
213if [ -f $RPM_BUILD_ROOT/usr/lib/virtualbox/libQt5CoreVBox.so.5 ]; then
214 $RPM_BUILD_ROOT/usr/lib/virtualbox/chrpath --keepgoing --replace /usr/lib/virtualbox \
215 $RPM_BUILD_ROOT/usr/lib/virtualbox/*.so.5 \
216 $RPM_BUILD_ROOT/usr/lib/virtualbox/plugins/platforms/*.so \
217 $RPM_BUILD_ROOT/usr/lib/virtualbox/plugins/platformthemes/*.so \
218 $RPM_BUILD_ROOT/usr/lib/virtualbox/plugins/sqldrivers/*.so \
219 $RPM_BUILD_ROOT/usr/lib/virtualbox/plugins/styles/*.so \
220 $RPM_BUILD_ROOT/usr/lib/virtualbox/plugins/xcbglintegrations/*.so || true
221 echo "[Paths]" > $RPM_BUILD_ROOT/usr/lib/virtualbox/qt.conf
222 echo "Plugins = /usr/lib/virtualbox/plugins" >> $RPM_BUILD_ROOT/usr/lib/virtualbox/qt.conf
223fi
224rm -f $RPM_BUILD_ROOT/usr/lib/virtualbox/chrpath
225ln -s ../VBoxVMM.so $RPM_BUILD_ROOT/usr/lib/virtualbox/components/VBoxVMM.so
226for i in VBoxHeadless VBoxNetDHCP VBoxNetNAT VBoxNetAdpCtl; do
227 chmod 4511 $RPM_BUILD_ROOT/usr/lib/virtualbox/$i; done
228if test -e $RPM_BUILD_ROOT/usr/lib/virtualbox/VirtualBoxVM; then
229 chmod 4511 $RPM_BUILD_ROOT/usr/lib/virtualbox/VirtualBoxVM
230else
231 chmod 4511 $RPM_BUILD_ROOT/usr/lib/virtualbox/VirtualBox
232fi
233if [ -f $RPM_BUILD_ROOT/usr/lib/virtualbox/VBoxVolInfo ]; then
234 chmod 4511 $RPM_BUILD_ROOT/usr/lib/virtualbox/VBoxVolInfo
235fi
236test -f $RPM_BUILD_ROOT/usr/lib/virtualbox/VBoxSDL && \
237 chmod 4511 $RPM_BUILD_ROOT/usr/lib/virtualbox/VBoxSDL
238%if %{?with_python:1}%{!?with_python:0}
239if [ -x /usr/bin/pathfix.py ]; then
240 /usr/bin/pathfix.py -pni "%{__python3} %{py3_shbang_opts}" $RPM_BUILD_ROOT/usr/lib/virtualbox/vboxshell.py
241fi
242%endif
243
244
245%pre
246# defaults
247[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox
248
249# check for old installation
250if [ -r /etc/vbox/vbox.cfg ]; then
251 . /etc/vbox/vbox.cfg
252 if [ "x$INSTALL_DIR" != "x" -a -d "$INSTALL_DIR" ]; then
253 echo "An old installation of VirtualBox was found. To install this package the"
254 echo "old package has to be removed first. Have a look at /etc/vbox/vbox.cfg to"
255 echo "determine the installation directory of the previous installation. After"
256 echo "uninstalling the old package remove the file /etc/vbox/vbox.cfg."
257 exit 1
258 fi
259fi
260
261# check for active VMs of the installed (old) package
262# Execute the installed packages pre-uninstaller if present.
263/usr/lib/virtualbox/prerm-common.sh 2>/dev/null
264# Stop services from older versions without pre-uninstaller.
265/etc/init.d/vboxballoonctrl-service stop 2>/dev/null
266/etc/init.d/vboxautostart-service stop 2>/dev/null
267/etc/init.d/vboxweb-service stop 2>/dev/null
268VBOXSVC_PID=`pidof VBoxSVC 2>/dev/null || true`
269if [ -n "$VBOXSVC_PID" ]; then
270 # ask the daemon to terminate immediately
271 kill -USR1 $VBOXSVC_PID
272 sleep 1
273 if pidof VBoxSVC > /dev/null 2>&1; then
274 echo "A copy of VirtualBox is currently running. Please close it and try again."
275 echo "Please note that it can take up to ten seconds for VirtualBox (in particular"
276 echo "the VBoxSVC daemon) to finish running."
277 exit 1
278 fi
279fi
280
281
282%post
283LOG="/var/log/vbox-install.log"
284
285# defaults
286[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox
287
288# remove old cruft
289if [ -f /etc/init.d/vboxdrv.sh ]; then
290 echo "Found old version of /etc/init.d/vboxdrv.sh, removing."
291 rm /etc/init.d/vboxdrv.sh
292fi
293if [ -f /etc/vbox/vbox.cfg ]; then
294 echo "Found old version of /etc/vbox/vbox.cfg, removing."
295 rm /etc/vbox/vbox.cfg
296fi
297rm -f /etc/vbox/module_not_compiled
298
299# create users groups (disable with INSTALL_NO_GROUP=1 in /etc/default/virtualbox)
300if [ "$INSTALL_NO_GROUP" != "1" ]; then
301 echo
302 echo "Creating group 'vboxusers'. VM users must be member of that group!"
303 echo
304 groupadd -r -f vboxusers 2> /dev/null
305fi
306
307%if %{?rpm_mdv:1}%{!?rpm_mdv:0}
308/sbin/ldconfig
309%update_menus
310%endif
311update-mime-database /usr/share/mime &> /dev/null || :
312update-desktop-database -q > /dev/null 2>&1 || :
313touch --no-create /usr/share/icons/hicolor
314gtk-update-icon-cache -q /usr/share/icons/hicolor 2> /dev/null || :
315
316# Disable module compilation with INSTALL_NO_VBOXDRV=1 in /etc/default/virtualbox
317if test "${INSTALL_NO_VBOXDRV}" = 1; then
318 POSTINST_START=--nostart
319else
320 POSTINST_START=
321fi
322# Install and start the new service scripts.
323/usr/lib/virtualbox/prerm-common.sh || true
324/usr/lib/virtualbox/postinst-common.sh ${POSTINST_START} > /dev/null || true
325
326
327%preun
328# Called before the package is removed, or during upgrade after (not before)
329# the new version's "post" scriptlet.
330# $1==0: remove the last version of the package
331# $1>=1: upgrade
332if [ "$1" = 0 ]; then
333 /usr/lib/virtualbox/prerm-common.sh || exit 1
334 rm -f /etc/udev/rules.d/60-vboxdrv.rules
335 rm -f /etc/vbox/license_agreed
336 rm -f /etc/vbox/module_not_compiled
337fi
338
339%postun
340%if %{?rpm_mdv:1}%{!?rpm_mdv:0}
341/sbin/ldconfig
342%{clean_desktop_database}
343%clean_menus
344%endif
345update-mime-database /usr/share/mime &> /dev/null || :
346update-desktop-database -q > /dev/null 2>&1 || :
347touch --no-create /usr/share/icons/hicolor
348gtk-update-icon-cache -q /usr/share/icons/hicolor 2> /dev/null || :
349rm -rf /usr/lib/virtualbox/ExtensionPacks
350
351
352%clean
353rm -rf $RPM_BUILD_ROOT
354
355
356%files
357%defattr(-,root,root)
358%doc %{VBOXDOCDIR}/*
359%if %{?with_python:1}%{!?with_python:0}
360%{vbox_python_sitelib}/*
361%endif
362/etc/vbox
363/usr/bin/*
364/usr/src/vbox*
365/usr/lib/virtualbox
366/usr/share/applications/*
367/usr/share/icons/hicolor/*/apps/*
368/usr/share/icons/hicolor/*/mimetypes/*
369/usr/share/mime/packages/*
370/usr/share/pixmaps/*
371/usr/share/virtualbox
Note: See TracBrowser for help on using the repository browser.

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