Canonical Multipass
Veröffentlicht am 2. Oktober 2023 • 6 Min. Lesezeit • 1.100 WörterVirtuelle Maschinen mit Multipass erstellen
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.:
Auf einer Ubuntu Linux Maschine wird das Tool via snap installiert:
sudo snap install multipassmultipass find
| 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. |
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.
multipass launch <Name des Images>
multipass launch jammyStarten 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 8GEigene Netzwerkeigenschaften lassen sich ebenfalls beim Start festlegen (siehe Multipass Dokumentation )
multipass listmultipass info <Name der Instanz>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>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 ).
multipass exec <Name der Instanz> -- <Kommando>
multipass exec <Name der Instanz> -- lsb_release -a # z.B., um Informationen über das installierte OS zu erhaltenEine laufende Instanz lässt sich mit stop herunterfahren.
multipass stop <Name der Instanz>Eine gestoppte VM lässt sich über start wieder starten/booten.
multipass start <Name der Instanz>Eine bestimmte Instanz kann gelöscht werden mit:
multipass delete <Name der Instanz>Bereits gelöschte Instanzen werden entgültig vom System entfernt via:
multipass purgeMö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.
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:
[...]nano und kopiere den Public Key aus der Zwischenablage ans Ende dieses Files.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.
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.
Das Passwort für den neuen Benutzer myadmin wird in diesem Fall unverschlüsselt (via plain_text_passwd) im Skript angegeben. Dies ist i.Allg. keine gute Idee!
Für eine lokale Verwendung von multipass sowie der instanziierten virtuellen Maschinen scheint mir das jedoch vertretbar.
---
users:
- name: myadmin
plain_text_passwd: 'myAdminPasswort'
shell: /bin/bash
groups: users, admin
lock_passwd: false
chpasswd: { expire: False }
ssh_pwauth: True Wer möchte kann auch ein hashed Passwort via passwd: angegeben, z.B. erzeugt mit
echo myAdminPasswort | mkpasswd -m sha-512 -s
$6$oJA8JgSV3pvYqPAZ$TK/3n/ywsbZfEhYFbKIAAlVHw4i3Xc [...]und anschließend in cloud-init.yaml die Zeile plain_text_passwd: ersetzen durch
passwd: $6$oJA8JgSV3pvYqPAZ$TK/3n/ywsbZfEhYFbKIAAlVHw4i3Xc [...]
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>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.
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 …