# Compiling Time: 6.23 SBU # Maintainer: crazy # Contributor: AlexExtreme ## TODO: web* , vnc , fix module loading , guest 3d , split X/noX stuff USE_VBOX_DEBUG=${USE_VBOX_DEBUG:-"n"} ## Guest Modules ## NOTE: All 3 exists in mainline kernel, however ## all have issues and mixing them is not a good idea either, ## since they don't support the same set of features yet. ## We can try in kernel 5.9+ again but then we need take care of the ## used VirtualBox version. USE_VBOXGUEST=${USE_VBOXGUEST:-"y"} USE_VBOXVIDEO=${USE_VBOXVIDEO:-"n"} USE_VBOXSF=${USE_VBOXSF:-"y"} ## TODO ( 5.9++ ) USE_VBOX_MODS_MAINLINE=${USE_VBOX_MODS_MAINLINE:-"n"} ## NOTE: this is usually not needed unless vbox break stuff or we want to change something ## right now, vbox broke EFI boot, we have to fix some code and build the FW ourselves USE_VBOX_FIRMWARE_BUILD=${USE_VBOX_FIRMWARE_BUILD:-"n"} ## missing, and the one in /libs/ is not usable, is some custom suff _vbox_firmware_openssl="openssl-1.1.1h" pkgname=virtualbox realname=VirtualBox pkgver=6.1.22 pkgextraver="" pkgrel=19 pkgdesc="Oracle VirtualBox is a family of powerful x86 virtualization products for enterprise as well as home use." url="http://www.virtualbox.org" depends=('xerces-c>=2.8.0' 'xalan-c>=1.10.0-2' 'iasl' 'dev86' 'libxslt' 'libxcursor' 'libidl' 'sdl' 'openssl>=1.1.1' \ 'alsa-lib>=1.1.4.1' 'curl' 'libxmu' 'libuuid' 'libcap' 'qt5-base>=5.15.0' 'qt5-x11extras>=5.15.0' \ 'libvpx>=1.8.0' 'lvm2' 'mesa-libglx>=17.3.0-3' 'libxext' 'libx11' 'libpulse' 'libglu' 'libxrandr' 'libxcomposite' \ 'libxinerama' 'libvncserver' 'iproute2' 'mesa-libegl>=17.3.0-3' 'libglvnd' 'xrandr' 'libinput' 'opus') makedepends=('cdrtools' 'x11-protos' 'qt5-tools>=5.15.0' 'mesa-libgl-headers' 'nasm' 'yasm' 'gettext') rodepends=("virtualbox-modules>=$pkgver") groups=('xapps-extra') archs=('x86_64') _F_archive_grepv="BETA\|RC" #up2date="Flastverdir http://download.virtualbox.org/virtualbox/" up2date="lynx -dump https://www.virtualbox.org/wiki/Downloads | grep .tar.bz2 | sed 's/.*V.*-\(.*\).tar.bz2/\1/'" source=(http://download.virtualbox.org/virtualbox/${pkgver}/${realname}-${pkgver}${pkgextraver}.tar.bz2 \ 10-vboxdrv.rules \ LocalConfig.kmk \ 60-vboxguest.rules \ vboxservice.service \ vboxdrmclient.service \ vboxdrmclient.path \ virtualbox-guest-utils.conf \ ## note: both patches & openssl source & USE_VBOX_FIRMWARE_BUILD has to be set for that to work. https://www.openssl.org/source/${_vbox_firmware_openssl}.tar.gz \ fix-EFI-boot.patch firmware-build-fixes.patch \ #virtualbox-modules-6.1.16-linux-5.11-VBoxNetFlt-ethtool.patch \ depmod.patch) _F_kernelmod_scriptlet="$startdir/$pkgname.install" Finclude kernel-module ## WARNING: ## It seems something gets misscompiled *again* with gcc6 .. ## DO NOT REMOVE 'nostrip' , we strip mauanlly ## PDMLdr: pdmR3LoadR0U: pszName="VMMR0.r0" rc=VERR_INVALID_PARAMETER szErr="SUP_IOCTL_LDR_OPEN failed" ## SUP_IOCTL_LDR_OPEN: pReq->u.In.cbImageBits < pReq->u.In.cbImageWithTabs ## duh this genscriptlet sh*t is plain broken options=('noccache' 'scriptlet' 'nostrip' 'genscriptlet' 'nowfsecurity' 'nolto' 'nofortify') ## we strip manually in build() _F_cd_path="${realname}-${pkgver}" sha1sums=('271d5914396e78c3753f5d98a9ecd3551260c1ea' \ 'aa931ae19edd8585150738f0efd8fedf5175a6d3' \ '0bf23aad34416dd45545f2ea12171e701c4c94af' \ '08199d8e7906cb793277b798805d38ce386460d8' \ 'a9aa624222d458396d6d7e2cfa8acb03a7420961' \ '06321cf7aecca8cad7701ad9230e4c765ba35cda' \ '9de06686eadee89de812767dd1260e921ca5e761' \ '80ba54b1e13f0e8f53a84ca3f25df617fb53ae4c' \ '8d0d099e8973ec851368c8c775e05e1eadca1794' \ '1b2f77b2157b16903063026180f3176f25d94005' \ '032c281fa3446928a46dbb3e4ea9f964a9a1d1d2' \ 'ed04bf751eae0516e98c81157676d7af8ee41c14') subpkgs=("$pkgname-modules") subdescs=('Kernel modules for VirtualBox') subarchs=('x86_64') subgroups=('apps-extra') subdepends=("kernel$_F_kernelmod_name=$_F_kernelmod_pkgver") suboptions=('scriptlet') subinstall=("$pkgname-modules.install") subpkgs+=("$pkgname-guest-additions") subdescs+=('VirtualBox guest Additions') subarchs+=('x86_64') subgroups+=('xapps-extra') subdepends+=("kernel$_F_kernelmod_name=$_F_kernelmod_pkgver libxcomposite libxdamage libxrandr libxmu pam mesa-dri-drivers xf86-video-vmware") suboptions+=('scriptlet') subinstall+=("$pkgname-guest-additions.install") build() { Fcd ## FIXME: figure these Fsed '/usr/X11R6/bin/xterm' '/usr/bin/xterm' \ src/VBox/Runtime/VBox/RTAssertShouldPanic-vbox.cpp Fsed 'X11R6/' '' configure Fsed 'X11R6/' '' Config.kmk Fsed '-Werror$' '' Config.kmk Fsed 'VBOX_WITH_CLOUD_NET = 1' 'VBOX_WITH_CLOUD_NET :=' Config.kmk Fsed '.*&& check_makeself' '' configure # we don't have makeself Fsed 'smc-napa' 'smcnapa' src/VBox/Devices/PC/vbox.dsl Fsed 'opt/VirtualBox' 'usr/share/virtualbox' src/VBox/RDP/client-1.8.4/Makefile.kmk Fexec cp "$Fsrcdir/LocalConfig.kmk" . || Fdie Fsed 'DocPath=.*' '' src/VBox/Installer/common/virtualbox.desktop.in echo -e "\nVBOX_GCC_OPT=$CXXFLAGS" >> LocalConfig.kmk ## DO NOT REMOVE Fmessage "Building with the following LocalConfig:" Fexec cat LocalConfig.kmk if Fuse $USE_VBOX_DEBUG; then VBoxBuildType="debug" VBox_Opts="-d" else VBoxBuildType="release" fi VboxSrcDir=${_F_cd_path}/out/linux.amd64/${VBoxBuildType}/bin Fpatchall # Configure and load our options Fexec ./configure \ --disable-docs \ --disable-kmods \ --enable-vde \ --enable-vnc \ --enable-pulse ${VBox_Opts} || Fdie Fexec source ./env.sh || Fdie ## NOTE: this needs to run before main kmk, *DD.so & *DD2.so uses the EFI* stuff we just build here if Fuse $USE_VBOX_FIRMWARE_BUILD; then ## Building firmware ## Wipe prebuild *fd file Frm src/VBox/Devices/EFI/FirmwareBin/* Fexec cd src/VBox/Devices/EFI/Firmware || Fdie . edksetup.sh || Fdie ## OpenSSL source is missing, we get it from upstream Fexec cp -R $Fsrcdir/${_vbox_firmware_openssl}/* CryptoPkg/Library/OpensslLib/openssl/ || Fdie ## run the weird perl script Fexec cd CryptoPkg/Library/OpensslLib/ || Fdie Fexec perl process_files.pl || Fdie Fexec cd ../../.. || Fdie Fexec kmk || Fdie Fexec cd $Fsrcdir/${_F_cd_path} || Fdie fi ## we want to build verbose - DO NOT DISABLE THIS Fexec kmk KBUILD_VERBOSE=2 all || Fdie Fexec kmk KBUILD_VERBOSE=2 -C src/VBox/ExtPacks/VNC packing local i k j s m Fmkdir usr/share/icons/hicolor/{16x16,20x20,32x32,40x40,48x48,64x64,128x128,scalable}/apps for k in 16 20 32 40 48 64 128; do Finstall 0644 ${_F_cd_path}/src/VBox/Artwork/OSE/virtualbox-${k}px.png usr/share/icons/hicolor/${k}x${k}/apps/virtualbox.png done Finstall 0644 ${_F_cd_path}/src/VBox/Artwork/OSE/virtualbox.svg usr/share/icons/hicolor/scalable/apps/virtualbox.svg Fexec cd ${Fsrcdir}/${VboxSrcDir} || Fdie ## FIXME: lot stuff missing #Binaries and Wrapper with Launchers Fexerel VBox.sh "usr/bin/VBox" for i in VBoxHeadless vboxheadless VBoxManage vboxmanage VBoxSDL vboxsdl VirtualBox virtualbox VBoxBalloonCtrl vboxballoonctrl; do Fln VBox "usr/bin/$i" done Fexerel VBoxTunctl "usr/bin/VBoxTunctl" Fexerel rdesktop-vrdp "usr/bin/rdesktop-vrdp" Fexerel vboximg-mount "usr/bin/vboximg-mount" Fexerel vbox-img "usr/bin/vbox-img" # workaround broken symlink Fexec rm -rf components/VBoxREM.so || Fdie Fexerel components/* "usr/lib/virtualbox/components" Fexerel *.so "usr/lib/virtualbox" Finstallrel 644 *.r0 "usr/lib/virtualbox/" ## vmmraw stuff Finstallrel 644 VBoxEFI*.fd "usr/lib/virtualbox/" Finstallrel 4755 VBoxVolInfo VBoxNetNAT VirtualBoxVM VBoxNetDHCP VBoxNetAdpCtl VBoxSDL VBoxHeadless "usr/lib/virtualbox" Fexerel VBoxManage VirtualBox VBoxSVC VBoxExtPackHelperApp VBoxXPCOMIPCD VBoxTestOGL VBoxBalloonCtrl "usr/lib/virtualbox" Fexerel nls/*.qm "usr/share/virtualbox/nls" Fmkdir usr/share/virtualbox Finstallrel 644 rdesktop-vrdp-keymaps/* "usr/share/virtualbox/rdesktop-vrdp-keymaps" #useless scripts Fexerel VBoxCreateUSBNode.sh VBoxSysInfo.sh "usr/share/virtualbox" ## icons pushd icons for j in ./*; do Finstallrel 644 $j/* "usr/share/icons/hicolor/$j/mimetypes" done popd ## this fixes -> warning: errors occurred while upgrading virtualbox ## the folder is empty and the owner is hicolor-icon-theme Frm usr/share/icons/hicolor/scalable/mimetypes Finstallrel 0644 virtualbox.desktop "usr/share/applications/virtualbox.desktop" Finstallrel 0644 virtualbox.xml "usr/share/mime/packages/virtualbox.xml" #install configuration Fmkdir etc/vbox echo 'INSTALL_DIR=/usr/lib/virtualbox' > "$Fdestdir/etc/vbox/vbox.cfg" #udev and licence Finstall 0644 "VirtualBox-${pkgver}/COPYING" "usr/share/licenses/virtualbox/LICENSE" Finstall 0644 "10-vboxdrv.rules" "lib/udev/rules.d/10-vboxdrv.rules" Fmkdir etc/ld.so.conf.d echo /usr/lib/virtualbox >> "$Fdestdir/etc/ld.so.conf.d/virtualbox.conf" || Fdie if ! Fuse $USE_VBOX_DEBUG; then Fmessage "Stripping symbols from $pkgname.." for s in `find $Fdestdir/usr/lib/virtualbox -type f -not -name "*.rc" -not -name "*.r0" -not -name "*.fd" -not -name "*.xpt"`; do strip -s $s done fi # host kernel modules Fexec cd $Fsrcdir/${_F_cd_path}/out/linux.amd64/release/bin/src || Fdie Fmkdir ${_F_kernelmod_dir}/kernel/misc Fexec make V=1 KERN_DIR=${_F_kernelmod_dir}/build MODULE_DIR_TST=${Fdestdir}${_F_kernelmod_dir} INSTALL_MOD_DIR=kernel/misc KERN_VER=${_F_kernelmod_uname} || Fdie Fexec make V=1 KERN_DIR=${_F_kernelmod_dir}/build MODULE_DIR_TST=${Fdestdir}${_F_kernelmod_dir} INSTALL_MOD_DIR=kernel/misc KERN_VER=${_F_kernelmod_uname} INSTALL_MOD_PATH=${Fdestdir} install || Fdie Fsed "@_F_kernelmod_uname@" "$_F_kernelmod_uname" $startdir/virtualbox-modules.install Fkernelver_compress_modules Fsplit virtualbox-modules ${_F_kernelmod_dir}/kernel/misc # guest additions Fexec cd $Fsrcdir/${_F_cd_path}/out/linux.amd64/release/bin/additions || Fdie Fexec ls -1 Fexerel usr/bin/VBoxClient Fexerel usr/bin/VBoxControl Fexerel usr/bin/VBoxService Fexerel usr/bin/VBoxDRMClient Fexerel sbin/mount.vboxsf Fexe ${_F_cd_path}/src/VBox/Additions/x11/Installer/98vboxadd-xclient usr/bin/VBoxClient-all ## segfaults for everyone just not for us, however let's use a service now # I wonder if that has something to do with our stripping?! Fsed '/usr/bin/VBoxClient --vmsvga' '#/usr/bin/VBoxClient --vmsvga' $Fdestdir/usr/bin/VBoxClient-all Fsplit virtualbox-guest-additions usr/bin/{VBoxClient,VBoxControl,VBoxService,VBoxDRMClient,VBoxClient-all} Fsplit virtualbox-guest-additions sbin/mount.vboxsf Fexe ${_F_cd_path}/src/VBox/Additions/x11/Installer/vboxclient.desktop etc/xdg/autostart/vboxclient.desktop Fsplit virtualbox-guest-additions etc/xdg Finstallrel 755 lib/security/pam_vbox.so # TODO remove after systemd is gone Finstall 644 lib/udev/rules.d/60-vboxguest.rules Finstall 644 lib/systemd/system/vboxservice.service Finstall 644 lib/systemd/system/vboxdrmclient.service Finstall 644 lib/systemd/system/vboxdrmclient.path Finstall 644 usr/lib/sysusers.d/virtualbox-guest-utils.conf Fsplit virtualbox-guest-additions usr/lib/sysusers.d/ # guest kernel modules KMOD_NAMES="" if Fuse $USE_VBOXGUEST; then KMOD_NAMES+=" vboxguest " fi if Fuse $USE_VBOXVIDEO; then KMOD_NAMES+=" vboxvideo " fi if Fuse $USE_VBOXSF; then KMOD_NAMES+=" vboxsf " fi ## at least one needs be enabled if [[ -n $KMOD_NAMES ]]; then Fexec cd $Fsrcdir/${_F_cd_path}/out/linux.amd64/release/bin/additions/src || Fdie Fmkdir ${_F_kernelmod_dir}/kernel/misc for mod in ${KMOD_NAMES[@]} do Fexec make V=1 KERN_DIR=${_F_kernelmod_dir}/build MODULE_DIR_TST=${Fdestdir}${_F_kernelmod_dir} INSTALL_MOD_DIR=kernel/misc KERN_VER=${_F_kernelmod_uname} $mod || Fdie Fexec make V=1 KERN_DIR=${_F_kernelmod_dir}/build MODULE_DIR_TST=${Fdestdir}${_F_kernelmod_dir} INSTALL_MOD_DIR=kernel/misc KERN_VER=${_F_kernelmod_uname} INSTALL_MOD_PATH=${Fdestdir} install-$mod || Fdie done Fsed "@_F_kernelmod_uname@" "$_F_kernelmod_uname" $startdir/virtualbox-guest-additions.install Fkernelver_compress_modules Fsplit virtualbox-guest-additions lib/modules/ fi Fln /lib/systemd/system/vboxservice.service /lib/systemd/system/multi-user.target.wants/vboxservice.service Fln /lib/systemd/system/vboxdrmclient.service /lib/systemd/system/multi-user.target.wants/vboxdrmclient.service Fln /lib/systemd/system/vboxdrmclient.path /lib/systemd/system/multi-user.target.wants/vboxdrmclient.path Fsplit virtualbox-guest-additions lib/security/ Fsplit virtualbox-guest-additions lib/systemd/ Fsplit virtualbox-guest-additions lib/udev/rules.d/60-vboxguest.rules ## REALLY ? this is the only package does NOT need it.. ## but no way to do that different atm Fbuild_kernelmod_scriptlet Fmkdir /usr/share/virtualbox/extensions Fexec cd $Fsrcdir/${_F_cd_path}/out/linux.amd64/release/packages || Fdie Finstallrel 644 "VNC-${pkgver}r*.vbox-extpack" "usr/share/virtualbox/extensions/VNC-${pkgver}.vbox-extpack" } # optimization OK