Debian auf fremdem Host debootstrappen

Es ist mal wieder Zeit für einen weiteren, aus der Not heraus geborenen Blogeintrag.

Die inzwischen schon mehrere Jahre alte Debian-Installation auf meinem lokalen Fileserver hat das letzte Update nicht ganz verkraftet. Und das, nachdem sie nunmehr zwei Versionssprünge, mehrere kleinere Updates, etliches an inkompetentem Rumgefrickel meinerseits sowie einen kompletten Hardwarewechsel(ja inklusive neuem Board/CPU/RAM und einem Umzug auf eine neue HDD) überstanden hat.

Da es mir momentan, aus mir vollkommen unverständlichen Gründen, nicht möglich ist, das System von einem USB-Stick zu booten, habe ich folgenden Plan erdacht, der an Perversion mit den Konstrukten eines gewissen Dr. Frankenstein mithalten kann.

Ich werde die Systemplatte des Servers an meine laufende Workstation anschließen, hoffen, dass dabei nichts kaputtgeht, die wichtigsten Daten sichern und mittels chroot und debootstrap ein verschlüsseltes Debian(wie hier beschrieben) aufsetzen. Das Ganze wird dann wieder unmounted und in den Fileserver zurückgebaut.

Ein Wort zur Warnung: Dieser Eintrag wird live mitgeschrieben, während ich die "Operation" vornehme. Man möge mir also bitte den unsachlicheren Schreibstil sowie eventuelle Abweichungen vom gefassten Plan nachsehen.

Das Wichtigste vorweg: Wackelt nicht an den Kabeln der bereits eingebauten HDDs im eurem laufenden System. Das mögen die nicht. Erst recht nicht die Systemplatte. Die schmiert dann gerne mal ab. Ist mir zumindest gerade passiert.

Zunächst schauen wir uns mal an, welche HDDs momentan im System verbaut wurden.

$ ls /dev/ | grep sd
sda
sda1
sdb
sdb1
sdb2
sdb3
sdb4
sdb5
sdb6
sdb7

Das sind zumindest in meinem Beispiel zwei HDDs mit jeder Menge Partitionen.

Als nächstes schließen wir die zu transplantierende HDD an das Mainboard an. Achtet dabei darauf, dass zuerst das SATA-Kabel und danach das Stromkabel angeschlossen wird. Mekrt euch bitte auch an welchen SATA-Port die HDD angeschlossen wird. Die Bezeichnungen stehen entweder direkt auf dem Mainboard oder sind dem Handbuch zu entnehmen.

Wenn die HDD ordnungsgemäß angeschlossen wurde, sollte sie nach kurzer Zeit auch unter /dev/ angezeigt werden.

$ ls /dev | grep sd
sda
sda1
sdb
sdb1
sdb2
sdb3
sdb4
sdb5
sdb6
sdb7
sdc
sdc1
sdc2
sdc3

Sollte dies nicht der Fall sein, so sollte die Platte, laut vorliegenden Quellen, nach der Eingabe folgenden Befehls erkannt werden.

$ sudo echo "- - -" > /sys/class/scsi_host/hostN/scan

N wird hierbei durch die entsprechende SATA-Portnummer ersetzt. (SATA0 -> N=1)

Schauen wir uns nun die HDD mal genauer an.

$ parted /dev/sdc print
Modell: ATA WDC WD5002ABYS-0 (scsi)
Festplatte  /dev/sdc:  500GB
Sektorgröße (logisch/physisch): 512B/512B
Partitionstabelle: msdos
Disk Flags:

Nummer  Anfang  Ende   Größe   Typ      Dateisystem     Flags
 1      32,3kB  200GB  200GB   primary  ext3            boot
 2      200GB   208GB  8000MB  primary  linux-swap(v1)
 3      208GB   500GB  292GB   primary

Wir erkennen hier drei Partitionen: eine 200GB große Systempartion(fragt mich nicht, was mich damals geritten hat, die Partition so riesig zu machen), 8GB Swapspace sowie 292GB Speicher ohne Dateisystem (hust)

Von der Systempartition sind noch einige Daten zu sichern, weswegen wir Sie schonmal in unser aktives Dateisystem einhängen.

$ sudo mkdir /mnt/transplantat
$ sudo mount /dev/sdc1 /mnt/transplantat

Besonders interessant sind hier die Verzeichnisse /etc wegen der Konfigurationsdateien des alten Systems sowie /var/www und /srv wegen der ehemals existenten HTTP- und TFTP-Server.

Da nun die wichtigsten Dateien aus dem alten System gesichert wurden, kann die alte Partition gelöscht und neue Partitionen angelegt werden. Ich halte mich dabei an die bereits vorgeschlagenen Werte von 1GB für /boot und den Rest des freien Speichers für /.

Nicht vergessen, die eingehängte Partition wieder auszuhängen

$ sudo umount /mnt/transplantat

Nach der Partitionierung sollten die neuen Partitionen auch gleich angezeigt werden.

$ ls /dev | grep sd
sda sda1 sdb sdb1 sdb2 sdb3 sdb4 sdb5 sdb6 sdb7 sdc sdc1 sdc2 sdc3 sdc4

Als nächstes sollten dann die Dateisysteme der beiden Partitionen vorbereitet werden.

$ sudo mkfs.ext3 /dev/sdc1 $ sudo cryptsetup luksFormat /dev/sdc2 $ sudo cryptsetup luksOpen /dev/sdc2 croot $ sudo mkfs.ext4 /dev/mapper/croot

Sobald die Dateisysteme eingerichtet wurden, werden die Partitionen wieder eingehangen und wir beginnen mit der Installation von Debian.

$ sudo mount /dev/mapper/croot /mnt/transplantat $ sudo mkdir /mnt/transplantat/boot $ sudo mount /dev/sdc1 /mnt/transplantat/boot

Spätestens jetzt sollte man sicherstellen, dass debootstrap auf dem Hostsystem installiert ist. Bei Archlinux ist das Paket im AUR zu finden

Da debootstrap unter Arch wohl ein paar Probleme mit GPG hat, werde ich das Tool ohne GPG-Check durchlaufen lassen. Es sollten eigentlich keine Probleme dabei auftreten, ist allerdings aus Sicherheitsgründen nicht uneingeschränkt zu empfehlen

# sudo debootstrap  --verbose --no-check-gpg --arch amd64 wheezy /mnt/transplantat/ http://ftp2.de.debian.org/debian

Sobald debootstrap durchgelaufen ist, geht es ans Anpassen der Konfigurationsdateien. Besonders die folgenden Dateien sollten editiert bzw. aus dem Backup kopiert werden. Insbesondere fstab und crypttab müssen an die neuen Partitionen angepasst werden. Hierbei bitte darauf achten, dass bei der Installation von GRUB2 das aktuelle mapped device als root-Dateisystem angegeben wird. Die Benennung sollte dementsprechend angepasst werden.

/etc/hostname
/etc/hosts
/etc/resolv.conf
/etc/fstab
/etc/crypttab
# echo 'BOOTLOGD_ENABLE=Yes' > /etc/default/bootlogd

Die restliche Konfiguration lässt sich eigentlich eins-zu-eins aus meinem anderen Artikel übernehmen, deswegen werde ich jetzt hier nicht mehr auf jede einzelne Aktion eingehen, sondern nur noch die entsprechenden Befehle zur Orientierung angeben.Im Installationsdialog von GRUB die richtige HDD angeben(in diesem Fall /dev/sdc).

Bemerkung: Befehle mit vorangestelltem '#' werden als root ausgeführt, Befehle mit vorangestelltem '$' als normaler Nutzer

# mount -t proc none /mnt/transplantat/proc
# mount -o bind /dev /mnt/transplantat/dev
# mount -t tmpfs none /mnt/transplantat/tmp
# mount -o bind /sys /mnt/transplantat/sys
# LANG=C chroot /mnt/transplantat /bin/bash
# PATH=/sbin:/usr/sbin:/bin:$PATH
# passwd
# aptitude update && aptitude -y upgrade
# aptitude -y install locales && dpkg-reconfigure locales
# dpkg-reconfigure tzdata
# aptitude -y install linux-image-amd64 ssh grub-pc pciutils psmisc cryptsetup dropbear busybox

P.S.: Die $PATH-Variable muss manuell erweitert werden, da ansonsten wichtige Tools nicht gefunden werden können

Danach noch wie angegeben /etc/initramfs-tools/initramfs.conf anpassen, evtl den SSH-Pubkey eintragen und danach mit folgendem Befehl GRUB updaten, die chroot-Umgebung verlassen und die HDD aushängen. Falls es beim Aushängen Probleme geben sollte, nutzt die Option "-l" von umount.

# update-grub
# exit
# umount /mnt/transplantat/sys
# umount /mnt/transplantat/tmp
# umount /mnt/transplantat/dev
# umount /mnt/transplantat/proc
# umount /mnt/transplantat/

Die verschlüsselte Partition wird wie folgt deaktiviert

$ sudo cryptsetup luksClose /dev/mapper/croot

Die HDD sollte mit folgendem Befehl wieder deaktiviert werden.

$ sudo echo 1 > /sys/block/sdc/device/delete

P.S.: Zumindest bei mir scheint dieser Trick nicht zu funktionieren. Wer es besser weiß, kann sich gerne bei mir melden.

Da sich die verschlüsselte Partition momentan nicht sauber schließen lässt, werde ich nun vom ursprünglichen Plan abweichen und das Hostsystem herunterfahren, um die HDD auszubauen.

Nach etlichem Hin und Her booted die Zielmaschine nun von der transplantierten HDD.

Fazit:

Alles in allem kann dieses Experiment als erfolgreich betrachtet werden. der Fileserver bootet wieder, die restliche Funktionalität wird später wiederhergestellt und ich habe erneut gelernt, was für ekelhafte Dinge man mit Computern anstellen kann, wenn man will.

Quellen:

http://thecodeartist.blogspot.de/2012/06/sata-hotplug-addremove-sata-hdd-in.html

https://aur.archlinux.org/packages/debootstrap/?comments=all

http://www.gossamer-threads.com/lists/gentoo/user/229673


2014-07-11 12:06 arch debian debootstrap encryption hotplug linux madness sata