Run Ubuntu Virtual Machines on Linux and macOS using Multipass

Posted on 61 views

This guide demonstrates how to run Ubuntu Virtual Machines on Linux and macOS using Multipass. But before we dive into the crux of this tool. Let us get to know what this tool is.

What is Multipass?

There are many virtualization tools available to deploy VMs for testing and learning purposes. These include Virtualbox, VMware, LXD, KVM, Docker, LXC, Proxmox, Vagrant e.t.c I use Virtualbox and VMware regularly for testing various Linux applications on Linux distributions. In this guide, we are going to take in yet another virtualization tool known as Multipass. This tool makes it easy to create and launch Ubuntu Virtual Machines for regular users, developers, and system admins.

Multipass is a lightweight Virtual machine manager developed by the canonical team to create and launch ubuntu instances on your local machine. It is developed to run on macOS, Windows, and GNU/Linux systems. Multipass uses KVM on Linux, Hyper kit on macOS, and Hyper-V on Windows to run the virtual machine with minimal overhead.

With Multipass, one can run commands directly into the VM’s shell from your local computer. Moreso, it is possible to mount directories of your host system and share files with the VM.

With the above knowledge, we are now set to dive into the installation of Multipass.

Step 1: Install Multipass On Linux and macOS

1. Install Multipass on Linux

On Linux, Multipass is available as a snap package. It can easily be installed on any Linux distribution that supports snapd.

In some distributions such as Zorin OS, Solus 3 and Ubuntu releases from 16.04 LTS snap comes as a pre-installed application. You can install snapd as below:

###On Debian/Ubuntu
sudo apt install snapd

###On RHEL 7/CentOS 7
sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum -y upgrade
sudo yum -y install snapd

###On Rhel 8/Centos 8/Rocky Linux 8/Fedora
sudo dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo dnf -y upgrade
sudo dnf -y install snapd

Then enable snapd as below:

sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap

With snap installed and started, we are set to install Multipass on any Linux distribution using the command:

First, update and upgrade your system. Then install Multipass on Linux as below

sudo snap install multipass

If the above fails to run for any reason, try to install Multipass with this command:

sudo snap install multipass --classic

With Multipass successfully installed, you will see this output:

multipass 1.10.1 from Canonical installed

2. Install Multipass on macOS

On macOS, there are multiple ways to get Multipass installed on your system.

1. Using Multipass Installer

Download the Multipass installer from the official downloads page then install it. With the .pkg package downloaded, Install it on your macOS system by activating it. Follow through the steps given using Administrator privileges.

Run-Ubuntu-Virtual-Machines-on-Linux-and-macOS-using-Multipass

2. Using Brew

With brew, you can easily install Multipass on macOS using the command below:

brew install --cask multipass

On macOS, Multipass supports VirtualBox as a virtualization provider. If you would like to use VirtualBox, issue the below command:

sudo multipass set local.driver=virtualbox

Verify your Multipass installation using the command.

$ multipass version
multipass 1.10.1+mac
multipassd 1.10.1+mac

Step 2: Create and launch Ubuntu VMs with Multipass on Linux and macOS

With Multipass successfully installed on your system, running Ubuntu VM’s is incredibly easy.

To launch an Ubuntu Instance use the command:

multipass launch --name test-instance

alternatively use:

multipass launch -n test-instance

In the above code, replace test-instance with your desired Ubuntu instance name.

The latest minimal Ubuntu LTS instance will be downloaded and automatically started as below:

Run-Ubuntu-Virtual-Machines-on-Linux-and-macOS-using-Multipass-1

You can now list your available VMs using the command:

multipass list

Sample Output:

Name                    State             IPv4             Image
test-instance           Running           10.14.155.56     Ubuntu 20.04 LTS

From the above output, we have an Ubuntu instance with the name test-instance with Ubuntu 20.04 LTS and also the IP is provided.

Execute commands for your VM from the Local System.

One of the amazing features of Multipass is that it allows one to run commands for the Ubuntu instance from the local machine.

To find the system’s details for a running VM use:

multipass exec test-instance -- lsb_release -a

In the code, test-instance is the name for the VM we want the details for.

Sample Output:

Run-Ubuntu-Virtual-Machines-on-Linux-and-macOS-using-Multipass-2

Launch Ubuntu VM’s shell.

Aside from running commands from the local system’s shell, you can launch the Ubuntu VM’s shell and directly run the commands on it. The Shell for the Ubuntu VM is launched with the command:

multipass shell test-instance

Sample Output:

Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-81-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Mon Aug 30 14:32:29 EAT 2021

  System load:  0.08              Processes:             104
  Usage of /:   27.4% of 4.67GB   Users logged in:       0
  Memory usage: 18%               IPv4 address for ens4: 10.14.155.56
  Swap usage:   0%


1 update can be applied immediately.
To see these additional updates run: apt list --upgradable


Last login: Mon Aug 30 14:31:40 2021 from 10.14.155.1
To run a command as administrator (user "root"), use "sudo ".
See "man sudo_root" for details.

[email protected]:~$ 

From the shell, you can execute the normal Ubuntu command such as:

sudo apt update

To logout from the shell use:

exit

Find other instances to Launch

As we already saw earlier, Multipass finds and downloads the current LTS version of Ubuntu for the VM. But you still can find other available versions you want to run using the command:

$ multipass find
Image                       Aliases           Version          Description
snapcraft:core18            18.04             20201111         Snapcraft builder for Core 18
snapcraft:core20            20.04             20210921         Snapcraft builder for Core 20
snapcraft:core22            22.04             20220426         Snapcraft builder for Core 22
snapcraft:devel                               20220913         Snapcraft builder for the devel series
core                        core16            20200818         Ubuntu Core 16
core18                                        20211124         Ubuntu Core 18
18.04                       bionic            20220901         Ubuntu 18.04 LTS
20.04                       focal,lts         20220824         Ubuntu 20.04 LTS
22.04                       jammy             20220902         Ubuntu 22.04 LTS
daily:22.10                 devel,kinetic     20220910         Ubuntu 22.10
appliance:adguard-home                        20200812         Ubuntu AdGuard Home Appliance
appliance:mosquitto                           20200812         Ubuntu Mosquitto Appliance
appliance:nextcloud                           20200812         Ubuntu Nextcloud Appliance
appliance:openhab                             20200812         Ubuntu openHAB Home Appliance
appliance:plexmediaserver                     20200812         Ubuntu Plex Media Server Appliance
anbox-cloud-appliance                         latest           Anbox Cloud Appliance
charm-dev                                     latest           A development and testing environment for charmers
docker                                        latest           A Docker environment with Portainer and related tools
jellyfin                                      latest           Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media.
minikube                                      latest           minikube is local Kubernetes

From the output, there are several Ubuntu LTS versions. You can launch an instance from the list using the syntax below.

$ multipass launch --name test1-instance 22.04

This command will launch an instance for Ubuntu 22.04.

Create an Instance with Custorm Specifications.

Multipass by default will create a VM with 5 GB hard disk size, 1 CPU, and 1 GB RAM. However, this can be altered by making custom settings for the VM you want. This helps one create a VM meeting desired specifications and need.

For example in the below code, I will demonstrate how to create a VM with 2 CPUs, 4 GB RAM, and 15 GB storage space.

multipass launch -c 2 -m 4G -d 15G -n test2-instance

View info about the instance:

$ multipass info test2-instance
Name:           test2-instance
State:          Running
IPv4:           10.14.155.175
Release:        Ubuntu 20.04.3 LTS
Image hash:     97bb9f79af52 (Ubuntu 20.04 LTS)
Load:           0.47 0.31 0.12
Disk usage:     1.3G out of 14.4G
Memory usage:   149.0M out of 3.8G
Mounts:         --

Remember, the minimum allowed requirements are:

  • CPU- 1
  • Memory- 128 MB
  • Hard diks- 512 MB

Launch with custom network interface

List available networks:

$ multipass networks
Name     Type         Description
bridge0  bridge       Network bridge with en1, en2, en3, en4
en0      wifi         Wi-Fi (Wireless)
en1      thunderbolt  Thunderbolt 1
en2      thunderbolt  Thunderbolt 2
en3      thunderbolt  Thunderbolt 3
en4      thunderbolt  Thunderbolt 4

Launch an instance with specified network interface:

multipass launch -c 2 -m 4G -d 15G --network name=en0 -n test2-instance

Wait for instance to start then check available interfaces:

$ multipass shell test2-instance
[email protected]:~$ ip ad
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:7f:cb:cf brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
       valid_lft 85884sec preferred_lft 85884sec
    inet6 fe80::5054:ff:fe7f:cbcf/64 scope link
       valid_lft forever preferred_lft forever
3: enp0s8:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:43:43:b4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.164/24 brd 192.168.100.255 scope global dynamic enp0s8
       valid_lft 85890sec preferred_lft 85890sec
    inet6 fe80::5054:ff:fe43:43b4/64 scope link
       valid_lft forever preferred_lft forever

Suspend running instances

To suspend instance on Multipass, run the command:

multipass suspend test-instance

Verify if the instance is suspended:

$ multipass info test-instance
Name:           test-instance
State:          Suspended
IPv4:           --
Release:        --
Image hash:     97bb9f79af52 (Ubuntu 20.04 LTS)
Load:           --
Disk usage:     --
Memory usage:   --
Mounts:         --

The command multipass info test-instanceis generally used to get information about an instance.

Step 3: Manage Ubuntu VMs on Multipass.

You can start and stop Ubuntu VMs on Multipass using the below commands:

###Stop a VM
multipass stop test-instance

###Start a VM
multipass start test-instance

Alternatively, you can manage your VMs using the Multipass Tray icon. This is done by launching Multipass GUI from the App Menu on the host system. From the tray icon, one can stop/start, open shell, disable and enable autostart of a VM and also quit Multipass.

Delete VMs

With intended tasks for the VM achieved, you can delete the VM if you no longer need it. First, you need to stop the VM.

multipass stop test-instance

Then delete it as below:

multipass delete test-instance
multipass purge

Mount and Unmount a local directory

To mount a local directory use the following command syntax:

multipass mount   [ ...]

Example:

$ multipass list
Name                    State             IPv4             Image
ubuntu-focal            Running           N/A              Ubuntu 20.04 LTS

$ multipass mount ~/Downloads ubuntu-focal
$ multipass info ubuntu-focal
Name:           ubuntu-focal
State:          Running
IPv4:           N/A
Release:        Ubuntu 20.04.3 LTS
Image hash:     10f8ae579fbf (Ubuntu 20.04 LTS)
Load:           0.00 0.01 0.05
Disk usage:     1.3G out of 19.2G
Memory usage:   164.0M out of 1.9G
Mounts:         /Users/jmutai/Downloads => /Users/jmutai/Downloads
                    UID map: 501:default
                    GID map: 20:default

$ multipass ssh ubuntu-focal
$ [email protected]:~$ df -hT
Filesystem                Type        Size  Used Avail Use% Mounted on
udev                      devtmpfs    977M     0  977M   0% /dev
tmpfs                     tmpfs       199M  968K  198M   1% /run
/dev/sda1                 ext4         20G  1.3G   18G   7% /
tmpfs                     tmpfs       994M     0  994M   0% /dev/shm
tmpfs                     tmpfs       5.0M     0  5.0M   0% /run/lock
tmpfs                     tmpfs       994M     0  994M   0% /sys/fs/cgroup
/dev/loop0                squashfs     56M   56M     0 100% /snap/core18/2128
/dev/loop1                squashfs     71M   71M     0 100% /snap/lxd/21029
/dev/loop2                squashfs     33M   33M     0 100% /snap/snapd/12883
/dev/sda15                vfat        105M  5.2M  100M   5% /boot/efi
tmpfs                     tmpfs       199M     0  199M   0% /run/user/1000
/dev/loop3                squashfs    128K  128K     0 100% /snap/bare/5
/dev/loop4                squashfs    1.2M  1.2M     0 100% /snap/multipass-sshfs/145
:/Users/jmmutai/Downloads fuse.sshfs 1000G     0 1000G   0% /Users/jmutai/Downloads

To unmount use the command:

$ multipass umount  ubuntu-focal
$ multipass info ubuntu-focal
Name:           ubuntu-focal
State:          Running
IPv4:           N/A
Release:        Ubuntu 20.04.3 LTS
Image hash:     10f8ae579fbf (Ubuntu 20.04 LTS)
Load:           0.00 0.00 0.04
Disk usage:     1.3G out of 19.2G
Memory usage:   159.8M out of 1.9G
Mounts:         --

In case you get stuck when using Multipass, there is a way out by getting help using the command:

$ multipass help
Usage: multipass [options] 
Create, control and connect to Ubuntu instances.

This is a command line utility for multipass, a
service that manages Ubuntu instances.

Options:
  -h, --help     Display this help
  -v, --verbose  Increase logging verbosity. Repeat the 'v' in the short option
                 for more detail. Maximum verbosity is obtained with 4 (or more)
                 v's, i.e. -vvvv.

Available commands:
  delete    Delete instances
  exec      Run a command on an instance
  find      Display available images to create instances from
  get       Get a configuration setting
  help      Display help about a command
  info      Display information about instances
  launch    Create and start an Ubuntu instance
  list      List all available instances
  mount     Mount a local directory in the instance
  networks  List available network interfaces
  purge     Purge all deleted instances permanently
  recover   Recover deleted instances
  restart   Restart instances
  set       Set a configuration setting
  shell     Open a shell on a running instance
  start     Start instances
  stop      Stop running instances
  suspend   Suspend running instances
  transfer  Transfer files between the host and instances
  umount    Unmount a directory from an instance
  version   Show version details

Conclusion.

Congratulations! That marks the end of this guide on how to run Ubuntu Virtual Machines on Linux and macOS using Multipass. We have seen how easy it is to create and run Ubuntu instances with Multipass. I hope this was helpful

coffee

Gravatar Image
A systems engineer with excellent skills in systems administration, cloud computing, systems deployment, virtualization, containers, and a certified ethical hacker.