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 multipass
multipass 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 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 )
multipass list
multipass 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 erhalten
Eine 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 purge
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.
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 …