Canonical Multipass

Veröffentlicht am 2. Oktober 2023 • 6 Min. Lesezeit • 1.100 Wörter

Virtuelle Maschinen mit Multipass erstellen

Canonical Multipass
Foto von Growtika  auf Unsplash 

Was ist Canonical Multipass?

Sofern keine grafische Oberfläche benötigt wird, geht das wirklich super einfach.

Am Ende dieses Artikels haben wir die Möglichkeit eine virtuelle Machine zu betreiben, die per SSH oder public-key zugänglich ist. Mit einer solchen VM kann man z.B.:

  • risikolos die Schritte einer Software-Installation ausprobieren. Wenn man sich ver-installiert hat, löscht man die VM und versucht es anders.
  • Server-Deployments lokal ausprobieren. Das lokale Netzwerk ist sehr viel schneller als die Verbindung zum gehosteten Server, wodurch sich späte Fehler im Skript schneller reproduzieren lassen.
  • risikolos Ansibel Playbooks ausprobieren, bevor diese auf einem gehosteten Server abgespielt werden.
  • herausfinden wieviel GB Ram eine Anwendung für einen stabilen Betrieb benötigt

Multipass installieren

Auf einer Ubuntu Linux Maschine wird das Tool via snap installiert:

sudo snap install multipass

Der Umgang mit Multipass und VM-Instanz

Anzeigen vorgefertigter Images

multipass find
Im Oktober 2023 konnte man zwischen diesen Images wählen:

Image Aliases Version Description
core core16 20200818 Ubuntu Core 16
core18 20211124 Ubuntu Core 18
core20 20230119 Ubuntu Core 20
core22 20230119 Ubuntu Core 22
20.04 focal 20230922 Ubuntu 20.04 LTS
22.04 jammy,lts 20230927 Ubuntu 22.04 LTS
22.10 kinetic 20230524 Ubuntu 22.10
23.04 lunar 20230926 Ubuntu 23.04
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
Blueprint Aliases Version Description
anbox-cloud-appliance latest Anbox Cloud Appliance
charm-dev latest A development and testing environment for charmers
docker 0.4 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
ros-noetic 0.1 A development and testing environment for ROS Noetic.
ros2-humble 0.1 A development and testing environment for ROS 2 Humble.
Interessant ist sicherlich die Auswahl unterschiedlicher Ubuntu Versionen, aber auch die docker (inkl. Portainer) oder minikube -Variante. Ansonsten kann man sich wie gewohnt über die Shell weitere Anwendungen oder Tools installieren.

Erzeugen einer neuen Instanz

multipass launch <Name des Images>
multipass launch jammy

Starten einer Instanz unter eigenem Namen

multipass launch <Name des Images> --name <eigener Name>

Benutzerdefinierte Einstellungen zu Anzahl CPUs, Disk-Größe und Speicher

multipass launch <Name des Images> --cpus 4 --disk 20G --memory 8G

Eigene Netzwerkeigenschaften lassen sich ebenfalls beim Start festlegen (siehe Multipass Dokumentation )

Auflisten aktiver Instanzen

multipass list
Mehr Infos
multipass info <Name der Instanz>

Shell-Verbindung

Der vorgezeichnete und einfachste Weg, um mit einer laufenden VM zu arbeiten ist es, eine Shell in der Virtuellen Maschine über deren Instanz-Namen zu öffnen.

multipass shell <Name der Instanz>
Logout mit CTRL-D

Eine SSH-Verbindung ist in den Grundeinstellungen nicht vorgesehen. Später wird gezeigt, wie sich diese konfigurieren lässt (SSH-Verbindung per Public Key oder per Benutzer & Passwort ).

Ausführen eines Kommandos von ausserhalb der Instanz

multipass exec <Name der Instanz> -- <Kommando>
multipass exec <Name der Instanz> -- lsb_release -a   # z.B., um Informationen über das installierte OS zu erhalten

Anhalten einer Instanz

Eine laufende Instanz lässt sich mit stop herunterfahren.

multipass stop <Name der Instanz>
Installierte Inhalte der VM bleiben erhalten.

Starten / Booten einer gestoppten Instanz

Eine gestoppte VM lässt sich über start wieder starten/booten.

multipass start <Name der Instanz>

Löschen einer Instanz

Eine bestimmte Instanz kann gelöscht werden mit:

multipass delete <Name der Instanz>

Komplett entfernen

Bereits gelöschte Instanzen werden entgültig vom System entfernt via:

multipass purge

SSH Verbindung (Public Key) in eine VM

Möchte man z.B. Ansible Playbooks in einer VM ausprobieren, so benötigt man einen Benutzer, der sich per SSH mit Hilfe des lokalen SSH Public Keys, also ohne Passworteingabe, in die VM einloggen kann.

SSH Schlüssel Paar

Auf Linux Systemen befinden sich der private sowie der öffentliche SSH Schlüssel häufig im versteckten Verzeichnis ~/.ssh. Das Paar besteht aus zwei Files, die beliebig benannt werden können. Oft heißt der öffentliche Schlüssel wie der private mit angehängtem Suffix .pub, z.B. id_rsa (privat) und id_rsa.pub für den öffentlichen.

Es kann jedoch sein, dass das Verzeichnis und damit die SSH Schlüssel noch nicht vorhanden sind, einfach weil sie noch nicht gebraucht wurden. In diesem Fall lässt sich das SSH-Schlüssel-Paar einfach generieren.

ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ubuntu/.ssh/id_rsa     #<< privater ssh Schlüssel
Your public key has been saved in /home/ubuntu/.ssh/id_rsa.pub     #<< öffentlicher ssh Schlüssel
The key fingerprint is:
[...]

Kopieren des lokalen SSH Public Keys in die VM-Instanz

  • Öffne lokal das File ~/.ssh/id_rsa.pub und kopiere den Inhalt.
  • Öffne innerhalb der Multipass Instanz das File ~/.ssh/authorized_keys z.B. mit nano und kopiere den Public Key aus der Zwischenablage ans Ende dieses Files.

Verbinden

Nun kann sich der Benutzer des soeben kopierten Public Keys vom lokalen Rechner aus in die Instanz einloggen.

ssh ubuntu@<IP-der-Multipass-Instanz>

Die Verbindung erfolgt ohne Abfrage eines Passwortes, da die Authentifizierung auf der Basisi des Public Keys erfolgt.

Erzeugen einer Instanz mit Benutzer und Passwort für SSH-Verbindung

Beim Erstellen der Instanz wird ein Konfigurations-File (Cloud-Init) übergeben, das für die Erstellung des Benutzers mit Passwort sorgt und die SSH-Anmeldung per Benutzer und Passwort ermöglicht.

Konfiguration von Benutzer und Passwort

---
users:
  - name: myadmin
    plain_text_passwd: 'myAdminPasswort'
    shell: /bin/bash
    groups: users, admin
    lock_passwd: false
    chpasswd: { expire: False }
ssh_pwauth: True 

Das Erstellen der Instanz läuft gleich wie zuvor, es wird lediglich das Cloud-Init-Skript mit übergeben

multipass launch <Name des Images> --cloud-init cloud-init.yaml --name <eigener Name>

Verbinden

Der Aufbau der SSH Verbindung erfolgt genau wie unter Verwendung des öffentlichen SSH-Schlüssels,

ssh myadmin@<IP-der-Multipass-Instanz>
myadmin@<IP-der-Multipass-Instanz>'s password:

diesmal wird jedoch nach dem Benutzer-Passwort gefragt.

Fazit

Immer wenn man etwas ausprobieren möchte, unter verschiedenen Betriebssystem-Versionen, mit unterschiedlichen Versionen von Software-Bibliotheken, ein Ansible-Playbook lokal optimieren möchte oder vieles mehr, gehen oft auch dem ambitionierten Home-Lab-Benutzer die Rechner aus. Mit Virtuellen Maschinen auf Basis von Multipass lassen sich die Grenzen des eigenen Home-Labs deutlich verschieben.
… solange man genügend Hauptspeicher hat …

Multipass Dokumentation