Im folgenden wird beschrieben, wie MLD beim Installieren von Noobs als weitere Distribution eingebunden werden kann. Das Ganze wurde für MLD 5.3 und 5.4 erfolgreich umgesetzt. Bei der Version 5.3 muss während des Installationsprozesses allerdings nochmals “händisch” eingegriffen werden. Der entsprechende Forumsbeitrag zum Thema:
Siehe auch https://github.com/raspberrypi/noobs/wiki/Adding-custom-OS-version-examples .
Aus Wikipedia:
Noobs lässt sich von der Webseite der Raspberry Pi Foundation herunterladen (als ZIP-Datei), entpacken und auf eine mit dem Dateisystem FAT32 vorformatierte SD-Karte (für Raspberry Pi A und B) oder einer Mikro-SD-Karte (für Raspberry Pi A+, B+, sowie 2 und 3) abspeichern. Nachdem die (Mikro-)SD-Karte in den Raspberry Pi gesteckt wurde, lässt sich per Mausklick das Betriebssystem auswählen, welches installiert werden soll. Dieses wird dann sofort heruntergeladen und auf dem Raspberry Pi installiert. Nach der Installation kann man mit einem weiteren Mausklick das gewünschte Betriebssystem starten. Dies setzt voraus, dass alle Peripheriegeräte wie Monitor, Tastatur und LAN-Kabel/WLAN bereits angeschlossen sind.
Vorteil ist, dass man mit einer SD-Card mehrere Distributionen hosten und beim Hochfahren über Tastatur, Maus oder Fernbedienung entscheiden kann, welches System booten soll, z.B. Raspbian, MLD einer bestimmten Version, LibreElec etc…
Das kann dann auch so aussehen:
Was wir brauchen:
Für MLD werden auf der Noobs-SD-Card drei Partitionen angelegt, nämlich Boot, System (Root) und Daten (Video). Für alle drei Partitionen werden die Größen festgelegt (siehe später “partitions.json”) und entsprechende TAR-Archive für jede Partition vorbereitet. Das TAR-Archive für die Bootpartition enthält die Installationsdateien aus dem MLD-Image. Für die TAR-Archive der System- und Datenpartition werden “leere” TAR-Archive generiert.
$ cd $HOME $ mount | egrep sdX <---- Device der eigenen Umgebung entnehmen /dev/sdbX on /media/<USER>/MLD type vfat ... $ tar -cvf boot.tar -C /media/<USER>/MLD ./ <---- Mountverzeichnis der eigenen Umgebung entnehmen $ xz -9 -e boot.tar
$ mkdir dummy $ echo -e "README.txt\nThis is a tar file for you to use as a placeholder for a partition during Noobs installation." >dummy/README.txt $ tar -cvf root.tar -C dummy ./ $ xz -9 -e root.tar $ cp root.tar.xz data.tar.xz
boot.tar.xz data.tar.xz MLD.png os.json partition_setup.sh partitions.json root.tar.xz
{ "name": "MLD", "version": "5.4", "release_date": "2018-02-01", "kernel": "4.14.18", "description": "VDR based on MLD.", "username": "root", "password": "mld500", "supported_models": ["Pi 2","Pi 3"] }
{ "partitions": [ { "label": "boot", "filesystem_type": "FAT", "partition_size_nominal": 384, "want_maximised": false, "uncompressed_tarball_size": 256 }, { "label": "root", "filesystem_type": "ext4", "partition_size_nominal": 4904, "want_maximised": false, "mkfs_options": "", "uncompressed_tarball_size": 10 }, { "label": "data", "filesystem_type": "ext4", "partition_size_nominal": 9808, "want_maximised": false, "mkfs_options": "", "uncompressed_tarball_size": 10 } ] }
#!/bin/sh set -ex if [ -z "$part1" ] || [ -z "$part2" ] || [ -z "$part3" ]; then printf "Error: missing environment variable part1, part2 or part3\n" 1>&2 exit 1 fi mkdir -p /tmp/1 /tmp/2 /tmp/3 mount "$part1" /tmp/1 mount "$part2" /tmp/2 mount "$part3" /tmp/3 bootuuid=$(blkid $part1 -o value -s UUID) sed /tmp/1/cmdline -i -e "s|root=[^ ]*|root=UUID=${bootuuid}|" #sed /tmp/1/cmdline -i -e "s|root=[^ ]*|root=${part2}|" #sed /tmp/2/etc/fstab -i -e "s|^.* / |${part2} / |" #sed /tmp/2/etc/fstab -i -e "s|^.* /boot |${part1} /boot |" umount /tmp/1 umount /tmp/2 umount /tmp/3
Menu bei einer Noobs-Installation mit je einmal LibreElec und MLD:
Die Partition-Table unter MLD zeigt dann folgendes:
MLD> fdisk -l Disk /dev/mmcblk0: 31.1 GB, 31104958464 bytes 4 heads, 16 sectors/track, 949248 cylinders Units = cylinders of 64 * 512 = 32768 bytes Device Boot Start End Blocks Id System /dev/mmcblk0p1 129 53620 1711724+ e Win95 FAT16 (LBA) <--- Noobs Installations-Partition /dev/mmcblk0p2 53620 949120 28656019+ 5 Extended /dev/mmcblk0p5 53633 54656 32767 83 Linux <--- NOOBS Settingspartition. /dev/mmcblk0p6 54657 71040 524287 c Win95 FAT32 (LBA) <--- Libreelec (SYSTEM) /dev/mmcblk0p7 71041 466048 12640255 83 Linux <--- Libreelec (STORAGE) /dev/mmcblk0p8 * 466049 478336 393215 b Win95 FAT32 <--- MLD Boot /dev/mmcblk0p9 478337 635264 5021695 83 Linux <--- MLD System/Root /dev/mmcblk0p10 635265 949120 10043392 83 Linux <--- MLD Data
Wenn man schon installiert hat, aber nochmals Änderungen vornehmen möchte (z.B. neue boot.tar.gz, andere Partitionsgrößen, …), kann man dies auch remote machen. Hierzu geht man über ssh auf das laufende MLD bzw. die gerade laufende Distri und mountet die Noobs-Installations-Partition. Über WinSCP o.ä. kann man dann die Dateien unter /mnt/mmcblk0p1/os/MLD anpassen oder neu hochladen
MLD> mkdir -p /mnt/mmcblk0p1 MLD> mount /dev/mmcblk0p1 /mnt/mmcblk0p1 MLD> ls -l /mnt/mmcblk0p1/os/MLD -rwxrwxr-x 1 root root 185664252 Mar 14 00:13 boot.tar.xz -rwxrwxr-x 1 root root 332 Mar 14 10:15 data.tar.xz -rwxrwxr-x 1 root root 830 Jan 4 2017 MLD.png -rwxrwxr-x 1 root root 217 Mar 14 10:17 os.json -rwxrwxr-x 1 root root 642 Mar 14 12:46 partition_setup.sh -rwxrwxr-x 1 root root 604 Mar 14 12:48 partitions.json -rwxrwxr-x 1 root root 256 Mar 14 00:24 root.tar.xz
Dann RPI neu starten und <Shift> drücken, damit komplett N E U aus /dev/mmcblk0p1 installiert wird. Damit spart man sich das Abstöpseln der SD-Card.
Man kann Namen und Beschreibung der Distributionen nach Installation im Noobs-Menü nachträglich abändern. Am Beispiel:
MLD> mkdir /mnt/mmcblk0p5 MLD> mount /dev/mmcblk0p5 /mnt/mmcblk0p5 MLD> cat /mnt/mmcblk0p5/installed_os.json [ { "bootable" : true, "description" : "LibreELEC is a fast and user-friendly Kodi Entertainment Center distribution.", "folder" : "/mnt/os/LibreELEC_RPi2", "icon" : "/mnt/os/LibreELEC_RPi2/LibreELEC_RPi2.png", "name" : "LibreELEC_RPi2", "partitions" : [ "/dev/mmcblk0p6", "/dev/mmcblk0p7" ], "release_date" : "2018-01-21", "supported_models" : [ "Pi 2", "Pi 3" ] }, { "bootable" : true, "description" : "VDR based on MLD.", "folder" : "/mnt/os/MLD", "icon" : "/mnt/os/MLD/MLD.png", "name" : "MLD", "partitions" : [ "/dev/mmcblk0p8", "/dev/mmcblk0p9", "/dev/mmcblk0p10" ], "release_date" : "2018-02-01", "supported_models" : [ "Pi 2", "Pi 3" ] } ]
Die Partition /dev/mmcblk0p5 ist quasi so eine Art Partition-Table für die installierten Distributionen. An dieser Stelle könnte man auch durch Ändern der Partitions-Angaben die Root-Partitionen auf einen USB-Stick auslagern.
Wenn eine neue Version von MLD installiert werden soll, aber die anderen bestehenden Distributionen wie bsp. LibreElec unverändert lassen willst, dann reicht es, die Installationsdateien des neuen MLD-Images in die Boot-Partition zu kopieren. Die Boot-Partition vorher leer machen, damit die neuen Dateien reinpassen, ggf. noch cmdline und config.txt wegsichern und dann neu booten. Im Noobs-Menu MLD auswählen und das Spiel mit “Unpacking” beginnt von vorne…
Beim Schritt “Individuelle Installation” im WebIF die beigefügte Datei in das Verzeichnis /etc/setup ins Noobs-MLD hochladen, um alle Partitionen sichtbar zu machen.
Über ssh dann
mv /etc/setup/install.sh.tar /etc/setup/install.sh chmod 755 /etc/setup/install.sh
Im WebIF die Seite neu laden und dann müssten alle Partitionen sichtbar sein, Partitions auswählen (hier p8, p9, p10), alles anklicken und installieren.