J'ai réussi à créer un CD LIVE Linux entièrement fonctionnel et entièrement fonctionnel qui ne contient que le noyau (compilé avec des options par défaut) et Busybox (compilé avec des options par défaut + statique, tous les applets présents, y compris /sbin/init
). Je n'avais aucun problème à créer initrd
et peupler /dev
, /proc
et /sys
Et aussi je n'avais aucun problème avec mon /init
Script shell.
Récemment, j'ai lu que Busybox prend en charge /etc/inittab
Configurations (au moins à un certain niveau) et je voudrais beaucoup faire l'une des opérations suivantes:
/init
Script shell et repose entièrement sur /etc/inittab
configuration./init
Script shell et /etc/inittab
configuration.Maintenant le problème réel - il semble que /etc/inittab
est complètement ignoré lorsque ma distribution démarre. Les symptômes sont:
/init
et ne laissez que /etc/inittab
Je finis avec le noyau panique. Mon hypothèse est que le noyau n'exécute pas /sbin/init
du tout, ou que /sbin/init
ne trouve pas (ou lu) /etc/inittab
./etc/inittab
. Donc, j'ai enlevé les deux /init
et /etc/inittab
et devinez quoi - le noyau panique à nouveau./sbin/init
de ma coquille et après plusieurs suppositions qui comprenaient exec /sbin/init
, setsid /sbin/init
et exec setsid /sbin/init
J'ai fini par la panique du noyau. À la fois avec et sans/etc/inittab étant présent sur le système de fichiers.Voici le contenu de mon /init
Script shell:
#!/bin/sh
dmesg -n 1
mount -t devtmpfs none /dev
mount -t proc none /proc
mount -t sysfs none /sys
setsid cttyhack /bin/sh
À ce stade, je me fiche de ce que le contenu de l'/etc/inittab
serait, tant que j'ai un moyen de savoir que la configuration fonctionne réellement. J'ai essayé plusieurs /etc/inittab
Configurations, toutes basées sur les informations que j'ai trouvées ici .
Comme un minimum minimum mon/etc/inittab contenait juste cette ligne:
::sysinit:/bin/sh
Encore une fois - j'ai fini avec le noyau panique et il semble que /etc/inittab
a été ignoré.
Toute suggestion comment forcer ma petite distribution en direct à travailler bien avec Busybox's /etc/inittab
sont très appréciés!
Mise à jour:
/init
Script shell avec et sans /etc/inittab
. Tout fonctionne bien, mon /bin/ash
Console fonctionne bien et je ne fais pas de troubles inattendus. Le seul problème est que /etc/inittab
est complètement ignoré, comme je l'ai décrit ci-dessus./init
Et aucun d'entre eux n'a /etc/inittab
. En outre cet article Wiki conclut ma suspicion que /sbin/init
n'est pas invoqué du tout.Ok, j'ai fait beaucoup de recherches approfondies et j'ai découvert ce qui n'allait pas. Commençons un par un:
initramfs
schéma de démarrage, le premier processus que le noyau invoque est le /init
script. Le noyau n'essaiera jamais d'exécuter /sbin/init
directement./init
est attribué l'identifiant de processus 1. C'est très important!/sbin/init
ne peut être démarré que PID 1
Mais nous courons déjà /init
comme pid 1.exec /sbin/init
pendant que nous sommes toujours à l'intérieur /init
. De cette manière, le nouveau processus (qui est /sbin/init
) héritera du PID de son parent (/init
avec PID 1) et c'est tout ce que nous devons faire.Le problème que j'ai connu avec ma configuration initiale (voir la question) était due au fait que la dernière chose que mon /init
script est de reproduire de nouveau /bin/sh
processus qui est attribué à une nouvelle nouvelle PID. De ce point, il est impossible de courir /sbin/init
directement à partir de la console interactive car même lorsque nous exécutons la ligne de commande exec /sbin/init
, le meilleur que nous réalisons est d'attribuer le même PID qui a déjà été attribué à la coquille et ce PID n'est définitivement pas pid 1.
Longue histoire courte - exécuter la ligne de commande exec /sbin/init
directement de /init
et c'est tout.