• chevron_right

      Debian auf Raspberry Pi 3B+ SD-Karte installieren — ohne vorgefertigtes Image!

      mirabilos · Tuesday, 17 September, 2019 - 15:48 edit · 3 minutes

    Ich habe für ⮡ tarent ein POSIX-Shellskript erstellt, das (von einem laufenden GNU/Linux-System aus) eine SD-Karte oder eine sparse Image-Datei partitioniert, Dateisysteme anlegt und eine Grundinstallation von Debian buster/arm64 durchführt, die danach ohne Mucken auf einem Raspberry Pi 3B+ auch bootet — mit Ausgabe auf HDMI, inklusive 3D-Unterstützung⁴.

    Das Skript ist frei lizensiert und sehr anpaßbar: beim Starten werden einige Sachen mit sinnvollen¹ Defaults abgefragt, und man hat einige Möglichkeiten zur Anpassung, aber wenn einem das noch nicht reicht kann man auch das Skript selbst ändern, welches ich deutlich mehr und auffälliger als üblich kommentiert habe.

    Nach dem Installieren kann man interaktiv (noch im chroot unter Emulation) Sachen ändern, dann wird das Image fertiggestellt (und so sparse wie möglich gemacht), und man kann es direkt im Pi booten. Dann kann man sich über USB-Tastatur und HDMI-Bildschirm (oder DVI via Adapter) einloggen, oder über SSH (es holt sich per DHCP beim Booten IPv4 aus dem Ethernet); ein vorkonfektionierter Benutzeraccount mit sudo-Rechten wird während der Installation angelegt, und die SSH-Keys und der random-seed werden vom Hostsystem mit Zufallszahlen versorgt.

    Nach dem Starten sollte man allerdings prüfen, ob der (standardmäßig mitinstallierte) NTP-Server die Uhrzeit richtig gesetzt hat (es ist nicht mehr 1970…), und eventuell läuft die GPU in diesen Bug rein (evtl. mal den sid-Kernel probieren?), aber… es läuft.

    Und das Wichtigste: nun² braucht niemand mehr Systeme zu klonen schauder oder gar brr… vorgefertigte Images zu nehmen.

    Viel Spaß damit!

    Nächster Schritt: cryptsetup/LUKS und LVM? (Das braucht aber vermutlich mehr Unterstützung auf dem Hostsystem… und sprengt den MICA-Rahmen.)

    ① Es defaultet sogar auf systemd mit usrmerge, kann aber auch sysvinit mit Standardfilesystem, und bindet nur offizielle Debian-Repositories (also: Debian selbst, die Zusatzrepos contrib und nonfree, und das jeweils in Release, Security-Updates, Release-Updates und (standardmäßig deaktiviert) Backports) ein, kann also überall eingesetzt werden.

    ② Ja, es gab vorher auch diverse Tools, die das taten, zum Beispiel das, mit dem die inoffiziellen³ Images von Debian erzeugt werden, aber womit man sich auch selbst ein System aufsetzen kann. Ich habe diesen Post zu kurzfristig geschrieben, um voll drauf einzugehen, und werde den ggfs. später editieren, aber: das ist Python mit YAML-Steuerdateien und vmdb2, was stellenweise schlecht bis undokumentiert ist (und viel automagisch macht und damit schwer auf Anhieb zu durchschauen ist). Was ich habe ist eher eine Art Batchdatei (es fing auch so an, bis Sarah meinte, ich solle doch ein Skript draus machen, und ich die interaktive Fragerei davorgesetzt habe): eine Sammlung an Sachen, die ich sonst von Hand eingetippt hätte (es verwendet sogar das normale fdisk statt ein skripttauglicheres Partitionierungstool!). Ich finde das leichter verständlich und anpaßbar. Mein Skript installiert auch nur buster/arm64 für RPi3B+ (kann man aber editieren) und ist längst nicht so allgemein wie das Debian-Tool. Dafür habe ich versucht, dem Ergebnis von d-i (plus Benutzbarmachen), also was nach debootstrap noch passiert, so nahe wie möglich zu kommen, und dafür sowohl einen diff zwischen einer frischen (amd64‑)Installation und einem (amd64‑)debootstrap-Ergebnis gemacht als auch d-i komplett ausgecheckt und dadrin in Code, Daten, Maintainerskripten und Debconf gewühlt.

    ③ Wie ich von Nik erfuhr, sind die wohl nur deshalb inoffiziell, weil nur was d-i (der offizielle Debian-Installer) erzeugt offiziell heißen könne, das d-i-Team aber wohl Probleme mit der Existenz von Plattformen, die nicht einfach so von einem ISO-9660-Dateisystem booten können, habe. Bitte gern in Kommentaren erläutern, mit Bugnummer und so.

    .oO(Image erzeugen, das das ISO enthält, und nach dem Starten es dd’t und dann rein-kexec-t? Oder reinchrooten, wobei man dann vom selben Kernel booten muß, geht aber alles… zumindest mit einer Variante, die nach dem fdisk-Schritt nicht mehr aufs ISO zugreifen muß. Und das mit dem automatischen Erzeugen der FAT-Partition geht bei EFI auch, sollte also kein Thema sein. Nur nonfree hinzufügen und den Bootloader daraus installieren wäre also noch… hmm…)

    ④ Hierzu muß man die Pakete xserver-xorg-video-fbdev, xserver-xorg-input-libinput, xserver-xorg-legacy, xorg, einen Windowmanager (z.B. icewm, sehr einsteigerfreundlich) installieren.