Çekirdek ve BusyBox içeren en az Linux: / etc / inittab yok sayılır, yalnızca / init yürütülür


12

Ben sadece çekirdek (varsayılan seçeneklerle derlenmiş) ve BusyBox (varsayılan seçenekler + statik ile derlenmiş, dahil tüm appletler içeren /sbin/init) içeren küçük ve tamamen işlevsel bir canlı Linux CD oluşturmayı başardı . Ben oluşturmak için hiçbir sorunları vardı initrdve doldurmak /dev, /procve /syshem de benim ile hiçbir sorunları vardı /initkabuk.

Son zamanlarda BusyBox /etc/inittabyapılandırmaları (en azından bir düzeyde) desteklediğini okudum ve çok aşağıdakilerden birini yapmak istiyorum:

  • /initKabuk betiğimi unutun ve tamamen /etc/inittabyapılandırmaya güvenin.
  • Hem /initkabuk komut dosyasını hem de /etc/inittabyapılandırmayı kullanın .

Şimdi asıl sorun - görünüşe göre /etc/inittabdağıtımım açıldığında tamamen yok sayılıyor. Semptomlar:

  • Ben kaldırdığınızda /initve ayrılmak sadece /etc/inittabben çekirdek panik ile bitirmek. Benim varsayımım, çekirdeğin hiç yürütülmediği /sbin/initveya /sbin/initbulamadığı (veya okunmadığı) /etc/inittab.
  • Ben bile olmadan BusyBox iyi çalışması gerektiğini okudum /etc/inittab. Yani, kaldırılmış hem /initve /etc/inittabve tahmin - yine panik Kernel.
  • Ben yürütmek için çalıştı /sbin/initbenim kabuğundan ve dahil birkaç tahminden sonra exec /sbin/init, setsid /sbin/initve exec setsid /sbin/initben çekirdek panik ile sona erdi. Hem / etc / inittab ile hem de dosya sisteminde bulunmayan.

İşte benim /initkabuk betiğimin içeriği :

#!/bin/sh
dmesg -n 1
mount -t devtmpfs none /dev
mount -t proc none /proc
mount -t sysfs none /sys
setsid cttyhack /bin/sh

Bu noktada /etc/inittab, oradaki yapılandırmanın gerçekten işe yaradığını bilmenin bir yolu olduğu sürece , içeriğin ne olacağını umursamıyorum . Burada/etc/inittab bulduğum bilgilere dayanarak birkaç yapılandırma denedim .

Çıplak asgari olarak benim / etc / inittab dosyasında sadece bu satır var:

::sysinit:/bin/sh

Yine - çekirdek paniği ile sonuçlandım ve /etc/inittabgörmezden gelinmiş gibi görünüyor .

Benim küçük canlı dağıtımını BusyBox ile iyi çalışmaya zorlamak için herhangi bir öneri /etc/inittabson derece takdir edilmektedir!

Güncelleme:

  • Sadece netleştirmek için - Ben yok benim şimdiki konusunda sıkıntılı panik çekirdek var /initolan ve olmayan her iki kabuk /etc/inittab. Her şey iyi çalışıyor, /bin/ashkonsolum harika çalışıyor ve beklenmedik sorunlar yaşamıyorum. Tek sorun, /etc/inittabyukarıda tarif ettiğim gibi tamamen göz ardı ediliyor.
  • 3 farklı canlı Linux dağıtımını inceledim: Slax, Finnix ve SysResCD. Hepsi var /initve hiçbiri yok /etc/inittab. Ayrıca bu Wiki makale kuşkularımı sonucuna /sbin/inithiç çağrılmaz.

Buraya geldiyseniz , istediği gibi görünen ve sadece işe yarayan Minimal Linux Live'a bir göz atın : github.com/ivandavidov/minimal
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

Ah, OP Minimal Linux Live yazdı! Adamım sen salla.
Ciro Santilli 法轮功 15 审查 六四 事件 法轮功

Yanıtlar:


11

Tamam, çok kapsamlı bir araştırma yaptım ve neyin yanlış olduğunu öğrendim. Tek tek başlayalım:

  • initramfsÖnyükleme şemasını kullandığımızda , çekirdeğin çağırdığı ilk işlem /initkomut dosyasıdır. Çekirdek asla /sbin/initdoğrudan yürütmeye çalışmaz .
  • /init işlem tanımlayıcısı 1 olarak atandı. Bu çok önemlidir!
  • Şimdi sorun /sbin/initsadece olarak başlatılabilir PID 1ama biz zaten /initPID 1 olarak çalışıyoruz .
  • Çözüm exec /sbin/inithala içerideyken komut satırını yürütmektir /init. Bu şekilde, yeni süreç (ki /sbin/init) PID'yi ana öğesinden ( /initPID 1 ile) devralacak ve tek yapmamız gereken bu.

İlk yapılandırmamda yaşadığım sorun (soruya bakın), /initkomut dosyamın yaptığı en son şeyin /bin/sh, yepyeni PID atanmış yeni bir süreç ortaya çıkmasıydı. Bu noktadan itibaren, /sbin/initdoğrudan interaktif konsoldan çalıştırmak imkansızdır, çünkü komut satırını yürüttüğümüzde bile exec /sbin/init, elde ettiğimiz en iyisi zaten kabuğa atanmış olan aynı PID'yi atamaktır ve bu PID kesinlikle PID 1 değildir.

Uzun öykü kısa - komut satırını exec /sbin/initdoğrudan yürütün /initve hepsi bu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.