[megoldva] initram fs, dialog

Fórumok

Sziasztok!

initram FS-be szeretnek belepaszirozni dialog-ot.
jelenleg ezt kapom:

Error opening terminal: linux

Mivel ez egy korai boot, meg csak /dev/console van, ami nem tamogat ioctl-t, ami kellhet a dialognak.

Hogyan tudnek "teljes" erteku tty-t paszirozni a initfs-embe ?

Koszi!

Hozzászólások

Meg lehet kerdezni, hogy minek neked az initramfs-be dialog? Ez egy early stage, aminek az a feladata, hogy elore toltson egy par dolgot (modules, etc). Mit szeretnel csinalni? Mert ha mar dialog, akkor az nem az initramfs-be valo az tuti.

Ahogy előttem írták, nem nagyon lehet elképzelni olyat, amikor initrd-nél kell full interaktív csicsa-micsa felület. Én egyébként azt a trükköt lestem el korábban, hogy a kernel kap egy paramétert, pl. FOO=bar, majd az init folyamat során a /proc/cmdline alapján történnek, illetve nem történnek meg dolgok.

Az a baj, hogy ragaszkodsz egy technologiahoz, ahelyett, hogy a megoldast keresned. (amugy recipient rejectedet kaptam a maganlevelre, ugyhogy itt is leirom a valaszt)
A baj:
ldd `which dialog`
linux-vdso.so.1 => (0x00007ffc963c8000)
libncursesw.so.5 => /lib/x86_64-linux-gnu/libncursesw.so.5 (0x00007f9addb00000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f9add8d7000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9add5d1000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9add20c000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9add008000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9addd34000)

Az initrd-be csak statikusan linkelt progikat célszerű belerakni.
DE
Ott van az initramfs sima shellje, vagy akar a busybox, mint lehetőség.
Ugye az initrd/initramfs az "init"-et inditja el, ami egy sima shellscript. Ide siman bel lehet irni a kovetkezot: 'echo add_be_az_adatot: ; read adat; cmp $adat ; if $? ...blablablah'
Es el is van intezve a dolog. Lehet akarni csicsazni a dolgot, de a celod az, hogy bekerj egy adatot a felhasznalotol es annak fuggvenyeben csinalj valamit.

Ez /dev/console-on is menni fog.
En is azon a velemenyen lennek, hogy van kernel parameter, amit az initramfs init-jeben feldolgozol. Ha valaki kepes a grub menu-ben e-t nyomni, meg utana a kernel soron e-t nyomni, ahol a sor vegere beirja hogy adat=ertek, akkor az mar eleg kell legyen.

Ja es meg valami: az initrd nem intekraktivitasra valo. Ezert van, hogy mi sokan nem ezzel akarnank megoldani. Villaval levest enni nekunk nem annyira szorakoztato. Ennyi.

update:
ja es kis google utan: "Early boot uses /dev/console, which seems to be incapable of supporting the ioctls that ncurses relies on."

Termeszetesen gondoltam arra, hogy siman bekerem az adatot. Persze nem grub menuben :)

Az mind1 h mire valo az initrd, en egy 2 filebol allo OS-t szeretnek csinalni, aminek 1 konkret feladata van 1 konkret harveren. Es fontos h mind ez a memoriaban legyen..

Amit megkell valositanom az adott.
2. megoldas, hogy egy valami tiny, vagy LFS linuxot csinalok, amiben van dialog meg ami kell.
De ezt egy fokkal overkill-nek gondolom.

Általában akkor van gond, ha van egy megoldandó probléma, de a kérdező nem a problémát írja meg, hanem megtippeli, hogy milyen technológiákkal kellene megoldani, és utána már csak arról a technológiáról kérdez, nem az eredeti problémáról. Olyankor derül ki, hogy az a technológia nem is arra való, vagy abban a felállásban nem is létezik (lásd initrd+dialog), vagy még ha jó is rá, lehet, hogy szívás és lenne sokkal jobb megoldás is. Mert ilyenkor a segítő szándék mellett sem lehet jó választ adni. Itt, ha jól látom, az eredeti megoldandó feladatot még nem írtad le (ne mondd, hogy az initrd+dialog az eredeti feladat, egy jó feladatleírás általában technológiafüggetlen és enged alternatívákat).

--

Na ennyibol meg ha jo egy ISO, akkor inkabb raknek egy TFTP szervert, amirol bebootol automatan egy rescue rendszer, amiben meg minden van es akkor meg egy ISO-t sem kell bootolni, menni fog halozatrol. Nem shell-t dob, hanem a dialogot aztan azok alapjan meg csinal amit csinal. Ne gyarts ezért ISO-t. Sima ubuntu, debian, rhel, centos, akrmivel menni fog.

egyetértek golgota kollégával, driver/modulokon kivül ma már másra nem való, pörgetem magamba az extrémitásokat, de, hogy ide - ráadásul muszájból?! - tényleg kéne interaktív valami az kozmikus, vagy előtte bootolásnál vagy már utána init/systemd stagenél 'minden' megoldható

Na pont erre való a bootmenü. Ha válsztania kell valamit a felhasználónak az azt jelenti, hogy véges számú dologról van szó. Ekkor elkészíteném a véges számú initramfs-eket és beraknám őket a bootloader menüjébe.
Egyébként nagyon titokzatos, hogy milyen interakció kellhet egy felhasználótól egy initrdben....én el nem tudok képzelni semmi scenariot erre. Inkább csinálnék egy olyan initramfs-t amiben minden benne van ami kell a véges számú választási lehetőségekből (milyen drivert töltsön be???).

Tényleg érdekelne a feladat. Ha akrod privátban megírhatod. :D
Én még ilyen medvét a 20 évnyi vadász ultam alatt nem láttam. :D

A dm-crypt initramfs-ében nézz szét, a jelszót itt kéri be. Ha jól emlékszem - egy kis bütyköléssel - távolról ssh-n keresztül is be lehet írni, valszeg elég jó tty van benne.

Sub, már nagyon érdekel mi az eredeti feladat :)

nagyon titkolozol.. az nem nagyon serkent senkit segitsegre.

itt van pastebinben (a code nem birja a <<-t), mar nem tudom honnan van az eredetije. a nem kivant resz torlendo, futtasd, csinal neked initramfs-t, ami egy mini rendszert bebootol.


#!/bin/bash

set -e
set -x

VER=$(uname -r)
NAME=$(basename $0)

rm -fr root
mkdir root
cp -a $0 root/
pushd root

mkdir -p dev bin etc/udhcpc etc/init.d lib/modules
mknod dev/console c 5 1
mknod dev/tty2 c 4 2
mknod dev/tty3 c 4 3
mknod dev/tty4 c 4 4

wget http://www.busybox.net/downloads/binaries/latest/busybox-i686 -O bin/busybox
chmod +x bin/busybox
ln -s bin/busybox init
ln -s busybox bin/sh

wget -q http://git.busybox.net/busybox/plain/examples/udhcp/simple.script -O etc/udhcpc/default.script
chmod +x etc/udhcpc/default.script

cat > etc/init.d/rcS << EOF
#!/bin/sh
/bin/busybox mkdir -p root dev bin sbin usr/bin usr/sbin proc sys dev/pts
/bin/busybox --install -s
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount -t devpts devpts /dev/pts
mdev -s
echo /sbin/mdev >/proc/sys/kernel/hotplug
find /sys -name 'modalias' -type f -exec sort -u {} \; | sort | uniq | grep -v ^acpi | xargs -n 1 /sbin/modprobe
echo root::0:0:root:/root:/bin/sh > /etc/passwd
ifconfig lo up
ifconfig eth0 up
udhcpc -i eth0 -R -b -s /etc/udhcpc/default.script
hostname ${NAME}
EOF
chmod +x etc/init.d/rcS

cat > etc/inittab << EOF
::sysinit:/etc/init.d/rcS
#::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init
::respawn:/usr/sbin/telnetd -F
tty2::respawn:/sbin/getty 115200 tty2
tty3::respawn:/sbin/getty 115200 tty3
tty4::respawn:/sbin/getty 115200 tty4
EOF

cp -a /lib/modules/${VER} lib/modules/

popd
find . | cpio -o -H newc | gzip > initrd.cpio.gz

update:

Ezt a hitetleneknek irom, es azoknak akiket erdekel.
Sikerult dialog-t varazsolni initramfs-be, azaz lehetseges.

Részben. Tudod: sajtreszelő... Lehet vele, csak kevésbé élvezetes :-P Azt meg azért gondold végig, hogy az initrd-ben futó motyó milyen jogosultsággal fut, annak a sérülékenységén vagy mellékhatásaként keresztül mihez lehet hozzáférni, stb... És ez még egy beágyazott rendszer esetén is fontos lehet, hogy az egyszerű, azonosítatlan usernek ne legyen mindenhez 100%-ban joga és hozzáférése.