Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package virtualbox for openSUSE:Factory checked in at 2026-06-15 19:39:47 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/virtualbox (Old) and /work/SRC/openSUSE:Factory/.virtualbox.new.1981 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "virtualbox" Mon Jun 15 19:39:47 2026 rev:308 rq:1359115 version:7.2.8 Changes: -------- --- /work/SRC/openSUSE:Factory/virtualbox/virtualbox.changes 2026-04-16 17:25:43.312349650 +0200 +++ /work/SRC/openSUSE:Factory/.virtualbox.new.1981/virtualbox.changes 2026-06-15 19:41:10.137694484 +0200 @@ -1,0 +2,23 @@ +Thu Jun 11 07:27:32 UTC 2026 - Jiri Slaby <[email protected]> + +- support kernel 7.1 (bsc#1268088) + * 0001-7.2-Backported-r173880-Linux-vboxdrv-Add-initial-sup.patch + * 0001-7.2-Backported-r173857-Additions-Linux-vboxsf-Add-in.patch + +------------------------------------------------------------------- +Sun Apr 26 12:52:13 UTC 2026 - Jan Engelhardt <[email protected]> + +- Update to release 7.2.8 + * VMM: Fixed issue which caused a Guru Meditation with + VERR_IEM_IPE_4 if the guest was trying to execute the wrong + hypercall instruction but injected a UD exception instead + * Fixed crash on FreeBSD 16.0 shutdown with multiple devices + attached to LSI Logic SAS controller + * Added support for Linux 6.19, 7.0 + * Added support for guest time accounting + * Deprecated the vboxvideo kernel module for guest kernels + 7.0 and newer +- Delete kernel-6.19.patch, leap16.1-kmp-fixes.patch + (unapplicable) + +------------------------------------------------------------------- Old: ---- VirtualBox-7.2.6-patched.tpxz kernel-6.19.patch leap16.1-kmp-fixes.patch New: ---- 0001-7.2-Backported-r173857-Additions-Linux-vboxsf-Add-in.patch 0001-7.2-Backported-r173880-Linux-vboxdrv-Add-initial-sup.patch VirtualBox-7.2.8-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 ----------(Old B)---------- Old: 7.0 and newer - Delete kernel-6.19.patch, leap16.1-kmp-fixes.patch (unapplicable) Old: 7.0 and newer - Delete kernel-6.19.patch, leap16.1-kmp-fixes.patch (unapplicable) ----------(Old E)---------- ----------(New B)---------- New: * 0001-7.2-Backported-r173880-Linux-vboxdrv-Add-initial-sup.patch * 0001-7.2-Backported-r173857-Additions-Linux-vboxsf-Add-in.patch New:- support kernel 7.1 (bsc#1268088) * 0001-7.2-Backported-r173880-Linux-vboxdrv-Add-initial-sup.patch * 0001-7.2-Backported-r173857-Additions-Linux-vboxsf-Add-in.patch ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ virtualbox.spec ++++++ --- /var/tmp/diff_new_pack.XLBHTC/_old 2026-06-15 19:41:16.097944240 +0200 +++ /var/tmp/diff_new_pack.XLBHTC/_new 2026-06-15 19:41:16.109944743 +0200 @@ -1,7 +1,7 @@ # # spec file for package virtualbox # -# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -15,6 +15,7 @@ # Please submit bugfixes or comments via https://bugs.opensuse.org/ # + %if "@BUILD_FLAVOR@" == "kmp" # macros for virtualbox-kmp %define main_package 0 @@ -68,8 +69,8 @@ %endif Name: virtualbox%{?dash}%{?name_suffix} -Version: 7.2.6 -%define rversion 7.2.6 +Version: 7.2.8 +%define rversion 7.2.8 Release: 0 Summary: %{package_summary} License: GPL-3.0-only @@ -132,10 +133,9 @@ Patch10: fix_for_leap15.5.patch Patch11: cxx17.patch Patch12: host-source.patch +Patch13: 0001-7.2-Backported-r173880-Linux-vboxdrv-Add-initial-sup.patch +Patch14: 0001-7.2-Backported-r173857-Additions-Linux-vboxsf-Add-in.patch Patch20: gentoo-C23.patch -Patch21: kernel-6.19.patch -# Patch for Leap 16.1 -Patch30: leap16.1-kmp-fixes.patch # # Common BuildRequires for both virtualbox and virtualbox-kmp BuildRequires: %{kernel_module_package_buildreqs} @@ -178,10 +178,10 @@ BuildRequires: lzfse BuildRequires: lzfse-devel %if "%mypython" != "" -BuildRequires: python-rpm-macros BuildRequires: %{mypython}-devel -BuildRequires: %{mypython}-setuptools BuildRequires: %{mypython}-pip +BuildRequires: %{mypython}-setuptools +BuildRequires: python-rpm-macros %endif BuildRequires: qt6-tools-linguist BuildRequires: rpm ++++++ 0001-7.2-Backported-r173857-Additions-Linux-vboxsf-Add-in.patch ++++++ From: Vadim Galitsyn <[email protected]> Date: Wed, 6 May 2026 09:33:39 +0000 Subject: 7.2: Backported r173857: Additions: Linux: vboxsf: Add intial support for kernel 7.1, bugref:11093. References: bsc#1268088 Git-repo: https://github.com/VirtualBox/virtualbox Git-commit: 6df936a242020b486766b8567197139506893fed Patch-mainline: yes, refs/heads/VBox-7.2 svn:sync-xref-src-repo-rev: r173893 Signed-off-by: Jiri Slaby <[email protected]> --- src/VBox/Additions/linux/sharedfolders/regops.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/VBox/Additions/linux/sharedfolders/regops.c b/src/VBox/Additions/linux/sharedfolders/regops.c index 55bd04acede4..dc47f1beb9b8 100644 --- a/src/VBox/Additions/linux/sharedfolders/regops.c +++ b/src/VBox/Additions/linux/sharedfolders/regops.c @@ -3257,7 +3257,9 @@ static loff_t vbsf_reg_llseek(struct file *file, loff_t off, int whence) || (defined(CONFIG_SUSE_KERNEL) && RTLNX_VER_MIN(3,0,101) /** @todo figure when exactly */) static int vbsf_reg_fsync(struct file *file, loff_t start, loff_t end, int datasync) { -# if RTLNX_VER_MIN(3,16,0) +# if RTLNX_VER_MIN(7,1,0) + return simple_fsync_noflush(file, start, end, datasync); +# elif RTLNX_VER_MIN(3,16,0) return __generic_file_fsync(file, start, end, datasync); # else return generic_file_fsync(file, start, end, datasync); -- 2.54.0 ++++++ 0001-7.2-Backported-r173880-Linux-vboxdrv-Add-initial-sup.patch ++++++ From: Vadim Galitsyn <[email protected]> Date: Wed, 6 May 2026 09:34:17 +0000 Subject: 7.2: Backported r173880: Linux: vboxdrv: Add initial support for kernel 7.1, bugref:11093. References: bsc#1268088 Git-repo: https://github.com/VirtualBox/virtualbox Git-commit: 60849e9d3b7619e50f6edd72133324c238a7c6e1 Patch-mainline: yes, refs/heads/VBox-7.2 svn:sync-xref-src-repo-rev: r173894 Signed-off-by: Jiri Slaby <[email protected]> --- src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c b/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c index a028446eb846..bb96fc8d6f62 100644 --- a/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c +++ b/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c @@ -80,7 +80,7 @@ # include <iprt/asm-amd64-x86.h> #endif -#if RTLNX_VER_MIN(6,16,0) && defined(CONFIG_MODULES) && defined(CONFIG_KVM_GENERIC_HARDWARE_ENABLING) && defined(VBOX_WITH_HOST_VMX) +#if RTLNX_VER_RANGE(6,16,0, 7,1,0) && defined(CONFIG_MODULES) && defined(CONFIG_KVM_GENERIC_HARDWARE_ENABLING) && defined(VBOX_WITH_HOST_VMX) # if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) # include <linux/kvm_host.h> # define SUPDRV_LINUX_HAS_KVM_HWVIRT_API -- 2.54.0 ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.XLBHTC/_old 2026-06-15 19:41:16.525962175 +0200 +++ /var/tmp/diff_new_pack.XLBHTC/_new 2026-06-15 19:41:16.533962510 +0200 @@ -1,5 +1,5 @@ -mtime: 1776337858 -commit: a1c639e275fb2923a7c707e99fdb41725529e9e41828f95536a4df7ec6074c3e +mtime: 1781163089 +commit: 348643f0d41bd8556a53fec8291d1a300b81b25410d2f4423190c242b5bc280e url: https://src.opensuse.org/jengelh/virtualbox revision: master ++++++ build.specials.obscpio ++++++ ++++++ 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 2026-06-11 09:31:29.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 2026-06-11 09:31:29.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 2026-06-11 09:31:29.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 2026-06-11 09:31:29.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 2026-06-11 09:31:29.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 2026-06-11 09:31:29.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 2026-06-11 09:31:29.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 2026-06-11 09:31:29.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 2026-06-11 09:31:29.000000000 +0200 @@ -0,0 +1,61 @@ +#!/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/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 2026-06-11 09:31:29.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 "$@" ++++++ fix_usb_rules.sh ++++++ #!/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 ++++++ update-extpack.sh ++++++ #!/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 ++++++ vbox-vboxadd-init-script.diff ++++++ --- /var/tmp/diff_new_pack.XLBHTC/_old 2026-06-15 19:41:16.893977597 +0200 +++ /var/tmp/diff_new_pack.XLBHTC/_new 2026-06-15 19:41:16.897977764 +0200 @@ -1,15 +1,18 @@ -Index: VirtualBox-7.0.20/src/VBox/Additions/linux/installer/vboxadd.sh +--- + src/VBox/Additions/linux/installer/vboxadd.sh | 30 ++++++++++---------------- + 1 file changed, 12 insertions(+), 18 deletions(-) + +Index: VirtualBox-7.2.8/src/VBox/Additions/linux/installer/vboxadd.sh =================================================================== ---- VirtualBox-7.0.20.orig/src/VBox/Additions/linux/installer/vboxadd.sh -+++ VirtualBox-7.0.20/src/VBox/Additions/linux/installer/vboxadd.sh +--- VirtualBox-7.2.8.orig/src/VBox/Additions/linux/installer/vboxadd.sh ++++ VirtualBox-7.2.8/src/VBox/Additions/linux/installer/vboxadd.sh @@ -36,11 +36,14 @@ # Provides: vboxadd # Required-Start: # Required-Stop: --# Default-Start: 2 3 4 5 +# Should-Start: $remote_fs +# Should-Stop: $remote_fs -+# Default-Start: 2 3 5 + # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # X-Start-Before: display-manager # X-Service-Type: oneshot @@ -18,7 +21,7 @@ ### END INIT INFO ## @todo This file duplicates a lot of script with vboxdrv.sh. When making -@@ -266,12 +269,6 @@ do_vboxguest_non_udev() +@@ -239,12 +242,6 @@ do_vboxguest_non_udev() fail "Cannot create device $dev with major $maj and minor $min" } fi @@ -31,7 +34,7 @@ if [ ! -c $userdev ]; then maj=10 -@@ -282,12 +279,6 @@ do_vboxguest_non_udev() +@@ -255,12 +252,6 @@ do_vboxguest_non_udev() rmmod vboxguest 2>/dev/null fail "Cannot create device $userdev with major $maj and minor $min" } @@ -44,57 +47,17 @@ fi fi } -@@ -351,7 +342,7 @@ cleanup_modules() - done - if test -z "${keep}"; then - rm -rf /lib/modules/"${KERN_VER}" -- rm -f /boot/initrd.img-"${KERN_VER}" -+ rm -f /boot/initrd.img-"${KERN_VER}" - fi - done - for i in ${OLDMODULES}; do -@@ -660,9 +651,9 @@ create_udev_rule() - udevcontrol reload_rules >/dev/null 2>&1 || true - fi - } -- --create_module_rebuild_script() --{ -+ # And an rc file to re-build the kernel modules and re-set-up the X server. +@@ -658,6 +649,9 @@ create_udev_rule() + + create_module_rebuild_script() + { ++ # And a rc file to re-build the kernel modules and re-set-up the X server. + ln -sf "$lib_path/$PACKAGE/vboxadd" /sbin/rcvboxadd + #ln -sf "$lib_path/$PACKAGE/vboxadd-x11" /sbin/rcvboxadd-x11 # And a post-installation script for rebuilding modules when a new kernel # is installed. mkdir -p /etc/kernel/postinst.d /etc/kernel/prerm.d -@@ -875,18 +866,17 @@ setup() - already available for kernel $TARGET_VER and do not require to be rebuilt." - else - info "Building the VirtualBox Guest Additions kernel modules. This may take a while." -- info "To build modules for other installed kernels, run" -- info " /sbin/rcvboxadd quicksetup <version>" -- info "or" -- info " /sbin/rcvboxadd quicksetup all" -- if test -d /lib/modules/"$TARGET_VER"/build; then -- setup_modules "$TARGET_VER" -- depmod -- else -- info "Kernel headers not found for target kernel $TARGET_VER. \ -+ info "To build modules for other installed kernels, run" -+ info " /sbin/rcvboxadd quicksetup <version>" -+ info "or" -+ info " /sbin/rcvboxadd quicksetup all" -+ if test -d /lib/modules/"$TARGET_VER"/build; then -+ setup_modules "$TARGET_VER" -+ depmod -+ else -+ info "Kernel headers not found for target kernel $TARGET_VER. \ - Please install them and execute - /sbin/rcvboxadd setup" -- fi - fi - fi - create_vbox_user -@@ -904,17 +894,14 @@ Please install them and execute +@@ -899,15 +893,13 @@ Please install them and execute # Put the X.Org driver in place. This is harmless if it is not needed. # Also set up the OpenGL library. myerr=`"${INSTALL_DIR}/init/vboxadd-x11" setup 2>&1` @@ -108,14 +71,11 @@ cleanup() { - if test -z "${INSTALL_NO_MODULE_BUILDS}"; then -- # Delete old versions of VBox modules. -- cleanup_modules -+ # Delete old versions of VBox modules. -+ cleanup_modules ++ if false; then + # Delete old versions of VBox modules. + cleanup_modules depmod - - # Remove old module sources -@@ -924,12 +911,13 @@ cleanup() +@@ -924,10 +916,12 @@ cleanup() fi # Clean-up X11-related bits @@ -124,91 +84,10 @@ # Remove other files - if test -z "${INSTALL_NO_MODULE_BUILDS}"; then -- rm -f /etc/kernel/postinst.d/vboxadd /etc/kernel/prerm.d/vboxadd -- rmdir -p /etc/kernel/postinst.d /etc/kernel/prerm.d 2>/dev/null || true -+ rm /sbin/rcvboxadd 2>/dev/null -+ #rm /sbin/rcvboxadd-x11 2>/dev/null -+ rm -f /etc/kernel/postinst.d/vboxadd /etc/kernel/prerm.d/vboxadd -+ rmdir -p /etc/kernel/postinst.d /etc/kernel/prerm.d 2>/dev/null || true ++ if false; then ++ rm /sbin/rcvboxadd 2>/dev/null ++ #rm /sbin/rcvboxadd-x11 2>/dev/null + rm -f /etc/kernel/postinst.d/vboxadd /etc/kernel/prerm.d/vboxadd + rmdir -p /etc/kernel/postinst.d /etc/kernel/prerm.d 2>/dev/null || true fi - rm -f /sbin/mount.vboxsf 2>/dev/null - rm -f /etc/udev/rules.d/60-vboxadd.rules 2>/dev/null -Index: VirtualBox-7.0.20/src/VBox/Additions/linux/installer/vboxadd-service.sh -=================================================================== ---- VirtualBox-7.0.20.orig/src/VBox/Additions/linux/installer/vboxadd-service.sh -+++ VirtualBox-7.0.20/src/VBox/Additions/linux/installer/vboxadd-service.sh -@@ -36,7 +36,7 @@ - # Provides: vboxadd-service - # Required-Start: vboxadd - # Required-Stop: vboxadd --# Default-Start: 2 3 4 5 -+# Default-Start: 2 3 5 - # Default-Stop: 0 1 6 - # X-Conflicts-With: systemd-timesyncd.service - # Description: VirtualBox Additions Service -Index: VirtualBox-7.0.20/src/VBox/Installer/linux/vboxautostart-service.sh -=================================================================== ---- VirtualBox-7.0.20.orig/src/VBox/Installer/linux/vboxautostart-service.sh -+++ VirtualBox-7.0.20/src/VBox/Installer/linux/vboxautostart-service.sh -@@ -33,7 +33,7 @@ - # Provides: vboxautostart-service - # Required-Start: vboxdrv - # Required-Stop: vboxdrv --# Default-Start: 2 3 4 5 -+# Default-Start: 2 3 5 - # Default-Stop: 0 1 6 - # Description: VirtualBox autostart service - ### END INIT INFO -Index: VirtualBox-7.0.20/src/VBox/Installer/linux/vboxballoonctrl-service.sh -=================================================================== ---- VirtualBox-7.0.20.orig/src/VBox/Installer/linux/vboxballoonctrl-service.sh -+++ VirtualBox-7.0.20/src/VBox/Installer/linux/vboxballoonctrl-service.sh -@@ -33,7 +33,7 @@ - # Provides: vboxballoonctrl-service - # Required-Start: vboxdrv - # Required-Stop: vboxdrv --# Default-Start: 2 3 4 5 -+# Default-Start: 2 3 5 - # Default-Stop: 0 1 6 - # Description: VirtualBox watchdog daemon - ### END INIT INFO -Index: VirtualBox-7.0.20/src/VBox/ValidationKit/testboxscript/linux/testboxscript-service.sh -=================================================================== ---- VirtualBox-7.0.20.orig/src/VBox/ValidationKit/testboxscript/linux/testboxscript-service.sh -+++ VirtualBox-7.0.20/src/VBox/ValidationKit/testboxscript/linux/testboxscript-service.sh -@@ -41,7 +41,7 @@ - # Provides: testboxscript-service - # Required-Start: $network - # Required-Stop: --# Default-Start: 2 3 4 5 -+# Default-Start: 2 3 5 - # Default-Stop: 0 1 6 - # Description: TestBoxScript service - ### END INIT INFO -Index: VirtualBox-7.0.20/src/VBox/ValidationKit/utils/TestExecServ/linux/vboxtxs-nat.sh -=================================================================== ---- VirtualBox-7.0.20.orig/src/VBox/ValidationKit/utils/TestExecServ/linux/vboxtxs-nat.sh -+++ VirtualBox-7.0.20/src/VBox/ValidationKit/utils/TestExecServ/linux/vboxtxs-nat.sh -@@ -41,7 +41,7 @@ - # Provides: vboxtxs - # Required-Start: $network - # Required-Stop: --# Default-Start: 2 3 4 5 -+# Default-Start: 2 3 5 - # Default-Stop: 0 1 6 - # Description: VirtualBox Test Execution Service - ### END INIT INFO -Index: VirtualBox-7.0.20/src/VBox/ValidationKit/utils/TestExecServ/linux/vboxtxs.sh -=================================================================== ---- VirtualBox-7.0.20.orig/src/VBox/ValidationKit/utils/TestExecServ/linux/vboxtxs.sh -+++ VirtualBox-7.0.20/src/VBox/ValidationKit/utils/TestExecServ/linux/vboxtxs.sh -@@ -41,7 +41,7 @@ - # Provides: vboxtxs - # Required-Start: $network - # Required-Stop: --# Default-Start: 2 3 4 5 -+# Default-Start: 2 3 5 - # Default-Stop: 0 1 6 - # Description: VirtualBox Test Execution Service - ### END INIT INFO ++++++ vbox-vboxdrv-init-script.diff ++++++ --- /var/tmp/diff_new_pack.XLBHTC/_old 2026-06-15 19:41:16.925978937 +0200 +++ /var/tmp/diff_new_pack.XLBHTC/_new 2026-06-15 19:41:16.929979106 +0200 @@ -1,21 +1,20 @@ --- - src/VBox/Installer/linux/vboxdrv.sh | 42 ++++++------------------------------ - 1 file changed, 7 insertions(+), 35 deletions(-) + src/VBox/Installer/linux/vboxdrv.sh | 52 ++++-------------------------------- + 1 file changed, 6 insertions(+), 46 deletions(-) -Index: VirtualBox-7.1.0/src/VBox/Installer/linux/vboxdrv.sh +Index: VirtualBox-7.2.8/src/VBox/Installer/linux/vboxdrv.sh =================================================================== ---- VirtualBox-7.1.0.orig/src/VBox/Installer/linux/vboxdrv.sh -+++ VirtualBox-7.1.0/src/VBox/Installer/linux/vboxdrv.sh +--- VirtualBox-7.2.8.orig/src/VBox/Installer/linux/vboxdrv.sh ++++ VirtualBox-7.2.8/src/VBox/Installer/linux/vboxdrv.sh @@ -29,11 +29,12 @@ # ### BEGIN INIT INFO # Provides: vboxdrv -# Required-Start: $syslog -# Required-Stop: --# Default-Start: 2 3 4 5 +# Required-Start: $syslog $remote_fs +# Required-Stop: $syslog $remote_fs -+# Default-Start: 2 3 5 + # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 -# Short-Description: VirtualBox Linux kernel module +# Short-Description: VirtualBox Linux module @@ -23,7 +22,7 @@ ### END INIT INFO ## @todo This file duplicates a lot of script with vboxadd.sh. When making -@@ -571,13 +572,6 @@ See the documentation for your Linux dis +@@ -573,13 +574,6 @@ See the documentation for your Linux dis fi fi # ensure permissions @@ -37,14 +36,25 @@ if ! $MODPROBE vboxnetflt > /dev/null 2>&1; then failure "modprobe vboxnetflt failed. Please use 'dmesg' to find out why" fi -@@ -736,30 +730,8 @@ setup() +@@ -730,42 +724,8 @@ setup() module_build_log "$myerr" failure "Look at $LOG to find out what went wrong" fi +- log "Building the net filter module." +- if ! myerr=`$BUILDINTMP \ +- --use-module-symvers /tmp/vboxdrv-Module.symvers \ +- --module-source "$MODULE_SRC/vboxnetflt" \ +- --skip-depmod \ +- --no-print-directory install 2>&1`; then +- log "Error building the module:" +- module_build_log "$myerr" +- failure "Look at $LOG to find out what went wrong" +- fi - log "Building the net adapter module." - if ! myerr=`$BUILDINTMP \ - --use-module-symvers /tmp/vboxdrv-Module.symvers \ - --module-source "$MODULE_SRC/vboxnetadp" \ +- --skip-depmod \ - --no-print-directory install 2>&1`; then - log "Error building the module:" - module_build_log "$myerr" @@ -55,6 +65,7 @@ - if ! myerr=`$BUILDINTMP \ - --use-module-symvers /tmp/vboxdrv-Module.symvers \ - --module-source "$MODULE_SRC/vboxpci" \ +- --skip-depmod \ - --no-print-directory install 2>&1`; then - log "Error building the module:" - module_build_log "$myerr" ++++++ vboxautostart-service.sh ++++++ #!/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 ++++++ vboxconfig.sh ++++++ #!/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 ++++++ vboxdrv.sh ++++++ #! /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 ++++++ vboxguestconfig.sh ++++++ #!/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 ++++++ vboxweb-service.sh ++++++ #!/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 ++++++ virtualbox-60-vboxguest.rules ++++++ --- /var/tmp/diff_new_pack.XLBHTC/_old 2026-06-15 19:41:17.189990001 +0200 +++ /var/tmp/diff_new_pack.XLBHTC/_new 2026-06-15 19:41:17.205990671 +0200 @@ -1,4 +1,4 @@ KERNEL=="vboxguest", NAME="vboxguest", OWNER="root", MODE="0660" ENV{ID_INPUT}="1", ENV{ID_INPUT_MOUSE}="1" -KERNEL=="vboxuser", NAME="vboxuser", OWNER="root", MODE="0660", TAG+="uaccess" +KERNEL=="vboxuser", NAME="vboxuser", OWNER="root", MODE="0666", TAG+="uaccess" ACTION=="add|change", SUBSYSTEM=="drm", KERNEL=="card[0-9]", SUBSYSTEMS=="pci", ATTRS{vendor}=="0x15ad", ATTRS{device}=="0x0405", TAG+="systemd", ENV{SYSTEMD_WANTS}="vboxclient.service" ++++++ virtualbox-patch-source.sh ++++++ #!/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/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" ++++++ virtualbox-wrapper.sh ++++++ #!/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 "$@"
