How Do I Upgrade VirtualBox from the Command Line
I need to remotely log into a Mac to upgrade VirtualBox. The problem is screen sharing is just abysmally slow and I don't want to use 3rd party screen sharing utilities. I prefer to do this in Terminal (SSH) as it's much more efficient for me.
Is there a way to upgrade VirtualBox from the command line?
Solution 1:
How to upgrade VirtualBox via the Command Line in macOS - 5 steps!
This is a quick guide on how to upgrade (install) VirtualBox from the command line. It will involve mounting a .dmg, installing a .pkg, and finally upgrading (installing) the Extension Pack.
Prerequisites
This guide assumes you have already downloaded the required files found on https://www.virtualbox.org/wiki/Downloads and have sudo
privileges.
You also need the names or UUIDS of the running VMs. You can get that by using the VBoxManage list runningvms
command. Remember if you use the VM name and it has spaces, you must encapsulate it in quotes. Example: VBoxManage showvminfo "My VM"
1. Shutdown all running VMs and VirtualBox Application
Shutting down VMs is as simple as logging in and powering down the VM. However, since this is "Terminal only" solution, we need to look at the savestate
function in VBoxManage
.
VBoxManage controlvm <vmname|UUID> savestate
Issue that command for each VM by name or UUID and it will automatically save the "position" of the running VM and then close it. This is equivalent to selecting the Close item in Machine Menu of the VirtualBox GUI.
Note: This is not like "pulling the plug" This will save the machine state so that when you power back on, it will pick up right where it left off.
Next, we need to make sure the VirtualBox GUI (management console) isn't running. To kill the VirtualBox GUI, just issue the command:
killall VirtualBox
2. Mount the VirtualBox Installation .dmg1
hdiutil attach ~/Downloads/VirtualBox-Version.dmg
You will see several "Checksumming" messages and when finished, you will see the disks
and mount point that the image was attached to similar to below (these device identifiers and names will differ from yours):
/dev/disk5 GUID_partition_scheme
/dev/disk5s1 Apple_HFS /Volumes/VirtualBox
The important piece is /Volumes/VirtualBox
. This is where the installer will be located.
3. Install the .pkg2
Next, we're going to run the installer to install the .pkg file. Located on the volume we just mounted.
sudo installer -pkg /Volumes/VirtualBox/VirtualBox.pkg -target /
If you get the following message, go back to step 1
installer: Error - The installer has detected running virtual machines. Please shut down all running VirtualBox machines and then restart the installation
If all goes well, you should see the following message:
installer: Package name is Oracle VM VirtualBox
installer: Upgrading at base path /
installer: The upgrade was successful.
You can verify that the new version was installed by issuing the command:
VBoxManage --version
4. Install the Extension Pack
To upgrade the Extension Pack, you need to remove the old one and install the new one. You can use the VirtualBoxManage extpack uninstall [--force] { name }
and VBoxManage extpack install {tarball}
commands, but luckily, Oracle provided us with a --replace
option to do it in one step:
sudo VBoxManage extpack install --replace ~/Downloads/Oracle_VM_VirtualBox_Extension_Pack-version.vbox-extpack
There will be some license terms, simply enter "Y" to accept. If successful, you will see the following message:
Successfully installed "Oracle VM VirtualBox Extension Pack".
5. Restart your VMs and Eject Your Volume
Success! You're all done. Restart your VMs as needed
VBoxManage startvm <vmname|UUID> [--type headless|GUI|seperate]
Most of my VMs are headless boxes so I issue the command with the --type headless
option
VBoxManage startvm "FreeBSD" --type headless
Don't forget to eject the installation media volume. You won't want unsuspecting users coming in and finding attached volumes!
hdiutil eject /Volumes/VirtualBox
References and further reading
1Is there a command to install a dmg
2Installing .pkg with terminal ?
VBManage Reference Manual