# Grundausstattung: Alpine Linux in einer VirtualBox > von [Ulrich Hilger](https://uhilger.de), 3. Januar 2020 Vieles läßt sich mit Hilfe eines Rechners automatisieren. Die jeweils nötige Konfiguration ist jedoch nicht selten unterschiedlich. Rasch entstehen Unverträglichkeiten weshalb die Virtualisierung ein gutes Rezept gegen den ansonsten drohenden Wildwuchs sein kann. Durch Kapselung in eigenständige Einzellösungen entsteht ein hoher Wiederverwendungsgrad. Allerdings darf stets nur das Nötigste eingesetzt werden, sonst droht Ballast bei zunehmender Komplexität das Ganze zu schwerfällig werden zu lassen. Nur wenn es gelingt, bereits ein Betriebssystem so sehr zu verschlanken, dass es nur das Allernötigste zum Ablauf der vorgesehenen Programme mitbringt, kann eine effiziente und vielseitige Virtualisierung gelingen. VirtualBox und Alpine Linux liefern hierfür die besten Voraussetzungen. Dieser Artikel betrachtet die Herstellung eines Abbilds von Alpine Linux in einer virtuellen Maschine, das als universelle Ablaufumgebung für unterschiedlichste Lösungen dienen kann und im Handumdrehen auf allen gängigen Systemen einsatzbereit ist. ## VirtualBox [VirtualBox](https://virtualbox.org) ist eine umfassende Lösung zur Virtualisierung und bildet gemeinsam mit anderen sogenannten Hypervisoren beispielsweise auch den Kern von Cloud-Ansätzen wie Kubernetes. VirtualBox besitzt eine exzellente grafische Bedienoberfläche. Für unsere Zwecke soll allerdings ein lauffähiges Basisabbild als Kopiervorlage entstehen, von dem aus andere Komponenten nach Bedarf hinzugefügt werden können, was eher ein automatisertes Vorgehen mit Hilfe von Skripten erfordert. Hier im Artikel wird daher eine auf der Kommandozeile ausführbare Nutzung beschrieben, die gut in eigene Skripte eingebunden werden kann und gut automatisierbar ist. Das Command Line Interface (CLI) von VirtualBox heißt `VBoxManage`, ist Teil der Installation und ist auf den [Webseiten des Produkts](https://www.virtualbox.org/manual/ch08.html) dokumentert. ### Installation von VirtualBox Für [Ubuntu Linux](https://ubuntu.com) gibt es ein fertiges Paket, das einfach aus dem App-Store ("Ubuntu Software") installiert werden kann. VirtualBox gibt es ebenso auch auf OS X, Solaris und Windows. Die Installation kann mit `vboxmanage --version` auf der Kommandozeile überprüft werden und liefert im Erfolgsfall eine Antwort wie z.B. `6.0.14_Ubuntur132055`. ### Basismaschine erzeugen Der erste Schritt nach Installation von VirtualBox besteht in der Erzeugung einer neuen virtuellen Maschine mit dem Kommando `vboxmanage createvm --name basis --register` Es legt eine virtuelle Maschine namens `basis` an. Mit dem Befehl `vboxmanage createmedium disk --filename "/home/ulrich/VirtualBox VMs/basis/basis.vdi" --format VDI --size 8000` wird zudem ein dynamisch bis zu einer Größe von knapp acht GB wachsender Massenspeicher angelegt. Als nächstes ist ein Controller erforderlich, mit dem der Massenspeicher eingebunden werden kann. Er wird mit folgendem Kommando geschaffen. `vboxmanage storagectl basis --name IDE --add ide --controller PIIX4 --hostiocache on` Hier wird der Maschine `basis` ein IDE-Controller mit Standardparametern beigefügt. Mit einem weiteren Befehl werden der Storage Controller, die virtuelle Maschine und der Massenspeicher miteinander verbunden: `vboxmanage storageattach basis --storagectl IDE --port 0 --device 0 --type hdd --medium "/home/ulrich/VirtualBox VMs/basis/basis.vdi"` Ein weiterer Schritt legt fest, dass Software auf der Maschine zwei Zentralprozessoren (CPUs) und zwei Gigabyte Hauptspeicher zur Ausführung vorfindet. Diese Ausstattung muss der Host-Rechner freilich besitzen. `vboxmanage modifyvm basis --ostype Linux_64 --memory 2048 --cpus 2` Zuguterletzt wird für den Zugang zum Netz noch ein Netzwerkadapter nebst einer Regel zur Weiterleitung von Port 2222 des Host-Rechners zu Port 22 des Gastes angelegt. Der Port 2222 kann so später verwendet werden um Verbindungen via SSH mit der virtuellen Maschine herzustellen. `vboxmanage modifyvm basis --nic1 nat --nictype1 82540EM --natpf1 "ssh,tcp,,2222,,22"` Damit sind alle Schritte zum Aufsetzen einer virtuellen Maschine unternommen. Sie lassen sich wie im nächsten Abschnitt beschrieben automatisieren. ### Automatisierung Wie eingangs erwähnt besitzt VirtualBox eine gute grafische Bedienoberfläche, mit der alle oben erwähnten Schritte nacheinander von Hand ausgeführt werden können. Gegenüber der grafischen Bedienung liegt der Vorteil der Befehle für die Kommandozeile in deren Automatisierbarkeit. Mit nur einem Schritt können alle obigen Konfigurationen auf einen Schlag ausgeführt werden. Die Befehle müssen einfach nacheinander in ein Skript notiert und als solches ausgeführt werden. Zudem sind alle Parameter damit fein säuberlich in besagtem Skript dokumentiert, sie lassen sich wiederholbar und transparent anpassen und nutzen. Das sich so ergebende Skript lautet wie folgt ``` #!/bin/sh vboxmanage createvm --name basis --register vboxmanage storagectl basis --name IDE --add ide --controller PIIX4 --hostiocache on vboxmanage createmedium disk --filename "/home/ulrich/VirtualBox VMs/basis/basis.vdi" --format VDI --size 8000 vboxmanage storageattach basis --storagectl IDE --port 0 --device 0 --type hdd --medium "/home/ulrich/VirtualBox VMs/basis/basis.vdi" vboxmanage modifyvm basis --ostype Linux_64 --memory 2048 --cpus 2 vboxmanage modifyvm basis --nic1 nat --nictype1 82540EM --natpf1 "ssh,tcp,,2222,,22" ``` ### Virtuelle Maschine löschen Während für diese Ausführungen die Maschine noch weiter benötigt wird, soll der Vollständigkeit halber das Kommando zum Entfernen der wie zuvor beschrieben angelegten Maschine ebenfalls genannt werden. Es lautet `vboxmanage unregistervm basis --delete` Damit werden neben der virtuellen Maschine auch alle zugehörigen Dateien und Verzeichnisse gelöscht. **Vorsicht**: Es werden alle Daten gelöscht, auch das in der virtuellen Maschine angelegte System sowie eventuell in der Maschine abgelegte Daten. ### Zwischenstand Bis hier hin wurde mit VirtualBox eine virtuelle Maschine aufgesetzt, die zur Ausführung eines Betriebssystems sowie darauf beruhender weiterer Software dienen kann. Damit ausgeführte Software lässt sich dank der virtuellen Maschine komplett losgelöst vom System des Host-Rechners nutzen, ohne, dass ins System des Host-Rechners und dessen Konfiguration eingegriffen werden muss. Im nächsten Schritt wird beschrieben, wie in der virtuellen Maschine ein zur Ausführung von Programmen benötigtes Betriebssystem installiert wird. ## Alpine Linux Die Macher von [Alpine Linux](https://www.alpinelinux.org/) bezeichnen das Betriebssystem als > independent, non-commercial, general purpose Linux distribution designed for power users who appreciate security, simplicity and resource efficiency wie auch Einzelheiten zu diesen Feststellungen auf der [Webseite von Alpine Linux](https://www.alpinelinux.org/about/) nachvollziehbar machen. Alpine Linux ist das ideale Betriebssystem für eine virtuelle Ablaufumgebung weil es in seiner Grundausstattung nur das Allernötigste enthält. Mit Alpine Linux ist in kürzester Zeit ein vollwertiges Betriebssystem mit geringstem Ressourcenbedarf aufgesetzt. #### Automatisierung Für die Installation ließe sich ein automatisiertes Vorgehen denken und Alpine Linux sieht tatsächlich einen Weg vor, den manuellen Setup-Vorgang mit einem Skript zu automatisieren. Hierzu können folgende Befehle dienen (vgl. auch die [Beschreibung](https://wiki.alpinelinux.org/wiki/Alpine_setup_scripts#setup-alpine)): ``` export BOOTLOADER=grub setup-alpine -f /root/autofile ``` Es ist nur leider nicht gelungen, ein Installationsmedium so zu starten, dass es mit Hilfe eines solchen Skripts die Installation komplett ohne manuellen Eingriff durchläuft. Hinweise wie so etwas zu bewerkstelligen ist sind stets willkommen. In der Folge wird Schritt für Schritt der manuelle Weg einer Installation beschrieben. Das fertige Basisabbild kann mit der Funktion `cloenvm` von VirtualBox in einem Schritt beliebig kopiert werden sodass das manuelle Vorgehen nur einmal nötig ist. ### Installation von Alpine Linux Im Wiki von Alpine Linux ist die [Installation](https://wiki.alpinelinux.org/wiki/Installation) des Systems bereits beschrieben. In diesem Beitrag soll dennoch auf jeden Schritte gesondert eingegangen werden. #### Installationsabbild laden Zur Installation muss zunächst die Variante `Virtual` aus dem [Downloadbereich der Alpine-Linux-Webseiten](https://alpinelinux.org/downloads/) heruntergeladen werden. Es entsteht eine ca. 40 MB kleine Datei wie beispielsweise `alpine-virt-3.11.2-x86_64.iso` in der das ganze Betriebssystem enthalten ist. #### Installationsmedium einhängen Die im vorigen Schritt geladene Datei `/home/ulrich/Downloads/alpine-virt-3.11.2-x86_64.iso` wird der virtuellen Maschine mit folgendem Kommando als virtuelle DVD übergeben. Die DVD stellt so das Installationsmedium dar. `vboxmanage storageattach basis --storagectl IDE --port 1 --device 0 --type dvddrive --medium "/home/ulrich/Downloads/alpine-virt-3.11.2-x86_64.iso"` #### Virtuelle Maschine mit dem Installationsmedium booten Auf der Kommandozeile kann VirtualBox nun angewiesen werden, die neue virtuelle Maschine mit dem zuvor eingelegten Installationsmedium zu booten. `vboxmanage startvm basis` Nach kurzer Wartezeit erscheint ein neues Terminalfenster von VirtualBox mit der Anmeldeaufforderung des Systems zur Installation von Alpine Linux. Die Anmeldung erfolgt mit dem Benutzer `root` ohne Kennwort. ![Login-Prompt](login.png "Login Prompt") Die Bedienung der Installationsroutine erfolgt mit dem amerikanischen Tastaturlayout, die Tastenbelegung wird erst im nächsten Schritt mit der Installation des Systems auf ein anderes wie zum Beispiel das deutsche Layout umgestellt. Während der Setup-Routine müssen die Tasten `ß` für `-` und `/` für `-` verwendet werden. #### Installation ausführen Mit dem Befehl `setup-alpine` wird die Installation gestartet. Während der Installation erscheint eine Reihe von Fragen auf der Kommandozeile, sie lauten nebst möglicher Antworten wie folgt ``` Select keyboard layout [none]: de Select variant []: de Select system hostname (short form, e.g. 'foo') [localhost]: vbox-alpine Available interfaces are: eth0. Which one one do you want to initialize? (or '?' or 'done') [eth0] Ip address for eth0? (or 'dhcp' , 'none', '?') [dhcp] Do you want to do any manual network configuration? [No] Changing password for root New password: Retype password: passwd: password for root changed by root Which timezone are you in? ('?' for list) [UTC] Europe/ What sub-timezone of 'Europe/' are you in? ('?' for list) Berlin HTTP/FTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none] Which NTP client to run? ('busybox', 'openntpd', 'chrony', or 'none') [chrony] Enter mirror number (1-0) or URL to add (or r/f/e/done) [1]: Which SSH server? ('openssh', 'dropbear' or 'none') [openssh] Which disk(s) would you like to use? (or '?' for help or 'none') [none] sda How would you like to use it? ('sys', 'data', 'lvm' or '?' for help) [?] sys WARNING: The following disk(s) will be erased: sda (8.4 GB ATA VBOX HARDDISK ) WARNING: Erase the above disk(s) and continue? [y/N]: y Installation is complete. Please reboot. vbox-alpine:# ``` Mit erfolgreich abgeschlossener Installation wird zunächst mit dem Kommando `poweroff` die Maschine ausgeschaltet. #### Installationsmedium entfernen Damit bei neuerlichem Start des neuen Systems nicht wieder mit dem Installationsmedium gebootet wird, muss dieses mit folgendem Kommando entfernt werden. `vboxmanage storageattach basis --storagectl IDE --port 1 --device 0 --type dvddrive --medium none` #### Benutzer anlegen Um nicht immer mit dem Benutzer `root` zu arbeiten, wird die Maschine `basis` noch einmal mit der Bedienoberfläche von VirtualBox und deren eigenem Terminal gestartet. Nach dem Hochfahren und der Anmeldung als `root` wird mit dem Befehl `adduser` ein neuer Benutzer angelegt, z.B. `adduser fred` Nach Eingabe eines Kennwortes für den neuen Benutzer `fred` kann die Maschine `basis` mit `poweroff` wieder beendet werden. #### Arbeitskopie anfertigen Zur Arbeit mit der neu erzeugten Maschine ist der erste Schritt stets die Anfertigung einer Arbeitskopie. Die virtuelle Maschine `basis` dient nach erfolgreicher Installation von Linux lediglich als Vorlage. Das Kommando zum Anfertigen einer Arbeitskope lautet z.B. `vboxmanage clonevm basis --name Test-1 --register` Hiermit wird eine neue virtuelle Maschine namens `Test-1` erzeugt und bei VirtualBox registriert. #### Maschine starten Der Befehl `vboxmanage list vms` zeigt stets die zur Wahl stehenden Maschinen. Die Maschine `Test-1` wird gestartet mit `vboxmanage startvm Test-1 --type headless` Mit `vboxmanage list runningvms` kann geprüft werden, ob die Maschine läuft. #### Per Secure Shell (SSH) aufschalten Von einer beliebigen anderen Maschine aus, aber auch vom selben Rechner, wird einfach ein Terminal gestartet. Der Befehl `ssh -l fred -p 2222 localhost` zur Verbindung mit der laufenden virtuellen Maschine antwortet mit der Anmeldeaufforderung, sobald nach einer gewissen Wartezeit der Startprozess abgeschlossen ist. Anstelle von `localhost` wird der Name des entsprechenden Rechners angegeben, wenn die virtuelle Maschine auf einem anderen Rechner gestartet wurde. #### System aktualisieren Als erstes sollte vor Verwendung das System auf den neuesten Stand gebracht werden. Die Befehle hierfür lauten ``` su apk update apk upgrade --available exit ``` #### System bereit An dieser Stelle hat man ein komplett lauffähiges Linux in einer virtuellen Maschine am Start. Die Maschine belegt nur 148 MB auf der Platte und kann ab hier zur produktiven Nutzung für beliebige Anwendungen dienen. ## Schlussbemerkungen Rechner werden immer leistungsfähiger und vielseitiger. Mit heutiger Rechentechnik kann bedeutend mehr aus einer einzelnen Maschine herausgeholt werden als übliche Anwendungen vermuten lassen. Populäre Desktop-Betriebssysteme neigen dazu, hinzukommende Ressourcen schnell wieder aufzubrauchen, wenn nicht mit einer effizienten Systemarchitektur dagegen gehalten wird. Die Kombination von VirtualBox und Alpine Linux schafft die Grundlage für eine universelle, individuelle Verwendung von Software, die weitestgehend frei ist von Abhängigkeiten proprietärer Bestandteile. Die Ausführungen in diesem Beitrag machen nachvollziehbar, wie mit wenigen Schritten ein universelles und schlankes Betriebssystem zum Laufen gebracht werden kann. Die Einbettung in eine virtuelle Ablaufumgebung schafft zudem die Voraussetzung für einen Betrieb in nahezu jeder erdenklichen Systemarchitektur, unabhängig von der Ausführungsumgebung und frei von Einschränkungen.