Table of Contents

MLD und Noobs (RPi)

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:

MLD5.3 und NOOBS - Wie?

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:


Partition-Images vorbereiten

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


Noobs auf SD Card kopieren

boot.tar.xz
data.tar.xz
MLD.png
os.json
partition_setup.sh
partitions.json
root.tar.xz

os.json
{
  "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.json
{
  "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
    }
  ]
}
partition_setup.sh
#!/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


Noobs mit MLD installieren

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


Tipps

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.

install.sh.tar

Ü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.