# Maintainer : Daniel Bermond # Contributor: Rainmaker # Contributor: gary9872 # Contributor: khomutsky # Contributor: M0Rf30 pkgbase=virtualbox-bin pkgname=('virtualbox-bin' 'virtualbox-bin-guest-iso' 'virtualbox-bin-sdk') pkgver=7.0.12 _build=159484 _rev=98942 pkgrel=1 pkgdesc='Powerful x86 virtualization for enterprise as well as home use (Oracle branded non-OSE)' arch=('x86_64') url='https://www.virtualbox.org/' license=('GPL2') makedepends=('python') source=("http://download.virtualbox.org/virtualbox/${pkgver}/VirtualBox-${pkgver}-${_build}-Linux_amd64.run" "https://download.virtualbox.org/virtualbox/${pkgver}/VirtualBoxSDK-${pkgver}-${_build}.zip" "VBoxAuth-r${_rev}.h"::"https://www.virtualbox.org/svn/vbox/trunk/include/VBox/VBoxAuth.h?p=${_rev}" "VBoxAuthPAM-r${_rev}.c"::"https://www.virtualbox.org/svn/vbox/trunk/src/VBox/HostServices/auth/pam/VBoxAuthPAM.c?p=${_rev}" "VBoxAuthSimple-r${_rev}.cpp"::"https://www.virtualbox.org/svn/vbox/trunk/src/VBox/HostServices/auth/simple/VBoxAuthSimple.cpp?p=${_rev}" 'dkms.conf' 'vboxreload' '60-vboxdrv.rules' 'vboxweb.service' 'virtualbox.sysusers' 'LICENSE.sdk' '013-Makefile.patch') noextract=("VirtualBoxSDK-${pkgver}-${_build}.zip") sha256sums=('3e93d7e841e0a15384632f814f0fb3c959dbc0a10e228ce653aa158a043170ec' 'a5594cd609cb5a51dd41af6cbb643e52c5d7d628d45e218506f4497bb23b1d6e' '13a6c51c5c6429e93b99a6bef5d56ebccf7437fb9bab20ad279cbb02c1ac80e1' '82b26130150c26d46c9951da71bc3a53e0aa1684b1350c13397f4eb625bfb2ed' 'c0de86185f46cb6f8933c848c9bd1e1824b594089aa0094b44d7a0d25d9f5546' '63f1e9eabedec2170bd0589aaa2bf5025ff8f8ec1764cc4823cbe446e9ce1388' '4001b5927348fe669a541e80526d4f9ea91b883805f102f7d571edbb482a9b9d' '9c5238183019f9ebc7d92a8582cad232f471eab9d3278786225abc1a1c7bf66e' 'e6e875ef186578b53106d7f6af48e426cdaf1b4e86834f01696b8ef1c685787f' '2101ebb58233bbfadf3aa74381f22f7e7e508559d2b46387114bc2d8e308554c' '09335d7d1075df02d29cec13119538134efdf43ea73a93b0f89d0d7d4b6625a1' 'a3ec0cab869e2d64914bffbf1c11a3c571808438656af654932f96e7a69114fd') prepare() { local _extractdir="${pkgname}-${pkgver}/VirtualBox-extracted" # extract files mkdir -p "$_extractdir" sh "VirtualBox-${pkgver}-${_build}-Linux_amd64.run" --noexec --nox11 --target "${pkgname}-${pkgver}" bsdtar -xf "${pkgname}-${pkgver}/VirtualBox.tar.bz2" -C "$_extractdir" bsdtar -xf "VirtualBoxSDK-${pkgver}-${_build}.zip" -C "${pkgname}-${pkgver}" # dkms configuration install -D -m644 dkms.conf -t "${_extractdir}/src/vboxhost" sed -i "s/^\(PACKAGE_VERSION\)=.*/\1=${pkgver}/" "${_extractdir}/src/vboxhost/dkms.conf" # fix dkms build patch -d "$_extractdir" -Np1 -i "${srcdir}/013-Makefile.patch" } build() { cd "${pkgname}-${pkgver}/sdk/installer" VBOX_INSTALL_PATH='/opt/VirtualBox' python vboxapisetup.py build } package_virtualbox-bin() { depends=('device-mapper' 'dkms' 'fontconfig' 'hicolor-icon-theme' 'libgl' 'libidl2' 'libxcursor' 'libxinerama' 'libxmu' 'python' 'sdl') optdepends=('virtualbox-bin-guest-iso: for guest additions CD image' 'virtualbox-bin-sdk: for the software developer kit' 'virtualbox-ext-oracle: for Oracle extensions pack') provides=("virtualbox=${pkgver}" 'virtualbox-host-dkms' 'VIRTUALBOX-HOST-MODULES') conflicts=('virtualbox' 'virtualbox-host-dkms' 'virtualbox-host-modules-arch') replaces=('virtualbox_bin' 'virtualbox-sun') backup=('etc/vbox/vbox.cfg') options=('!strip' '!emptydirs') local _installdir='opt/VirtualBox' # install bundled files install -d -m755 "${pkgdir}/opt" cp -Pr --no-preserve='ownership' "${pkgname}-${pkgver}/VirtualBox-extracted" "${pkgdir}/${_installdir}" # mark binaries suid root, and make sure the directory is only writable by the user chmod 4755 "${pkgdir}/${_installdir}"/{VirtualBoxVM,VBox{Headless,Net{AdpCtl,DHCP,NAT},VolInfo}} chmod go-w "${pkgdir}/${_installdir}" # remove guest iso and bundled sdk files rm -r "${pkgdir}/${_installdir}"/{additions/VBoxGuestAdditions.iso,sdk} # module sources install -d -m755 "${pkgdir}/usr/src" mv "${pkgdir}/${_installdir}/src/vboxhost" "${pkgdir}/usr/src/vboxhost-${pkgver}_non_OSE" # module reloading shortcut (with a symlink with default helper) install -D -m755 vboxreload -t "${pkgdir}/usr/bin" ln -s vboxreload "${pkgdir}/usr/bin/rcvboxdrv" # udev rules ## we need to copy and not symlink VBoxCreateUSBNode.sh in /usr/lib/udev to avoid udevd ## to look /opt when /opt is not mounted. This can be done until VBoxCreateUSBNode.sh doesn't ## need more stuff from /opt install -D -m644 60-vboxdrv.rules -t "${pkgdir}/usr/lib/udev/rules.d" install -D -m755 "${pkgdir}/${_installdir}/VBoxCreateUSBNode.sh" -t "${pkgdir}/usr/lib/udev" install -D -m755 "${pkgdir}/${_installdir}/VBoxCreateUSBNode.sh" -t "${pkgdir}/usr/share/virtualbox" # configuration file install -D -m644 <(printf '%s\n' "INSTALL_DIR=/${_installdir}") "${pkgdir}/etc/vbox/vbox.cfg" # modules-load.d configuration install -D -m644 <(printf 'vboxdrv\nvboxnetadp\nvboxnetflt\n') "${pkgdir}/usr/lib/modules-load.d/${pkgname}.conf" # systemd install -D -m644 vboxweb.service -t "${pkgdir}/usr/lib/systemd/system" install -D -m644 virtualbox.sysusers "${pkgdir}/usr/lib/sysusers.d/virtualbox.conf" # symlinks local _dir local _file install -d -m755 "${pkgdir}/usr/share"/{applications,{doc,licenses}/"$pkgname",mime/packages,pixmaps} for _file in vboxwebsrv VirtualBox{,VM} VBox{Manage,SDL,VRDP,Headless,Autostart,BalloonCtrl,BugReport,DTrace} do ln -s "../../${_installdir}/VBox.sh" "${pkgdir}/usr/bin/${_file}" [ "$_file" != 'vboxwebsrv' ] && ln -s "../../${_installdir}/VBox.sh" "${pkgdir}/usr/bin/${_file,,}" done ln -s "../../../${_installdir}/VBoxSysInfo.sh" "${pkgdir}/usr/share/virtualbox/VBoxSysInfo.sh" ln -s "../../../usr/src/vboxhost-${pkgver}_non_OSE" "${pkgdir}/${_installdir}/src/vboxhost" ln -s "../../../${_installdir}/VBox.png" "${pkgdir}/usr/share/pixmaps/VBox.png" ln -s "../../../${_installdir}/virtualbox.desktop" "${pkgdir}/usr/share/applications/virtualbox.desktop" ln -s "../../../../${_installdir}/virtualbox.xml" "${pkgdir}/usr/share/mime/packages/virtualbox.xml" ln -s "../../../../${_installdir}/UserManual.pdf" "${pkgdir}/usr/share/doc/${pkgname}/UserManual.pdf" ln -s "../../../../${_installdir}/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" ## hicolor icons while read -r -d '' _file do if grep -Eq '/virtualbox\.(png|svg)$' <<< "$_file" then _dir="${_file%/*}/apps" else _dir="${_file%/*}/mimetypes" fi install -d -m755 "${pkgdir}/usr/share/icons/hicolor/${_dir}" ln -s "../../../../../../${_installdir}/icons/${_dir%/*}/${_file##*/}" \ "${pkgdir}/usr/share/icons/hicolor/${_dir}/${_file##*/}" done < <(find "${pkgdir}/${_installdir}/icons" -type f -print0 | sed -z "s|${pkgdir}/${_installdir}/icons/||") ## workaround for unsupported $ORIGIN/.. in VBoxC.so for _file in VBox{RT,XPCOM}.so do ln -s "../${_file}" "${pkgdir}/${_installdir}/components/${_file}" done } package_virtualbox-bin-guest-iso() { pkgdesc='VirtualBox guest additions ISO image for use with virtualbox-bin package' arch=('any') provides=('virtualbox-guest-iso') install -D -m644 "${pkgbase}-${pkgver}/VirtualBox-extracted/additions/VBoxGuestAdditions.iso" \ -t "${pkgdir}/opt/VirtualBox/additions" } package_virtualbox-bin-sdk() { pkgdesc='VirtualBox software developer kit for use with virtualbox-bin package' arch=('any') license=('LGPL2.1' 'GPL2' 'BSD' 'custom') depends=('python') optdepends=('java-runtime: for webservice java bindings') provides=('virtualbox-sdk') conflicts=('virtualbox-sdk') local _dir local _installdir='opt/VirtualBox' install -d -m755 "${pkgdir}/${_installdir}/sdk" while read -r -d '' _dir do cp -Pr --no-preserve='ownership' "$_dir" "${pkgdir}/${_installdir}/sdk" done < <(find "${pkgbase}-${pkgver}/sdk" -mindepth 1 -maxdepth 1 -type d ! -name 'installer' -print0) install -D -m644 "VBoxAuth-r${_rev}.h" "${pkgdir}/${_installdir}/sdk/bindings/auth/include/VBoxAuth.h" install -D -m644 "VBoxAuthPAM-r${_rev}.c" "${pkgdir}/${_installdir}/sdk/bindings/auth/VBoxAuthPAM.cpp" install -D -m644 "VBoxAuthSimple-r${_rev}.cpp" "${pkgdir}/${_installdir}/sdk/bindings/auth/VBoxAuthSimple.cpp" install -D -m644 LICENSE.sdk "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" cd "${pkgbase}-${pkgver}/sdk/installer" VBOX_INSTALL_PATH="/${_installdir}" python vboxapisetup.py install --root "$pkgdir" --skip-build --optimize='1' }