# init startet nicht

## Mike_07

Haloo zusammen, 

ich habe nun nach etlichen Stunden und zahlreichen grauen Haaren endlich einen bootenden Kernel auf meinem Client installiert bekommen. Ich werwende dazu eine Flash-Card ( das "dumme Terminal" war so ausgestattet) als "Boot-Disk", auf der der Kernel untergebracht ist und - da seit 2.6.?? ein direktes Booten nicht mehr unterstützt wird - ein LILO. Ich verwende derzeit einen Kernel 2.6.22.15, direkt aus den Quellen von kernel.org hergestellt. Der aktuelle Gentoo-Kernel 2.6.23-gentoo-r3 läuft leider überhaupt nicht auf dem Terminal mit Pentium MMX. Das Filesystem hole ich mir über NFS. Kernel-Parameter habe ich wie folgt: 

```
append = ip=dhcp root=/dev/nfs 
```

Was bisher geschah:

Der Kernel wird geladen und startet, konfiguriert das Netzinterface, holt sich per NFS das Root-FS 

```
VFS. Mounted root (nfs filesystem) readonly 
```

 ( ich sehe den Mount auch am Server-Log ) Dann erzeugt er noch die Meldung 

```
Freeing unused kernel memory: 284k freed
```

 und dann ist Schluß. 

Im Root-FS habe ich das /etc-Verzeichnis des Masters reinkopiert, ebenfalls /bin und /sbin und /lib , so dass benötigte Programme und Bibliotheken wohl erreichbar sein sollten. 

Jetzt weiß ich nicht weiter, warum das init-Programm nicht startet bzw. nichts tut - 

Kann ich irgendwie eine debug-Ausgabe erzeugen oder die Aktivitäten sonstwie verfolgen? Im Howto liest sich das so einfach  :Sad: 

Hat jemand 'ne Idee? 

Vielen Dank vorab

Grüße

MikeLast edited by Mike_07 on Fri Dec 28, 2007 7:26 pm; edited 1 time in total

----------

## Finswimmer

Init ist ein Shell Script?

Am Anfang:

#!/bin/sh

mit 

#!/bin/sh -x

das erzeugt dir extrem viele Debug Messages.

Tobi

----------

## Mike_07

Hallo Tobi,

nein, init ist bei mir kein Shell-Script. Es ist ein "normales" ELF-Binary. Ich habe auch schon mal versucht, /bin/bash als "init" zu definieren - da ist es das gleiche Verhalten. Möglichewrweise übergibt der Kernel die Steuerung nicht an den Prozess ... aber warum? 

Das init-Programm funktioniert in einer auf gleichem Wege gemounteten chroot-Umgebung richtig, so dass ich davon ausgehe, dass Libs & Co. korrekt vorhanden sind. 

```
 

a# mount -tnfs 192.168.3.120:/tftpboot/192.168.3.111/  /mnt/rootfs

a# chroot /mnt/rootfs /sbin/init 

```

Es ist schon verrückt, dass ich mich mit diesem simplen Setup nun schon einige Tage herumquäle   :Sad: 

Grüße

Mike

----------

## STiGMaTa_ch

Probier mal ein simples Hello World zu erstellen, welches statisch (ohne Abhängigkeit zu irgendwelchen Librarys) kompiliert wird. Verwende dann dieses anstelle des originalen init.

Bsp:

```
#include <stdio.h>

int main (void) {

   printf("\n\n\nINIT Ersatzprogramm zum testen ob ich gestartet werde\n\n\n");

   return 0;

}

```

mit folgendem Befehl statisch kompilieren.

```
gcc gaga.c -static -o new_init
```

Jetzt einfach mal mittels ./new_init ausführen und du solltest

 *Quote:*   

> 
> 
> INIT Ersatzprogramm zum testen ob ich gestartet werde
> 
> 

 

als output erhalten. Kopiere das File dann nach /Pfad/zu/deinem/NFS/sbin/init und prüfe dann ob du den Output beim hochfahren ebenfalls erhältst. Wenn nicht stimmt möglicherweise etwas mit dem Kernel nicht.

Lieber Gruss

STiGMaTa

----------

## Mike_07

Hi STiGMaTa_ch,

danke erstmal für deine ausführliche Antwort. Ich hab das prompt ausprobiert .... 

leider mit wenig Erfolg. Ich habe inzwischen herausgefunden, dass es mit dem Netzwerkbooten nichts zu tun hat. 

Ich habe die benötigten Teile des RootFS auf der FlashDisk untergebracht und boote jetzt davon. Am Problem ändert sich aber nichts. 

Mit deinem kleinen Testprogramm wie auch mit einem busybox-init erhalte ich die Meldung 

```
 input: AT Translated Set 2 keyboard as /class/input/input0 
```

 Das ist dann alles   :Sad: 

Ich habe nun probehalber versucht, von anderen Maschinen die Kernel mal testhalber in dem System hochzufahren - mit unterschiedlichem Erfolg. Ein 2.4er startet problemlos und führt auch init aus, das mich nach dem Runlevel fragt ... Fine. 

Ein 2.6er Kernel von einem anderen Rechner ( 2.6.23. :Cool:  bootet ordentlich und mountet auch das nfs-Volume. Mit dem init aus der Gentoo-Installation habe ich allerdings dennoch das Problem - es passiert nichts. Nehme ich allerdings das init aus dem Rechner aus dem auch der Kernel stammt - dann funzt es. 

Nach dieser Versuchsreihe würde ich meinen, das init sei "kaputt" ... aber wieso funktioniert es mit dem gentoo-Kernel auf dem ursprünglichen Rechner? Ich hatte auch zwei weitere 2.6er Kernelversionen, jeweils mit originalen Sourcen von kernel.org  auf dem gentoo-PC gebaut und in der Testumgebung gebootet - läuft nicht. Die Kernel-Konfig war jeweils gleich. An der Kernelversion liegt es also wohl nicht. 

Ich mache jetzt noch einen Kreuz-Test :  fremd gebauter Kernel mit gentoo-init und gentoo-gebauer Kernel mit fremdem init.  Mal sehen, was dabei raus kommt. 

Es ist verwirrend, wie eine einfache Aufgabe einen solchen unvorhersehbaren Verlauf nimmt ... 

Vielleicht kann ja jemand beim Ausknoten helfen   :Rolling Eyes: 

Grüße

Mike

----------

## Mike_07

Hallo nochmal,

nun zum Ergebnis des Kreuztests. Ich habe also nacheinander einen auf der gentoo-Maschine gebauten Kernel von kernel.org ( 2.6.22.15 ) =Kernel1 , und einen auf einer anderen Maschine ( trustix 3.0 ) gebauten Kern ( 2.6.23.8 ) = Kernel2 geladen und mit jeweils unterschiedlichen inits gestartet. 

init1: init aus dem gentoo-System (v. 2.86) , dynamisch gelinkt

init2: aus dem Trustix-System ( v. 2.85 ), statisch gelinkt

init3: Testprogramm von Matse, auf gentoo-Maschine gebaut, mit -static, 

init4: Testprogramm auf Trustix-Maschine gebaut , mit -static

init5: Testprogramm auf Trustix-Maschine gebaut , *ohne* -static

Folgendes ist dabei raus gekommen: 

```

                     init1    init2    init3   init4   init5

kernel1                -         +        -        +      -

kernel2                -         +        -        +      -

```

Ich nehme den Publikums-Joker und verwirre deshalb vorerst niemanden mit meinen eigenen ( wenig fundierten) Schlußfolgerungen... Was also kann hier verkehrt sein? Was ist dagegen zu tun? 

Hat jemand eine Idee? 

Danke und viele Grüße

Mike 

P.S. ähm ja, und um die Verwirrung komplett zu machen - ich habe zum Schluß noch den auf dem Gentoo-System vorhandenen installierten Kernel genommen, die Prozessorunterstützung für Pentium MMX aktiviert und auch probiert . Hm, dieser Kernel bootet nicht mal. Nach dem "BIOS data check successfull" rebootet das System in einer Endlosschleife. Da fiel mir auch wieder ein, warum ich überhaupt mit den anderen Kerneln angefangen hatte.   :Confused: 

----------

## Max Steel

ohen wirklich Ahnung davon zu haben, aber bist du dir sicher das du alle libs mitgenommen hast?

----------

## Mike_07

ja, zumindest alle, die " ldd /sbin/init" angegeben hat ..

----------

## STiGMaTa_ch

Wie gesagt, wenn mein Programm nicht ausgeführt wird, dann stimmt etwas mit deinem Kernel nicht. Irgend eine Option fehlt.

Wenn ich du wäre würde ich erstmal einen neuen Kernel erstellen mit dem absolut nötigen drinn. Das heisst keine Sound Unterstützung, kein Netzwerk, kein USB (sofern Keyboard kein USB ist!) etc. Nur das nötige um direkt von Platte booten zu können und in einer Shell arbeiten zu können. Sobald das funktioniert den selben Kernel nehmen und während des Booten die Option (z.B. in GRUB) init=/sbin/new_init angeben. Dann sollte auch mein Programm gestartet werden (Die Kernel Panic nach dem Ausführen meine Programmes ist normal!).

Und wenn das funktioniert, dann baust du Schrittweise (ja, das dauert halt, führt aber am sichersten zum Erfolg) eine Komponente nach der anderen ein, welche du für dein Vorhaben zu benötigen scheinst. Wenn etwas nicht klappt, dann kannst du eher eingrenzen wo das Problem liegen könnte. Ausserdem wird es dann auch für uns einfacher dir zu helfen.

Lieber Gruss

STiGMaTa

----------

