sbin/init error 8 (exists but couldn't execute it)

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Edit important :

Problème résolu (et boot réussi).

En fait, ce bug était tout simplement dû à la commande bash make i386-config, puisque cette dernière a configuré le noyau pour être un kernel 34 bits.

Or, ayant lancé un bash file sur le fichier systemd, j'ai pu remarquer que init était un lanceur 64bits (init étant un lien symbolique vers systemd).

Donc le kernel ne pouvait naturellement pas utiliser init (d'où le message d'erreur n°8).

Au final j'ai utilisé le .config de mon openSUSE, puis j'ai fait un make menuconfig pour activer l'option CONFIG_PREEMPT_FULL (Processor type and features —> Preemption Model () —> Fully Preemptible Kernel (RT)).

J'ai aussi suivi les étapes suivantes (étapes qui m'ont été données sur la mailing-list du projet RT Linux - linux-rt-users@vger.kernel.org) :

  1. Download the RT patch, unpack and apply them
  2. Copy the distro config to .config in the kernel tree
  3. Type make menuconfig and select "Processor type and features —>"
  4. Goto "Preemption Model () —>"
  5. Select "Fully Preemptible Kernel (RT)"
  6. Save and quit
  7. Type make; make modules_install install (attention, il n'y a aucune faute de frappe : c'est bien « make modules_install install »)
  8. Reboot and select the newly provided grub entry

=============================

Bonjour à tous,

J'ai comme projet d'« installer » (ou plus exactement de booter) un noyau Linux temps-réel. Pour ce faire, j'ai téléchargé le noyau Linux 3.14.29 et je l'ai patché avec RT Linux 3.14.29-rt26. Puis j'ai configuré le noyau ainsi patché pour ensuite le compiler, et générer son initrd… Jusque-là, tout semble bien se passer : aucune erreur ne s'affiche.

Mais (car oui, il y a un « mais », sinon ce topic n'aurait pas lieu d'être☺ ), après avoir configuré à la main grub.cfg - celui-ci ne s'étant pas màj automatiquement suite à initrd, allez savoir pourquoi… - , je lance le boot RT Linux et là, l'erreur « sbin/init error 8 (exists but couldn't execute it) » s'affiche. D'après Google, l'erreur n°8 indique que le fichier init est corrompu (mauvais format de fichier).

Alors, je décide de réinstaller ma distrib', openSUZE (distrib' sous laquelle j'ai compilé, configuré, etc. RT Linux), et je recommence tout de A à Z : l'erreur s'affiche encore. J'espérais que le processus init se serait regénéré suite à cette réinstallation, mais il n'en n'est rien.

Le plus étonnant, c'est que le boot de openSUZE marche parfaitement : pas d'erreur de corruption du fichier init.

Je ne sais pas du tout quoi faire. Voici deux fichiers qui, peut-être, pourraient avoir une certaine utilité… (n'hésitez pas à me demander d'en envoyer d'autres si c'est nécessaire : je le ferai volontiers ! ☺ ) :

  1. Fichier .config du noyau patché : http://textup.fr/117717qW
  2. Fichier /boot/grub2/grub.cfg (configuration de GRUB2) : http://textup.fr/117719l2

En vous remerciant d'avance ☺ ,

Bonne journée.

Édité par The-Aloha-Protocol

Université de Bretagne-Sud <3

+0 -0

Avant de commencer:

openSUZE

Tu sais, ce n'est pas bien de noyer (noyer-noyau, jeux de mots. Oui je sors.) ses problèmes dans l'alcool. C'est bien openSUSE.

D'après moi, ce n'est pas un problème au niveau de ta partition racine, une install' openSUSE foireuse, ça se saurait. J'aurais tendance à aller chercher du côté de ton initrd.

Il y a quoi dans ton initrd ? Il n'y a rien de bizarre dans le linuxrc ?

Bonne journée !

EDIT :

Pour voir si ce n'est pas un problème de retro-compatibilité (mais ça m'étonnerait fort venant d'openSUSE), essaie ce que ça donne en rajoutant l'option init=/lib/systemd/systemd (vérifie quand même que le fichier existe, je suis sur une Archlinux là, je reboote et j'édite si je vois que je me suis gouré) à ton entrée de grub pour ton noyau patché.

EDIT 2:

Rectifications : ah Archlinux et tout ses liens symboliques … c'est /usr/lib au lieu de /lib.

Édité par dosmpm

There is no place like /home.

+0 -0
Auteur du sujet

Salut dosmpm, merci d'avoir répondu aussi vite ☺ !

J'ai généré le initrd en grâce à la commande "mkinitrd", après avoir fait un "cd /boot". Comment afficher le contenu de ce fichier ?

Par ailleurs, je pensais qu'il était possible de booter directement sur RTLinux pur et dur (c'est-à-dire sans distribution). Je crois que je me suis trompé : il faut nécessairement booter sur une distribution (dans mon cas, OpenSUSE (☺)), laquelle fera usage de RTLinux. Pourrais-tu me confirmer cela ?

En attendant, j'ai supprimé la menuentry 'RTLinux' que j'ai tapée à la main (elle devait lancer RTLinux sans distrib'). GRUB2 avait bel et bien fait son travail en ajoutant une menuentry 'OpenSUSE options avancées avec […] 3.14.29-rt26'. J'avoue avoir mal lu le grub.cfg haha!

J'ai donc essayé de booter sur 'OpenSUSE options avancées avec […] 3.14.29-rt26'. Le bug du init apparaît quand même.

Édité par The-Aloha-Protocol

Université de Bretagne-Sud <3

+0 -0

Houla, quelques précisions s'imposent:

RTlinux est une variante du noyau Linux, c'est donc un noyau . Tout seul, il est donc inutilisable. C'est pour cela qu'on a une partition racine avec tout plein de bazar dedans : c'est pour exploiter les possibilités du noyau. Donc non, tu ne peux pas utiliser RTlinux sans partie utilisateur. Mais tu n'es pas obligé d'utiliser celle de ta distro, tu peux t'en créer une.

D'après ce que j'ai compris (un p'tit coup de docu flash), avec ceci ça devrait marcher:

1
2
3
mount nom_de_ton_initrd -o loop /mnt
#tu regardes dans /mnt
umount /mnt

A noter que les commandes mount et umount demandent les droits du super-utilisateur (donc il est nécéssaire de faire un coup de sudo).

Édité par dosmpm

There is no place like /home.

+0 -0
Auteur du sujet

Alors, j'ai essayé : bash init=/usr/lib/systemd/systemd

Il retourne aussi une erreur 8 pour ce fichier.

Concernant le *mount * : j'ai tapé ce que tu as écrit, et ça m'a affiché ce message d'erreur : « Mauvais type de système de fichiers, option erronée, superbloc erroné sur /dev/loop0, page de code ou programme auxilliaire manquant, ou autre erreur. »

=============

Edit :

Je vais remplacer le .config du noyau patché par celui de ma distrib', et appliquer dessus un ou deux changements nécessaires au support de RT Linux, je te tiens au courant ! ☺

Édité par The-Aloha-Protocol

Université de Bretagne-Sud <3

+0 -0

Cette réponse a aidé l'auteur du sujet

Pour voir si ce n'est pas à cause, d'une manière X ou Y, de l'initrd que ça foire, je te passe un initramfs de mon jus. Au départ il est prévu pour un environnement peros (clé usb avec des partitions spécifiques), mais après test sur ma bécane il ne fait rien de bien paniquant (il y a juste quelques mkdir qui t'enguirlandent, mais c'est tout). La bête va booter pour te mettre dans un shell en root, le tout est dans la RAM, donc tu ne peux faire aucune "bêtise". Si le tout boote, tu fais juste un poweroff pour l'éteindre et puis voilà. Comme ça on sera fixé.

Il est ici.

Pour éviter qu'il ne monte n'importe quoi, il faut lui passer en argument root=/dev/null rw et ifmount=no (non, ce n'est pas un truc standard, je l'évalue à la main dans un script pour savoir si je suis en environnement clé usb comme il faut ou non).

Édité par dosmpm

There is no place like /home.

+0 -0
Auteur du sujet

dosmpm,

Merci beaucoup d'avoir pris le temps de créer cet initramfs. Mon problème a été résolu avant que je n'en fasse usage, désolé donc ! :'/

En fait, ce bug était tout simplement dû à la commande bash make i386-config, puisque cette dernière a configuré le noyau pour être un kernel 34 bits.

Or, ayant lancé un bash file sur le fichier systemd, j'ai pu remarquer que init était un lanceur 64bits (init étant un lien symbolique vers systemd).

Donc le kernel ne pouvait naturellement pas utiliser init (d'où le message d'erreur n°8).

Au final j'ai utilisé le .config de mon openSUSE, puis j'ai fait un make menuconfig pour activer l'option CONFIG_PREEMPT_FULL (Processor type and features —> Preemption Model () —> Fully Preemptible Kernel (RT)).

J'ai aussi suivi les étapes suivantes (étapes qui m'ont été données sur la mailing-list du projet RT Linux - linux-rt-users@vger.kernel.org) :

  1. Download the RT patch, unpack and apply them
  2. Copy the distro config to .config in the kernel tree
  3. Type make menuconfig and select "Processor type and features —>"
  4. Goto "Preemption Model () —>"
  5. Select "Fully Preemptible Kernel (RT)"
  6. Save and quit
  7. Type make; make modules_install install (attention, il n'y a aucune faute de frappe : c'est bien « make modules_install install »)
  8. Reboot and select the newly provided grub entry

Merci tout de même pour ton aide ! :)

Université de Bretagne-Sud <3

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte