LINUX.ORG.RU

Еще немного о LiveCD ;)


0

0

Понимаю, что я вас уже достал своими вопросами...

Я так и немогу понять почему при загрузке все замирает с сообщением об освобождении памяти.

И почему вы так уверены, что init не начинает рулить?

Есть необходимый набор бинарников (busybox или по отдельности).
Есть /sbin/init, inittab, который запускает /etc/rc.d/rc.S и крутит /bin/sh(/sbin/agetty).
Есть необходимый /dev/* и /lib/*

Грузится ядро isolinux'ом, монтирует ramdisk, а дальше:
Freeing unused kernel memory: 192k freed.

Информация о LiveCD:

-------------------------------------------------------------
ISO /:
-------------------------------------------------------------
.:
isolinux

./isolinux:
f1.txt  f2.txt  initrd  isolinux.bin  isolinux.cfg  kernel

./isolinux/initrd:
initrd

./isolinux/kernel:
kernel  linux-2.6.11
-------------------------------------------------------------
./isolinux/isolinux.cfg:
-------------------------------------------------------------
default Werewolf Linux
prompt 1
timeout 100
F1 f1.txt
F2 f2.txt
label Werewolf Linux
kernel kernel/kernel
append initrd=initrd/initrd load_ramdisk=1 ramdisk_size=6000 rw root=/dev/ram0 devfs=mount
label hd
localboot 0x80
-------------------------------------------------------------
RamDisk /etc/inittab:
-------------------------------------------------------------
id1::sysinit:/etc/rc.d/rc.S
id2::respawn:/bin/sh
#vc/2::askfirst:/bin/sh
id3::ctrlaltdel:/sbin/reboot
id4::shutdown:/sbin/swapoff -a >/dev/null 2>&1
id5::shutdown:/bin/umount -a -r >/dev/null 2>&1
-------------------------------------------------------------
./etc/rc.d/rc.S:
-------------------------------------------------------------
#!/bin/sh
/bin/mount -av -t nonfs
-------------------------------------------------------------

Второй liveCD приводить лень...
Все файлы на который ссылаются конфиги существуют.

По логике, после загрузки ядра, должен зарулить init, для него все готово. Но что-то где-то по дороге потерялось.
Вот вся файловая система:
.:
bin  etc  proc  root  sbin  usr

./bin:
[         cal        deluser     find     ipaddr    md5sum    pipe_progress  setkeycodes  tftp        usleep    xargs
[[        chvt       dos2unix    fold     ipcalc    mt        printf         sh           time        uudecode
addgroup  clear      dpkg        free     iplink    nc        realpath       sha1sum      top         uuencode
adduser   cmp        dpkg-deb    ftpget   iproute   nslookup  renice         strings      traceroute  vi
ar        crontab    dumpkmap    ftpput   iptunnel  od        reset          sum          uncompress  vlock
arping    dc         dumpleases  getopt   length    openvt    rpm            tail         unix2dos    watch
ash       deallocvt  fdflush     hexdump  loadfont  patch     rpm2cpio       telnet       unzip       wget
busybox   delgroup   fdformat    ip       logger    pidof     rx             test         uptime      which

./etc:
busybox  fstab  inittab  profile  rc.d  shell

./etc/busybox:
i686-pc-linux-gnu

./etc/busybox/i686-pc-linux-gnu:
busybox-1.00-r4.config

./etc/rc.d:
rc.S

./proc:

./root:

./sbin:
adjtimex  crond   fbset        getty  ifdown  inetd  klogd     logread   rdate    telnetd  udhcpd   watchdog
chroot    devfsd  freeramdisk  httpd  ifup    init   loadkmap  makedevs  syslogd  udhcpc   vconfig

./usr:
share

./usr/share:
doc

./usr/share/doc:
busybox-1.00-r4

./usr/share/doc/busybox-1.00-r4:
AUTHORS.gz  bootfloppy  Changelog.gz  examples  pod  README.gz  TODO.gz  txt

./usr/share/doc/busybox-1.00-r4/bootfloppy:
bootfloppy.txt.gz  display.txt.gz  fstab.gz  inittab.gz  mkdevs.sh.gz  profile.gz  rcS.gz

./usr/share/doc/busybox-1.00-r4/examples:
depmod.pl.gz  inittab.gz

./usr/share/doc/busybox-1.00-r4/pod:
busybox_footer.pod.gz  busybox_header.pod.gz  BusyBox.html  busybox.pod.gz

./usr/share/doc/busybox-1.00-r4/txt:
BusyBox.txt.gz  contributing.txt.gz  new-applet-HOWTO.txt.gz  style-guide.txt.gz

Если в isolinux.cfg добавить init=/bin/were, где were - программа выводящая сообщение "Hello Linux!" и уходящая в бесконечный цикл, то при загрузке появится сообщение Hello Linux!.

Но перед этим ядро скажет ту самую фразу про освобождении памяти.

То есть, что-то не так с init. Может он запускается, но...

burzum
() автор топика
Ответ на: комментарий от burzum

Если в isolinux.cfg добавить init=/linuxrc и создать файл /linuxrc следующего содержания:

/sbin/init
/bin/were

То опять сообщение об освобождении памяти и бесконечный цикл.
А если оставить только /bin/were в этом файле (напомню: прога выводит сообщение и уходит в бесконечный цикл), то тоже самое.

То есть если бы выводилось сообщение - значит прога моя запускается, значит виноват init, а у нас другая ситуация.
Значит ошибка... неизвестно в чем.

При паратре загрузки ядра init=/bin/were прога зщапускается, а при init=/linuxrc, где linuxrc: /bin/were - нет.

Чудеса.

burzum
() автор топика
Ответ на: комментарий от burzum

>/linuxrc нет, так как init всем сразу заруливает.

Ты смотрел содержиое /usr/src/linux/init/*.c ?

При монтировании initrd ядро хочет запустить /linuxrc со смонтированной системы.

>initrd я привел.

Вот это все - initrd? Ты туда всю систему запихал?

smartly ★★★
()
Ответ на: комментарий от burzum

>А если оставить только /bin/were в этом файле (напомню: прога выводит сообщение и уходит в бесконечный цикл), то тоже самое.

А у тебя в initrd есть интерпретатор этого /linuxrc?

Если ты ставил ash из busybox-а добавь в самое начало /linuxrc строку

#!/bin/ash

Ну и /linuxrc должен быть выполняемым.

smartly ★★★
()
Ответ на: комментарий от smartly

Мне казалось, что если не добавлен init=/linuxrc, то сразу исполняется /sbin/init, который и запускает все необходимое.

Если создать файл /linuxrc с содержимым:

#!/bin/ash
/sbin/init

То появляется сообщение:

Freeing unused kernel memory: 192k freed
Busybox v1.00 (2005.06.23-10:41+0000) multi-call binary

Usage: init

Init is the parent of all process.

Kernel panic - not syncing: Attempter to kill init!

В чем дело? inittab ведь правильный!

burzum
() автор топика
Ответ на: комментарий от burzum

Если в linuxrc поместить следующее:

#!/bin/ash
/sbin/init && echo "OK, init started!"
/bin/sh && echo "OK, sh started!"
/bin/were

То вылезает сообщение о запуске init, а потом наконец то появляется консоль.

Но почему init не запускает inittab?

id::sysinit:/etc/rc.d/rc.S
id2::respawn:/bin/sh
id3::ctrlaltdel:/sbin/reboot
id4::shutdown:/sbin/swapoff -a >/dev/null 2>&1

???

burzum
() автор топика
Ответ на: комментарий от burzum

>Но почему init не запускает inittab?

Сакрального смысла inittab я вообще не понимаю. Изучай busybox в режиме init.

Я лишь заметил, что у тебя нету /lib/libc.so и остальной компании библиотек. То есть, он, возможно, ничего не может запустить и завершается.

А вообще-то ты как-то не так делаешь. Ты все хочешь запихнуть в initrd. Обычно в initrd - минимальная инициализация, загрузка нужных модулей, монтирование настоящего корневого раздела, а потом pivot_root на него.

smartly ★★★
()
Ответ на: комментарий от smartly

/lib пуст в первом варианте liveCD, busybox слинкован статически.
Во втором варианте раздельные бинарники и куча библиотек.

initrd - именно инициализация + busybox, остальное у меня будет на CD.

А чем так плох init?
Все таки init читает inittab (если не юзать init=linuxrc), так как появляется сообщение:

Bad inittab entry: id:3:initdefault:

Если в inittab закомментировать эту строку, то опять - тишина.

Просто я не понимаю как грузиться без inittab - а как же перезапуск /sbin/getty?
Ну раз не выходит, можно попробывать другой способ.
Не подскажешь русскую доку, по загрузке системы без inittab (busybox говоришь умеет что-то)?

burzum
() автор топика
Ответ на: комментарий от smartly

Пробывал:
русские доки обрывисты. Собрав все воедино, сделал такой вот тестовый liveCD, который грузится через жопу ;)

burzum
() автор топика
Ответ на: комментарий от burzum

А дальше - тебе нужно решить самому, как быть. Только тебе известно, что это за livecd, и что он должен делать.

Можешь делать на sysvinit, можешь на всяких initng, а можешь и свой написать. Полет фантазии начинается здесь.

>Не подскажешь русскую доку, по загрузке системы без inittab (busybox говоришь умеет что-то)?

Нет, не знаю.

smartly ★★★
()
Ответ на: комментарий от burzum

В корне неврено! linuxrc запускается всегда, когда он есть в initrd. Если его нет - не запускается. Независимо от init.

UncleAndy ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.