Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package virtualbox for openSUSE:Factory checked in at 2025-10-23 18:31:37 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/virtualbox (Old) and /work/SRC/openSUSE:Factory/.virtualbox.new.1980 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "virtualbox" Thu Oct 23 18:31:37 2025 rev:298 rq:1313066 version:7.2.4 Changes: -------- --- /work/SRC/openSUSE:Factory/virtualbox/virtualbox.changes 2025-09-12 21:09:39.931569882 +0200 +++ /work/SRC/openSUSE:Factory/.virtualbox.new.1980/virtualbox.changes 2025-10-23 18:31:50.496078918 +0200 @@ -1,0 +2,24 @@ +Wed Oct 22 10:52:35 UTC 2025 - Jan Engelhardt <[email protected]> + +- Update to release 7.2.4 + * GUI: Fixed VBox Manager crash when some VM has a lot of + snapshots. + * GUI: Fixed VBox Manager crash while attempting to show error + notifications too early. + * GUI: Fixed VBox Manager freeze on Linux hosts at startup or + while attempting to add a VM. + * Network: Added a new experimental type of e1000 adapter. + (82583V). It requires the ICH9 chipset, since MSIs are not + supported by PIIX3. + * USB Webcam: The virtual USB webcam is now part of the open + source base package. + * GUI: Fixed VirtualBox VM Manager crash when host was resuming + from sleep. + * Support for Linux 6.18 + +------------------------------------------------------------------- +Tue Sep 30 09:31:18 UTC 2025 - Jan Engelhardt <[email protected]> + +- Drop logic for building and installing on pre-Leap 15. + +------------------------------------------------------------------- Old: ---- VirtualBox-7.2.0-patched.tpxz fix_usb_rules.sh update-extpack.sh vboxautostart-service.sh vboxconfig.sh vboxdrv.sh vboxguestconfig.sh vboxweb-service.sh virtualbox-patch-source.sh virtualbox-wrapper.sh New: ---- VirtualBox-7.2.4-patched.tpxz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ virtualbox.spec ++++++ --- /var/tmp/diff_new_pack.bt2zBk/_old 2025-10-23 18:31:52.596168703 +0200 +++ /var/tmp/diff_new_pack.bt2zBk/_new 2025-10-23 18:31:52.600168875 +0200 @@ -15,7 +15,6 @@ # Please submit bugfixes or comments via https://bugs.opensuse.org/ # - %if "@BUILD_FLAVOR@" == "kmp" # macros for virtualbox-kmp %define main_package 0 @@ -56,21 +55,21 @@ # If you want to disable building Python parts, just set this to %%nil %if 0%{?suse_version} == 1600 -# Leap 16.0 has python3.13, currently not supported -%global mypython %nil + # Leap 16.0 has python3.13, currently not supported + %global mypython %nil %else -# Using python3.11 for Factory, current version doesn't support python3.13 -%global mypython python311 + # Using python3.11 for Factory, current version doesn't support python3.13 + %global mypython python311 %endif %if "%mypython" != "" -%global __mypython %{expand:%%__%{mypython}} -%global mypython_sitelib %{expand:%%%{mypython}_sitelib} + %global __mypython %{expand:%%__%{mypython}} + %global mypython_sitelib %{expand:%%%{mypython}_sitelib} %endif Name: virtualbox%{?dash}%{?name_suffix} -Version: 7.2.0 -%define rversion 7.2.0 +Version: 7.2.4 +%define rversion 7.2.4 Release: 0 Summary: %{package_summary} License: GPL-3.0-or-later @@ -165,7 +164,7 @@ %if 0%{?sle_version} != 120300 Source2: VirtualBox.appdata.xml %endif -### Requirements for virtualbox main package ### + %if %{main_package} BuildRequires: dmidecode BuildRequires: e2fsprogs-devel @@ -190,7 +189,7 @@ BuildRequires: update-desktop-files BuildRequires: which BuildRequires: xorg-x11-server -BuildRequires: pkgconfig(Qt6Core) +BuildRequires: pkgconfig(Qt6Core) >= 6.8 BuildRequires: pkgconfig(Qt6DBus) BuildRequires: pkgconfig(Qt6Gui) BuildRequires: pkgconfig(Qt6Help) @@ -245,19 +244,12 @@ Conflicts: %{name}-websrv < %{version} Conflicts: %{name}-websrv > %{version} Recommends: %{name}-gui = %{version} -# package i4l-vbox from source package i4l-base shares the directory /etc/vbox -# with us, but with different owner. -Conflicts: i4l-vbox #rename from ose version: Provides: %{name}-ose = %{version} Obsoletes: %{name}-ose < %{version} %{?systemd_ordering} %{?sysusers_requires} -%if 0%{?suse_version} > 1325 BuildRequires: libboost_headers-devel -%else -BuildRequires: boost-devel -%endif %ifarch amd64 x86_64 ia32e em64t %if 0%{?suse_version} && 0%{?suse_version} >= 1600 BuildRequires: gcc-32bit @@ -271,12 +263,8 @@ BuildRequires: xorg-x11-libXmu-devel-32bit BuildRequires: xorg-x11-libXt-devel-32bit %endif -%if ! 0%{?suse_version} > 1325 -Requires(pre): net-tools-deprecated -%endif -# end of main_package %endif -### Requirements for virtualbox-kmp ### + %if %{kmp_package} BuildRequires: alsa-devel BuildRequires: libiptc-devel @@ -285,9 +273,8 @@ Requires: ca-certificates Requires: openSUSE-signkey-cert %kernel_module_package -p %{SOURCE7} -n virtualbox -x kdump um xen pae xenpae pv -# end of kmp_package %endif -### Description and subpackages of virtualbox main package ### + %if %{main_package} %description VirtualBox is a hosted hypervisor for x86 computers. It supports the @@ -338,9 +325,6 @@ Obsoletes: %{name}-ose-guest-tools < %{version} Obsoletes: virtualbox-guest-x11 < %{version} Obsoletes: xorg-x11-driver-virtualbox-ose < %{version} -%if ! 0%{?suse_version} > 1325 -Requires(pre): net-tools-deprecated -%endif %{?sysusers_requires} %description guest-tools @@ -567,19 +551,17 @@ install -m 755 src/VBox/Additions/x11/Installer/98vboxadd-xclient %{buildroot}%{_sysconfdir}/X11/xinit/xinitrc.d/ install -d %{buildroot}%{_sysconfdir}/xdg/autostart/ install -m 644 %{SOURCE25} %{buildroot}%{_sysconfdir}/xdg/autostart/vboxclient.desktop -%if 0%{?suse_version} > 1320 || 0%{?sle_version} == 120300 install -d -m 755 %{buildroot}/media -%endif echo "entering VNC extension install section" -pushd out/linux.*/release/packages/ +cd out/linux.*/release/packages/ mkdir -p "%{buildroot}%{_datadir}/virtualbox/extensions/" install -D -m 644 VNC-*.vbox-extpack "%{buildroot}%{_datadir}/virtualbox/extensions/VNC-%{rversion}.vbox-extpack" -popd +cd - echo "entering virtualbox(-qt) install section" # copy the main files to %%{_vbox_instdir} -pushd out/linux.*/release/bin +cd out/linux.*/release/bin cp -a VBoxManage VBoxHeadless VBoxSDL VBoxNetNAT VBoxAutostart VBoxVolInfo \ VBoxBalloonCtrl webtest VBoxDTrace VBoxDbg.so \ VBoxDxVk.so UICommon.so vboximg-mount %{buildroot}%{_vbox_instdir} @@ -619,7 +601,7 @@ tar -jcf %{buildroot}%{_usrsrc}/kernel-modules/additions/guest_src.tar.bz2 additions/src cp -a src %{buildroot}%{_usrsrc}/kernel-modules/virtualbox install -m 644 %{SOURCE11} %{buildroot}%{_udevrulesdir}/60-vboxdrv.rules -popd +cd - # install desktop file install -m 644 out/linux.*/release/bin/virtualbox.desktop %{buildroot}%{_datadir}/applications/%{name}.desktop @@ -674,9 +656,9 @@ %if "%mypython" != "" echo "entering python-virtualbox install section" -pushd out/linux.*/release/bin/sdk/installer/python +cd out/linux.*/release/bin/sdk/installer/python VBOX_INSTALL_PATH=%{_vbox_instdir} %{__mypython} vboxapisetup.py install --prefix=%{_prefix} --root=%{buildroot} -popd +cd - install -d -m 755 %{buildroot}%{_vbox_instdir}/sdk/bindings/xpcom cp -r out/linux.*/release/bin/sdk/bindings/xpcom/python %{buildroot}%{_vbox_instdir}/sdk/bindings/xpcom %py3_compile %{buildroot}%{_vbox_instdir}/sdk/bindings/xpcom/python @@ -685,29 +667,29 @@ echo "entering virtualbox-devel install section" cp -r out/linux.*/release/bin/sdk/bindings/auth %{buildroot}%{_vbox_instdir}/sdk/bindings -pushd out/linux.*/release/bin/sdk/bindings/xpcom +cd out/linux.*/release/bin/sdk/bindings/xpcom cp -r include %{buildroot}%{_vbox_instdir}/sdk/bindings/xpcom cp -r idl %{buildroot}%{_vbox_instdir}/sdk/bindings/xpcom cp -r samples %{buildroot}%{_vbox_instdir}/sdk/bindings/xpcom -popd +cd - cp out/linux.*/release/bin/sdk/bindings/VirtualBox.xidl %{buildroot}%{_vbox_instdir}/sdk/bindings echo "entering virtualbox-websrv install section" -pushd out/linux.*/release/bin +cd out/linux.*/release/bin install -m 755 vboxwebsrv %{buildroot}%{_vbox_instdir} install -m 755 webtest %{buildroot}%{_vbox_instdir} -popd +cd - ln -sf %{_unitdir}/vboxweb-service.service %{buildroot}%{_unitdir}/multi-user.target.wants/vboxweb-service.service echo "entering virtualbox-guest-desktop-icons install section" install -d -m 755 %{buildroot}%{_datadir}/pixmaps/virtualbox -pushd src/VBox/Frontends/VirtualBox/images +cd src/VBox/Frontends/VirtualBox/images for icon in os_*.png; do install -m 644 "$icon" %{buildroot}%{_datadir}/pixmaps/virtualbox/"$icon"; done -popd +cd - install -Dm0644 vbox.conf %{buildroot}%{_sysusersdir}/vbox.conf install -Dm0644 vbox-guest-tools.conf %{buildroot}%{_sysusersdir}/vbox-guest-tools.conf @@ -725,7 +707,6 @@ %service_add_pre vboxweb-service.service %post -/sbin/ldconfig #setup our sysconfig file /etc/sysconfig/vbox %set_permissions %{_vbox_instdir}/VBoxNetNAT %set_permissions %{_vbox_instdir}/VBoxNetDHCP @@ -789,7 +770,6 @@ %service_del_preun vboxweb-service.service %postun -/sbin/ldconfig # immediately restarting virtualbox may not work. As such wait for the next reboot to restart %if ! %{defined service_del_postun_without_restart} export DISABLE_RESTART_ON_UPDATE=yes @@ -938,9 +918,7 @@ %dir %{_sysconfdir}/xdg %dir %{_sysconfdir}/xdg/autostart %{_sysconfdir}/xdg/autostart/vboxclient.desktop -%if 0%{?suse_version} > 1320 || 0%{?sle_version} == 120300 %dir /media -%endif %if "%mypython" != "" %files -n %{mypython}-%{name} ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.bt2zBk/_old 2025-10-23 18:31:52.716173834 +0200 +++ /var/tmp/diff_new_pack.bt2zBk/_new 2025-10-23 18:31:52.720174005 +0200 @@ -1,5 +1,5 @@ -mtime: 1757603031 -commit: b5ad9bc3c60d0e462bd32c8d61108f213de32192e2adc10cd1b1c859dc0e4323 +mtime: 1761144152 +commit: 1c99f0ba17c8791a10198dbfb03912ae42f5ee31fa2ac3b4f8fc9541af4e9043 url: https://src.opensuse.org/jengelh/virtualbox revision: master ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fix_usb_rules.sh new/fix_usb_rules.sh --- old/fix_usb_rules.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/fix_usb_rules.sh 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1,7 @@ +#!/bin/bash +# script to disable USB passthru in /etc/udev/rules.d/60-vboxdrv.rules +# if already disabled, clear the comment character +sed -i 's/#SUBSYSTEM==\"usb/SUBSYSTEM==\"usb/' /usr/lib/udev/rules.d/60-vboxdrv.rules +# now comment the usb lines +sed -i 's/SUBSYSTEM==\"usb/#SUBSYSTEM==\"usb/' /usr/lib/udev/rules.d/60-vboxdrv.rules + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/update-extpack.sh new/update-extpack.sh --- old/update-extpack.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/update-extpack.sh 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1,64 @@ +#!/bin/bash + +# Script to update extpack +# The idea for this method and the original code came from Larry Len Rainey. +# +# This implementation by Larry Finger + +# Define some symbols and determine the current version of VB + +VBOXMANAGE=/usr/bin/VBoxManage +AWK=/usr/bin/awk +GREP=/usr/bin/grep +WGET=/usr/bin/wget +VBOX_VERSION=`$VBOXMANAGE --version | $AWK -F_ {'print $1'}` + +# Define a symbol for the name of the extpack matching the VB version +VBOX_EXT=`echo Oracle_VM_VirtualBox_Extension_Pack-${VBOX_VERSION}.vbox-extpack` + +# Full path to extpack license file +LICENSE_PATH="/usr/lib/virtualbox/ExtensionPacks/Oracle_VM_VirtualBox_Extension_Pack/ExtPack-license.rtf" + +# Determine the installed version of extpack, if any. +EXTPACK_CURRENT=`$VBOXMANAGE list extpacks | $GREP -A1 "Oracle VM VirtualBox Extension Pack" | $GREP Version | $AWK -F\ {'print $2'}` + +# The extpacks are licensed under a Personal Use and Evaluation License +# At some point, the user must agree to the conditions of that license. +# If no extpack is installed on this system, then there is no agreement, +# thus this script cannot install the extpack. +# +# This situation applies to new installations that could conform to the license, +# but more importantly, it handles commercial setups that have not purchased +# the necessary license. +# Check if extpack is currently installed. If not exit +if [ -z $EXTPACK_CURRENT ]; then + exit 0 +fi +# +# An extpack has been installed on this system. Now we need to check if +# it was issued under the current version of the license. + +#Note to maintainers: The "version 11" in the next command must be changed +# manually when Oracle revises the license. + +LICENSE_CHECK=`$GREP "version 11" $LICENSE_PATH | $AWK -F\ {'print $2'}` +if [ -z $LICENSE_CHECK ]; then +# New license version does not match the current installation. +# The user will need to agree to the new version, thus we do nothing here. + exit 0 +fi +if [ $VBOX_VERSION == $EXTPACK_CURRENT ]; then +# The extpack currently installed matches - we are done + exit 0 +fi + +# A new version of extpack is needed - switch to directory that can be written, and download it +pushd ~ > /dev/null 2>&1 +$WGET https://download.virtualbox.org/virtualbox/$VBOX_VERSION/$VBOX_EXT > /dev/null 2>&1 + +# Now install it +echo Y | $VBOXMANAGE extpack install --replace $VBOX_EXT > /dev/null 2>&1 + +# Clean up by deleting downloaded file and restoring the original working directory +rm -f $VBOX_EXT +popd ~ > /dev/null 2>&1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vboxautostart-service.sh new/vboxautostart-service.sh --- old/vboxautostart-service.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/vboxautostart-service.sh 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1,174 @@ +#!/bin/sh +# $Id: vboxautostart-service.sh 143795 2021-04-15 11:42:37Z vgalitsy $ +## @file +# VirtualBox autostart service init script. +# + +# +# Copyright (C) 2012-2020 Oracle Corporation +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# + +# chkconfig: 345 35 65 +# description: VirtualBox autostart service +# +### BEGIN INIT INFO +# Provides: vboxautostart-service +# Required-Start: vboxdrv +# Required-Stop: vboxdrv +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Description: VirtualBox autostart service +### END INIT INFO + +PATH=$PATH:/bin:/sbin:/usr/sbin +SCRIPTNAME=vboxautostart-service.sh + +[ -f /etc/debian_release -a -f /lib/lsb/init-functions ] || NOLSB=yes +[ -f /etc/vbox/vbox.cfg ] && . /etc/vbox/vbox.cfg + +if [ -n "$INSTALL_DIR" ]; then + binary="$INSTALL_DIR/VBoxAutostart" +else + binary="/usr/lib/virtualbox/VBoxAutostart" +fi + +# silently exit if the package was uninstalled but not purged, +# applies to Debian packages only (but shouldn't hurt elsewhere) +[ ! -f /etc/debian_release -o -x $binary ] || exit 0 + +[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox + +# Preamble for Gentoo +if [ "`which $0`" = "/sbin/rc" ]; then + shift +fi + +begin_msg() +{ + test -n "${2}" && echo "${SCRIPTNAME}: ${1}." + logger -t "${SCRIPTNAME}" "${1}." +} + +succ_msg() +{ + logger -t "${SCRIPTNAME}" "${1}." +} + +fail_msg() +{ + echo "${SCRIPTNAME}: failed: ${1}." >&2 + logger -t "${SCRIPTNAME}" "failed: ${1}." +} + +start_daemon() { + usr="$1" + shift + su - $usr -c "$*" +} + +if which start-stop-daemon >/dev/null 2>&1; then + start_daemon() { + usr="$1" + shift + bin="$1" + shift + start-stop-daemon --chuid $usr --start --exec $bin -- $@ + } +fi + +vboxdrvrunning() { + lsmod | grep -q "vboxdrv[^_-]" +} + +valid_db_entry() { + + entry="$1" + [ -z "$entry" ] && return 1 + + user="$2" + [ -z "$user" ] && return 1 + + user_name=$(id -n -u "$user" 2>/dev/null) + [ -z "$user_name" ] && return 1 + + user_id=$(id -u "$user" 2>/dev/null) + + # Verify that @user identifies a user *by name* (i.e. not a numeric id). + # Careful, all numeric user names are legal. + if [ "$user_id" = "$user" ] && [ "$user_name" != "$user" ]; then + return 1 + fi + + # Verify whether file name is the same as file owner name. + [ -z "$(find "$entry" -user "$user" -type f 2>/dev/null)" ] && return 1 + + return 0 +} + +start() { + [ -z "$VBOXAUTOSTART_DB" ] && exit 0 + [ -z "$VBOXAUTOSTART_CONFIG" ] && exit 0 + begin_msg "Starting VirtualBox VMs configured for autostart" console; + vboxdrvrunning || { + fail_msg "VirtualBox kernel module not loaded!" + exit 0 + } + PARAMS="--background --start --config $VBOXAUTOSTART_CONFIG" + + # prevent inheriting this setting to VBoxSVC + unset VBOX_RELEASE_LOG_DEST + + for entry in "$VBOXAUTOSTART_DB"/*.start + do + user=$(basename "$entry" .start) + [ "$user" = "*" ] && break + valid_db_entry "$entry" "$user" || continue + + start_daemon "$user" "$binary" $PARAMS > /dev/null 2>&1 + done + + return $RETVAL +} + +stop() { + [ -z "$VBOXAUTOSTART_DB" ] && exit 0 + [ -z "$VBOXAUTOSTART_CONFIG" ] && exit 0 + + PARAMS="--stop --config $VBOXAUTOSTART_CONFIG" + + # prevent inheriting this setting to VBoxSVC + unset VBOX_RELEASE_LOG_DEST + + for entry in "$VBOXAUTOSTART_DB"/*.stop + do + user=$(basename "$entry" .stop) + [ "$user" = "*" ] && break + valid_db_entry "$entry" "$user" || continue + + start_daemon "$user" "$binary" $PARAMS > /dev/null 2>&1 + done + + return $RETVAL +} + +case "$1" in +start) + start + ;; +stop) + stop + ;; +*) + echo "Usage: $0 {start|stop}" + exit 1 +esac + +exit $RETVAL diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vboxconfig.sh new/vboxconfig.sh --- old/vboxconfig.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/vboxconfig.sh 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1,60 @@ +#!/bin/bash +# +# Script to build VirtualBox host kernel modules +# Copyright C 2017 by Larry Finger +# +# This script is part of the openSUSE VirtualBox package +# +SOURCE="/usr/src/kernel-modules/virtualbox/src" +LOGFILE="/var/log/virtualbox.log" +INCLUDE="/lib/modules/`uname -r`/build/include" +# +# Test if vboxdrv module loaded. If it is, skip everything else +loaded=$(lsmod | grep vboxdrv) +if [ -n "$loaded" ] ; then + echo "Kernel modules are loaded, unload them via" + echo "systemctl stop vboxdrv.service if you wish to rebuild them." + echo "Quitting .." + exit 1 +fi +# +# Check if virtualbox-host-source is installed, quit if not +if ! rpm -qf "$SOURCE/Makefile" &>/dev/null ; then + echo "Sources for building host modules are not present," + echo "Use 'sudo zypper install virtualbox-host-source kernel-devel kernel-default-devel' to install them. Quitting .." + exit 1 +fi +# +# Check if virtualbox-host-source version matches virtualbox version +if [ "$(rpm -q virtualbox virtualbox-host-source --queryformat='%{version}-%{release}\n' 2>/dev/null | sort -u | wc -l)" -ne "1" ] ; then + echo "virtualbox-host-source package version doesn't match the version of virtualbox package." + echo "This situation is probably not fatal, thus we will try to continue .." +fi +# Prerequisites are available, start build +pushd $SOURCE > /dev/null 2>&1 +echo "Building kernel modules..." +make clean &>/dev/null +make > $LOGFILE 2>&1 +if [ "$?" -ne 0 ] ; then + echo "" + echo "Build of VirtualBox host kernel modules failed." + echo "Look at $LOGFILE to find reasons." + popd > /dev/null 2>&1 + exit 1 +else +echo "Kernel modules built correctly. They will now be installed." +fi +make install >> $LOGFILE 2>&1 +if [ "$?" -ne 0 ] ; then + echo "" + echo "Installation of VirtualBox host kernel modules failed." + echo "Look at $LOGFILE to find reasons." + popd > /dev/null 2>&1 + exit 1 +fi +depmod -a +modprobe -av vboxnetflt vboxnetadp +popd > /dev/null 2>&1 +echo "Kernel modules are installed and loaded." +exit 0 + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vboxdrv.sh new/vboxdrv.sh --- old/vboxdrv.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/vboxdrv.sh 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1,375 @@ +#! /bin/sh +# Oracle VM VirtualBox +# Linux kernel module init script + +# +# Copyright (C) 2006-2015 Oracle Corporation +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# + +# chkconfig: 345 20 80 +# description: VirtualBox Linux kernel module +# +### BEGIN INIT INFO +# Provides: vboxdrv +# Required-Start: $syslog $remote_fs +# Required-Stop: $syslog $remote_fs +# Default-Start: 2 3 5 +# Default-Stop: 0 1 6 +# Short-Description: VirtualBox Linux module +# Description: VirtualBox Linux kernel module +### END INIT INFO + +PATH=/usr/sbin:/usr/bin:$PATH +DEVICE=/dev/vboxdrv +LOG="/var/log/vbox-install.log" +MODPROBE=/usr/sbin/modprobe +SCRIPTNAME=vboxdrv.sh +INSTALL_DIR=/usr/lib/virtualbox + +# The below is GNU-specific. See VBox.sh for the longer Solaris/OS X version. +TARGET=`readlink -e -- "${0}"` || exit 1 +SCRIPT_DIR="${TARGET%/[!/]*}" + +if $MODPROBE -c | grep -q '^allow_unsupported_modules *0'; then + MODPROBE="$MODPROBE --allow-unsupported-modules" +fi + +[ -f /etc/vbox/vbox.cfg ] && . /etc/vbox/vbox.cfg +export BUILD_TYPE +export USERNAME +export USER=$USERNAME + +VIRTUALBOX="${INSTALL_DIR}/VirtualBox" +VBOXMANAGE="${INSTALL_DIR}/VBoxManage" +BUILDINTMP="${MODULE_SRC}/build_in_tmp" +if test -u "${VBOXMANAGE}"; then + GROUP=root + DEVICE_MODE=0600 +else + GROUP=vboxusers + DEVICE_MODE=0660 +fi + +[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox + +begin_msg() +{ + test -n "${2}" && echo "${SCRIPTNAME}: ${1}." + logger -t "${SCRIPTNAME}" "${1}." +} + +succ_msg() +{ + logger -t "${SCRIPTNAME}" "${1}." +} + +fail_msg() +{ + echo "${SCRIPTNAME}: failed: ${1}." >&2 + logger -t "${SCRIPTNAME}" "failed: ${1}." +} + +failure() +{ + fail_msg "$1" + exit 1 +} + +running() +{ + lsmod | grep -q "$1[^_-]" +} + +## Output the vboxdrv part of our udev rule. This is redirected to the right file. +udev_write_vboxdrv() { + VBOXDRV_GRP="$1" + VBOXDRV_MODE="$2" + + echo "KERNEL==\"vboxdrv\", NAME=\"vboxdrv\", OWNER=\"root\", GROUP=\"$VBOXDRV_GRP\", MODE=\"$VBOXDRV_MODE\"" + echo "KERNEL==\"vboxdrvu\", NAME=\"vboxdrvu\", OWNER=\"root\", GROUP=\"$VBOXDRV_GRP\", MODE=\"0660\"" + echo "KERNEL==\"vboxnetctl\", NAME=\"vboxnetctl\", OWNER=\"root\", GROUP=\"$VBOXDRV_GRP\", MODE=\"$VBOXDRV_MODE\"" +} + +## Output the USB part of our udev rule. This is redirected to the right file. +udev_write_usb() { + INSTALLATION_DIR="$1" + USB_GROUP="$2" + + echo "SUBSYSTEM==\"usb_device\", ACTION==\"add\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh \$major \$minor \$attr{bDeviceClass}${USB_GROUP}\"" + echo "SUBSYSTEM==\"usb\", ACTION==\"add\", ENV{DEVTYPE}==\"usb_device\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh \$major \$minor \$attr{bDeviceClass}${USB_GROUP}\"" + echo "SUBSYSTEM==\"usb_device\", ACTION==\"remove\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh --remove \$major \$minor\"" + echo "SUBSYSTEM==\"usb\", ACTION==\"remove\", ENV{DEVTYPE}==\"usb_device\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh --remove \$major \$minor\"" +} + +## Generate our udev rule file. This takes a change in udev rule syntax in +## version 55 into account. It only creates rules for USB for udev versions +## recent enough to support USB device nodes. +generate_udev_rule() { + VBOXDRV_GRP="$1" # The group owning the vboxdrv device + VBOXDRV_MODE="$2" # The access mode for the vboxdrv device + INSTALLATION_DIR="$3" # The directory VirtualBox is installed in + USB_GROUP="$4" # The group that has permission to access USB devices + NO_INSTALL="$5" # Set this to "1" to remove but not re-install rules + + # Extra space! + case "$USB_GROUP" in ?*) USB_GROUP=" $USB_GROUP" ;; esac + case "$NO_INSTALL" in "1") return ;; esac + udev_write_vboxdrv "$VBOXDRV_GRP" "$VBOXDRV_MODE" + udev_write_usb "$INSTALLATION_DIR" "$USB_GROUP" +} + +## Install udev rule (disable with INSTALL_NO_UDEV=1 in +## /etc/default/virtualbox). +install_udev() { + VBOXDRV_GRP="$1" # The group owning the vboxdrv device + VBOXDRV_MODE="$2" # The access mode for the vboxdrv device + INSTALLATION_DIR="$3" # The directory VirtualBox is installed in + USB_GROUP="$4" # The group that has permission to access USB devices + NO_INSTALL="$5" # Set this to "1" to remove but not re-install rules + + if test -d /etc/udev/rules.d; then + generate_udev_rule "$VBOXDRV_GRP" "$VBOXDRV_MODE" "$INSTALLATION_DIR" \ + "$USB_GROUP" "$NO_INSTALL" + fi + # Remove old udev description file + rm -f /etc/udev/rules.d/10-vboxdrv.rules 2> /dev/null +} + +## Create a usb device node for a given sysfs path to a USB device. +install_create_usb_node_for_sysfs() { + path="$1" # sysfs path for the device + usb_createnode="$2" # Path to the USB device node creation script + usb_group="$3" # The group to give ownership of the node to + if test -r "${path}/dev"; then + dev="`cat "${path}/dev" 2> /dev/null`" + major="`expr "$dev" : '\(.*\):' 2> /dev/null`" + minor="`expr "$dev" : '.*:\(.*\)' 2> /dev/null`" + class="`cat ${path}/bDeviceClass 2> /dev/null`" + sh "${usb_createnode}" "$major" "$minor" "$class" \ + "${usb_group}" 2>/dev/null + fi +} + +udev_rule_file=/etc/udev/rules.d/60-vboxdrv.rules +sysfs_usb_devices="/sys/bus/usb/devices/*" + +## Install udev rules and create device nodes for usb access +setup_usb() { + VBOXDRV_GRP="$1" # The group that should own /dev/vboxdrv + VBOXDRV_MODE="$2" # The mode to be used for /dev/vboxdrv + INSTALLATION_DIR="$3" # The directory VirtualBox is installed in + USB_GROUP="$4" # The group that should own the /dev/vboxusb device + # nodes unless INSTALL_NO_GROUP=1 in + # /etc/default/virtualbox. Optional. + usb_createnode="$INSTALLATION_DIR/VBoxCreateUSBNode.sh" + # install udev rule (disable with INSTALL_NO_UDEV=1 in + # /etc/default/virtualbox) + if [ "$INSTALL_NO_GROUP" != "1" ]; then + usb_group=$USB_GROUP + vboxdrv_group=$VBOXDRV_GRP + else + usb_group=root + vboxdrv_group=root + fi + install_udev "${vboxdrv_group}" "$VBOXDRV_MODE" \ + "$INSTALLATION_DIR" "${usb_group}" \ + "$INSTALL_NO_UDEV" > ${udev_rule_file} + # Build our device tree + for i in ${sysfs_usb_devices}; do # This line intentionally without quotes. + install_create_usb_node_for_sysfs "$i" "${usb_createnode}" \ + "${usb_group}" + done +} + +cleanup_usb() +{ + # Remove udev description file + rm -f /etc/udev/rules.d/60-vboxdrv.rules + rm -f /etc/udev/rules.d/10-vboxdrv.rules + + # Remove our USB device tree + rm -rf /dev/vboxusb +} + +start_drv() +{ + begin_msg "Starting VirtualBox services" console + if [ -d /proc/xen ]; then + failure "Running VirtualBox in a Xen environment is not supported" + fi + if ! running vboxdrv; then + if ! rm -f $DEVICE; then + failure "Cannot remove $DEVICE" + fi + if ! $MODPROBE vboxdrv > /dev/null 2>&1; then + /usr/sbin/vboxconfig + if ! $MODPROBE vboxdrv > /dev/null 2>&1; then + failure "modprobe vboxdrv failed. Please use 'dmesg' to find out why" + fi + fi + sleep .2 + fi + # ensure the character special exists + if [ ! -c $DEVICE ]; then + MAJOR=`sed -n 's;\([0-9]\+\) vboxdrv$;\1;p' /proc/devices` + if [ ! -z "$MAJOR" ]; then + MINOR=0 + else + MINOR=`sed -n 's;\([0-9]\+\) vboxdrv$;\1;p' /proc/extra` + if [ ! -z "$MINOR" ]; then + MAJOR=10 + fi + fi + if [ -z "$MAJOR" ]; then + rmmod vboxdrv 2>/dev/null + failure "Cannot locate the VirtualBox device" + fi + if ! mknod -m 0660 $DEVICE c $MAJOR $MINOR 2>/dev/null; then + rmmod vboxdrv 2>/dev/null + failure "Cannot create device $DEVICE with major $MAJOR and minor $MINOR" + fi + fi + # ensure permissions + if ! $MODPROBE vboxnetflt > /dev/null 2>&1; then + failure "modprobe vboxnetflt failed. Please use 'dmesg' to find out why" + fi + if ! $MODPROBE vboxnetadp > /dev/null 2>&1; then + failure "modprobe vboxnetadp failed. Please use 'dmesg' to find out why" + fi + # Create the /dev/vboxusb directory if the host supports that method + # of USB access. The USB code checks for the existance of that path. + if grep -q usb_device /proc/devices; then + mkdir -p -m 0750 /dev/vboxusb 2>/dev/null + chown root:vboxusers /dev/vboxusb 2>/dev/null + fi + succ_msg "VirtualBox services started" +} + +stop_drv() +{ + begin_msg "Stopping VirtualBox services" console + + if running vboxnetadp; then + if ! rmmod vboxnetadp 2>/dev/null; then + failure "Cannot unload module vboxnetadp" + fi + fi + if running vboxdrv; then + if running vboxnetflt; then + if ! rmmod vboxnetflt 2>/dev/null; then + failure "Cannot unload module vboxnetflt" + fi + fi + if ! rmmod vboxdrv 2>/dev/null; then + failure "Cannot unload module vboxdrv" + fi + if ! rm -f $DEVICE; then + failure "Cannot unlink $DEVICE" + fi + fi + succ_msg "VirtualBox services stopped" +} + +cleanup_vb() +{ + for i in /lib/modules/*; do + # We could just do "rm -f", but we only want to try deleting folders if + # we are sure they were ours, i.e. they had our modules in beforehand. + if test -e "${i}/extra/vboxdrv.ko" \ + || test -e "${i}/extra/vboxnetadp.ko" \ + || test -e "${i}/extra/vboxnetflt.ko"; then + rm -f "${i}/extra/vboxdrv.ko" "${i}/extra/vboxnetadp.ko" \ + "${i}/extra/vboxnetflt.ko" + # Remove the kernel version folder if it was empty except for us. + test "`echo ${i}/extra/* ${i}/extra/.?* ${i}/* ${i}/.?*`" \ + = "${i}/extra/* ${i}/extra/.. ${i}/extra ${i}/.." && + rmdir "${i}/extra" "${i}" # We used to leave empty folders. + version=`expr "${i}" : "/lib/modules/\(.*\)"` + depmod -a "${version}" + fi + done +} + +# setup_script +setup_vb() +{ +# Try to build the host kernel modules in case prepackaging has failed + /usr/sbin/vboxconfig +} + +dmnstatus() +{ + if running vboxdrv; then + str="vboxdrv" + if running vboxnetflt; then + str="$str, vboxnetflt" + if running vboxnetadp; then + str="$str, vboxnetadp" + fi + fi + echo "VirtualBox kernel modules ($str) are loaded." + for i in $SHUTDOWN_USERS; do + # don't create the ipcd directory with wrong permissions! + if [ -d /tmp/.vbox-$i-ipc ]; then + export VBOX_IPC_SOCKETID="$i" + VMS=`$VBOXMANAGE --nologo list runningvms | sed -e 's/^".*".*{\(.*\)}/\1/' 2>/dev/null` + if [ -n "$VMS" ]; then + echo "The following VMs are currently running:" + for v in $VMS; do + echo " $v" + done + fi + fi + done + else + echo "VirtualBox kernel module is not loaded." + fi +} + +case "$1" in +start) + start_drv + ;; +stop) + stop_drv + ;; +restart) + "$0" stop && "$0" start + ;; +setup) + # Create udev rule and USB device nodes. + ## todo Wouldn't it make more sense to install the rule to /lib/udev? This + ## is not a user-created configuration file after all. + ## todo Do we need a udev rule to create /dev/vboxdrv[u] at all? We have + ## working fall-back code here anyway, and the "right" code is more complex + ## than the fall-back. Unnecessary duplication? + stop_drv && cleanup_vb + setup_usb "$GROUP" "$DEVICE_MODE" "$INSTALL_DIR" + setup_vb && start_drv + ;; +cleanup) + stop_drv && cleanup_vb + cleanup_usb + ;; +force-reload) + "$0" stop + "$0" start + ;; +status) + dmnstatus + ;; +*) + echo "Usage: $0 {start|stop|stop_vms|restart|force-reload|status}" + exit 1 +esac + +exit 0 + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vboxguestconfig.sh new/vboxguestconfig.sh --- old/vboxguestconfig.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/vboxguestconfig.sh 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1,62 @@ +#!/bin/bash +# +# Script to build VirtualBox guest kernel modules +# Copyright C 2017 by Larry Finger +# +# This script is part of the openSUSE VirtualBox package +# +SOURCE="/usr/src/kernel-modules/" +LOGFILE="/var/log/virtualbox.log" +INCLUDE="/lib/modules/`uname -r`/build/include" +# +# Test if vboxguest module loaded. If it is, skip everything else +loaded=$(lsmod | grep vboxguest) +if [ -n "$loaded" ] ; then + echo "Kernel modules available. but we will continue..." +fi +# +# Check if virtualbox-guest-source is installed, quit if not +if ! rpm -qf "$SOURCE/additions/guest_src.tar.bz2" &>/dev/null ; then + echo "Sources for building guest modules are not present," + echo "Use 'sudo zypper install virtualbox-guest-source' to install them. Quitting .." + exit 1 +fi +# unpack source +pushd $SOURCE > /dev/null 2>&1 +tar jxf additions/guest_src.tar.bz2 > /dev/null 2>&1 +popd > /dev/null 2>&1 +# +# Check if virtualbox-guest-source version matches virtualbox version +if [ "$(rpm -q virtualbox virtualbox-guest-source --queryformat='%{version}-%{release}\n' 2>/dev/null | sort -u | wc -l)" -ne "1" ] ; then + echo "virtualbox-guest-source package version doesn't match the version of virtualbox package." + echo "This situation is probably not fatal, thus we will try to continue .." +fi +# Prerequisites are available, start build +pushd $SOURCE/additions/src > /dev/null 2>&1 +echo "Building kernel modules..." +make > $LOGFILE 2>&1 +if [ "$?" -ne 0 ] ; then + echo "" + echo "Build of VirtualBox guest kernel modules failed." + echo "Look at $LOGFILE to find reasons." + popd > /dev/null 2>&1 + exit 1 +else +echo "Kernel modules built correctly. They will now be installed." +fi +make install >> $LOGFILE 2>&1 +if [ "$?" -ne 0 ] ; then + echo "" + echo "Installation of VirtualBox guest kernel modules failed." + echo "Look at $LOGFILE to find reasons." + popd > /dev/null 2>&1 + exit 1 +fi +depmod -a +modprobe -av vboxguest vboxvideo +cd ../.. +rm -rf additions +popd > /dev/null 2>&1 +echo "Kernel modules are installed and loaded." +exit 0 + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vboxweb-service.sh new/vboxweb-service.sh --- old/vboxweb-service.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/vboxweb-service.sh 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1,229 @@ +#!/bin/sh +# $Id: vboxweb-service.sh 127855 2019-01-01 01:45:53Z bird $ +## @file +# VirtualBox web service API daemon init script. +# + +# +# Copyright (C) 2006-2019 Oracle Corporation +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# + +# chkconfig: 345 35 65 +# description: VirtualBox web service API +# +### BEGIN INIT INFO +# Provides: vboxweb-service +# Required-Start: vboxdrv +# Required-Stop: vboxdrv +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Description: VirtualBox web service API +### END INIT INFO + +PATH=$PATH:/bin:/sbin:/usr/sbin +SCRIPTNAME=vboxweb-service.sh + +[ -f /etc/vbox/vbox.cfg ] && . /etc/vbox/vbox.cfg + +if [ -n "$INSTALL_DIR" ]; then + binary="$INSTALL_DIR/vboxwebsrv" + vboxmanage="$INSTALL_DIR/VBoxManage" +else + binary="/usr/lib/virtualbox/vboxwebsrv" + vboxmanage="/usr/lib/virtualbox/VBoxManage" +fi + +# silently exit if the package was uninstalled but not purged, +# applies to Debian packages only (but shouldn't hurt elsewhere) +[ ! -f /etc/debian_release -o -x $binary ] || exit 0 + +[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox + +PIDFILE="/var/run/${SCRIPTNAME}" + +# Preamble for Gentoo +if [ "`which $0`" = "/sbin/rc" ]; then + shift +fi + +begin_msg() +{ + test -n "${2}" && echo "${SCRIPTNAME}: ${1}." + logger -t "${SCRIPTNAME}" "${1}." +} + +succ_msg() +{ + logger -t "${SCRIPTNAME}" "${1}." +} + +fail_msg() +{ + echo "${SCRIPTNAME}: failed: ${1}." >&2 + logger -t "${SCRIPTNAME}" "failed: ${1}." +} + +start_daemon() { + usr="$1" + shift + su - $usr -c "$*" +} + +killproc() { + killall $1 + rm -f $PIDFILE +} + +if which start-stop-daemon >/dev/null 2>&1; then + start_daemon() { + usr="$1" + shift + bin="$1" + shift + start-stop-daemon --background --chuid $usr --start --exec $bin -- $@ + } + + killproc() { + start-stop-daemon --stop --exec $@ + } +fi + +vboxdrvrunning() { + lsmod | grep vboxdrv +} + +check_single_user() { + if [ -n "$2" ]; then + fail_msg "VBOXWEB_USER must not contain multiple users!" + exit 1 + fi +} + +start() { + if ! test -f $PIDFILE; then + [ -z "$VBOXWEB_USER" ] && exit 0 + begin_msg "Starting VirtualBox web service" console; + check_single_user $VBOXWEB_USER + temp=$(lsmod | grep vboxdrv) + echo $temp + if [ -z "$temp" ]; then + fail_msg "VirtualBox kernel module not loaded!" + exit 1 + fi + PARAMS="--background" + [ -n "$VBOXWEB_HOST" ] && PARAMS="$PARAMS -H $VBOXWEB_HOST" + [ -n "$VBOXWEB_PORT" ] && PARAMS="$PARAMS -p $VBOXWEB_PORT" + [ -n "$VBOXWEB_SSL_KEYFILE" ] && PARAMS="$PARAMS -s -K $VBOXWEB_SSL_KEYFILE" + [ -n "$VBOXWEB_SSL_PASSWORDFILE" ] && PARAMS="$PARAMS -a $VBOXWEB_SSL_PASSWORDFILE" + [ -n "$VBOXWEB_SSL_CACERT" ] && PARAMS="$PARAMS -c $VBOXWEB_SSL_CACERT" + [ -n "$VBOXWEB_SSL_CAPATH" ] && PARAMS="$PARAMS -C $VBOXWEB_SSL_CAPATH" + [ -n "$VBOXWEB_SSL_DHFILE" ] && PARAMS="$PARAMS -D $VBOXWEB_SSL_DHFILE" + [ -n "$VBOXWEB_SSL_RANDFILE" ] && PARAMS="$PARAMS -r $VBOXWEB_SSL_RANDFILE" + [ -n "$VBOXWEB_TIMEOUT" ] && PARAMS="$PARAMS -t $VBOXWEB_TIMEOUT" + [ -n "$VBOXWEB_CHECK_INTERVAL" ] && PARAMS="$PARAMS -i $VBOXWEB_CHECK_INTERVAL" + [ -n "$VBOXWEB_THREADS" ] && PARAMS="$PARAMS -T $VBOXWEB_THREADS" + [ -n "$VBOXWEB_KEEPALIVE" ] && PARAMS="$PARAMS -k $VBOXWEB_KEEPALIVE" + [ -n "$VBOXWEB_AUTHENTICATION" ] && PARAMS="$PARAMS -A $VBOXWEB_AUTHENTICATION" + [ -n "$VBOXWEB_LOGFILE" ] && PARAMS="$PARAMS -F $VBOXWEB_LOGFILE" + [ -n "$VBOXWEB_ROTATE" ] && PARAMS="$PARAMS -R $VBOXWEB_ROTATE" + [ -n "$VBOXWEB_LOGSIZE" ] && PARAMS="$PARAMS -S $VBOXWEB_LOGSIZE" + [ -n "$VBOXWEB_LOGINTERVAL" ] && PARAMS="$PARAMS -I $VBOXWEB_LOGINTERVAL" + # set authentication method + password hash + if [ -n "$VBOXWEB_AUTH_LIBRARY" ]; then + su - "$VBOXWEB_USER" -c "$vboxmanage setproperty websrvauthlibrary \"$VBOXWEB_AUTH_LIBRARY\"" + if [ $? -ne 0 ]; then + fail_msg "Error $? setting webservice authentication library to $VBOXWEB_AUTH_LIBRARY" + fi + fi + if [ -n "$VBOXWEB_AUTH_PWHASH" ]; then + su - "$VBOXWEB_USER" -c "$vboxmanage setextradata global \"VBoxAuthSimple/users/$VBOXWEB_USER\" \"$VBOXWEB_AUTH_PWHASH\"" + if [ $? -ne 0 ]; then + fail_msg "Error $? setting webservice password hash" + fi + fi + # prevent inheriting this setting to VBoxSVC + unset VBOX_RELEASE_LOG_DEST + start_daemon $VBOXWEB_USER $binary $PARAMS > /dev/null 2>&1 + # ugly: wait until the final process has forked + sleep .1 + PID=`pidof $binary 2>/dev/null` + if [ -n "$PID" ]; then + echo "$PID" > $PIDFILE + RETVAL=0 + firewall-cmd --permanent --new-service=vboxweb + firewall-cmd --permanent --service=vboxweb --set-description="service to remotely manage VirtualBox" + firewall-cmd --permanent --add-port=18083/tcp --zone=internal --service=vboxweb + firewall-cmd --permanent --set-short="vboxweb" --service=vboxweb + succ_msg "VirtualBox web service started" + else + RETVAL=1 + fail_msg "VirtualBox web service failed to start" + fi + fi + return $RETVAL +} + +stop() { + if test -f $PIDFILE; then + begin_msg "Stopping VirtualBox web service" console; + killproc $binary + RETVAL=$? + # Be careful: wait 1 second, making sure that everything is cleaned up. + sleep 1 + if ! pidof $binary > /dev/null 2>&1; then + rm -f $PIDFILE + succ_msg "VirtualBox web service stopped" + else + fail_msg "VirtualBox web service failed to stop" + fi + fi + return $RETVAL +} + +restart() { + stop && start +} + +status() { + echo -n "Checking for VBox Web Service" + if [ -f $PIDFILE ]; then + echo " ...running" + else + echo " ...not running" + fi +} + +case "$1" in +start) + start + ;; +stop) + stop + ;; +restart) + restart + ;; +force-reload) + restart + ;; +status) + status + ;; +setup) + ;; +cleanup) + ;; +*) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 +esac + +exit $RETVAL diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtualbox-patch-source.sh new/virtualbox-patch-source.sh --- old/virtualbox-patch-source.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/virtualbox-patch-source.sh 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1,62 @@ +#!/bin/bash -ex + +if [ -z "$1" ]; then + echo "You need to pass the filename VirtualBox-x.y.z.tar.bz2 as first argument." + exit 1 +fi + +REMOVE_DIRS=( +src/VBox/Additions/WINNT +src/VBox/Additions/os2 +src/VBox/Runtime/r3/darwin +src/VBox/Runtime/r0drv/darwin +src/VBox/Runtime/darwin +kBuild/bin +kBuild/msgstyles +kBuild/tools +kBuild/sdks +tools/darwin.x86 +tools/darwin.amd64 +tools/freebsd.x86 +tools/os2.x86 +tools/solaris.x86 +tools/solaris.amd64 +tools/win.amd64 +tools/win.x86 +tools/linux.x86 +tools/linux.amd64 +) + +set -o errexit + +CMDNAME=${0##*/} +SOURCEDIR=${0%$CMDNAME} + +BASENAME=${1%.tar.bz2} + +trap "rm -rf \"$BASENAME-patched.tar\" \"$BASENAME-patched.tar.bz2\"" ERR + +for (( N=0 ; N<${#REMOVE_DIRS[@]} ; N++ )) ; do + #REMOVE_DIRS[N]="$BASENAME/${REMOVE_DIRS[N]}" + # use a wildcard because VirtualBox-1.6.0-OSE != VirtualBox-1.6.0_OSE + REMOVE_DIRS[N]="*/${REMOVE_DIRS[N]}" +done + +cd "$SOURCEDIR" >/dev/null + +if ! test -f "$BASENAME.tar.bz2" ; then + exit 0 +fi + +if test -f "$BASENAME-patched.tar.bz2" ; then + if test "$BASENAME.tar.bz2" -ot "$BASENAME-patched.tar.bz2" ; then + if test $CMDNAME -ot "$BASENAME-patched.tar.bz2" ; then + exit 0 + fi + fi +fi + +cp -a "$BASENAME.tar.bz2" "$BASENAME-patched.tar.bz2" +bunzip2 "$BASENAME-patched.tar.bz2" +tar --wildcards --delete -f "$BASENAME-patched.tar" "${REMOVE_DIRS[@]}" +pixz -9 "$BASENAME-patched.tar" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtualbox-wrapper.sh new/virtualbox-wrapper.sh --- old/virtualbox-wrapper.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/virtualbox-wrapper.sh 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1,70 @@ +#!/bin/bash +export QT_NO_KDE_INTEGRATION=1 + +# make certain that the user/group combination is valid +/usr/bin/id -nG | grep -v -e "root" -e "vboxusers" >/dev/null && /usr/lib/virtualbox/VBoxPermissionMessage && exit +# +# Handle the issue regarding USB passthru +# The following conditions apply: +# 1. If ~/.config/VirtualBox/enable exists, the user accepts the security risk. +# 2. If ~/.config/VirtualBox/disable exists, the user does not accept the risk. That file will contain the inode of /usr/lib/udev/rules.d/60-vboxdrv.rules. +# When that changes, the VBoxUSB_DevRules will again be displayed as that means that VB has been reloaded. +# +devrules() +{ + /usr/lib/virtualbox/VBoxUSB_DevRules + if [ $? -eq 0 ] ; then + # User accepts the risk + touch ~/.config/VirtualBox/enable + rm -f ~/.config/VirtualBox/disable + else + # User declines the risk - save the inode + echo "" > ~/.config/VirtualBox/disable + rm -f ~/.config/VirtualBox/enable + fi +} + +# Start of main routine +# +# Ensure that ~/.config/VirtualBox exists +mkdir -p ~/.config/VirtualBox +# Get the inode for /usr/lib/udev/rules.d/60-vboxdrv.rules +INODE=$(stat /usr/lib/udev/rules.d/60-vboxdrv.rules | grep Inode | cut -d' ' -f3) +if [ ! -f ~/.config/VirtualBox/enable ] && [ ! -f ~/.config/VirtualBox/disable ] ; then + # Neither file exists - find what the user wants + devrules +fi +# Get the original Inode if it exists +if [ -f ~/.config/VirtualBox/disable ] ; then + read LINE < ~/.config/VirtualBox/disable +else + LINE=" " +fi +# If user originally declined, make certain that /usr/lib/udev/rules.d/60-vboxdrv.rules has not been changed +if [ -f ~/.config/VirtualBox/disable ] && [ "$LINE" != "$INODE" ] && [ "$LINE" != "" ] ; then + # disable is selected and the Inode has changed - ask again + devrules +fi +if [ -f ~/.config/VirtualBox/disable ] ; then + echo $INODE > ~/.config/VirtualBox/disable + if [ "$LINE" != "$INODE" ] ; then + if [ -f /usr/bin/kdesu ] ; then + kdesu /usr/sbin/vbox-fix-usb-rules.sh + fi + if [ -f /usr/bin/gnomesu ] ; then + gnomesu /usr/sbin/vbox-fix-usb-rules.sh + fi + fi +fi +# Check if extpack needs to be updated +/usr/bin/update-extpack.sh +# Check that /usr/lib/virtualbox/VirtualBoxVM has SUID permissions +PERM=$(ls -l /usr/lib/virtualbox/VirtualBoxVM | grep rwsr) +if [ -z "$PERM" ] +then + logger -s "Wrong permissions for VirtualBoxVM - use 'sudo chmod 4711 /usr/lib/virtualbox/VirtualBoxVM' to fix" + /usr/lib/virtualbox/VBoxSUIDMessage + exit 1 +fi +# Now run the VB GUI +LD_LIBRARY_PATH="/usr/lib/virtualbox${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" exec /usr/lib/virtualbox/VirtualBoxQt "$@" ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1 @@ +.osc diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fix_usb_rules.sh new/fix_usb_rules.sh --- old/fix_usb_rules.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/fix_usb_rules.sh 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1,7 @@ +#!/bin/bash +# script to disable USB passthru in /etc/udev/rules.d/60-vboxdrv.rules +# if already disabled, clear the comment character +sed -i 's/#SUBSYSTEM==\"usb/SUBSYSTEM==\"usb/' /usr/lib/udev/rules.d/60-vboxdrv.rules +# now comment the usb lines +sed -i 's/SUBSYSTEM==\"usb/#SUBSYSTEM==\"usb/' /usr/lib/udev/rules.d/60-vboxdrv.rules + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/update-extpack.sh new/update-extpack.sh --- old/update-extpack.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/update-extpack.sh 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1,64 @@ +#!/bin/bash + +# Script to update extpack +# The idea for this method and the original code came from Larry Len Rainey. +# +# This implementation by Larry Finger + +# Define some symbols and determine the current version of VB + +VBOXMANAGE=/usr/bin/VBoxManage +AWK=/usr/bin/awk +GREP=/usr/bin/grep +WGET=/usr/bin/wget +VBOX_VERSION=`$VBOXMANAGE --version | $AWK -F_ {'print $1'}` + +# Define a symbol for the name of the extpack matching the VB version +VBOX_EXT=`echo Oracle_VM_VirtualBox_Extension_Pack-${VBOX_VERSION}.vbox-extpack` + +# Full path to extpack license file +LICENSE_PATH="/usr/lib/virtualbox/ExtensionPacks/Oracle_VM_VirtualBox_Extension_Pack/ExtPack-license.rtf" + +# Determine the installed version of extpack, if any. +EXTPACK_CURRENT=`$VBOXMANAGE list extpacks | $GREP -A1 "Oracle VM VirtualBox Extension Pack" | $GREP Version | $AWK -F\ {'print $2'}` + +# The extpacks are licensed under a Personal Use and Evaluation License +# At some point, the user must agree to the conditions of that license. +# If no extpack is installed on this system, then there is no agreement, +# thus this script cannot install the extpack. +# +# This situation applies to new installations that could conform to the license, +# but more importantly, it handles commercial setups that have not purchased +# the necessary license. +# Check if extpack is currently installed. If not exit +if [ -z $EXTPACK_CURRENT ]; then + exit 0 +fi +# +# An extpack has been installed on this system. Now we need to check if +# it was issued under the current version of the license. + +#Note to maintainers: The "version 11" in the next command must be changed +# manually when Oracle revises the license. + +LICENSE_CHECK=`$GREP "version 11" $LICENSE_PATH | $AWK -F\ {'print $2'}` +if [ -z $LICENSE_CHECK ]; then +# New license version does not match the current installation. +# The user will need to agree to the new version, thus we do nothing here. + exit 0 +fi +if [ $VBOX_VERSION == $EXTPACK_CURRENT ]; then +# The extpack currently installed matches - we are done + exit 0 +fi + +# A new version of extpack is needed - switch to directory that can be written, and download it +pushd ~ > /dev/null 2>&1 +$WGET https://download.virtualbox.org/virtualbox/$VBOX_VERSION/$VBOX_EXT > /dev/null 2>&1 + +# Now install it +echo Y | $VBOXMANAGE extpack install --replace $VBOX_EXT > /dev/null 2>&1 + +# Clean up by deleting downloaded file and restoring the original working directory +rm -f $VBOX_EXT +popd ~ > /dev/null 2>&1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vboxautostart-service.sh new/vboxautostart-service.sh --- old/vboxautostart-service.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/vboxautostart-service.sh 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1,174 @@ +#!/bin/sh +# $Id: vboxautostart-service.sh 143795 2021-04-15 11:42:37Z vgalitsy $ +## @file +# VirtualBox autostart service init script. +# + +# +# Copyright (C) 2012-2020 Oracle Corporation +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# + +# chkconfig: 345 35 65 +# description: VirtualBox autostart service +# +### BEGIN INIT INFO +# Provides: vboxautostart-service +# Required-Start: vboxdrv +# Required-Stop: vboxdrv +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Description: VirtualBox autostart service +### END INIT INFO + +PATH=$PATH:/bin:/sbin:/usr/sbin +SCRIPTNAME=vboxautostart-service.sh + +[ -f /etc/debian_release -a -f /lib/lsb/init-functions ] || NOLSB=yes +[ -f /etc/vbox/vbox.cfg ] && . /etc/vbox/vbox.cfg + +if [ -n "$INSTALL_DIR" ]; then + binary="$INSTALL_DIR/VBoxAutostart" +else + binary="/usr/lib/virtualbox/VBoxAutostart" +fi + +# silently exit if the package was uninstalled but not purged, +# applies to Debian packages only (but shouldn't hurt elsewhere) +[ ! -f /etc/debian_release -o -x $binary ] || exit 0 + +[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox + +# Preamble for Gentoo +if [ "`which $0`" = "/sbin/rc" ]; then + shift +fi + +begin_msg() +{ + test -n "${2}" && echo "${SCRIPTNAME}: ${1}." + logger -t "${SCRIPTNAME}" "${1}." +} + +succ_msg() +{ + logger -t "${SCRIPTNAME}" "${1}." +} + +fail_msg() +{ + echo "${SCRIPTNAME}: failed: ${1}." >&2 + logger -t "${SCRIPTNAME}" "failed: ${1}." +} + +start_daemon() { + usr="$1" + shift + su - $usr -c "$*" +} + +if which start-stop-daemon >/dev/null 2>&1; then + start_daemon() { + usr="$1" + shift + bin="$1" + shift + start-stop-daemon --chuid $usr --start --exec $bin -- $@ + } +fi + +vboxdrvrunning() { + lsmod | grep -q "vboxdrv[^_-]" +} + +valid_db_entry() { + + entry="$1" + [ -z "$entry" ] && return 1 + + user="$2" + [ -z "$user" ] && return 1 + + user_name=$(id -n -u "$user" 2>/dev/null) + [ -z "$user_name" ] && return 1 + + user_id=$(id -u "$user" 2>/dev/null) + + # Verify that @user identifies a user *by name* (i.e. not a numeric id). + # Careful, all numeric user names are legal. + if [ "$user_id" = "$user" ] && [ "$user_name" != "$user" ]; then + return 1 + fi + + # Verify whether file name is the same as file owner name. + [ -z "$(find "$entry" -user "$user" -type f 2>/dev/null)" ] && return 1 + + return 0 +} + +start() { + [ -z "$VBOXAUTOSTART_DB" ] && exit 0 + [ -z "$VBOXAUTOSTART_CONFIG" ] && exit 0 + begin_msg "Starting VirtualBox VMs configured for autostart" console; + vboxdrvrunning || { + fail_msg "VirtualBox kernel module not loaded!" + exit 0 + } + PARAMS="--background --start --config $VBOXAUTOSTART_CONFIG" + + # prevent inheriting this setting to VBoxSVC + unset VBOX_RELEASE_LOG_DEST + + for entry in "$VBOXAUTOSTART_DB"/*.start + do + user=$(basename "$entry" .start) + [ "$user" = "*" ] && break + valid_db_entry "$entry" "$user" || continue + + start_daemon "$user" "$binary" $PARAMS > /dev/null 2>&1 + done + + return $RETVAL +} + +stop() { + [ -z "$VBOXAUTOSTART_DB" ] && exit 0 + [ -z "$VBOXAUTOSTART_CONFIG" ] && exit 0 + + PARAMS="--stop --config $VBOXAUTOSTART_CONFIG" + + # prevent inheriting this setting to VBoxSVC + unset VBOX_RELEASE_LOG_DEST + + for entry in "$VBOXAUTOSTART_DB"/*.stop + do + user=$(basename "$entry" .stop) + [ "$user" = "*" ] && break + valid_db_entry "$entry" "$user" || continue + + start_daemon "$user" "$binary" $PARAMS > /dev/null 2>&1 + done + + return $RETVAL +} + +case "$1" in +start) + start + ;; +stop) + stop + ;; +*) + echo "Usage: $0 {start|stop}" + exit 1 +esac + +exit $RETVAL diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vboxconfig.sh new/vboxconfig.sh --- old/vboxconfig.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/vboxconfig.sh 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1,60 @@ +#!/bin/bash +# +# Script to build VirtualBox host kernel modules +# Copyright C 2017 by Larry Finger +# +# This script is part of the openSUSE VirtualBox package +# +SOURCE="/usr/src/kernel-modules/virtualbox/src" +LOGFILE="/var/log/virtualbox.log" +INCLUDE="/lib/modules/`uname -r`/build/include" +# +# Test if vboxdrv module loaded. If it is, skip everything else +loaded=$(lsmod | grep vboxdrv) +if [ -n "$loaded" ] ; then + echo "Kernel modules are loaded, unload them via" + echo "systemctl stop vboxdrv.service if you wish to rebuild them." + echo "Quitting .." + exit 1 +fi +# +# Check if virtualbox-host-source is installed, quit if not +if ! rpm -qf "$SOURCE/Makefile" &>/dev/null ; then + echo "Sources for building host modules are not present," + echo "Use 'sudo zypper install virtualbox-host-source kernel-devel kernel-default-devel' to install them. Quitting .." + exit 1 +fi +# +# Check if virtualbox-host-source version matches virtualbox version +if [ "$(rpm -q virtualbox virtualbox-host-source --queryformat='%{version}-%{release}\n' 2>/dev/null | sort -u | wc -l)" -ne "1" ] ; then + echo "virtualbox-host-source package version doesn't match the version of virtualbox package." + echo "This situation is probably not fatal, thus we will try to continue .." +fi +# Prerequisites are available, start build +pushd $SOURCE > /dev/null 2>&1 +echo "Building kernel modules..." +make clean &>/dev/null +make > $LOGFILE 2>&1 +if [ "$?" -ne 0 ] ; then + echo "" + echo "Build of VirtualBox host kernel modules failed." + echo "Look at $LOGFILE to find reasons." + popd > /dev/null 2>&1 + exit 1 +else +echo "Kernel modules built correctly. They will now be installed." +fi +make install >> $LOGFILE 2>&1 +if [ "$?" -ne 0 ] ; then + echo "" + echo "Installation of VirtualBox host kernel modules failed." + echo "Look at $LOGFILE to find reasons." + popd > /dev/null 2>&1 + exit 1 +fi +depmod -a +modprobe -av vboxnetflt vboxnetadp +popd > /dev/null 2>&1 +echo "Kernel modules are installed and loaded." +exit 0 + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vboxdrv.sh new/vboxdrv.sh --- old/vboxdrv.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/vboxdrv.sh 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1,375 @@ +#! /bin/sh +# Oracle VM VirtualBox +# Linux kernel module init script + +# +# Copyright (C) 2006-2015 Oracle Corporation +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# + +# chkconfig: 345 20 80 +# description: VirtualBox Linux kernel module +# +### BEGIN INIT INFO +# Provides: vboxdrv +# Required-Start: $syslog $remote_fs +# Required-Stop: $syslog $remote_fs +# Default-Start: 2 3 5 +# Default-Stop: 0 1 6 +# Short-Description: VirtualBox Linux module +# Description: VirtualBox Linux kernel module +### END INIT INFO + +PATH=/usr/sbin:/usr/bin:$PATH +DEVICE=/dev/vboxdrv +LOG="/var/log/vbox-install.log" +MODPROBE=/usr/sbin/modprobe +SCRIPTNAME=vboxdrv.sh +INSTALL_DIR=/usr/lib/virtualbox + +# The below is GNU-specific. See VBox.sh for the longer Solaris/OS X version. +TARGET=`readlink -e -- "${0}"` || exit 1 +SCRIPT_DIR="${TARGET%/[!/]*}" + +if $MODPROBE -c | grep -q '^allow_unsupported_modules *0'; then + MODPROBE="$MODPROBE --allow-unsupported-modules" +fi + +[ -f /etc/vbox/vbox.cfg ] && . /etc/vbox/vbox.cfg +export BUILD_TYPE +export USERNAME +export USER=$USERNAME + +VIRTUALBOX="${INSTALL_DIR}/VirtualBox" +VBOXMANAGE="${INSTALL_DIR}/VBoxManage" +BUILDINTMP="${MODULE_SRC}/build_in_tmp" +if test -u "${VBOXMANAGE}"; then + GROUP=root + DEVICE_MODE=0600 +else + GROUP=vboxusers + DEVICE_MODE=0660 +fi + +[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox + +begin_msg() +{ + test -n "${2}" && echo "${SCRIPTNAME}: ${1}." + logger -t "${SCRIPTNAME}" "${1}." +} + +succ_msg() +{ + logger -t "${SCRIPTNAME}" "${1}." +} + +fail_msg() +{ + echo "${SCRIPTNAME}: failed: ${1}." >&2 + logger -t "${SCRIPTNAME}" "failed: ${1}." +} + +failure() +{ + fail_msg "$1" + exit 1 +} + +running() +{ + lsmod | grep -q "$1[^_-]" +} + +## Output the vboxdrv part of our udev rule. This is redirected to the right file. +udev_write_vboxdrv() { + VBOXDRV_GRP="$1" + VBOXDRV_MODE="$2" + + echo "KERNEL==\"vboxdrv\", NAME=\"vboxdrv\", OWNER=\"root\", GROUP=\"$VBOXDRV_GRP\", MODE=\"$VBOXDRV_MODE\"" + echo "KERNEL==\"vboxdrvu\", NAME=\"vboxdrvu\", OWNER=\"root\", GROUP=\"$VBOXDRV_GRP\", MODE=\"0660\"" + echo "KERNEL==\"vboxnetctl\", NAME=\"vboxnetctl\", OWNER=\"root\", GROUP=\"$VBOXDRV_GRP\", MODE=\"$VBOXDRV_MODE\"" +} + +## Output the USB part of our udev rule. This is redirected to the right file. +udev_write_usb() { + INSTALLATION_DIR="$1" + USB_GROUP="$2" + + echo "SUBSYSTEM==\"usb_device\", ACTION==\"add\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh \$major \$minor \$attr{bDeviceClass}${USB_GROUP}\"" + echo "SUBSYSTEM==\"usb\", ACTION==\"add\", ENV{DEVTYPE}==\"usb_device\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh \$major \$minor \$attr{bDeviceClass}${USB_GROUP}\"" + echo "SUBSYSTEM==\"usb_device\", ACTION==\"remove\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh --remove \$major \$minor\"" + echo "SUBSYSTEM==\"usb\", ACTION==\"remove\", ENV{DEVTYPE}==\"usb_device\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh --remove \$major \$minor\"" +} + +## Generate our udev rule file. This takes a change in udev rule syntax in +## version 55 into account. It only creates rules for USB for udev versions +## recent enough to support USB device nodes. +generate_udev_rule() { + VBOXDRV_GRP="$1" # The group owning the vboxdrv device + VBOXDRV_MODE="$2" # The access mode for the vboxdrv device + INSTALLATION_DIR="$3" # The directory VirtualBox is installed in + USB_GROUP="$4" # The group that has permission to access USB devices + NO_INSTALL="$5" # Set this to "1" to remove but not re-install rules + + # Extra space! + case "$USB_GROUP" in ?*) USB_GROUP=" $USB_GROUP" ;; esac + case "$NO_INSTALL" in "1") return ;; esac + udev_write_vboxdrv "$VBOXDRV_GRP" "$VBOXDRV_MODE" + udev_write_usb "$INSTALLATION_DIR" "$USB_GROUP" +} + +## Install udev rule (disable with INSTALL_NO_UDEV=1 in +## /etc/default/virtualbox). +install_udev() { + VBOXDRV_GRP="$1" # The group owning the vboxdrv device + VBOXDRV_MODE="$2" # The access mode for the vboxdrv device + INSTALLATION_DIR="$3" # The directory VirtualBox is installed in + USB_GROUP="$4" # The group that has permission to access USB devices + NO_INSTALL="$5" # Set this to "1" to remove but not re-install rules + + if test -d /etc/udev/rules.d; then + generate_udev_rule "$VBOXDRV_GRP" "$VBOXDRV_MODE" "$INSTALLATION_DIR" \ + "$USB_GROUP" "$NO_INSTALL" + fi + # Remove old udev description file + rm -f /etc/udev/rules.d/10-vboxdrv.rules 2> /dev/null +} + +## Create a usb device node for a given sysfs path to a USB device. +install_create_usb_node_for_sysfs() { + path="$1" # sysfs path for the device + usb_createnode="$2" # Path to the USB device node creation script + usb_group="$3" # The group to give ownership of the node to + if test -r "${path}/dev"; then + dev="`cat "${path}/dev" 2> /dev/null`" + major="`expr "$dev" : '\(.*\):' 2> /dev/null`" + minor="`expr "$dev" : '.*:\(.*\)' 2> /dev/null`" + class="`cat ${path}/bDeviceClass 2> /dev/null`" + sh "${usb_createnode}" "$major" "$minor" "$class" \ + "${usb_group}" 2>/dev/null + fi +} + +udev_rule_file=/etc/udev/rules.d/60-vboxdrv.rules +sysfs_usb_devices="/sys/bus/usb/devices/*" + +## Install udev rules and create device nodes for usb access +setup_usb() { + VBOXDRV_GRP="$1" # The group that should own /dev/vboxdrv + VBOXDRV_MODE="$2" # The mode to be used for /dev/vboxdrv + INSTALLATION_DIR="$3" # The directory VirtualBox is installed in + USB_GROUP="$4" # The group that should own the /dev/vboxusb device + # nodes unless INSTALL_NO_GROUP=1 in + # /etc/default/virtualbox. Optional. + usb_createnode="$INSTALLATION_DIR/VBoxCreateUSBNode.sh" + # install udev rule (disable with INSTALL_NO_UDEV=1 in + # /etc/default/virtualbox) + if [ "$INSTALL_NO_GROUP" != "1" ]; then + usb_group=$USB_GROUP + vboxdrv_group=$VBOXDRV_GRP + else + usb_group=root + vboxdrv_group=root + fi + install_udev "${vboxdrv_group}" "$VBOXDRV_MODE" \ + "$INSTALLATION_DIR" "${usb_group}" \ + "$INSTALL_NO_UDEV" > ${udev_rule_file} + # Build our device tree + for i in ${sysfs_usb_devices}; do # This line intentionally without quotes. + install_create_usb_node_for_sysfs "$i" "${usb_createnode}" \ + "${usb_group}" + done +} + +cleanup_usb() +{ + # Remove udev description file + rm -f /etc/udev/rules.d/60-vboxdrv.rules + rm -f /etc/udev/rules.d/10-vboxdrv.rules + + # Remove our USB device tree + rm -rf /dev/vboxusb +} + +start_drv() +{ + begin_msg "Starting VirtualBox services" console + if [ -d /proc/xen ]; then + failure "Running VirtualBox in a Xen environment is not supported" + fi + if ! running vboxdrv; then + if ! rm -f $DEVICE; then + failure "Cannot remove $DEVICE" + fi + if ! $MODPROBE vboxdrv > /dev/null 2>&1; then + /usr/sbin/vboxconfig + if ! $MODPROBE vboxdrv > /dev/null 2>&1; then + failure "modprobe vboxdrv failed. Please use 'dmesg' to find out why" + fi + fi + sleep .2 + fi + # ensure the character special exists + if [ ! -c $DEVICE ]; then + MAJOR=`sed -n 's;\([0-9]\+\) vboxdrv$;\1;p' /proc/devices` + if [ ! -z "$MAJOR" ]; then + MINOR=0 + else + MINOR=`sed -n 's;\([0-9]\+\) vboxdrv$;\1;p' /proc/extra` + if [ ! -z "$MINOR" ]; then + MAJOR=10 + fi + fi + if [ -z "$MAJOR" ]; then + rmmod vboxdrv 2>/dev/null + failure "Cannot locate the VirtualBox device" + fi + if ! mknod -m 0660 $DEVICE c $MAJOR $MINOR 2>/dev/null; then + rmmod vboxdrv 2>/dev/null + failure "Cannot create device $DEVICE with major $MAJOR and minor $MINOR" + fi + fi + # ensure permissions + if ! $MODPROBE vboxnetflt > /dev/null 2>&1; then + failure "modprobe vboxnetflt failed. Please use 'dmesg' to find out why" + fi + if ! $MODPROBE vboxnetadp > /dev/null 2>&1; then + failure "modprobe vboxnetadp failed. Please use 'dmesg' to find out why" + fi + # Create the /dev/vboxusb directory if the host supports that method + # of USB access. The USB code checks for the existance of that path. + if grep -q usb_device /proc/devices; then + mkdir -p -m 0750 /dev/vboxusb 2>/dev/null + chown root:vboxusers /dev/vboxusb 2>/dev/null + fi + succ_msg "VirtualBox services started" +} + +stop_drv() +{ + begin_msg "Stopping VirtualBox services" console + + if running vboxnetadp; then + if ! rmmod vboxnetadp 2>/dev/null; then + failure "Cannot unload module vboxnetadp" + fi + fi + if running vboxdrv; then + if running vboxnetflt; then + if ! rmmod vboxnetflt 2>/dev/null; then + failure "Cannot unload module vboxnetflt" + fi + fi + if ! rmmod vboxdrv 2>/dev/null; then + failure "Cannot unload module vboxdrv" + fi + if ! rm -f $DEVICE; then + failure "Cannot unlink $DEVICE" + fi + fi + succ_msg "VirtualBox services stopped" +} + +cleanup_vb() +{ + for i in /lib/modules/*; do + # We could just do "rm -f", but we only want to try deleting folders if + # we are sure they were ours, i.e. they had our modules in beforehand. + if test -e "${i}/extra/vboxdrv.ko" \ + || test -e "${i}/extra/vboxnetadp.ko" \ + || test -e "${i}/extra/vboxnetflt.ko"; then + rm -f "${i}/extra/vboxdrv.ko" "${i}/extra/vboxnetadp.ko" \ + "${i}/extra/vboxnetflt.ko" + # Remove the kernel version folder if it was empty except for us. + test "`echo ${i}/extra/* ${i}/extra/.?* ${i}/* ${i}/.?*`" \ + = "${i}/extra/* ${i}/extra/.. ${i}/extra ${i}/.." && + rmdir "${i}/extra" "${i}" # We used to leave empty folders. + version=`expr "${i}" : "/lib/modules/\(.*\)"` + depmod -a "${version}" + fi + done +} + +# setup_script +setup_vb() +{ +# Try to build the host kernel modules in case prepackaging has failed + /usr/sbin/vboxconfig +} + +dmnstatus() +{ + if running vboxdrv; then + str="vboxdrv" + if running vboxnetflt; then + str="$str, vboxnetflt" + if running vboxnetadp; then + str="$str, vboxnetadp" + fi + fi + echo "VirtualBox kernel modules ($str) are loaded." + for i in $SHUTDOWN_USERS; do + # don't create the ipcd directory with wrong permissions! + if [ -d /tmp/.vbox-$i-ipc ]; then + export VBOX_IPC_SOCKETID="$i" + VMS=`$VBOXMANAGE --nologo list runningvms | sed -e 's/^".*".*{\(.*\)}/\1/' 2>/dev/null` + if [ -n "$VMS" ]; then + echo "The following VMs are currently running:" + for v in $VMS; do + echo " $v" + done + fi + fi + done + else + echo "VirtualBox kernel module is not loaded." + fi +} + +case "$1" in +start) + start_drv + ;; +stop) + stop_drv + ;; +restart) + "$0" stop && "$0" start + ;; +setup) + # Create udev rule and USB device nodes. + ## todo Wouldn't it make more sense to install the rule to /lib/udev? This + ## is not a user-created configuration file after all. + ## todo Do we need a udev rule to create /dev/vboxdrv[u] at all? We have + ## working fall-back code here anyway, and the "right" code is more complex + ## than the fall-back. Unnecessary duplication? + stop_drv && cleanup_vb + setup_usb "$GROUP" "$DEVICE_MODE" "$INSTALL_DIR" + setup_vb && start_drv + ;; +cleanup) + stop_drv && cleanup_vb + cleanup_usb + ;; +force-reload) + "$0" stop + "$0" start + ;; +status) + dmnstatus + ;; +*) + echo "Usage: $0 {start|stop|stop_vms|restart|force-reload|status}" + exit 1 +esac + +exit 0 + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vboxguestconfig.sh new/vboxguestconfig.sh --- old/vboxguestconfig.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/vboxguestconfig.sh 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1,62 @@ +#!/bin/bash +# +# Script to build VirtualBox guest kernel modules +# Copyright C 2017 by Larry Finger +# +# This script is part of the openSUSE VirtualBox package +# +SOURCE="/usr/src/kernel-modules/" +LOGFILE="/var/log/virtualbox.log" +INCLUDE="/lib/modules/`uname -r`/build/include" +# +# Test if vboxguest module loaded. If it is, skip everything else +loaded=$(lsmod | grep vboxguest) +if [ -n "$loaded" ] ; then + echo "Kernel modules available. but we will continue..." +fi +# +# Check if virtualbox-guest-source is installed, quit if not +if ! rpm -qf "$SOURCE/additions/guest_src.tar.bz2" &>/dev/null ; then + echo "Sources for building guest modules are not present," + echo "Use 'sudo zypper install virtualbox-guest-source' to install them. Quitting .." + exit 1 +fi +# unpack source +pushd $SOURCE > /dev/null 2>&1 +tar jxf additions/guest_src.tar.bz2 > /dev/null 2>&1 +popd > /dev/null 2>&1 +# +# Check if virtualbox-guest-source version matches virtualbox version +if [ "$(rpm -q virtualbox virtualbox-guest-source --queryformat='%{version}-%{release}\n' 2>/dev/null | sort -u | wc -l)" -ne "1" ] ; then + echo "virtualbox-guest-source package version doesn't match the version of virtualbox package." + echo "This situation is probably not fatal, thus we will try to continue .." +fi +# Prerequisites are available, start build +pushd $SOURCE/additions/src > /dev/null 2>&1 +echo "Building kernel modules..." +make > $LOGFILE 2>&1 +if [ "$?" -ne 0 ] ; then + echo "" + echo "Build of VirtualBox guest kernel modules failed." + echo "Look at $LOGFILE to find reasons." + popd > /dev/null 2>&1 + exit 1 +else +echo "Kernel modules built correctly. They will now be installed." +fi +make install >> $LOGFILE 2>&1 +if [ "$?" -ne 0 ] ; then + echo "" + echo "Installation of VirtualBox guest kernel modules failed." + echo "Look at $LOGFILE to find reasons." + popd > /dev/null 2>&1 + exit 1 +fi +depmod -a +modprobe -av vboxguest vboxvideo +cd ../.. +rm -rf additions +popd > /dev/null 2>&1 +echo "Kernel modules are installed and loaded." +exit 0 + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vboxweb-service.sh new/vboxweb-service.sh --- old/vboxweb-service.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/vboxweb-service.sh 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1,229 @@ +#!/bin/sh +# $Id: vboxweb-service.sh 127855 2019-01-01 01:45:53Z bird $ +## @file +# VirtualBox web service API daemon init script. +# + +# +# Copyright (C) 2006-2019 Oracle Corporation +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# + +# chkconfig: 345 35 65 +# description: VirtualBox web service API +# +### BEGIN INIT INFO +# Provides: vboxweb-service +# Required-Start: vboxdrv +# Required-Stop: vboxdrv +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Description: VirtualBox web service API +### END INIT INFO + +PATH=$PATH:/bin:/sbin:/usr/sbin +SCRIPTNAME=vboxweb-service.sh + +[ -f /etc/vbox/vbox.cfg ] && . /etc/vbox/vbox.cfg + +if [ -n "$INSTALL_DIR" ]; then + binary="$INSTALL_DIR/vboxwebsrv" + vboxmanage="$INSTALL_DIR/VBoxManage" +else + binary="/usr/lib/virtualbox/vboxwebsrv" + vboxmanage="/usr/lib/virtualbox/VBoxManage" +fi + +# silently exit if the package was uninstalled but not purged, +# applies to Debian packages only (but shouldn't hurt elsewhere) +[ ! -f /etc/debian_release -o -x $binary ] || exit 0 + +[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox + +PIDFILE="/var/run/${SCRIPTNAME}" + +# Preamble for Gentoo +if [ "`which $0`" = "/sbin/rc" ]; then + shift +fi + +begin_msg() +{ + test -n "${2}" && echo "${SCRIPTNAME}: ${1}." + logger -t "${SCRIPTNAME}" "${1}." +} + +succ_msg() +{ + logger -t "${SCRIPTNAME}" "${1}." +} + +fail_msg() +{ + echo "${SCRIPTNAME}: failed: ${1}." >&2 + logger -t "${SCRIPTNAME}" "failed: ${1}." +} + +start_daemon() { + usr="$1" + shift + su - $usr -c "$*" +} + +killproc() { + killall $1 + rm -f $PIDFILE +} + +if which start-stop-daemon >/dev/null 2>&1; then + start_daemon() { + usr="$1" + shift + bin="$1" + shift + start-stop-daemon --background --chuid $usr --start --exec $bin -- $@ + } + + killproc() { + start-stop-daemon --stop --exec $@ + } +fi + +vboxdrvrunning() { + lsmod | grep vboxdrv +} + +check_single_user() { + if [ -n "$2" ]; then + fail_msg "VBOXWEB_USER must not contain multiple users!" + exit 1 + fi +} + +start() { + if ! test -f $PIDFILE; then + [ -z "$VBOXWEB_USER" ] && exit 0 + begin_msg "Starting VirtualBox web service" console; + check_single_user $VBOXWEB_USER + temp=$(lsmod | grep vboxdrv) + echo $temp + if [ -z "$temp" ]; then + fail_msg "VirtualBox kernel module not loaded!" + exit 1 + fi + PARAMS="--background" + [ -n "$VBOXWEB_HOST" ] && PARAMS="$PARAMS -H $VBOXWEB_HOST" + [ -n "$VBOXWEB_PORT" ] && PARAMS="$PARAMS -p $VBOXWEB_PORT" + [ -n "$VBOXWEB_SSL_KEYFILE" ] && PARAMS="$PARAMS -s -K $VBOXWEB_SSL_KEYFILE" + [ -n "$VBOXWEB_SSL_PASSWORDFILE" ] && PARAMS="$PARAMS -a $VBOXWEB_SSL_PASSWORDFILE" + [ -n "$VBOXWEB_SSL_CACERT" ] && PARAMS="$PARAMS -c $VBOXWEB_SSL_CACERT" + [ -n "$VBOXWEB_SSL_CAPATH" ] && PARAMS="$PARAMS -C $VBOXWEB_SSL_CAPATH" + [ -n "$VBOXWEB_SSL_DHFILE" ] && PARAMS="$PARAMS -D $VBOXWEB_SSL_DHFILE" + [ -n "$VBOXWEB_SSL_RANDFILE" ] && PARAMS="$PARAMS -r $VBOXWEB_SSL_RANDFILE" + [ -n "$VBOXWEB_TIMEOUT" ] && PARAMS="$PARAMS -t $VBOXWEB_TIMEOUT" + [ -n "$VBOXWEB_CHECK_INTERVAL" ] && PARAMS="$PARAMS -i $VBOXWEB_CHECK_INTERVAL" + [ -n "$VBOXWEB_THREADS" ] && PARAMS="$PARAMS -T $VBOXWEB_THREADS" + [ -n "$VBOXWEB_KEEPALIVE" ] && PARAMS="$PARAMS -k $VBOXWEB_KEEPALIVE" + [ -n "$VBOXWEB_AUTHENTICATION" ] && PARAMS="$PARAMS -A $VBOXWEB_AUTHENTICATION" + [ -n "$VBOXWEB_LOGFILE" ] && PARAMS="$PARAMS -F $VBOXWEB_LOGFILE" + [ -n "$VBOXWEB_ROTATE" ] && PARAMS="$PARAMS -R $VBOXWEB_ROTATE" + [ -n "$VBOXWEB_LOGSIZE" ] && PARAMS="$PARAMS -S $VBOXWEB_LOGSIZE" + [ -n "$VBOXWEB_LOGINTERVAL" ] && PARAMS="$PARAMS -I $VBOXWEB_LOGINTERVAL" + # set authentication method + password hash + if [ -n "$VBOXWEB_AUTH_LIBRARY" ]; then + su - "$VBOXWEB_USER" -c "$vboxmanage setproperty websrvauthlibrary \"$VBOXWEB_AUTH_LIBRARY\"" + if [ $? -ne 0 ]; then + fail_msg "Error $? setting webservice authentication library to $VBOXWEB_AUTH_LIBRARY" + fi + fi + if [ -n "$VBOXWEB_AUTH_PWHASH" ]; then + su - "$VBOXWEB_USER" -c "$vboxmanage setextradata global \"VBoxAuthSimple/users/$VBOXWEB_USER\" \"$VBOXWEB_AUTH_PWHASH\"" + if [ $? -ne 0 ]; then + fail_msg "Error $? setting webservice password hash" + fi + fi + # prevent inheriting this setting to VBoxSVC + unset VBOX_RELEASE_LOG_DEST + start_daemon $VBOXWEB_USER $binary $PARAMS > /dev/null 2>&1 + # ugly: wait until the final process has forked + sleep .1 + PID=`pidof $binary 2>/dev/null` + if [ -n "$PID" ]; then + echo "$PID" > $PIDFILE + RETVAL=0 + firewall-cmd --permanent --new-service=vboxweb + firewall-cmd --permanent --service=vboxweb --set-description="service to remotely manage VirtualBox" + firewall-cmd --permanent --add-port=18083/tcp --zone=internal --service=vboxweb + firewall-cmd --permanent --set-short="vboxweb" --service=vboxweb + succ_msg "VirtualBox web service started" + else + RETVAL=1 + fail_msg "VirtualBox web service failed to start" + fi + fi + return $RETVAL +} + +stop() { + if test -f $PIDFILE; then + begin_msg "Stopping VirtualBox web service" console; + killproc $binary + RETVAL=$? + # Be careful: wait 1 second, making sure that everything is cleaned up. + sleep 1 + if ! pidof $binary > /dev/null 2>&1; then + rm -f $PIDFILE + succ_msg "VirtualBox web service stopped" + else + fail_msg "VirtualBox web service failed to stop" + fi + fi + return $RETVAL +} + +restart() { + stop && start +} + +status() { + echo -n "Checking for VBox Web Service" + if [ -f $PIDFILE ]; then + echo " ...running" + else + echo " ...not running" + fi +} + +case "$1" in +start) + start + ;; +stop) + stop + ;; +restart) + restart + ;; +force-reload) + restart + ;; +status) + status + ;; +setup) + ;; +cleanup) + ;; +*) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 +esac + +exit $RETVAL diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtualbox-patch-source.sh new/virtualbox-patch-source.sh --- old/virtualbox-patch-source.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/virtualbox-patch-source.sh 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1,62 @@ +#!/bin/bash -ex + +if [ -z "$1" ]; then + echo "You need to pass the filename VirtualBox-x.y.z.tar.bz2 as first argument." + exit 1 +fi + +REMOVE_DIRS=( +src/VBox/Additions/WINNT +src/VBox/Additions/os2 +src/VBox/Runtime/r3/darwin +src/VBox/Runtime/r0drv/darwin +src/VBox/Runtime/darwin +kBuild/bin +kBuild/msgstyles +kBuild/tools +kBuild/sdks +tools/darwin.x86 +tools/darwin.amd64 +tools/freebsd.x86 +tools/os2.x86 +tools/solaris.x86 +tools/solaris.amd64 +tools/win.amd64 +tools/win.x86 +tools/linux.x86 +tools/linux.amd64 +) + +set -o errexit + +CMDNAME=${0##*/} +SOURCEDIR=${0%$CMDNAME} + +BASENAME=${1%.tar.bz2} + +trap "rm -rf \"$BASENAME-patched.tar\" \"$BASENAME-patched.tar.bz2\"" ERR + +for (( N=0 ; N<${#REMOVE_DIRS[@]} ; N++ )) ; do + #REMOVE_DIRS[N]="$BASENAME/${REMOVE_DIRS[N]}" + # use a wildcard because VirtualBox-1.6.0-OSE != VirtualBox-1.6.0_OSE + REMOVE_DIRS[N]="*/${REMOVE_DIRS[N]}" +done + +cd "$SOURCEDIR" >/dev/null + +if ! test -f "$BASENAME.tar.bz2" ; then + exit 0 +fi + +if test -f "$BASENAME-patched.tar.bz2" ; then + if test "$BASENAME.tar.bz2" -ot "$BASENAME-patched.tar.bz2" ; then + if test $CMDNAME -ot "$BASENAME-patched.tar.bz2" ; then + exit 0 + fi + fi +fi + +cp -a "$BASENAME.tar.bz2" "$BASENAME-patched.tar.bz2" +bunzip2 "$BASENAME-patched.tar.bz2" +tar --wildcards --delete -f "$BASENAME-patched.tar" "${REMOVE_DIRS[@]}" +pixz -9 "$BASENAME-patched.tar" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtualbox-wrapper.sh new/virtualbox-wrapper.sh --- old/virtualbox-wrapper.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/virtualbox-wrapper.sh 2025-10-22 16:42:43.000000000 +0200 @@ -0,0 +1,70 @@ +#!/bin/bash +export QT_NO_KDE_INTEGRATION=1 + +# make certain that the user/group combination is valid +/usr/bin/id -nG | grep -v -e "root" -e "vboxusers" >/dev/null && /usr/lib/virtualbox/VBoxPermissionMessage && exit +# +# Handle the issue regarding USB passthru +# The following conditions apply: +# 1. If ~/.config/VirtualBox/enable exists, the user accepts the security risk. +# 2. If ~/.config/VirtualBox/disable exists, the user does not accept the risk. That file will contain the inode of /usr/lib/udev/rules.d/60-vboxdrv.rules. +# When that changes, the VBoxUSB_DevRules will again be displayed as that means that VB has been reloaded. +# +devrules() +{ + /usr/lib/virtualbox/VBoxUSB_DevRules + if [ $? -eq 0 ] ; then + # User accepts the risk + touch ~/.config/VirtualBox/enable + rm -f ~/.config/VirtualBox/disable + else + # User declines the risk - save the inode + echo "" > ~/.config/VirtualBox/disable + rm -f ~/.config/VirtualBox/enable + fi +} + +# Start of main routine +# +# Ensure that ~/.config/VirtualBox exists +mkdir -p ~/.config/VirtualBox +# Get the inode for /usr/lib/udev/rules.d/60-vboxdrv.rules +INODE=$(stat /usr/lib/udev/rules.d/60-vboxdrv.rules | grep Inode | cut -d' ' -f3) +if [ ! -f ~/.config/VirtualBox/enable ] && [ ! -f ~/.config/VirtualBox/disable ] ; then + # Neither file exists - find what the user wants + devrules +fi +# Get the original Inode if it exists +if [ -f ~/.config/VirtualBox/disable ] ; then + read LINE < ~/.config/VirtualBox/disable +else + LINE=" " +fi +# If user originally declined, make certain that /usr/lib/udev/rules.d/60-vboxdrv.rules has not been changed +if [ -f ~/.config/VirtualBox/disable ] && [ "$LINE" != "$INODE" ] && [ "$LINE" != "" ] ; then + # disable is selected and the Inode has changed - ask again + devrules +fi +if [ -f ~/.config/VirtualBox/disable ] ; then + echo $INODE > ~/.config/VirtualBox/disable + if [ "$LINE" != "$INODE" ] ; then + if [ -f /usr/bin/kdesu ] ; then + kdesu /usr/sbin/vbox-fix-usb-rules.sh + fi + if [ -f /usr/bin/gnomesu ] ; then + gnomesu /usr/sbin/vbox-fix-usb-rules.sh + fi + fi +fi +# Check if extpack needs to be updated +/usr/bin/update-extpack.sh +# Check that /usr/lib/virtualbox/VirtualBoxVM has SUID permissions +PERM=$(ls -l /usr/lib/virtualbox/VirtualBoxVM | grep rwsr) +if [ -z "$PERM" ] +then + logger -s "Wrong permissions for VirtualBoxVM - use 'sudo chmod 4711 /usr/lib/virtualbox/VirtualBoxVM' to fix" + /usr/lib/virtualbox/VBoxSUIDMessage + exit 1 +fi +# Now run the VB GUI +LD_LIBRARY_PATH="/usr/lib/virtualbox${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" exec /usr/lib/virtualbox/VirtualBoxQt "$@"
