Skip to content

Instantly share code, notes, and snippets.

@magnetikonline
Last active June 26, 2024 10:32
Show Gist options
  • Save magnetikonline/1e7e2dbd1b288fecf090f1ef12f0c80b to your computer and use it in GitHub Desktop.
Save magnetikonline/1e7e2dbd1b288fecf090f1ef12f0c80b to your computer and use it in GitHub Desktop.
Install VirtualBox 7.0/6.1/6.0/5.2/5.1 guest additions on Ubuntu server guest.

Install VirtualBox guest additions onto Ubuntu server guests

Note

The following steps have been successfully tested with Ubuntu guests of:

  • 24.04LTS
  • 22.04LTS
  • 18.04LTS
  • 16.04LTS

using VirtualBox editions of 7.0, 6.1, 6.0, 5.2 and 5.1 as host.

Install steps

  • Create Ubuntu server instance under VirtualBox (obviously).

  • Start VM, goto Devices - Insert Guest Additions CD image to mount the ISO image.

  • From the terminal, run the following commands:

     $ sudo su
     $ apt install gcc make
     $ mkdir --parents /media/cdrom
     $ mount /dev/cdrom /media/cdrom
     $ /media/cdrom/VBoxLinuxAdditions.run
     $ reboot
  • After reboot:

     $ modinfo vboxguest
     $ sudo usermod --append --groups vboxsf -- "$USER"
     $ cat /etc/group | grep "$USER"
  • Host shares should now be mounted in Ubuntu guest under /media via the installed VBoxService service, set to start on system boot-up.

  • All done.

Note: the above steps can be repeated on an existing VM image for guest addition upgrades, VBoxLinuxAdditions.run will handle the uninstall and reinstall process automatically.

Mount with guest/host permissions matched

By default with auto mounted shares, VirtualBox will set an interesting set of ownership and file/directory permissions for the guest which (for me at least) is sub-optimal.

To correct this behavior and correctly mirror permissions between host and guest we can do the following:

  • Shut down the guest (if not already) and ensure "Auto-mount" is disabled.

  • Restart the guest.

  • From the shell, determine the umask and uid/gid of the host user:

     $ umask
     0022
     $ id
     uid=1000(USERNAME) gid=1000(USERNAME) groups=1000(USERNAME),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd),115(lpadmin),116(sambashare)
  • Now mount the share as follows, inserting UMASK, UID, GID and SHARE_NAME:

     $ mkdir --parents /path/to/share
     $ sudo mount.vboxsf -o umask=UMASK,uid=UID,gid=GID SHARE_NAME /path/to/share
  • If this works, we can now add a permanent entry to /etc/fstab, again inserting UMASK, UID, GID and SHARE_NAME:

     SHARE_NAME /path/to/share vboxsf umask=UMASK,uid=UID,gid=GID 0 0
    
  • Remount all file systems

     $ sudo mount -a
  • All done.

Allow symlink creation for shared folders

By default symlink creation by a VirtualBox guest against a shared/host filesystem is not allowed. To unlock run the following:

$ vboxmanage setextradata VBOX_GUID VBoxInternal2/SharedFoldersEnableSymlinksCreate/SHARED_FOLDER_NAME 1

A list of active/valid VBOX_GUID's can be returned via:

$ vboxmanage list vms

Reference

@mchikka1
Copy link

Just used the instructions for the "Install Steps" section above, works for Ubuntu 22.04 LTS server.

@magnetikonline
Copy link
Author

Champion - thanks @mchikka1 for reporting back 👍 I'll update the notes.

@mjakovina
Copy link

mjakovina commented Jul 21, 2023

Should simple copy/paste (of simple text) between host and giest work after this?
For me, it does not work (from Windows 10 host to Ubuntu 22.04 guest)

@Numichi
Copy link

Numichi commented May 28, 2024

It works with 24.04

@magnetikonline
Copy link
Author

Thanks @Numichi - have updated the guide. 👍

@Numichi
Copy link

Numichi commented May 29, 2024

@magnetikonline I forgot to mention, it was on VirtualBox 7.0.18 :)

@magnetikonline
Copy link
Author

Thanks again @Numichi - I don't actually use VirtulBox anymore - having moved to an M1 series Macbook - where VirtualBox isn't a think (at least it wasn't at the time) - so now use Multipass - with good success.

So rely on others like you to keep this Gist up to date somewhat 😄.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment