Diese Seiten sind unsere internen Protokolle aus dem Labor.
Aufgrund der fortlaufenden Protokollierung der Ergänzungen sowie der Verbesserungen ist die Reihenfolge / Chronologie der Seiten aus dem Ruder gelaufen - leicht durcheinander geraten.
.
Einblick in das aktuelle NAS-540/542 Betriebssystem .....
Am 1. Feb. 2022 habe ich vom Zyxel-Speziallisten den Link zu einer "tar.gz" Datei von 1,7 GigaByte (gepackt) bekommen - mit den Quellen des Zyxel NAS Betriebsystems aus 2016.
Inzwischen gibt es auch die Quelldateien/Sourcen aus 2021. Doch je mehr ich suche, desto mehr Fragen stellen sich.
Hier die Quelldateien/Sourcen für die Version "NAS542_510ABAG1C0" bereits teil-ausgepackt :
.
- README.txt > 3 KB
- build_NAS542.tar.gz > 198.438 KB
- host.tar.gz > 386.209 KB
- prebuild.tar.gz > 30.146 KB
- src.tar.gz > 443.753 KB
- staging.tar.gz > 277.015 KB
- tool.tar.gz > 92.977 KB
- x-tools.tar.gz > 107.255 KB
.
In dem dortigen Readme Text lesen wir Folgendes :
Das 32bit "Zyxel"-Betriebssystem wird im "Ubuntu 14.04.3 amd64" kompiliert und zusammen- gebaut, baut also im Prinzip auf Debian-Linux auf.
.
In dem Readme.txt gibt es eine Installationsanweisung zum Erstellen der sogeannten "make-"Dateien, den "Rezept-Büchern" zur Erzeugung des Betriebssystems. Das am Ende eines längeren Compile-Vorganges fertige Betriebssystem, zuammengepackt in der Firmware, landet in einem Binär-Container wie zum Beispiel diesem hier für ein NAS-540 : "521AATB7C0.bin" (die aktuelle Version 7 (im Jan. 2022 noch aktuell) mit einer Göße von 58 Megabyte).
.
Nirgendwo hatte ich bislang gelesen, wie solch ein NAS gestartet wird. Von den vielen PCs und Servern her ist man über das BIOS infomiert, und eigentlich müsste es dort genauso sein. Das Firmware- Image wird im Werk in den leeren Flash-Speicher geschrieben und müsste also von dort aus entpackt und ausgeführt werden. Dieses "Wie" müsste also in den Sourcen dokumentiert sein. Gefunden habe ich es dann im Zyel Forum - zufällig.
.
Was ist der eigentliche Zweck dieser Zyxel-NAS Seiten ?
Wenn bei jedem Neustart des NAS-Servers dieses Firmware-Image erneut entpackt wird und im RAM in einer dort angelegten RAM-Disk die Verzeichnis- Strukturen neu angelegt werden, kann man darin nichts dauerhaft korrigieren, ergänzen oder speichern, weder in /etc/ noch in /opt/ (da es dieses Verzeichnis anfänglich noch gar nicht gibt).
Welche Umwege oder Abwege oder Tricks haben sich die Programmierer einfallen lassen, um - zum Beispiel über das Verzeichnis /etc/ ein dauerhaft verlinktes veränderliches
"/-idata/.system/etc/" drüber zu verlinken.
Gleiches gilt für das benötigte Verzeichnis /opt/, in das später alle "optionalen" Werkzeuge und Programme (dauerhaft) installiert werden sollen.
.
Erste Erkenntnisse aus dem Innenleben des NAS Servers
In dem 256MB NAND-flash-memory ist Platz (2 Slots) für 2 Firmware Images gleichzeitig. Vermutlich wird jeweils das aktuelle (letzte) aufgehoben, (und bei Updates das vorletzte andere überschrieben), wenn ein neues Update rein "geflasht" wird.
Im Verzeichnis /firmware/mnt/ sind 3 Unterverzeichnisse zu sehen, /nand/ und /sysdisk/ sowie /info/ mit den Geräte-Daten / Namen / Revisionen und den Checksummen.
In /nand/ ist ein 52 Megabyte großes gepacktes Image (sysdisk.img.gz) und in /sysdisk/ ist ein 150 Megabyte großes Platten-Image (sysdisk.img) zu sehen.
In der RAM-Disk wird beim Start ein Verzeichnis "/ram_bin" angelegt, in welchem die Verzeichnisse einer kleinen Bootumgebung zu sehen sind.
.
Erste Informationen aus den tiefsten Eingeweiden des NAS-541
Nach einigem Suchen im Zyxel Forum stolperte ich über diesen Programmaufruf :
/firmware/sbin/info_printenv
Die ausführlichen "env" Variablen werden ausgelesen und angezeigt.
=======================================================
ip=dhcp
eth0.serverip=192.168.1.70
# Wo wohnt der Kernel ? .. in einem NAND-Flash-Speicher
kernel_loc=nand
rootfs_loc=nand
# Welches Modul lädt den Kernel ?
uloaderimage=microloader-c2kevm.bin
bareboximage=barebox-c2kevm.bin
mfg_kernel_img=uImage_MFG
mfg_rootfs_img=rootfs_ubi.img_MFG
rootfs_type=ubifs
rootfsimage=root.$rootfs_type-128k
kernelimage_type=uimage
kernelimage=uImage
spi_parts=256k(uloader)ro,512k(barebox)ro,256k(env)
spi_device=spi0.0
nand_device=comcertonand
# In welche Partitionen ist das 256 MB große NAND-flash-memory aufgeteilt ?
nand_parts=
.
- 10M(config),
- 10M(kernel1),
- 110M(rootfs1),
- 10M(kernel2),
- 110M(rootfs2),
- -(reserved)
.
# Aus welchem Block wird die akuelle Firmware gestartet ?
rootfs_mtdblock_nand=2
autoboot_timeout=3
usb3_internal_clk=yes
bootargs=console=ttyS0,115200n8, init=/etc/preinit pcie_gen1_only=yes
bootargs=$bootargs mac_addr=$eth0.ethaddr,$eth1.ethaddr,$eth2.ethaddr
# Das bezieht sich sicher auf die aktuelle Start-Image im NAND-Flash
next_bootfrom=2
curr_bootfrom=2
kernel_mtd_1=4
sysimg_mtd_1=5
kernel_mtd_2=6
sysimg_mtd_2=7
(was MTDs sind, wird später erklärt)
# Und das sind die allgemeinen Infos aus dem NAS-542 - die "Checksum"s werden zur Prüfung der zu ladenden Module auf Unversehrtheit benutzt.
MODEL_ID=B403
fwversion_1=V5.21(ABAG.6)C0
revision_1=51201
modelid_1=B403
core_checksum_1=ce70d927b52d5e04f0dd6773fd0f8dd3
zld_checksum_1=1a3fddc58e0c799fd695f7800bb5f058
romfile_checksum_1=95CC
img_checksum_1=4585723149e6689c4c335893e7f82b66
fwversion_2=V5.21(ABAG.7)
revision_2=51209
modelid_2=B403
core_checksum_2=1f2eb228a8a8e84b5ca60decb61d8128
zld_checksum_2=b3372b8ae6011ca193af3aeac794e373
romfile_checksum_2=AB6B
img_checksum_2=6e7bbe813643b2e9cf434cba783ba56d
# Und das sind die beiden MAC-Adressen, die für wake-on-lan gebraucht werden
ethaddr=5C:F4:AB:67:B3:82
eth2addr=5C:F4:AB:67:B3:83
serial_number=S150Z47005688
/firmware/sbin #
=======================================================
Der einfache Befehl "env" zeigt nur das hier
/firmware/sbin # env
SSH_CLIENT=1xx.2xx.3xx.83 4648 22
MAIL=/var/mail/root
USER=root
LD_LIBRARY_PATH=/lib:/usr/lib:/usr/lib/private
OLDPWD=/root
HOME=/root
SSH_TTY=/dev/pts/0
LOGNAME=root
TERM=xterm
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/firmware/sbin:/usr/local/zy-pkgs/bin:/firmware/htp
SHELL=/bin/sh
PWD=/firmware/sbin
SSH_CONNECTION=1xx.2xx.3xx.83 4648 1xx.2xx.3xx.20 22
/firmware/sbin #
Nachtrag und Ergänzung - viele Fragen tun sich auf .......
Beim erstmaligen Lesen dieser beiden Environment Textausgaben im putty Konsolenfenster muß auch ein Linux Programmierer dazulernen. Was ist "spi", "ubifs", was sind u-boot und barebox und was ist "MTD" ?
.
Bislang hatte ich noch keinerlei Informationen gefunden, was bei Einschalten im Boot-Loader vor sich geht und wie das ganze NAS System gestartet wird. Im RAM ist ja noch alles leer und im NAND-Flash wohnt die Firmware als gepacktes Binärpaket. Erst im /init Script werden Variablen initialisiert und Pfade angelegt und es wird geprüft, welche Massenspeicher wie USB, Karte und/oder HDD vorhanden sind.
Wieso wird ein shell-Script (init) ausgeführt, obwol der Linux Kernel noch gar nicht geladen ist ?.
Und dann gibt es ja noch zwei Start-Scripte "rcS" und "rcS2"
Das oben drüber verlinkte init-Script ruft das nächste Start-Script-1 auf in /etc/init.d/ nämlich "rcS" mit ca. 13 Kilobyte Größe. Der Kommentar dort sagt aus :
.
- # The main job of this (rcS) script is ...
- # 1. Prepare the root file system.
- # 2. Mount system disk image from HDD.
- # 3. Handle the condition that there is not valid system disk image.
.
In "/ram_bin/etc/init.d" liegt das zweite Start-Sript-2 "rcS2" (ca. 21 Kilobyte), das laut Kommentar den gesamten nachfolgenden Bootprozess steuert, die sogenannten "Stage"-Level.
.
# This (rcS2) script initializes almost all system services on HDD.
.
.