Contabo VPS von ISO installieren
Seit kurzem habe ich einen kleinen Storage-VPS bei Contabo. Dieser wurde auf meinen Wunsch (Kommentar in der Bestellfunktion) am Standort München bereitgestellt und bietet damit eine akzeptable Georedundanz zu Nürnberg, wo die restlichen Server angemietet sind. Mit den ~ 150 km ist man schon recht gut an der Empfehlung des BSI (200 km) für georedundante Rechenzentren dran - für die geplanten Anforderungen auf jeden Fall gut genug!
Um die Vertraulichkeit der Daten zu gewährleisten, wollte ich ein vollverschlüsseltes Debian 10 installieren. Interessanterweise ist es im Kundenpanel von Contabo nicht möglich ISO-Dateien einzubinden - Neuinstallationen des Server sind nur mit fertigen Images des Anbieters möglich, welche natürlich keine Vollverschlüsselung mit sich bringen und welche natürlich ein gesundes Vertrauen in den Anbieter verlangen. Andere Anbieter (z.B. netcup oder Hetzner) bieten neben zahlreichen ISO-Dateien sogar die Möglichkeit eigene ISO-Dateien hochzuladen und zu mounten.
Der Support von Contabo teilte mir auf Anfrage dann mit, dass ISO-Dateien durch den Support händisch eingebunden werden können - verbunden mit zusätzlichen Kosten von 25 € pro 15 Minuten. Dieser Weg war mir zu umständlich, zu teuer (es geht schließlich nur darum eine ISO-Datei einzubinden) und zu langwierig (der Support hat ca. 6 h für die Antwort benötigt).
Also habe ich nach einer Alternative recherchiert und wurde fündig: mit grub
lassen sich ISO-Dateien direkt von Datenträgern booten. Die ISO-Datei wird dabei vollständig in den RAM geladen, sodass anschließend auf dem gleichen Datenträger (von dem wir eben noch die ISO-Datei geladen haben) das gewünschte System installiert werden kann. Das Vorgehen ist dabei nicht auf Contabo als Anbieter beschränkt, sondern ist auch bei jedem anderen VPS-Anbieter möglich.
Voraussetzungen
Um die nachfolgenden Schritte durchführen zu können wird folgendes benötigt:
- Link zur ISO-Datei (in meinem Fall eine Debian 10 Netinst-ISO)
- ein vorinstallierter Server mit Linux-System und Grub 2 (in meinem Fall Debian 10)
- VNC-Zugriff auf den virtuellen Server (da wir im Bootprozess eingreifen müssen und die Installation darüber vornehmen wollen)
Meine Partitionierung sieht wie folgt aus:
root@vmd7XXX2:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 395M 5.3M 390M 2% /run
/dev/sda2 294G 967M 278G 1% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda1 922M 47M 812M 6% /boot
tmpfs 395M 0 395M 0% /run/user/0
Auffällig ist, dass /boot
eine eigene Partition auf /dev/sda1
ist. Das muss später bei den Pfadangaben entsprechend beachtet werden.
Schritt 1: Download der gewünschten ISO-Datei auf dem Server
Wir erstellen als root
-User in der Bootpartition einen neuen Ordner /boot/iso
. Dort muss nun die zu bootende ISO-Datei abgelegt werden . Anschließend benötigen wir bei Debian noch die initrd.gz
aus dem Ordner hd-media:
root@vmd7XXX2:~# mkdir -p /boot/iso && \
cd /boot/iso && \
wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-10.9.0-amd64-netinst.iso && \
wget https://mirrors.edge.kernel.org/debian/dists/stable/main/installer-amd64/current/images/hd-media/initrd.gz
Schritt 2: Grub-Konfiguration anpassen
Nun referenzieren wir die beiden Dateien in unserer Grub-Konfiguration:
nano /etc/grub.d/40_custom
Die Datei startet mit einigen Zeilen, die wir so belassen. Darunter fügen wir dann folgende Zeilen ein:
menuentry 'Debian Netinstall' {
set isofile='/iso/debian-10.9.0-amd64-netinst.iso'
set initrdfile='/iso/initrd.gz'
loopback loop $isofile
linux (loop)/install.amd/vmlinuz findiso=$isofile priority=low
initrd $initrdfile
}
Wichtig: da ich eine eigene Boot-Partition habe, welche unter /boot
gemountet wird, muss ich hier das /boot
weglassen, sodass meine Pfade direkt mit /iso
beginnen. Das kann bei euch (je nach Partitionierung abweichend sein).
Am Ende sieht der Inhalt der Datei dann wie folgt aus:
root@vmd7XXX2:~# cat /etc/grub.d/40_custom
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry 'Debian Netinstall' {
set isofile='/iso/debian-10.9.0-amd64-netinst.iso'
set initrdfile='/iso/initrd.gz'
loopback loop $isofile
linux (loop)/install.amd/vmlinuz findiso=$isofile priority=low
initrd $initrdfile
}
Nun müssen wir Grub die Datei noch einlesen und die Konfiguration aktualisieren lassen:
root@vmd7XXX2:~# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.19.0-16-amd64
Found initrd image: /boot/initrd.img-4.19.0-16-amd64
done
Schritt 3: ISO booten
Nach einem Neustart können wir in der VNC-Konsole (z.B. mit KRDC) im Bootmenü die ISO mit den Pfeiltasten auswählen:
Die Wahl bestätigen wir mit Enter
. Nun bootet auch schon die Netinstall-ISO und wir landen im Installationsprozess.
Hier wählen wir alle benötigten Punkte (Choose language
, Configure the keyboard
, Scan hard drives for an installer ISO image
). Die Dialoge können wir alle mit Enter
bestätigen, bis wir die ISO-Datei auswählen können:
Nach der Auswahl der ISO wählen wir Yes
um die ISO in den RAM zu laden. Dies ermöglicht es uns anschließend auf dem Datenträger die Installation durchzuführen.
Um nun in den normalen Installationsprozess zu wechseln wählen wir im Installer Menü Change debconf priority
und anschließend high
.
Ab hier funktioniert die Installation wie gewohnt. Bei der Partitionierung lässt sich der Datenträger, von dem die ISO kopiert wurde, auswählen und die Installation ganz normal durchführen und beenden.