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.
Specialis feladata van,
es van mikor user szintu valasztasi lehetoseg adodik.
Ehhez kellene nekem egy dialog.
De egyenlore meg tty-t sem tudtam csinalni. :(
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.
Sajna sokan arra allnak ra, hogy hogy lehet mashogy megcsinalni, ill. h NEM LEHET elkepzelni.
Nem is kell.
Dialogot szeretnek initramfs-ben.
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).
--
Igy akartam megoldani, es megoldodott.
Annyira nem mindegy - te valóban villával szeretnél levest enni, ami kellően perverz, a'la sajtreszelős onanizálás, de te tudod. Egyébként ha az LFS-t tényleg végigcsinálod, akkor visszatekintve biztosan másképp fogod látni az initrd szerepét. Is.
Tudom altalanossagban mire hasznaljak az initrd, de miert kell ehez ragaszkodnom ? Akkor csak arra hasznalhatom amire hasznaljak, vagy amire te gondolod h hasznalni lehet.
Ezert vagyunk fejlesztok, mert mashogy gondolkodunk, probalunk mast is csinalni.
És ezért kéne kötelezően minden fejvesztőt beültetni üzemeltetni -azokat a sz@rokat, amiket elkövetnek :-P (A'la kutya, orr belever)
Egy tipp: legyen egy ISO az a fájl. ISO-t tud boot-olni a grub is. Leírás Arch-ra, ez alapján csináltam pár éve egy rescue-iso-t, saját beállításokkal (pl. a wifi jelszó beállítva, a szükséges programok telepítve, stb.).
Uhh ez nagyon allat tipp. KOSZI!
Ezért kérdeztük, hogy mire kell :)
(csak XY-probléma lett)
Elnezest, ha titikzatos vagyok, de sajnos bizalmas a projekt es az otlet is. :(
Meg ugy sem csinaltam OS-t ami ISO-kent is bootolhato.
Ha van valakinek taasztalata, vagy bevalt howto-ja, azt szivesem veszem.
(deb,ubuntu alap preferalt)
Koszi!
https://help.ubuntu.com/community/LiveCD
https://help.ubuntu.com/community/LiveCDCustomizationFromScratch
https://help.ubuntu.com/community/MakeALiveCD/DVD/BootableFlashFromHard…
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.
en ezt hasznaltam par evvel ezelott amikor szuksegem volt hasonlora: http://linux.voyage.hk
Még ősibb időkben volt floppy image is.
* Én egy indián vagyok. Minden indián hazudik.
XY problémára gyanúzunk szerintem, azért kérdezzük, hogy mire kell.
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ó
Semmi kozmikus.
Meg a particiok barmi nem mountolasa elott kell az interakcio.
Milyen kérdés, ha nem kozmikusan titkos, amire válaszolni kell?
Nem lenne jobb a bootloader-t hekkelni inkább?
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.
Valszeg /dev/console van a bepotyogeshez, es egy sshd, vagy dropbear.
Sajna nem tty egyik sem ami ide kellene, de az otlet jo, koszi.
Sub, már nagyon érdekel mi az eredeti feladat :)
Tessék-lássék.
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
subs.
Megy a "<<" code-on belül is:
Csak ott is úgy kell írni, mint normál szövegben:
<< = <<
koszi, vegul ment az, ott van.
es persze modositottam a scripten mielott postoltam, es persze el is ba*tam. ha erdekes meg, akkor itt van valami, amit ki is probaltam..
Vigyazat,
echo root::0:0:root:/root:/bin/sh > /etc/passwd
nem /etc/passwd, hanem etc/passwd kell!
Kulonben agyonvered a sajat OS-ed passwd-jet :D
Úgy látom, azért sikerült helyreállítanod :D
+1
csunyan beleugrottam, pedig ellenoriztem a scriptet :D
viszont van egy sysresccd OS-em, a gepen, szoval helyreallitottam par perc alatt :D
en azt hiszem nem ver agyon semmit: a bebootolt, rambol futo rendszeren fut le az a parancs, a memoriaban levo ramdiszket matatja.
de nem rontja el ha atirod
etc/passwd
-re, es tenyleg inkonzisztensen van egyszer/etc
-t, maskoretc
(megproc
,sys
, stb).update:
Ezt a hitetleneknek irom, es azoknak akiket erdekel.
Sikerult dialog-t varazsolni initramfs-be, azaz lehetseges.
:)
ahhoz nem csak az
/etc/terminfo/l/linux
hianyzott, ahogy masok irjak?igen, es pont innen olvastam :D
Lehetséges, de nem oda való, mert az initrd-nek nem ez a célja. A "nem lehet" és a "nem oda való" közötti apró, de lényeges különbséget nem tudom, észrevetted-e?
de ez mindig a korulmenyektol fugg, nem? adott feladathoz keresunk megoldast, es nem kobe vesett best practices-ben hiszunk vakul.
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.
de ezek ortogonalis dolgok, nem? (initrd-t hasznalsz / foglalkozol a jogosultsagokkal)
+1
Nekem X11 kellene :)
puppy linux?
Meg KDE bele, teljes Office. Nehogy már egy X11 elég legyen :)
A systemd része lesz hamarosan... ;-)
--
A főnököm mindig megtartja amit ígér, ha pénzt ígér azt is!
jha, es koszi mazsi!