Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: GentooForum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

05.02.2016, 12:35

module ins initramfs

Moin,

vielleicht kennt sich hier ja Jemand besser mit diesem vermaledeiten Programm aus.

Und zwar folgendes wenn ich mit genkernel all ohne irgendwas zu verändern mir nen kernel erstelle, dann kann ich die kiste booten, dann ist da aber auch jede Menge kram drin den ich gar nicht will.
Unter anderem fehlen Sachen die ich haben will, autofs oder auch nfs.

Was ich eigentlich will, genkernel sagen welche module ins initramfs sollen, sind gar nicht so viele und den Rest des kernels würde ich gerne selbst verwalteten um nur den kram drin zu haben den ich brauche.

Wenn ich jetzt im Verzeichnis: /usr/share/genkernel/arch/x86_64/
mir die modules_load anschaue, dann stehen da alle module drin die ich zum booten benötige.
Wenn ich meine erstelle /usr/src/linux/.conifg nun nach /usr/share/genkernel/arch/x86_64/kernel-config & generated-config
kopiere und genkernel --menuconfig all aufrufe, sehe ich meine kernelcfg allerdings erstellt er mir kein initramfs also schon aber da ist dann quasi nichts drin, zumindest nicht die dinge die ich brauche und schon gar nicht alles was laut modules_load da sein sollte.

Also gut, kernel cfg aufgerufen drauf geachtet das alles was ich zum booten brauch im kernel als modul gehandelt wird, neuer versuche mit genkernel same shit ...

Eigentlich will ich wirklich nur ein winziges initramfs um die kiste zu booten, quasi nur damit scsi module vorhanden sind damit mein kernel mein root einbinden kann ....

Lange rede kurzer Sinn, gibt es nen Weg das mit genkernel hinzubekommen oder ist das aussichtslos und wenn ja wie sehen die alternativen aus, das ist doch eigentlich basic shit und dürfte keine wissenschaft sein ...

Für Sachdienliche Hinweise wäre ich durchaus dankbar.

PS: Handelt sich um ne VMWare Umgebung
Warscheinlich benötige ich nur mptspi und sg im scsi Bereich des initramfs (SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra3)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »karloff« (05.02.2016, 14:13)


2

05.02.2016, 13:13

Normalerweise empfehle ich alle Module, die für die Erkennung und das Einbinden des "/" notwendig sind, fest in den Kernel einzubauen (SATA-Controller+SCSI-Disk+Dateisystem, in Deinem Fall auch nfs-client-Module). Dann kannst Du mit "--no-ramdisk-modules" komplett auf die Module in der Genkernel-initramfs verzichten.

Bei externen Modulen wie "aufs" geht das natürlich nicht. Mit "aufs" kenne ich mich nicht aus. Brauchst Du es wirklich bereits ganz am Anfang des Boot-Vorganges? Reicht es (theoretisch) nicht wenn "/" erst read-only normal gemounted wird und erst nach "fsck" mit aufs in RW-remounted wird?
Falls nicht, wäre sys-kernel/aufs-sources nicht eine Option? Dann könntest Du auch aufs fest in den Kernel einbauen wie oben vorgeschlagen und die initramfs damit ohne Module schlank halten.

An sonsten: in der /etc/genkernel.conf kann man ein ALLRAMDISKMODULES="1" aktivieren. Damit hast Du ALLE Module in der initramfs. Per Kernel-Append-Line kannst Du mit "nodetect"+"doload" btw. "noload" steuern was tatsächlich dann geladen wird. Siehe "man genkernel".

Weitere Optionen: sys-kernel/genkernel-next und sys-kernel/dracut. Ob diese Tools Dir eine bessere initramfs aufbauen oder nicht, kann ich jedoch mangels Erfahrung damit nicht sagen.


EDIT:

Zitat

Wenn ich meine erstelle /usr/src/linux/.conifg nun nach /usr/share/genkernel/arch/x86_64/kernel-config & generated-config
In /usr/share solltest Du nichts ändern. Das wird beim nächsten Update wieder überschrieben. Mal abgesehen davon dass diese Kernel-Config nur beim ersten mal verwendet wird, dannach die gespeicherte unter /etc/kernels/.
Wenn Du Deine /usr/src/linux/.config selbst verwalten kannst, nutze die genkernel Option "--oldconfig". Damit wird die ".config" durch die Genkernel-Konfiguration nicht mehr ersetzt sondern nur geprüft mit "oldconfig" und dann verwendet. Eine entsprechende Einstellung kannst Du auch in der /etc/genkernel.conf setzen.
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »bell« (05.02.2016, 13:25)


3

05.02.2016, 13:42

Ich sehe es eigentlich recht ähnlich, genau genommen würde ich auch auf ein initram verzichten, wenn es denn möglich wäre. nfs und autofs benötige ich auch erst im default runlevel.

Allerdings wie gesagt wenn irgendwas anderes mache als genkernel all mit den default einstellungen (direkt nach der install)
kriegt die VM sie nicht hoch, dann kommt nach dem initram das beliebte: can not find valid root block on UUID=irgendwas
Das wiederum ist dem fehlenden scsi Treiber geschuldet. (War zumindest bis dato immer der Fehler)

Wenn ich mir jetzt allerdings den genkernel baue der bootet, dann ist er exklusive autofs (welche ich für meinen portagetree benötige) und nfs4 baut er mir auch nicht in den kernel, dafür jede menge kram den ich nicht brauche, was nicht wirklich schlimm ist, aber halt auch nicht optimal.





NACHTRAG:
So jetzt scheint es geklappt zu haben, gleich mal mal die /proc/config.gz anschauen ob das auch wirklich mein kernel ist.

Auch wenn es gefrickel war und sicher nicht so wie vorgesehen, schreib ich hier doch noch mal kurz auf was ich gemacht habe (vielleicht findet irgendwer in zukunft diesen thread)

ganz normale kernel config (cd /usr/src/linux && make menuconfig)

Dann die .config die da rausfällt nach /usr/share/genkernel/arch/x86_64/kernel-config & nach /usr/share/genkernel/arch/x86_64/kernel-config kopieren
Die Datei /usr/share/genkernel/arch/x86_64/modules_load anpassen, sofern notwendig
Die Datei /etc/kernels/{kernel version} sofern vorhanden löschen.

Dann mit genkernel --menuconfig --ramdisk-modules all
ein kernel bauen, zu beachten ist halt dass die scsi/sata/sas treiber die man braucht auch als module im kernel deklariert sein müssen.

Hat jetzt so geklappt wie ich mir das in etwa vorgestellt habe, kiste bootet und genkernel hat meine cfg benutzt.
Jetzt kann ich mit spannung auf das nächste Kernelupdate warten.


Wenn wer ne Idee hat wie man das ganze besser lösen kann, immer her damit.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »karloff« (05.02.2016, 13:53)


4

05.02.2016, 14:00

Zitat von »bell«


Wenn Du Deine /usr/src/linux/.config selbst verwalten kannst, nutze die genkernel Option "--oldconfig". Damit wird die ".config" durch die Genkernel-Konfiguration nicht mehr ersetzt sondern nur geprüft mit "oldconfig" und dann verwendet. Eine entsprechende Einstellung kannst Du auch in der /etc/genkernel.conf setzen.


Jetzt nicht echt oder? ....
Dem nach hätte ich mir die ganze Arbeit sparen können ... na ja zumindest versteh ich jetzt etwas besser wie genkernel tickt


Nachtrag:
genkernel --oldconfig --ramdisk-modules all

und es läuft ;)

Vielen Dank

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »karloff« (05.02.2016, 14:13)


5

05.02.2016, 14:36

Ja, genkernel ist in der Standard-Konfiguration eher an die "dumies" gerichtet, baut einen universal-Kernel mit einer universellen initramfs. Also wie auf der Live-CD, und überbügelt alle anderen Einstellungen. Darüber stolpern am Anfang alle, die schon mal selbst Kernel konfiguriert und kompiliert haben. Viele bleiben dadurch beim guten alten "make install".
Ich habe unter /usr/src/ immer ein "build.sh" Skript liegen damit ich die einzelnen Optionen nicht vergesse. Aktuell ist da "--oldconfig --no-ramdisk-modules --no-keymap" drin. Oldconfig hatten wir schon, no-ramdisk-modules: Gar keine Module in der initramfs, no-keymap: wozu brauche ich die dort?.
Versuche mein Tipp umzusetzen dass Du alles benötigte in den Kernel ([*]) packst. Wenn das System dann mit der initramfs und der Kernel-Option "nomodules" (testweise in Grub einfügen) startet, kannst Du die initramfs ohne die Module bauen.
Ich brauche die initramfs für Splash und für die LVM-Unterstützung. Wenn Du die initramfs nicht brauchst, kannst Du sie auch weglassen. Dass Dein System ohne nicht gebootet hat liegt wahrscheinlich daran dass der Kernel selbst UUID nicht kann (oder hat sich das inzwischen geändert?). Versuche dann mit root=/dev/sda1 oder was Du da hast, damit sollte es immer gehen.
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

6

05.02.2016, 14:58

Ich bevorzuge eigentlich auch monolithische Kernel, also ganz ohne die Möglichkeit Module nachzuladen.
Gerade für die Installationen die im Rechenzentrum stehen, da die meisten Gefahren scheinbar davon ausgehen das sie den Kernel zum nachladen von Modulen bringen.
Zuhause ist das auch wieder anders, aber bei den Online Kisten kann ich so schon besser schlafen.
Nur dieser VMWare stellte bis jetzt immer so ein na ja unschönes System da, aber gut jetzt bin ich gewappnet.

Ich schreib mir den ganzen kram immer in meine .bashrc .... da steht mitlerweile so viel Kram drin, mehr comments als Funktionen ...
Werde mal schauen ob es ggf. ganz ohne initramfs und module geht; hast ja genug Futter für ein paar weitere Versuche geliefert.

Glaube nicht das sich was geändert hat,
wenn ich mir mit
grub-mkconfig -o /boot/grub/grub.cfg
meine grub.cfg baue, wird bei initramfs einträgen immer die UUID verwendet, wenn ich kein initramfs habe wird nach /dev/sdXy verwiesen


Nochmals danke, hast mir echt gut geholfen.

7

05.02.2016, 15:14

Ich Betreue keine Server und bevorzuge daher Systeme mit Modulen ;). Die Module kann man bei Bedarf/Problemen entladen und neu laden, ggf. auch mit anderen Parametern. Module sind also flexibler. Im Kernel ist nur das fest drin was er braucht um "/" zu sehen, alles andere kann er von "/lib/modules" nachladen.
Ok, den Festplatten-Controller-Modul oder "ext4" würde ich jetzt nicht im laufenden Betrieb entladen wollen, daher stört es mich nicht dass die im Kernel fest einkompiliert sind. Seit USB-Mäusen und -Tastaturen kam ich auch schnell dahinter dass USB-Kontroller und HID im Kernel gar nicht so verkehrt sind, sonst steht man bei Problemen am Anfang des Boot-Vorganges (und ggf. dem Hack mit init=/bin/bash) ziemlich dumm dar 8| . Aber alles andere: als Modul.
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.