An die Linux-Profis: Ideale Kernelkonfiguration/InitRAMFS für neue Distribution?

  • Hallo!


    Ich bastele gerade an einer eigenen Linux-Distribution, speziell abgestimmt auf Media-Center-Lösungen bzw. den VDR. Sie basiert nicht auf einer der bekannten Distributionen, sondern ist direkt aus den Quellen gebaut (Linux-From-Scratch). Die Distribution bringt ein eigenes Paketmanagement mit, ähnlich dem von Debian, jedoch bedeutend simpler strukturiert. ;-) Der Installer soll eine idiotensichere Installation eines VDR-Media-Centers ermöglichen und dabei möglichst viele Konstellationen von Hardware unterstützen. Sie kann auch als Grundlage für einen eigenen VDR-from-Source und eigene Pakete dienen. Zu den "Features" werde ich zu gegebener Zeit noch mehr erzählen, erstmal soll es fertig werden. :-)


    Besonders hänge ich noch an der Installations-CD, sie muss ja von Haus aus praktisch alle Treiber für ein erfolgreiches Booten mitbringen.


    Wie würdet ihr das lösen?
    a) Einfach alle relevanten Treiber fest in den Kernel einkompilieren?
    Was wären die relevanten Treiber? ;-)


    b) Oder mit einem InitRAMFS arbeiten?
    Wie müsste dieses aussehen?
    Müssten dann alle Module einmal durch modprobe?
    Oder kann man dem Kernel das irgendwie selbst erkennen lassen, wenn er Zugriff auf die Module hat?


    Das gleiche Problem habe ich auch mit dem eigentlichen "User"-Kernel.
    Derzeit arbeite ich hier noch mit einer InitRD, erzeugt durch ein leider veraltetes mkinitrd-Skript.
    Ich habe schon versucht mit yaird und den initramfs-tools ein InitRAMFS zu erstellen, aber yaird bekomme ich überhaupt nicht zum Laufen und die initramfs-tools erzeugen ein unvollständiges InitRAMFS.
    Die wenigen HOWTOs im Netz haben mich da noch nicht wirklich weiter gebracht, hat hier jemand eine Idee für ein "eigenes" InitRAMFS-Tool?


    Beste Grüße
    CafeDelMar


    PS: Wie sieht eure ideale Kernelkonfiguration aus?
    -> Was darf nicht fehlen?
    -> Was sollte auf keinen Fall rein?
    -> Welche Einstellungen sind wichtig?


    Ich habe zwar bereits einen Kernel für diesen Zweck "durchoptimiert", aber da ich nicht unbedingt der Kernel-Sepzialist bin, bin ich da wohl auf einige Ratschläge angewiesen. ;-)

  • Nur so als Idee..., mal sehn was die Distri Spezies dazu sagen.


    Einkompilieren solltest du in den CDROM Kernel zumindest


    - alle IDE und SATA Treiberchens
    - Netzwerktreiber
    - alle Module für deine unterstützten Dateisysteme
    - usb Treiber
    - sg Treiber
    - Codepages
    - nicht: die unbenötigten Treiber (DVB/Audio,...)


    Fürs eigentliche System
    * Treiber des root fs und passende IDE/SATA/SCSI Treiber + benutzte Codepage
    * Den benutzten Treiber würde ich an deiner Stelle je System anpassen lassen per shell scripten nach den Ausgaben von lspci und lsusb und dem /sys Verzeichnis (CPU/RAM/x86 oder i64). Und die nur als Module.


    Das sollte reichen um ein feines System zu bauen.

  • BeTuX


    Eigentlich wollte ich, dass in diesem Thread noch gar nicht offenbaren ....


    Hintergrund des ganzen Projekts ist, dass ich nun vermehrt VDRs (als Media-Center) einrichte und im Kreis der Familie und der Bekannten auch einige den VDR benutzen, aber im Prinzip vom technischen Hintergrund und gerade von Linux keine Ahnung haben. Bisher habe ich als Basis immer Debian genommen, habe dabei aber eine Menge Nerven bei so "Kleinigkeiten", wie der Installation von Lirc-Serial, dem Burn-Plugin oder dem Mplayer-Plugin verloren. Daher kam die Idee, warum nicht eine eigene schmale Distribution kreieren, die perfekt abgestimmt ist und problemlos alle VDR-Features anbietet.


    Der Unterbau der Distribution ist die Development-Version von Linux-from-Scratch, die Boot-Skripte und Einstellungen wurden soweit erstmal auch aus diesem "Buch" übernommen. Das Ganze soll zu gegebener Zeit nochmal durchoptimiert werden, z.B. evtl. Stripping der Debug-Symbole in den ganzen Binaries, um Platz zu sparen.


    Dazu kommt ein intelligenter Paket-Manager, der auch Abhängigkeiten auflösen und später auch mal aus einem Online-Archiv Pakete installieren oder aktualisieren kann. Hierüber kann man auch leicht ein Paket mal wieder deinstallieren.


    Besonders einfach soll der Installer werden. Dialogbasierend soll er in möglichst einfacher Form die gewünschte Grundkonfiguration abfragen und dabei möglichst viel selbst erkennen und aus der vorhandenen Hardware Schlüsse ziehen, z.B. Erkennung der DVB- und Analog-Karten, Einbindung eines vorhandenen Software-RAIDs, etc. Der Installer soll auch Software-RAIDs einrichten können oder einfach nur Festplatten VDR-typisch partitionieren oder vorhandene Partitionen erkennen und verwenden. Auch die Installation auf Flash-Speichern soll irgendwann mal möglich sein samt der entsprechenden System-Optimierung hierfür.


    Zum Anfang soll es erstmal nur FF-Unterstützung geben, aber mir schwebt da einiges vor:
    - Ausgabe über Xineliboutput
    - Ausgabe über DXR3
    - Ausgabe über Reel-HD-Extension
    - Ausgabe über PVR-Karte
    - Unterstützung von LIRC-serial
    - Unterstützung von angeschlossenen LCDs und TFTs
    - Unterstützung vom Wake-Up-Board, NVRAM, ACPI-Wakeup
    - AV-Board-Unterstützung


    Standardmäßig soll der VDR 1.6 installiert werden. Uneins bin ich mir noch wie umfangreich das Basis-Paket augestattet sein wird. Auf jeden Fall soll der Extensions-Patch rein, dazu das Setup-Plugin und Skin-EnigmaNG. Der VDR soll ideal vorkonfiguriert sein und die Menüs für unerfahrene Benutzer optimiert werden.


    Dazu soll es dann die üblichen interessanten Plugins (wohl als Pakete) geben, sowie eine eigene Web-Oberfläche.


    Optional könnten hier auch mehrere VDR-Pakete angeboten werden, z.B. eins für den VDR-1.4.7 oder ein weniger vorkonfiguriertes. Was angeboten wird, hängt eben vom Interesse der Nutzer ab, erstmal biete ich es so an, wie ich es selbst brauche. ;-)


    Alternativ soll man sich auch alles selbst kompilieren können oder eigene Pakete erstellen können. Die nötige Entwicklungsumgebung wird mitgeliefert.


    Mh, viel mehr fällt mir gerade nicht mehr ein. :-)))


    Aber in wie weit das ganze ausgebaut, erweitert und optimiert wird, hängt eben vom Interesse und ggf. dann Mitwirkenden ab.


    Achso eine Besonderheit wird wohl sein, dass ich vieles in PHP (die Kommandozeilenversion) löse, da mir Perl- und Shell-Skripting nicht so liegen und ich festgestellt habe, dass PHP da ebenso effizient ist.


    Beste Grüße
    CafeDelMar

  • Nachtrag:


    Man soll auch wählen können, ob es sich bei der Installation um einen Server oder einen Client handelt.


    Insgesamt soll die Distribution sehr schmal und flott werden, eher eine Art erweiterbare "Firmware-Distribution". ;-)
    Aber auch ein schmales X soll es später optional geben, wird ja eh für Xineliboutput gebraucht.

  • Schonmal vielen Dank, dass hilft mir weiter ...



    Der Kernel wird dadurch auch nicht zu groß?


    Quote

    Original von wirbel
    Fürs eigentliche System
    * Treiber des root fs und passende IDE/SATA/SCSI Treiber + benutzte Codepage
    * Den benutzten Treiber würde ich an deiner Stelle je System anpassen lassen per shell scripten nach den Ausgaben von lspci und lsusb und dem /sys Verzeichnis (CPU/RAM/x86 oder i64). Und die nur als Module.


    Wie passe ich das denn je System an, ohne den kompletten Kernel jeweils neuzukompilieren?


    Wahrscheinlich muss ich hier irgendwie noch mein InitRAMFS-Problem knacken. ;-)

  • mal 2 Anregungen:


    Bei LinVDR kommen wir ganz ohne eine initrd aus. IDE/SATA-Treiber sind fest im Kernel einkompiliert. Allerdings verwendet der Installer von LinVDR/mahlzeit noch eine andere Kernelversion. Im LinVDR- "User"kernel ist USB nicht fest einkompiliert, da ich zum einen nicht jeden USB 1.1-Controller unnötig initialisieren möchte (kostet evtl. ein paar Sekunden beim Booten), und weil die Möglichkeit, den USB-Treiber zu entladen, schon da sein sollte (w/ USB-DVB-Devices)


    das immer wieder verbreitete Gerücht, ein schlanker, auf das System angepasster Kernel würde schneller booten, kann ich nicht bestätigen.


    Ich bin inzwischen auch am Überlegen, ob es wirklcih sinnvoll ist, eigene Kernel zu bauen. Es wird immer User geben, die irgendeinen Treiber oder irgendeine Funktion noch haben wollen. Der Ubuntu-Standardkernel bringt eine unglaublich breite Hardwareunterstütung mit. Es wäre eigentlich völlig ausreichend, den zu verwenden und bei Bedarf aktualisierte v4l-dvb-Pakete bereitzustellen.

    ACT-620, Asrock B75 Pro3-M, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

  • Quote

    Original von CafeDelMar
    Schonmal vielen Dank, dass hilft mir weiter ...



    Der Kernel wird dadurch auch nicht zu groß?


    Ziemlich :)


    IN den Kernel würde ich nur reinpacken , was er zwingend braucht , um zu starten und die initrd zu ziehen .
    In der initrd müssen dann zwangsläufig alle Module für unterstützte fs und deren möglicher Anschluß ( USB/FW ) sein .
    Wie Wirbel schon schrieb - DVB und sonstiges Gedöns müssen im Installationskernel NICHT sein , des weiteren brauchste IM Kernel auch keine Netzwerktreiber .
    Es langt , wenn er die Module laden kann , wenn root gemountet ist .



    Was mich interessieren würde : Welche Paketverwaltung willste nehmen ?


    hjslfs basiert auch auf LFS , wie der Name schon sagt und ich schraub da recht manuell rum ...


    HJS

  • Quote

    Original von henfri
    das ist bestimmt sehr interessant, es selber zu machen. Aber es gibt doch schon EasyVDR, Gen2VDR, ... die es doch sicher jedem Recht machen sollten, oder?


    Auf die Frage habe ich gewartet. ;-)


    Sicher gibt es die. Ich habe mir die Beschreibungen der Distris auch vor einiger Zeit mal alle angesehen und lese auch viel Positives über sie. Aber darum geht es gar nicht.


    Mein Beweggrund ist, dass ich mit etwas "fertigem" nicht so zufrieden war und es deshalb selbst einmal versuchen wollte. Außerdem denke ich, dass ich möglicherweise einige interessante neue Ansätzte miteinbringe, zudem gibt es noch keine Binary-Distribution für den VDR auf Basis von LFS (soweit mir bekannt). ;-)

  • Mal wieder danke. :-)


    Quote

    Original von Dr. Seltsam
    Bei LinVDR kommen wir ganz ohne eine initrd aus.


    Wenn ich auf initrd verzichten könnte, wäre mir das auch sehr recht.


    Quote

    Original von Dr. Seltsam
    und weil die Möglichkeit, den USB-Treiber zu entladen, schon da sein sollte (w/ USB-DVB-Devices)


    Wozu ist das wichtig?


    Quote

    Original von Dr. Seltsam
    das immer wieder verbreitete Gerücht, ein schlanker, auf das System angepasster Kernel würde schneller booten, kann ich nicht bestätigen.


    Das ist interessant, ich bin, ohne es zu Überprüfen, bisher immer davon ausgegangen.


    Quote

    Original von Dr. Seltsam
    Der Ubuntu-Standardkernel bringt eine unglaublich breite Hardwareunterstütung mit.


    Dann bräuchte man doch einfach nur die Ubuntu Kernel-Config übernehmen? Hättest Du eine für mich?

  • Quote

    Original von hjs
    IN den Kernel würde ich nur reinpacken , was er zwingend braucht , um zu starten und die initrd zu ziehen .


    Momentan bin ich auf dem Stand, dass ich einen Installer-Kernel mit breiter einkompilierter Treiber-Unterstüzung nehme und einen User-Kernel mit angepasster initrd. Ich bräuchte da nur mal ein brauchbares Howto, bisher komme ich da noch nicht weiter.


    Aber mal sehen, was die Diskussion hier noch so ergibt ...


    Quote

    Original von hjs
    Was mich interessieren würde : Welche Paketverwaltung willste nehmen ?


    hjslfs basiert auch auf LFS , wie der Name schon sagt und ich schraub da recht manuell rum ...


    HJS


    Meine eigene. :-)
    Jede Software ist in ein eigenes Verzeichnis installiert (Fakeroot), dazu kommen noch ein paar Meta-Informationen (Name, Abhängigkeiten), evtl. Post- und Pre-Install-Skripte, das ganze wird gepackt. Mein Packetmanager entpackt dann bei einem Install oder Update das ganze nach /, so dass es ganz normal zur Verfügung steht. Dadurch, dass die installierten Dateien bekannt sind, kann der Manager das Paket auch ganz einfach wieder deinstallieren.

  • Quote

    Original von CafeDelMar


    Momentan bin ich auf dem Stand, dass ich einen Installer-Kernel mit breiter einkompilierter Treiber-Unterstüzung nehme und einen User-Kernel mit angepasster initrd. Ich bräuchte da nur mal ein brauchbares Howto, bisher komme ich da noch nicht weiter.


    Aber mal sehen, was die Diskussion hier noch so ergibt ...


    Naja - der CD Kernel ist klar und der Userkernel sollte natürlich an Treibern enthalten , was der Kernel hergibt .


    Da die Option automatic kernel module loading oder wie die genau hieß , das benötigte Modul aktiviert , langt das Meiste als Modul


    Quote

    Meine eigene. :-)
    Jede Software ist in ein eigenes Verzeichnis installiert (Fakeroot), dazu kommen noch ein paar Meta-Informationen (Name, Abhängigkeiten), evtl. Post- und Pre-Install-Skripte, das ganze wird gepackt. Mein Packetmanager entpackt dann bei einem Install oder Update das ganze nach /, so dass es ganz normal zur Verfügung steht. Dadurch, dass die installierten Dateien bekannt sind, kann der Manager das Paket auch ganz einfach wieder deinstallieren.


    Naja - ich nehm zar kein fakeroot sondern schlicht find um neue Dateien nach dem Build zu erkennen und dann zu packen , aber im Prinzip das Gleiche - schade , dachte da gibbet n neues Rad ...


    HJS

  • Quote

    Original von CafeDelMar


    Wozu ist das wichtig?


    ich habe es schon erlebt, dass dass das USB device erst nach einem reload des USB-Treibers wieder wollte

    Quote

    Das ist interessant, ich bin, ohne es zu Überprüfen, bisher immer davon ausgegangen.


    ob der Kernel 10 oder 500 Module hat, spielt keine Rolle, solange sie nicht geladen werden. Was im Kernel fest drin ist verzögert normalerweise auch nichts, es sei denn, man will gar nicht alle Hardware die man hat nutzen (siehe Beispiel USB 1.1). Ich habe im Vergleich zwischen dem Ubuntu-Standardkernel und einem selbst kompilierten schlanken Kernel weder Performanceunterschiede noch eine schnellere Bootzeit bemerkt.


    Quote

    Dann bräuchte man doch einfach nur die Ubuntu Kernel-Config übernehmen? Hättest Du eine für mich?


    das hast Du falsch verstanden. Es macht keinen Sinn, den Ubuntu-Kernel nachzubauen. Da er diverse patches enthält bräuchte man erstmal seine Sourcen und die der mit angebotenen Module (u.a. Treiber, die nicht zum Kernel gehören). Im Ergebnis hättest Du nichts anderes als das was Ubuntu schon fertig anbietet. Dein Installer muss (wie der von Ubuntu) nur die für das System passende initrd erzeugen.

    ACT-620, Asrock B75 Pro3-M, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    The post was edited 1 time, last by Dr. Seltsam ().

  • Hallo CafeDelMar,


    ein paar Anregungen/Tipps von mir:


    A) DVB Module im Kernel:
    - Manche Module möchten ganz gerne ein bestimmte Ladereihenfolge haben... das wird nix, wenn du sie fest in den Kernel kompilierst.
    - Manchmal dürften auch bestimmte Module nicht geladen sein, damit Modul xyz läuft, ...


    -> Lass die DVB Module draußen. Und auch bei den anderen Modulen solltest du so verfahren, wie es dir weiter oben schon empfohlen wurde.


    B) Bau dir eine Skirpt Bibliothek, welche folgende Arbeiten abnehmen kann:


    - Plugins aktivieren/deaktivieren
    - VDR Konfiguration vornehmen
    - ...


    C) Eventuell lohnt sich eine Konfigurationsdatei, die über sysconfig, setup.conf, ... schwebt und die von der Funktionsbibliothek ausgewertet wird


    D) Schau dir mal x-vdr an. Die Skripte geben so manche Anregung


    E) Überleg dir, ob du nicht statt der Installationscd eine LiveCD verwendest, von der man auch installieren kann. Wenn man neu startet, so kann man den Weg noch relativ schmerzfrei wählen. Später wirds schwieriger...


    F) Überleg dir, ob du nicht gleich mit den Multiproto Treibern arbeiten möchtest. Dann fällt die spätere HDTV Unterstützung leichter.


    Eine Frage:
    G) WIllst du einen X-Server verwenden?
    Falls ja, macht dann LFS Sinn, wenn das System eh dick wird?


    Gruß
    Wicky

  • CafeDelMar
    Schau Dir mal das Installationsscript ( darin wird auch das Bootimage gebastelt ) von Gen2VDR an, das hat auch easyvdr gefallen ;)
    In den Kernel muessen in erster Linie alle IDE und SATA Treiber rein und sonst noch ein paar Kleinigkeiten, auch da wuerde ich Dir empfohlen einfach irgendwo ne .config herzunehmen, bzw aus nem Knoppix / Ubuntu oder sonstigem Kernel eine zu basteln ( sofern diese dies zulassen ).

  • Hi CafeDelMar,


    Viel Spaß bei Deinem Projekt.
    Ich habe für mein EPIA auch eine eine Distri gebaut.


    Ein sehr positiver Effek von so einer Aktion ist, dass Du dir dadurch sehr viel Linuxwissen aneignest.


    Ansonsten ist der Nutzen zweifelhaft, vor allem, wenn es für verschiedene Plattformen zu erstellen ist. Ausserdem ist es ein immenser Zeitaufwand.


    Ich benutze inzwischen nur noch Debian und tausche hier die Debianstartscripte gegen eigene aus, was noch mal etwas Startspeed bringt.



    Peter

    VDR1: ASUS AT3IONT-I + DVB-Sky S952 + Nvidia 337.19 + softhddevice-plugin + vdr-2.2.0 + 12 weiter Plugins + Samsung U70 + Debian wheezy via SSD + Kernel 3.7.10 + Samsung LE-32R51B