Pagina 1 di 1

[RISOLTO] Problema Live Linux ad Hoc

Inviato: mer mar 20, 2013 0:45
da joseph
Buonasera ragazzi volevo porvi un problema che ho notato solo ultimamente.
Ho implementato in una live linux riscritta da zero degli script basati su "dialog".
Ho notato una cosa, se lo script che mi interessa lo faccio partire all'interno di "/etc/init.d/rcS"
non mi da la possibilità di uscire dai "dialog" con CTRL+C , Z , D ecc...
Mentre se faccio partire la shell dei comandi e poi lancio il mio script manualmente, il tutto funziona correttamente
cioè riesco ad uscire dai "dialog" con la combinazione dei tasti.
Cosa può essere? Ho impostato qualcosa che non dovevo all'interno della mia live?
Grazie a tutti anticipatamente 8)

Re: Problema Live Linux ad Hoc

Inviato: mer mar 20, 2013 14:36
da ZeroUno
In fase di boot non sono ancora abilitate le trap (o viceversa, sono abilitate le trap con policy 'ignore trap')

Re: Problema Live Linux ad Hoc

Inviato: mer mar 20, 2013 21:51
da joseph
Nel file rcS devo inserire ignore trap? Deduco che all'inizio le trap sono abilitate perche in nessun modo riesco ad uscire dai dialog

Re: Problema Live Linux ad Hoc

Inviato: mer mar 20, 2013 22:25
da ZeroUno
credo che dipenda da come hai organizzato il processo di boot.

Una volta passato il bootloader carichi il kernel.
A questo gli dai in pasto un initrd per il mount del filesystem suppongo se non addirittura la distro é composta interamente dal ramdisk (come l'installer di slackware).

L'init del ramdisk può essere un binario o uno script.

Al termine del ramdisk, quando il rootfs é montato, il boot ritorna al kernel che lo passa a /sbin/init che può essere custom o il classico init che legge la inittab e avviare quindi gli script di startup

a seconda dei casi di cui sopra vengono abilitate le trap in punti diversi e in modi diversi


ora direi che é il caso di spiegare la struttura della tua distribuzione e dire in che momento carichi rcS.


Per curiosità, i binari della distribuzione (bash, ls, init se non é uno script bash) dove li prendi? Perché dici che hai fatto una distro live da 0, ma un punto di partenza c'é sempre.

Re: Problema Live Linux ad Hoc

Inviato: mer mar 20, 2013 22:39
da joseph
La distro è basata su busybox come comandi base, mentre altri comandi più funzionali sono stati presi dalla mia slack 13.37
E' stata stutturata in questo modo
Dopo il caricamento del kernel parte lo script "/linuxrc" passato come parametro "init=/linuxrc" nel isolinux.cfg
Questo script si limita a creare una ramdisk di dimensione N e poi passa la palla all'init con questo comando:

Codice: Seleziona tutto

exec chroot . /bin/init < /dev/console > /dev/console 2>&1

Da qui poi parte "/etc/init.d/rcS" che carica tutto il resto delle cose (mount,device ecc...)
Alla fine di tutti i mount e link ai vari binari, parte questo script che usa i "dialog".
Questa live non ha una interfaccia grafica quindi è basata esclusivamente su "dialog" e "console"
In tutto stiamo parlando di 50MB.
Dove mi conviene mettere l'ignore trap?
Ah inittab è questo:

Codice: Seleziona tutto

::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::restart:/bin/init


al boot posso scegliere due opzioni, la prima mi parte lo script con dialog, la seconda mi parte la console dopo il messaggio di "askfirst"
Grazie anticipatamente

Re: Problema Live Linux ad Hoc

Inviato: sab mar 23, 2013 14:27
da joseph
Qualche idea ragazzi ? 8)

Re: Problema Live Linux ad Hoc

Inviato: gio mar 28, 2013 16:29
da joseph
Ragazzi non riesco a risolvere questo problema. Ho provato anche ad inserire negli script di avvio questa riga:

Codice: Seleziona tutto

trap '' INT

ma niente da fare non riesco comunque a bloccare gli script dialog
Avete qualche suggerimento?

Re: Problema Live Linux ad Hoc

Inviato: lun apr 15, 2013 9:47
da ZeroUno
Hai provato ad aggiungere nell'inittab qualcosa tipo

::respawn:-/tuoscript.sh
(non so se serve il '-' o no)

cioè, rcS non richiama lo script con dialog ma fa solo l'inizializzazione.
Alla rine del sysinit magari viene rilasciato e abilitato il trapping.


Però io non ho capito una cosa...
il ctrl+c dovrebbe farti uscire dallo script, non dal dialog.
perchè vuoi uscire dal dialog con ctrl+c piuttosto che con un pulsante "exit" ?

Re: Problema Live Linux ad Hoc

Inviato: ven apr 19, 2013 18:30
da joseph
In pratica il "dialog" lancia il comando "dd", e una volta partita la copia non riesco a bloccarla in nessun modo nemmeno con il ctrl+c.
In realtà questo è il vero problema, poi ho notato nelle varie prove, che neanche nella dialog prima del lancio di "dd" funziona il ctrl+c
comunque farò quella prova da te suggerita e ti farò sapere 8)

Re: Problema Live Linux ad Hoc

Inviato: ven apr 19, 2013 23:27
da ZeroUno
secondo me stai sbagliando approccio.

Quando faccio uno script (normale, non di quelli che si avviano al boot), e dentro ci metto un dd, e lo lancio a mano se io premo ctrl+c non esco dal dd ma dallo script (e come conseguenza dal dd, ma non é scontato).

Quando parte un dd si presume che questo debba terminare in modo naturale (per fine copia) e se non lo fa devi indagare sul perché.

Se invece é previsto che il dd debba essere in qualche modo fermato, allora devi gestirlo, ma non ctrl+c ma tramite dialog e kil

Re: Problema Live Linux ad Hoc

Inviato: sab apr 20, 2013 0:16
da joseph
Scusami forse mi sono spiegato male. In pratica avvio questo script dove al suo interno ci sono dei dialog,
gia nella finestra dialog se volessi chiudere lo script con il ctrl+c (al posto del normale exit) non mi fa uscire.
Oltretutto se viene avviato il dd dallo script per fermare la copia e di conseguenza lo script con ctrl+c non mi ferma ne il dd
ne lo script.
Viceversa, se avvio lo script manualmente dopo che è partita la console, il tutto funziona correttamente cioè esco dai dialog e dal dd
tranquillamente con ctrl+c.
Ora in questo script ho gestito i vari eventi ctrl con i trap che nel caso 2 (script manuale) funzionano correttamente, nel caso 1 non funziona assolutamente.
Spero di essere stato chiaro, comunque non ho avuto ancora tempo di provare la tua soluzione. 8)

[MOD]
Provato non funziona...Mi si imballa tutto lo script!!!
Qualche idea di come possa killare il "dd" non potendo utilizzare il ctrl+c ?

[MOD]
Credo che sia un problema dell'init del busybox. Sto provando ad utilizzare qualche altra versione di busybox per vedere se ottengo lo stesso problema.
Ti terrò aggiornati. Intanto se avete qualche idea postatela pure 8)

Re: Problema Live Linux ad Hoc

Inviato: dom apr 28, 2013 1:49
da joseph
Buonasera ragazzi, forse ci siamo quasi...Sono riuscito a capire il problema da cosa dipende ma mi serve ancora un vostro piccolo aiutino.
In pratica ho seguito questo link: http://lists.uclibc.org/pipermail/busybox/2010-June/072736.html
In realtà non mi funziona il CTRL+C perchè quando parte la shell mi dice "sh no job control in this shell"
Seguendo questi comandi

Codice: Seleziona tutto

exec setsid sh
exec </dev/tty1 >/dev/tty1 2>&1
exec sh


oppure

Codice: Seleziona tutto

exec setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1'


i controlli (CTRL+C compreso) funzionano correttamente.
Ora come posso inserire il mio script in quella sintassi?
Oppure c'è qualche altro modo per abilitare i job control della console?
Grazie a tutti anticipatamente 8)

[MOD]
Finalmente problema risolto.
bastava inserire questa riga nel file /etc/inittab

Codice: Seleziona tutto

tty1::sysinit:/etc/init.d/rcS

In pratica lo script viene avviato su una vera console (quindi con tutte le sue funzioni) perchè (se leggete il link postato) i jobs del "/dev/console" viene automaticamente bloccato dal kernel.
Grazie a tutti per l'aiuto 8)