Linux Distributionen im Container unter Arch Linux

Leider gibt es immer wieder Momente, wo eine andere Linux Version benötigt wird. Sei es, um etwas zu testen oder auszuprobieren oder weil vielleicht ein spezielles Tool nur unter einer speziellen Distribution funktioniert. Und nicht immer möchte man dazu extra eine virtuelle Maschine einsetzen. Dank den heutigen Container Techniken ist dies aber kein Problem mehr. Und für Linux Distributionen ist das Tool der Wahl Distrobox.



1. Einleitung

Distrobox bildet eine Container-Umgebung, die es Anwendern gestattet, eigenständige Linux-Instanzen zu installieren, die sich von der Hauptumgebung unterscheiden. Dabei wird eine nahtlose Integration mit dem Hauptsystem gewährleistet, sodass Binärdateien, die für eine Distribution entwickelt wurden, problemlos auf einer anderen ausgeführt werden können.

Die Webseite des Distrobox Projektes beschreibt das ganze wie folgt:

“Verwenden Sie jede Linux-Distribution in Ihrem Terminal. Ermöglichen Sie sowohl die Abwärts- als auch die Aufwärtskompatibilität mit Software und die Freiheit, die Distribution zu verwenden, mit der Sie sich am wohlsten fühlen. Distrobox verwendet Podman oder Docker, um Container mit der Linux-Distribution Ihrer Wahl zu erstellen. Der erstellte Container wird eng mit dem Host integriert sein und ermöglicht das Teilen des HOME-Verzeichnisses des Benutzers, externer Speicher, externer USB-Geräte und grafischer Anwendungen (X11/Wayland) sowie Audio.”

Quelle: https://github.com/89luca89/distrobox

2. Installation

2.1 Distrobox installieren

Für Arch Linux existiert ein passendes Paket, mit dem man recht einfach Distrobox installieren kann. Als Voraussetzung für Distrobox wird ein Containerdienst benötigt. Als Optionen stehen hier Docker, Podman oder Lilipod zur Verfügung. Welchen Container Dienst man nutzen möchte, muss jeder für sich selber entscheiden. Persönlich nutze ich Podman, den ich persönlich in einigen Punkten gegenüber Docker besser finde, wie das Sicherheitsmodell.

Sofern ein entsprechender Container Dienst noch nicht installiert wurde, kann beides in einem Schritt installiert werden:

$ sudo pacman -S podman distrobox 

2.2 Linux installieren

Welche Linux Distributionen in welchen Versionen verfügbar sind, kann unter https://distrobox.it/compatibility/#host-distros nachgelesen werden. In diesem Beispiel wähle ich stellvertretend Ubuntu in der Version 23.04 aus. Dazu erstellt man einen neuen Container und gibt dabei direkt das entsprechende Image an:

$ distrobox create --image ubuntu:22.04 --name ubuntu-22.04

Sofern das Image nicht schon in einem anderen Container installiert wurde, fragt Distrobox nach, ob dieses Image aus dem Internet herunter geladen werden soll, was mit “Y” bestätigt wird.

Image ubuntu:23.04 not found.
Do you want to pull the image now? [Y/n]: Y
Resolved "ubuntu" as an alias (/etc/containers/registries.conf.d/00-shortnames.conf)
Trying to pull docker.io/library/ubuntu:22.04...
Getting image source signatures
Copying blob 29202e855b20 done   | 
Copying config e34e831650 done   | 
Writing manifest to image destination
f4cdeba72b994748f5eb1f525a70a9cc553b66037ec37e23645fbf3f0f5c160d
Creating 'ubuntu-22.04' using image ubuntu:23.04         [ OK ]
Distrobox 'ubuntu-22.04' successfully created.
To enter, run:

distrobox enter ubuntu-22.04

3. Linux Container starten und nutzen

3.1 Container betreten

Der gerade installierte Container wird wie folgt gestartet:

$ distrobox enter ubuntu-22.04

Wenn der Container zum ersten Mal betreten wird, wird dieser initialisiert. Dies kann man mit einer Installation des Betriebssystems auf der Festplatte vergleichen. Es werden noch Pakete heruntergeladen und installiert und Einstellungen vorgenommen. Dies kann einige Minuten dauern.

Starting container...                            [ OK ]
Installing basic packages...                     [ OK ]
Setting up devpts mounts...                      [ OK ]
Setting up read-only mounts...                   [ OK ]
Setting up read-write mounts...                  [ OK ]
Setting up host's sockets integration...         [ OK ]
Integrating host's themes, icons, fonts...       [ OK ]
Setting up package manager exceptions...         [ OK ]
Setting up dpkg exceptions...                    [ OK ]
Setting up apt hooks...                          [ OK ]
Setting up distrobox profile...                  [ OK ]
Setting up sudo...                               [ OK ]
Setting up groups...                             [ OK ]
Setting up users...                              [ OK ]
Setting up skel...                               [ OK ]

Container Setup Complete!
[archlinux@ubuntu-22 ~]$ 

Beim nächsten Mal geht dies wesentlich schneller innerhalb weniger Sekunden.

3.2 Ein Paket installieren im Container

Nach dem wechsel in diesen Container befindet man sich nun in der Ubuntu Distribution. Möchte man zum Beispiel das Paket neofetch in Ubuntu installieren, dann nutzt man natürlich den Ubuntu eigenen Paketmanager. Das Paket wird dann auch nur in diesem Container installiert.

[archlinux@ubuntu-22 ~]$ sudo apt install neofetch

Und wenn man dann den Befehl neofetch ausführt, bekommt man die Meldung, dass Ubuntu läuft:

[dirk@ubuntu-22 ~]$ neofetch
            .-/+oossssoo+/-.               archlinux@ubuntu-22.04.archvm 
        `:+ssssssssssssssssss+:`           ----------------------------- 
      -+ssssssssssssssssssyyssss+-         OS: Ubuntu 22.04 x86_64 
    .ossssssssssssssssssdMMMNysssso.       Host: VMware20,1 None 
   /ssssssssssshdmmNNmmyNMMMMhssssss/      Kernel: 5.15.1-arch1-1 
  +ssssssssshmydMMMMMMMNddddyssssssss+     Uptime: 1 hour, 1 min 
 /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/    Packages: 395 (dpkg) 
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Shell: bash 5.1.16 
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Resolution: 1280x800 
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   Terminal: conmon 
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   CPU: AMD Ryzen 9 3950X (32) @ 3.500GHz 
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   GPU: AMD ATI Radeon RX 5600 OEM/5600 XT / 5700/5700 XT 
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Memory: 44308MiB / 128723MiB  
 /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/
  +sssssssssdmydMMMMMMMMddddyssssssss+                             
   /ssssssssssshdmNNNNmyNMMMMhssssss/                              
    .ossssssssssssssssssdMMMNysssso.
      -+sssssssssssssssssyyyssss+-
        `:+ssssssssssssssssss+:`
            .-/+oossssoo+/-.

[archlinux@ubuntu-22 ~]$

Und da es sich nicht um eine virtuelle Maschine handelt, wird als Hardware auch keine virtuelle, sondern die reale angezeigt. Und da hier nichts emuliert wird, kann man beim arbeiten keinen Unterschied in der Performance feststellen.

3.3 Container verlassen

Um den Container zu verlassen, reicht ein einfaches exit aus.

[archlinux@ubuntu-22 ~]$ exit

Danach befindet man sich wieder in der Shell von Arch Linux. Der Container selber läuft im Hintergrund aber weiter und kann jederzeit wieder betreten werden:

$ distrobox enter ubuntu-22.04

Möchte man den Container aber komplett beenden, vergleichbar mit dem herunterfahren und Ausschalten eines Rechners, dann geht dies über den stop Parameter:

$ distrobox stop ubuntu-22.04

4. Arbeiten mit Distrobox

4.1 Container anzeigen

Es können problemlos mehrere Container installiert sein. Um sich anzuzeigen, welche Container aktuell installiert sind, hilft der Parameter list weiter:

$ distrobox list

Und bekommt anschließend eine Liste der installierten Container angezeigt:

ID           | NAME                 | STATUS             | IMAGE                         
04be76cc0694 | fedora-35            | Exited (143) 8 hours ago | registry.fedoraproject.org/fedora:35
a96df9992048 | ubuntu-22.04         | Up 5 hours         | docker.io/library/ubuntu:22.04

Man sieht auch den aktuellen Status der einzelnen Container. “Up” bedeutet, dass der Container aktuell im Hintergrund läuft.

4.2 Einzelnes Kommando in Container ausführen

Es ist auch möglich, eine Shelleingabe abzusetzen, ohne den Container zu betreten. Der Container wird also geöffnet, der Befehl ausgeführt und der Container wieder verlassen (nicht beendet!). Möchte man also zum Beispiel den Befehl neofetch ausführen, dann sieht dies so aus:

$ distrobox enter ubuntu-22.04 -- neofetch

4.3 Starteintrag im Host hinzufügen

Zusätzlich können die Menüeinträge von Programmen auch in den Host exportiert werden. Als Beispiel mal das Spiel Solitaire. Wenn man dieses in den Container installiert, besteht die Möglichkeit den Menüeintrag des Ubuntu Desktops auch in den Desktop des Hosts Rechner zu exportieren. So braucht man nicht jedesmal vorher den Container in einer Shell zu öffnen, sondern kann das entsprechende Programm direkt starten (im Hintergrund wird der Container geöffnet und das entsprechende Programm gestartet. Der Befehl wird innerhalb des entsprechenden Containers abgesetzt:

[archlinux@ubuntu-22 ~]$ distrobox-export --app 'AisleRiot Solitaire'

4.4 Container aktualisieren

Um die Linux Distribution im Container zu aktualisieren, also über den Paketmanager die aktuellen Pakete herunter zu laden und zu installieren, kann entweder der Container betreten und dann manuell die entsprechenden Befehle abgesetzt werden, oder über den Parameter upgrade das automatisiert erledigen:

$ distrobox upgrade ubuntu-22.04

Es besteht auch die Möglichkeit, ein Upgrade bei allen installierten Container durchzuführen:

$ distrobox upgrade --all

4.5 Container schließen

Um den Container zu beenden, bzw. zu schließen wird der stop Parameter aufgerufen:

$ distrobox stop ubuntu-22.04

4.6 Container löschen

Wenn der Container komplett entfernt werden soll, kann dieser mit dem rm Parameter gelöscht werden:

$ distrobox rm ubuntu-22.04

5. Fazit

Container sind eine praktische Alternative zu virtuellen Maschinen. Sofern es nicht um sicherheitskritische Anwendungen geht, die eine Sandbox benötigen, können mit Containern fast alle Anwendungsfelder abgedeckt werden. Und mit Distrobox wurde ein zusätzlich Tool geschaffen, welches es ermöglicht, auch Linux Distributionen in einem Container zu nutzen. So kann man auch Anwendungen ausführen, die eine spezielle Linux Distribution benötigen.


Quellen:

https://distrobox.it
https://github.com/89luca89/distrobox
https://podman.io
https://wiki.archlinux.org/title/Distrobox

0 Comments
Älteste
Neueste
Inline-Feedbacks
Alle Kommentare anzeigen
Nach oben scrollen