Automatische Linux Installationen
Zur Zeit ist die Installation von Linux, auf Geräten die wir verkaufen möchten oder auf Kundengeräten, extrem mühsam und Zeitaufwändig.
Daher möchten wir dies vereinfachen.
Bisherige methoden bei uns
1) Linux wird von Grund auf, von einem Live-/Installationsmedium, installiert.
Nachteile:
- Installation muss begleitet werden
- grosser Aufwand bis alle Einstellungen gemacht sind, Sprache, Zusatzpakete, Oberfläche, usw. usf...
2) Ein fertig konfiguriertes und installiertes System wird per dd
komplett auf weitere Festplatten kopiert.
Nachteile:
- Festplatte mit installiertem System muss gefunden werden
- Festplatten müssen ausgebaut, wieder eingebaut werden
- Festplatten müssen die gleiche Grösse haben (ansonsten komplizierte Anpassungen nötig, unflexibel) usw. usf...
Bestehende Lösungen / Systeme
Die bestehenden Systeme basieren auf Scripten welche das System bei oder nach der Installation anpassen.
[Links suchen und hier einfügen.]
Nachteile:
- es basiert auf einer vielzahl von Scripten u. U. buggy und schwierig zu debuggen
- bei gewissen Einstellungen ist es u. U. extrem mühsam wenn man diese mittels Scripten machen muss, denn man muss zuerst herausfinden wo diese überhaupt gemacht werden. e.g. Anpassungen an der Oberfläche
- nicht mehr Zeitgemäss, es gibt bessere Möglichkeiten, siehe unten
Neuer Lösungsansatz
Es soll ein System entwickelt werden mit welchem fertig konfigurierte Images automatisch/sehr einfach installiert werden können.
Vorteile:
- Images können als VM (virtuelle Maschine) gestartet, konfiguriert und eingerichtet, sowie up-to-date gehalten werden (komfortabel)
- wichtige Änderungen könnten sogar so getestet und an Kunden mitgeteilt werden z.B. newsletter
- einfachste und schnelle Installation mittels Scripten
- das System inkl. Images könnten anderen zur Verfügung gestellt werden, Beitrag zur Allgemeinheit (ein System basierend auf images existiert meines wissens noch nicht)
Anforderungen:
- das system muss reproduzierbar sein
- .. [WIP]
Entwicklung
[WIP]
Ende 2014 hatte ich (Cem) angefangen ein solches System zu entwickeln. Dieses System sollte die Installation über ein Netzwerk durchführen. Dies wird dann aber relativ aufwändig. Nach einer Zeit habe ich nicht mehr daran weitergearbeitet. Ich denke ein einfacheres System, basierend auf einem externen Medium, wäre für unsere Zwecke besser geeignet. Mein angefangenes Projekt ist dennoch auf Github zu finden: https://github.com/rebootl/MAuI
Hampa hat nun mal ein solches Installationsscript für Images geschrieben.
install-image
README
(2015-09-29):
install-image ============= An installable image consists of a description file (.desc) and a (possibly compressed) image file (.img). The image file contains a complete hard disk image, partition table and all. During installation one partition can optionally be extended to the end of the physical hard disk. Description files ----------------- desc: One line image description partition: The partition that will be extended. Empty or 0 disable. Image files ----------- The image file must have the same name as the description file, with an extension of .img, .img.gz, .img.bz2 or .img.xz. Requirements for the image: - The partition to be extended must be physically last on the disk and must contain an ext2, ext3 or ext4 file system. Requirements for the host: - parted - fsck - resize2fs
Images Verwaltung
Zum starten der Images in einer VM eignet sich qemu mit KVM sehr gut.
Versuche mit Xen:
Ich hatte versucht qemu innerhalb einer Xen VM zu starten, dies funktioniert aber nicht, weder als domU Guest noch in der dom0. KVM ist nicht verfügbar und ohne kommt die qemu VM kaum über den Bootloader hinaus.
Des weiteren habe ich versucht ein image mittels virt-manager zu erstellen. Das GUI ist mir persönlich aber eher etwas umständlich. Ansonsten konnte ich ein image erstellen, der Mauszeiger wurde dann aber nicht dargestellt (evtl. lösbar)...
Einrichtung von qemu (auf workshop gemacht):
qemu
installieren.
Der Benutzer muss in der Gruppe kvm sein.
Zusätzlich musste ich die berechtigung (ACL) auf /dev/kvm
anpassen. (Gruppe kvm muss rw haben. Möglicherweise Bug, Debian 8 ?)
Erstellen
Das starten von qemu erfordert einige Parameter, da sonst die VM zu langsam oder nicht richtig läuft. Daher habe ich mir diese in kleinen Scripten zusammengestellt.
Siehe auch: https://github.com/rebootl/qemu-scripts
Clone: git clone https://github.com/rebootl/qemu-scripts.git
Zum erstellen eines image muss zuerst ein leeres image-file erstellt werden.
./create-img
:
#!/bin/bash
#
# create an empty image file
# for use as a vm
#
# arguments:
# $1 image name
qemu-img create -f raw "$1" 8G
Der Aufruf ./create-img <image name>
erstellt ein 8GB grosses, leeres imagefile mit dem angegebenen Namen.
Dann kann die Installation einer .iso
Datei gestartet werden.
./launch-qemu-install
:
#!/bin/bash
#
# launch vm to install a new system
# from iso image into image file
#
# arguments:
# $1 iso image name
# $2 image file name
# arch wiki
#qemu-system-i386 -cdrom iso_image -boot order=d -drive file=disk_image,format=raw
qemu-system-i386 \
-m 2048 \
-enable-kvm \
-vga std \
-boot d \
-cdrom "$1" \
-drive file="$2",format=raw
Aufruf ./launch-qemu-install <ISO file> <image file>
startet die Installation (die VM wird in einem grafischen Fenster ausgeführt).
Die Partitionierung kann dort normal vorgenommen werden. Dabei ist obiges README bezüglich den Voraussetzungen für ein image zu beachten (die physisch letzte Partition kann vom Installationsscript vergrössert werden).
Starten
Ein vorhandenes image kann mit folgendem Befehl/Script gestartet werden.
./launch-qemu <image file>
:
#!/bin/bash
#
# launch vm using existing imagefile
#
# using qemu
#
# arguments:
# $1 image name
qemu-system-i386 \
-m 2048 \
-enable-kvm \
-drive file="$1",if=virtio,cache=none
Im laufenden image können Änderungen, Updates etc. gemacht werden.