Setting up a Debian Linux VM in VirtualBox

These instructions were written for the Fall 2020 semester of COMS 4118 at Columbia University.

About Debian

There are many GNU+Linux distributions out there. Debian is our choice. Start by reading a little bit about it.

Download VirtualBox and Debian


Download and install the latest version of VirtualBox:


Download the ISO image of the latest stable Debian release at this time of writing, Debian 10.5.0 (Buster).

Create a VM

Create a new VM in VirtualBox. Use the following settings:

Increasing your VMs core count (optional)

You probably won’t need more than a single virtual CPU for setting up your VM, but it’s a good idea to give your VM more cores at some point. Having multiple cores will help you better test your concurrent programs, and help you compile the Linux kernel faster. Don’t worry if you forgot to do this step – you can change your virtual core count at any time.

Making sure your VM is turned off, select it in the VirtualBox Manager, and go to “Settings…”. Go to “System”/”Processor”, and increase the number of “Processor(s)”.

Installing Debian

Now you’ve created a VirtualBox virtual machine, but nothing is installed on it. We will install Debian using the live CD installer image we downloaded; if you were doing this on a physical machine, you create a bootable USB drive from the .iso file you downloaded, and boot into that (because CD ROM drives are hard to come by these days). We’ll be doing the VirtualBox version of that.

Click “Start” to boot your (still empty) VM, and when it asks for a start-up disk, use the CD image you downloaded (i.e. the .iso file).

You should now be shown a VirtualBox splash screen on a virtual console. Before we a continue, a couple of things about interacting with the virtual console:

The CD will give you several options for installing your operating system. Use the “graphical installer”. You’ll be guided through a somewhat lengthy installation process. Most of the default settings are acceptable – below is an outline for the choices you should be making:

Time to reboot into your new system!

Setting up your Debian VM

Once you reboot, you’ll be greeted with a login screen. Use the user account you created earlier (e.g. we would use debbie here as our username).

Welcome to your VM’s desktop environment! Your system may ask you about configuring your desktop. Just select the default configuration for now – you can always tweak it later.

If you chose Xfce as your desktop environment, you should see a dock at the bottom of your screen, quite like the one on macOS. Open the terminal.

You’ll be logged into your user account, which does not have superuser/root privileges yet. Switch into the root account using the following command:

$ su -

Type in the password you set for the root account. Now you should be logged in as root:


You’ll notice through this guide (and others) that certain shell commands begin with $, while others begin with #. These shell prompts represent the permissions you should run the command with; you should not be typing the prompts in. The convention is that commands with $ should be run as a regular user (e.g. debbie), whereas commands beginning with # should be run as a superuser (e.g. root, or using sudo). Speaking of which, your VM won’t have sudo installed yet! We’ll do that first.

Installing your first package

Update your package lists:

# apt update

This retrieves the most up-to-date list of packages from APT’s repositories, which tell apt all the things it can install. First, let’s upgrade all packages that can be upgraded:

# apt upgrade

Now we can install sudo, as well as some other useful packages for getting through the rest of setup:

# apt install sudo git build-essential net-tools

Feel free to also install any programs you are accustomed to using, such as vim, emacs, tmux, htop, etc. Just add these to the list of programs for apt for install in the above command, after net-tools.

Setting up sudo

sudo stands for SuperUserDO – it helps you run commands with superuser permissions from a regular account. To set this up, you will need to edit the /etc/sudoers configuration file by running:

# visudo

Add the following to the bottom:

# The basic structure of a user spec looks like this:
# who where = (as_whom) how: what

Of course, if you chose a different username, use that instead of debbie. Save your changes and quit the text editor.

If you’re still logged in as root at this point from using su -, logout to return to your regular user account:

# exit

Now that you added that line to your sudoers file, you should be able to run the following command from your regular user account, without having to type in your password:

$ sudo echo "I am a sudoer, hear me roar!"
I am a sudoer, hear me roar!

Now, when you come across a # shell prompt in any future guide, you may use sudo instead from your user account. For example, to update your packages again, instead of running (as root):

# apt update

You can instead run (as debbie):

$ sudo apt update

Install VirtualBox Guest Additions

Now you should install VirtualBox Guest Additions inside the VM. The Guest Additions will enable some useful features, like dynamically resizing the VM window, copying & pasting between the guest and host, time synchronization between the guest & host, and accessing the host file system from the guest.

Now, in your VirtualBox menu bar, expand the Devices menu and select Insert Guest Additions CD image…. This loads a virtual CD ROM into your VM, and puts an icon for it on your desktop. Double-click it to mount it at /media/cdrom0/.

You can now run the installer by typing:

# apt install linux-headers-$(uname -r)
# sh /media/cdrom0/

After the installation completes, restart your VM and try resizing the virtual machine window. Your Debian desktop should resize itself accordingly.

You should also now be able to copy and paste between your host and guest machine. To enable this, go to the Devices menu, and under Shared Clipboard, select Bidirectional. After you restart your VM, you should be able to paste in your VM what you copied in your host machine, and vice versa.

Disable Power Management

By default, Debian tries to do its own power management. This is unnecessary in a VM, and may cause your VM to become unresponsive after being inactive for some time.

To disable power management in the Xfce desktop environment, open up the Applications menu on the top left corner of the GUI, and go to Settings / Power Manager to open up the Xfce Power Manager. On the System tab, make sure it never goes to sleep, and on the Display tab, uncheck “Display power management”.

Disable GUI on boot (optional)

If you prefer to boot directly into a terminal prompt on your serial console, rather than fussing with the graphical desktop environment, you can disable it by running the following:

# systemctl set-default

Now, once you boot, you’ll be greeted with a text-based serial console:

Debian GNU/Linux 10 poliwhirl tty1
poliwhirl login: _

You can login with your regular credentials (e.g. as debbie). If you need to open up your graphical desktop environment, you can manually launch it:

$ startx

You can always re-enable the booting into your desktop environment:

# systemctl set-default