These instructions were written for the Spring 2024 semester of COMS 4118 at Columbia University.
There are many GNU+Linux distributions out there. Debian is our choice. Start by reading a little bit about it.
Download and install the latest version of VMware desktop hypervisor for your computer:
VMware Workstation Pro 30-day trial if you use Windows or Linux
VMware Fusion Pro 30-day trial if you use macOS
Install VMware as a 30-day trial for now. Registered students will receive VMware Workstation/Fusion Pro license in 2-3 weeks. You can then enter the license to remove the trial status.
The current stable distribution of Debian is version 12, codenamed bookworm. For this class, we will be using Debian version 11, codenamed bullseye.
If your computer has Intel (x86) CPU, download debian-11.6.0-amd64-netinst.iso
from here.
If your computer has M1/M2 CPU/GPU, download debian-11.6.0-arm64-netinst.iso
from here.
Always verify the checksums of what you download.
Import the debian public key using
gpg --keyserver keyring.debian.org --recv-keys <RSA>
Verify the checksum file (e.g. SHA512SUMS
) against the signature file
(e.g. SHA512SUMS.sign
)
Verify the checksum of the image (e.g. *.iso
) against the checksum file
Create a new virtual machine in VMware using the Debian ISO image you just downloaded.
For the OS for the VM, choose Debian 11.x 64-bit
if available.
Depending on your platform, it may not be an option yet.
In that case, choose Other Linux 5.x and later kernel 64-bit
.
If prompted to select boot firmware, choose the default provided.
If you are using an M1/M2 machine, the above two options may be selected for you by default upon selecting the Debian ISO image.
The default settings for memory and storage are probably too small.
Customize your VM as follows. Note that on some platforms, you may need to
press Finish
and create the VM before you can open settings to edit the VM
memory and storage.
Name: (your choice)
CPU: 2 processor cores
RAM: 2 GB minimum; 4 GB or more highly recommended, provided that your host machine has 8 GB of RAM or more
Hard disk: 100 GB minimum, 200 GB or more recommended
After configuring the VM, start the VM. The VM will now boot from its CD-ROM drive containing the Debian GNU/Linux install disk, which is virtually mapped to the ISO file that you downloaded.
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 some of the choices you should be making:
Language: English - English
Location: United States
Keyboard: American English
Hostname: Whatever you named your VM, in lower case (e.g. poliwhirl
)
Domain name: (blank)
Root password: (your choice)
Users: Create your user account, which you will use for development
Full name: (your choice)
Username: (your choice; for our examples, we chose debbie
)
Password: (your choice)
Timezone: Eastern
Partition disks: This will format your virtual hard disk so that you can install your operating system in it and boot into it
Partitioning method: Guided - use entire disk
Select disk to partition: (there should only be one option, use it)
SCSI3 (0,0,0) (sda) - <size> ...
Partitioning scheme: All files in one partition (recommended for
new users)
Partition disks overview: Finish partitioning and write changes to
disk
Write the changes to disks?: Select Yes
Configure the package manager:
Scan extra installation media?: No
Debian archive mirror country: United States
Debian archive mirror: (accept the default)
HTTP proxy information: (blank)
Participate in popularity-contest
?: No
Software select:
Debian desktop environment
... Xfce
Xfce
but you can use any desktop environment(s) you’d likeSSH server
standard system utilities
Installing the GRUB boot loader: this installs a boot loader on your disk, which you can use to select which kernel to boot into.
Install the GRUB boot loader to the master boot record?: Yes
Device for boot loader installation: Instead of entering the device
manually, select the /dev/sda
option that the menu presents you
Time to reboot into your new system!
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.
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 linux-headers-$(uname -r)
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
.
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
It will launch an editor
(probably vim
if you installed, nano
if you didn’t).
Add the following to the bottom:
# The basic structure of a user spec looks like this:
# who where = (as_whom) how: what
debbie ALL=(ALL) NOPASSWD: ALL
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
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”.
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 multi-user.target
Now, once you boot, you’ll be greeted with a text-based serial console:
Debian GNU/Linux 11 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 graphical.target
Once you’ve set up your VM to your satisfaction, you should take a preliminary snapshot. Snapshots capture the current running state of the VM, store it, and then allows you to revert to that state at a later point. In general, you should snapshot your VM before executing something that can compromise the system. Taking a snapshot now will allow you to revert to a clean state in case your VM breaks somehow.
If you’re running low on disk space, you should take a snapshot while your VM is shut down. Otherwise, VMWare will snapshot the VM’s current memory. While this may be useful sometimes, it adds several extra gigabytes to your snapshot size.
Two tips you may find useful for using your VM include using SSH to connect to your VM, which you may find more convenient at times instead of using the graphical console, and setting up vim to do development in your VM.