[gelöst] Shared libraries in frischer initrd

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
brotfessor
Beiträge: 2
Registriert: 25.03.2016 15:29:36

[gelöst] Shared libraries in frischer initrd

Beitrag von brotfessor » 25.03.2016 15:57:30

Hallo, ich habe begonnen, ein eigenes initrd aufzusetzen, das das ein kleines System beinhalten soll(d.h. initrd bleibt in / gemountet). Ich kann problemlos statisch gelinkte Programme ausführen, aber welche, die dynamisch gelinkt sind, werden immer mit

Code: Alles auswählen

sh: xy: not found 
(busybox-static) oder

Code: Alles auswählen

bash: xy: No such file or directory 
(bash-static)
abgebrochen, obwohl die Dateien definitv vorhanden sind. Auch die tab-Vervollständigung funktioniert.
Die benötigten Librarys sind vorhanden und werden auch von ldconfig (das funktioniert, weil es nicht dynamisch gelinkt ist) erkannt.
Die andere skurrile Sache ist, dass ldd auf einem normalen System bei den entsprechenden dynamisch gelinkten Programmen diverse Abhängigkeiten anzeigt, in besagtem initrd aber lediglich ausgibt:

Code: Alles auswählen

not a dynamic executable
Auf dem initrd sind nur:
-/init: ein kleines script, das /proc und /sys mountet, sowie eine shell startet
-busybox-static
-bash-static
-/dev mit den benötigten dateien
-diverse *.so Dateien, die das Programm laut ldd und readelf braucht
-/etc/ld.so.conf mit den entsprechenden Einträgen
Gibt es da irgendwas, das fehlt, oder muss bash irgendwie konfiguriert werden? Schon mal vielen Dank im Voraus!
Zuletzt geändert von brotfessor am 27.03.2016 10:41:37, insgesamt 1-mal geändert.

Benutzeravatar
Livingston
Beiträge: 1816
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

Re: Shared libraries in frischer initrd

Beitrag von Livingston » 26.03.2016 12:08:17

Moin und willkommen im DF :D

Der komplette initrd-Selbstbau liefert manchmal ungeahnte Fallstricke. Ich erinnere mich an ein paar Sachen, wie z.B. diese hier:
- Ist $PATH richtig gesetzt? Wenn nicht: Bist Du sicher, dass für jedes Binary der absolute Pfad richtig angegeben ist?
- Zur Sicherheit für jedes Programm noch mal ldd drüberlaufen lassen. Dynamisch gelinktes Zeug braucht die Libraries exakt an der Stelle, die ldd ausgibt oder benötigt einen entsprechenden Link. Einfach alles in /lib packen, wird nicht reichen.
- Ist ld.so bzw. ld-linux.so unter /lib zu finden?

Soweit erst mal meine samstäglich-frühen ersten Gedanken. Viel Spaß beim Experimentieren 8)

brotfessor
Beiträge: 2
Registriert: 25.03.2016 15:29:36

Re: Shared libraries in frischer initrd

Beitrag von brotfessor » 27.03.2016 10:38:20

Vielen Dank!
Das Problem war letztlich, dass das Programm auf einem System mit i386 und amd64 libraries gelinkt wurde, deshalb erwartete das Programm die ld-linux-x86-64.so.2 unter /lib64 statt unter lib. Das hatte ich ständig übersehen... Symlink und die Sache war geregelt. Will ja in einer Minimal-initrd jetzt nicht auch noch 2 verschiedene Architekturen am Laufen haben :)

Frohe Ostern!

Antworten