1 # Copyright 1999-2020 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
6 PYTHON_COMPAT=( python2_7 )
8 inherit xdg-utils gnome2 pax-utils python-r1 udev unpacker eapi7-ver
10 MAIN_PV="$(ver_cut 1-3)"
11 if [[ ${PV} = *_beta* ]] || [[ ${PV} = *_rc* ]] ; then
12 MY_PV="${MAIN_PV}_$(ver_cut 5-6)"
13 MY_PV="${MY_PV/beta/BETA}"
14 MY_PV="${MY_PV/rc/RC}"
17 KEYWORDS="~amd64" #~x86
19 VBOX_BUILD_ID="$(ver_cut 4)"
20 VBOX_PV="${MY_PV}-${VBOX_BUILD_ID}"
21 MY_P="VirtualBox-${VBOX_PV}-Linux"
22 # needed as sometimes the extpack gets another build ID
24 EXTP_PN="Oracle_VM_VirtualBox_Extension_Pack"
25 EXTP_P="${EXTP_PN}-${EXTP_PV}"
26 # needed as sometimes the SDK gets another build ID
28 SDK_P="VirtualBoxSDK-${SDK_PV}"
30 DESCRIPTION="Family of powerful x86 virtualization products for enterprise and home use"
31 HOMEPAGE="https://www.virtualbox.org/"
32 SRC_URI="amd64? ( https://download.virtualbox.org/virtualbox/${MY_PV}/${MY_P}_amd64.run )
33 https://download.virtualbox.org/virtualbox/${MY_PV}/${EXTP_P}.vbox-extpack -> ${EXTP_P}.tar.gz"
34 #x86? ( https://download.virtualbox.org/virtualbox/${MY_PV}/${MY_P}_x86.run )
38 IUSE="+additions +chm headless python vboxwebsrv rdesktop-vrdp"
39 RESTRICT="bindist mirror"
41 if [[ "${PV}" != *beta* ]] ; then
43 sdk? ( https://download.virtualbox.org/virtualbox/${MY_PV}/${SDK_P}.zip )"
47 DEPEND="app-arch/unzip
50 RDEPEND="!!app-emulation/virtualbox
51 !app-emulation/virtualbox-additions
52 ~app-emulation/virtualbox-modules-${MY_PV,,}
67 chm? ( dev-libs/expat )
80 REQUIRED_USE="${PYTHON_REQUIRED_USE}"
83 QA_PREBUILT="opt/VirtualBox/*"
85 PYTHON_UPDATER_IGNORE="1"
88 unpack_makeself ${MY_P}_${ARCH}.run
89 unpack ./VirtualBox.tar.bz2
91 mkdir "${S}"/${EXTP_PN} || die
92 pushd "${S}"/${EXTP_PN} &>/dev/null || die
93 unpack ${EXTP_P}.tar.gz
94 popd &>/dev/null || die
96 if [[ "${PV}" != *beta* ]] && use sdk ; then
97 unpack VirtualBoxSDK-${SDK_PV}.zip
110 # create virtualbox configurations files
112 newins "${FILESDIR}/${PN}-config" vbox.cfg
114 if ! use headless ; then
115 newmenu "${FILESDIR}"/${PN}.desktop-2 ${PN}.desktop
117 # set up symlinks (bug #572012)
118 dosym ../../../../opt/VirtualBox/virtualbox.xml /usr/share/mime/packages/virtualbox.xml
120 local size ico icofile
121 for size in 16 24 32 48 64 72 96 128 256 ; do
122 pushd "${S}"/icons/${size}x${size} &>/dev/null || die
123 if [[ -f "virtualbox.png" ]] ; then
124 doicon -s ${size} virtualbox.png
126 for ico in hdd ova ovf vbox{,-extpack} vdi vdh vmdk ; do
127 icofile="virtualbox-${ico}.png"
128 if [[ -f "${icofile}" ]] ; then
129 doicon -s ${size} ${icofile}
132 popd &>/dev/null || die
134 doicon -s scalable "${S}"/icons/scalable/virtualbox.svg
135 insinto /usr/share/pixmaps
136 newins "${S}"/icons/48x48/virtualbox.png ${PN}.png
139 pushd "${S}"/${EXTP_PN} &>/dev/null || die
140 insinto /opt/VirtualBox/ExtensionPacks/${EXTP_PN}
141 doins -r linux.${ARCH}
142 doins ExtPack* PXE-Intel.rom
143 popd &>/dev/null || die
144 rm -rf "${S}"/${EXTP_PN}
146 insinto /opt/VirtualBox
151 if [[ "${PV}" != *beta* ]] && use sdk ; then
155 if use additions; then
159 if use vboxwebsrv; then
161 fowners root:vboxusers /opt/VirtualBox/vboxwebsrv
162 fperms 0750 /opt/VirtualBox/vboxwebsrv
163 dosym ../../opt/VirtualBox/VBox.sh /opt/bin/vboxwebsrv
164 newinitd "${FILESDIR}"/vboxwebsrv-initd vboxwebsrv
165 newconfd "${FILESDIR}"/vboxwebsrv-confd vboxwebsrv
168 if use rdesktop-vrdp; then
170 doins -r rdesktop-vrdp-keymaps
171 fperms 0750 /opt/VirtualBox/rdesktop-vrdp
172 dosym ../../opt/VirtualBox/rdesktop-vrdp /opt/bin/rdesktop-vrdp
175 if ! use headless && use chm; then
176 doins kchmviewer VirtualBox.chm
177 fowners root:vboxusers /opt/VirtualBox/kchmviewer
178 fperms 0750 /opt/VirtualBox/kchmviewer
181 # This ebuild / package supports only py2.7. When py3 comes is unknown.
182 # The compile phase makes VBoxPython2_7.so.
183 # py3 support would presumably require a binary pre-compiled by py3.
184 use python && doins VBoxPython.so
186 rm -rf src rdesktop* deffiles install* routines.sh runlevel.sh \
187 vboxdrv.sh VBox.sh VBox.png vboxnet.sh additions VirtualBox.desktop \
188 VirtualBox.tar.bz2 LICENSE VBoxSysInfo.sh rdesktop* vboxwebsrv \
189 webtest kchmviewer VirtualBox.chm vbox-create-usb-node.sh \
190 90-vbox-usb.fdi uninstall.sh vboxshell.py vboxdrv-pardus.py \
193 if use headless ; then
194 rm -rf VBoxSDL VirtualBox{,VM} VBoxKeyboard.so
199 # create symlinks for working around unsupported $ORIGIN/.. in VBoxC.so (setuid)
200 dosym ../VBoxVMM.so /opt/VirtualBox/components/VBoxVMM.so
201 dosym ../VBoxREM.so /opt/VirtualBox/components/VBoxREM.so
202 dosym ../VBoxRT.so /opt/VirtualBox/components/VBoxRT.so
203 dosym ../VBoxDDU.so /opt/VirtualBox/components/VBoxDDU.so
204 dosym ../VBoxXPCOM.so /opt/VirtualBox/components/VBoxXPCOM.so
207 for each in VBox{Manage,SVC,XPCOMIPCD,Tunctl,TestOGL,ExtPackHelperApp} $(usex headless '' VirtualBox) ; do
208 fowners root:vboxusers /opt/VirtualBox/${each}
209 fperms 0750 /opt/VirtualBox/${each}
210 pax-mark -m "${ED%/}"/opt/VirtualBox/${each}
212 # VBoxNetAdpCtl and VBoxNetDHCP binaries need to be suid root in any case..
213 for each in VBoxNet{AdpCtl,DHCP,NAT} $(usex headless '' VirtualBoxVM) ; do
214 fowners root:vboxusers /opt/VirtualBox/${each}
215 fperms 4750 /opt/VirtualBox/${each}
216 pax-mark -m "${ED%/}"/opt/VirtualBox/${each}
219 if ! use headless ; then
220 # Hardened build: Mark selected binaries set-user-ID-on-execution
221 for each in VBox{SDL,Headless} ; do
222 fowners root:vboxusers /opt/VirtualBox/${each}
223 fperms 4510 /opt/VirtualBox/${each}
224 pax-mark -m "${ED%/}"/opt/VirtualBox/${each}
227 dosym ../VirtualBox/VBox.sh /opt/bin/VirtualBox
228 dosym ../VirtualBox/VBox.sh /opt/bin/VBoxSDL
230 # Hardened build: Mark selected binaries set-user-ID-on-execution
231 fowners root:vboxusers /opt/VirtualBox/VBoxHeadless
232 fperms 4510 /opt/VirtualBox/VBoxHeadless
233 pax-mark -m "${ED%/}"/opt/VirtualBox/VBoxHeadless
236 exeinto /opt/VirtualBox
237 newexe "${FILESDIR}/${PN}-3-wrapper" "VBox.sh"
238 fowners root:vboxusers /opt/VirtualBox/VBox.sh
239 fperms 0750 /opt/VirtualBox/VBox.sh
241 dosym ../VirtualBox/VBox.sh /opt/bin/VBoxManage
242 dosym ../VirtualBox/VBox.sh /opt/bin/VBoxVRDP
243 dosym ../VirtualBox/VBox.sh /opt/bin/VBoxHeadless
244 dosym ../VirtualBox/VBoxTunctl /opt/bin/VBoxTunctl
246 # set an env-variable for 3rd party tools
247 echo -n "VBOX_APP_HOME=/opt/VirtualBox" > "${T}/90virtualbox"
248 doenvd "${T}/90virtualbox"
250 local udevdir="$(get_udevdir)"
251 insinto ${udevdir}/rules.d
252 doins "${FILESDIR}"/10-virtualbox.rules
253 sed "s@%UDEVDIR%@${udevdir}@" \
254 -i "${ED%/}"${udevdir}/rules.d/10-virtualbox.rules || die
255 # move udev scripts into ${udevdir} (bug #372491)
256 mv "${ED%/}"/opt/VirtualBox/VBoxCreateUSBNode.sh "${ED%/}"${udevdir} || die
257 fperms 0750 ${udevdir}/VBoxCreateUSBNode.sh
261 xdg_icon_cache_update
262 xdg_desktop_database_update
263 xdg_mimeinfo_database_update
265 udevadm control --reload-rules && udevadm trigger --subsystem-match=usb
268 if ! use headless ; then
269 elog "To launch VirtualBox just type: \"VirtualBox\""
272 elog "You must be in the vboxusers group to use VirtualBox."
274 elog "For advanced networking setups you should emerge:"
275 elog "net-misc/bridge-utils and sys-apps/usermode-utilities"
277 elog "Please visit http://www.virtualbox.org/wiki/Editions for"
278 elog "an overview about the different features of ${PN}"
279 elog "and virtualbox-ose"
280 if [ -e "${ROOT}/etc/udev/rules.d/10-virtualbox.rules" ] ; then
282 elog "Please remove \"${ROOT}/etc/udev/rules.d/10-virtualbox.rules\""
283 elog "or else USB in ${PN} won't work."
288 xdg_icon_cache_update
289 xdg_desktop_database_update
290 xdg_mimeinfo_database_update