[RISOLTO] Problema Live Linux ad Hoc

Area di discussione libera.

Moderatore: Staff

Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
joseph
Linux 2.x
Linux 2.x
Messaggi: 206
Iscritto il: lun 14 giu 2010, 23:50
Slackware: 15.0
Kernel: 5.15.27
Desktop: xfce
Località: Salerno

[RISOLTO] Problema Live Linux ad Hoc

Messaggio 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)
Ultima modifica di joseph il dom 28 apr 2013, 13:19, modificato 1 volta in totale.

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Problema Live Linux ad Hoc

Messaggio da ZeroUno »

In fase di boot non sono ancora abilitate le trap (o viceversa, sono abilitate le trap con policy 'ignore trap')
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
joseph
Linux 2.x
Linux 2.x
Messaggi: 206
Iscritto il: lun 14 giu 2010, 23:50
Slackware: 15.0
Kernel: 5.15.27
Desktop: xfce
Località: Salerno

Re: Problema Live Linux ad Hoc

Messaggio 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

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Problema Live Linux ad Hoc

Messaggio 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.
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
joseph
Linux 2.x
Linux 2.x
Messaggi: 206
Iscritto il: lun 14 giu 2010, 23:50
Slackware: 15.0
Kernel: 5.15.27
Desktop: xfce
Località: Salerno

Re: Problema Live Linux ad Hoc

Messaggio 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

Avatar utente
joseph
Linux 2.x
Linux 2.x
Messaggi: 206
Iscritto il: lun 14 giu 2010, 23:50
Slackware: 15.0
Kernel: 5.15.27
Desktop: xfce
Località: Salerno

Re: Problema Live Linux ad Hoc

Messaggio da joseph »

Qualche idea ragazzi ? 8)

Avatar utente
joseph
Linux 2.x
Linux 2.x
Messaggi: 206
Iscritto il: lun 14 giu 2010, 23:50
Slackware: 15.0
Kernel: 5.15.27
Desktop: xfce
Località: Salerno

Re: Problema Live Linux ad Hoc

Messaggio 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?

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Problema Live Linux ad Hoc

Messaggio 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" ?
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
joseph
Linux 2.x
Linux 2.x
Messaggi: 206
Iscritto il: lun 14 giu 2010, 23:50
Slackware: 15.0
Kernel: 5.15.27
Desktop: xfce
Località: Salerno

Re: Problema Live Linux ad Hoc

Messaggio 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)

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Problema Live Linux ad Hoc

Messaggio 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
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
joseph
Linux 2.x
Linux 2.x
Messaggi: 206
Iscritto il: lun 14 giu 2010, 23:50
Slackware: 15.0
Kernel: 5.15.27
Desktop: xfce
Località: Salerno

Re: Problema Live Linux ad Hoc

Messaggio 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)

Avatar utente
joseph
Linux 2.x
Linux 2.x
Messaggi: 206
Iscritto il: lun 14 giu 2010, 23:50
Slackware: 15.0
Kernel: 5.15.27
Desktop: xfce
Località: Salerno

Re: Problema Live Linux ad Hoc

Messaggio 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/busyb ... 72736.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)

Rispondi