Un runlevel senza GDM con personalizzazione upstart

24 01 2007

Edgy (nella versione Desktop) di default, per ogni runlevel, prevede l’avvio di GDM, il login grafico.
Per certe tipologie di installazione, questo non è “il massimo”… vediamo di seguito un modo per creare un runlevel senza GDM selezionabile da GRUB ;)

Warning

ATTENZIONE! La modifica da apportare, potrebbe compromettere il corretto avvio del sistema, se non si è utenti esperti, si consiglia di NON proseguire

GRUB
Definiamo, prima di tutto di usare il runlevel 3, per avviare la nosta Ubuntu in modalità testo, quindi per prima cosa rimuoviamo l’avvio di GDM dal runlevel:
sudo rm -f /etc/rc3.d/S13gdm
ora andiamo a modificare il menù di grub per inserire l’avvio del nostro runlevel:
sudo gedit /boot/grub/menu.lst
quindi alla fine del file aggiungiamo:
title Ubuntu, kernel 2.6.17-10-generic (RUNLEVEL 3)
root (hd0,0)
kernel /boot/vmlinuz-2.6.17-10-generic root=/dev/hda1 ro runlevel=3
initrd /boot/initrd.img-2.6.17-10-generic
quiet
savedefault
boot

Attenzione: la configurazione sopra riportata è da adattare in base a quella già presente nel vostro sistema

Per gestire in questo modo il runlevel (e la relativa variabile nel comando di avvio del kernel), occorre però modificare lo script /etc/event.d/rc-default di upstart in modo da gestire il nuovo parametro. Quindi facciamo una copia di backup del file:
sudo cp /etc/event.d/rc-default /etc/event.d/rc-default.salvato
quindi apriamo l’editor
sudo gedit /etc/event.d/rc-default
e andiamo a sostituire il contenuto come segue:

# rc - runlevel compatibility
#
# This task guesses what the "default runlevel" should be and starts the
# appropriate script.
start on rcS/stop
script
        runlevel --reboot || true
        if grep -q -w -- "-s\\|single\\|S" /proc/cmdline; then
            telinit S
        elif [ -r /etc/inittab ]; then
            RL="$(sed -n -e "/^id:[0-9]*:initdefault:/{s/^id://;s/:.*//;p}" /etc/inittab || true)"
            if [ -n "$RL" ]; then
                telinit $RL
            else
                telinit 2
            fi
        else
            if grep -q " runlevel=[0-9]" /proc/cmdline
            then
                RL="$(sed -e "s/.* runlevel=\\([0-9]\\).*/\\1/g" /proc/cmdline)"
                if [ -n "$RL" ]; then
                        telinit $RL
                else
                        telinit 2
                fi
            else
              telinit 2
            fi
        fi
end script


Questa modifica si rende necessaria perchè upstart, a differenza di init “standard”, non gestisce il runlevel come parametro di avvio nel kernel, ma utilizza quello definito in /etc/inittab (eventualmente da creare perchè non presente in Edgy) o eventualmente la modalità single-user definita all’avvio del sistema (il recovery mode da GRUB)
Fatta quindi la modifica, non rimane altro che riavviare e selezionare il nuovo runlevel ;)


Azioni

Informazione

36 risposte a “Un runlevel senza GDM con personalizzazione upstart”

1 02 2007
Luca (17:28:01) :

Salve,per disabilitare la grafica, ho seguito la tua guida, ma ho commesso un errore nel file /etc/event.d/rc-default.
Per rimediare ho provato ad usare il live cd di ubuntu, ma in dev/ non mi vede l’hard disk e le relative partizioni ne anche in /mnt, quindi non riesco ad accedere al mio linux per correggere il file errato…
Come posso fare?

1 02 2007
paper0k (17:36:28) :

MMM… brutta cosa… prova ad eseguire il boot del sistema andando a modificare a run-time la riga di boot del kernel, da così
kernel /boot/vmlinuz-2.6.17-10-generic root=/dev/hda1 ro
a
kernel /boot/vmlinuz-2.6.17-10-generic root=/dev/hda1 ro init=/bin/bash
se funziona dovresti avere così attiva una shell da root, devi solo eseguire il remount della partizione / in modalità lettura/scrittura:
mount / -o remount,rw
e puoi così sistemare il file corrotto o annullare le modifiche ;)

PS-Hai fatto il backup del file come consigliato, vero? :)

1 02 2007
Luca (18:50:28) :

Sei grande!!!
Grazie mille…Ciao

22 03 2007
Andrea (12:03:20) :

Salve
Ho letto il tuo articolo, molto interessante, ma personalmente ho necessita che il sistema si avvii di default in modalità testuale.. sai consigliarmi qualcosa?
Ti ringrazio infinitamente :)

22 03 2007
paper0k (12:15:53) :

Basta configurare GRUB in modo da selezionare come scelta di default questa “title Ubuntu, kernel 2.6.17-10-generic (RUNLEVEL 3)” impostando adeguatamente il valore della variabile “default” nel file /boot/grub/menu.lst ;)
Sul wiki della community italiana di Ubuntu puoi trovare una guida su GRUB: http://wiki.ubuntu-it.org/Grub

PS-Come riportato nel box sopra, la modifica da apportare, potrebbe compromettere il corretto avvio del sistema, se non si è utenti esperti è meglio non farla

22 03 2007
Andrea (21:06:55) :

Quoto! Ho già incasinato il sistema :) ma il buon DSL da live cd mi ha salvato il didietro :D ho corretto il mio errore e proseguo col cambiare il valore di default
Ti ringrazio! ;)

23 03 2007
Andrea (10:48:57) :

Non so se questo è il posto giusto per fare domande, forse mi dovrei rivolgere ad un forum, ma vedo che sei abbastanza ferrato sull’argomento quindi ti espongo il mio problema :D
Appena avvio il pc ( un vecchio 133Mhz con 192MB di ram e scheda video S3 e ubuntu 6.10 edgy ), quando viene avviato x il sistema si pianta, la scheda video non da nessun output ( classico led color arancio sul monitor ), quindi ho preso in considerazione la tua modifica.
Ho corretto il problema, ho avviato in RUNLEVEL3 ed è arrivato fino alla finestra di login testuale, dopo qualche secondo è comparsa una scritta “Avvio di…” per una frazione di secondo, quindi impossibile da leggere, e di nuovo il sistema crasha come prima… Puoi suggerirmi qualcosa?
Ormai sono 2 settimane che uso ubuntu in modalità recovery, vorrei sapere se è possibile installare ed eseguire programmi qualsiasi anche in tale modalità, per me andrebbe benissimo lo stesso, tanto il pc è interamente dedicato ad aMule :)

Ti ringrazio infinitamente :)

23 03 2007
paper0k (12:36:59) :

Si, ti consiglio segnalare il tuo problema sul forum http://forum.ubuntu-it.org ;)

10 05 2007
asdrubale (14:50:09) :

Mi sembra sbagliata la seguente istruzione !!

RL=”$(sed -e “s/.* runlevel=([0-9]).*/1/g” /proc/cmdline)”

mi ritorna sempre l’intera riga e non il valore del runlevel

10 05 2007
paper0k (21:17:27) :

Era un problema di visualizzazione con WordPress la riga corretta è:
RL=”$(sed -e “s/.* runlevel=\([0-9]\).*/1/g” /proc/cmdline)”
ora è sistemata ;)

11 05 2007
asdrubale (13:05:15) :

con
RL=”$(sed -e “s/.* runlevel=\([0-9]\).*/1/g” ./cmdline)”

echo $RL

ritorna 1 quando mi dovrebbe tornare 3 poichè in cmdline ho

root=UUID=df543c40-72c6-4828-aa87-0642f6264c44 ro runlevel=3 quiet splash

:(

11 05 2007
asdrubale (13:08:27) :

ecco la stringa giusta per sed

RL=”$(sed -e “s/.* runlevel=\([0-9]\).*/\1/g” ./cmdline)”

mancava “\” davanti a 1

11 05 2007
paper0k (13:21:34) :

Esatto, colpa del cambio tema di WordPress… mi ha tolto i caratteri “\”… :(
Ho corretto nuovamente il post ;)

11 05 2007
asdrubale (13:30:31) :

anzi:

RL=`echo “$(sed -e “s/.* runlevel=\([0-9]\).*/\1/g” cmdline)” | egrep ^[0-9]*$`

saluti

11 05 2007
asdrubale (13:31:40) :

perchè altrimenti nel caso in cui non ci sia runlevel=x la riga del sed ritorna tutta la stringa di cmdline e il test con -n andrebbe comunque a buon fine.

quindi con l’egrep mi vado ad accertare che sia effettivamente un intero.

ciao ciao

11 05 2007
asdrubale (13:34:18) :

errata corrige:

RL=`echo “$(sed -e “s/.* runlevel=\([0-9]\).*/\1/g” /proc/cmdline)” | egrep ^[0-9]*$`

11 05 2007
asdrubale (13:37:45) :

a beh si, ci sarebbe quel primo :

if grep -q ” runlevel=[0-9]” /proc/cmdline

che discreterebbe la questione … va beh, questione di gusti ;)

11 05 2007
paper0k (13:52:51) :

Si faccio un controllo prima ;)

14 05 2007
Steve (16:14:22) :

Scusa eh ma non funziona mica nemmeno con le correzioni :-)

Sto cercando di risolvere anche io questo problema… solo che a me interessa l’avvio in init 3 da live cd

14 05 2007
paper0k (20:29:14) :

I problemi erano causati dal tema di WordPress… ora dovrebbe essere tutto ok… :)
MMM… non sono sicuro che sia possibile farlo con la Live…

22 05 2007
emaj (10:43:57) :

Ciao, su Feisty purtroppo non mi funziona! Nonostante selezioni il runlevel 3, Gnome parte lo stesso e al comando “runlevel”, ubuntu mi ritorna “2″….cioè è come se ignorasse del tutto il parametro “3″ nella riga kernel di grub…
Cosa mi puoi consigliare??
Grazie

22 05 2007
paper0k (10:54:22) :

@emaj
Su Feisty ancora non avevo provato, appena posso, faccio dei controlli e ti faccio sapere qui ;)

22 05 2007
emaj (11:05:13) :

mille grazie :-)

22 05 2007
paper0k (21:52:27) :

@emaj:
Ho corretto lo script sopra (questo nuovo tema mi sta facendo impazzire :( ) perchè c’erano ancora degli errori, ora è giusto, certificato :)
Comunque con Feisty funziona, bisogna solo mettere:
start on stopped rcS
invece di
start on rcS/stop
;)

23 05 2007
emaj (07:54:27) :

@paper0k

paper0k, help :-( non funziona ancora nonostante le modifiche da te suggerite!!! La stessa cosa si verifica sia sul nbook che sulla workstation!!
L’istruzione “runlevel 3″, anche nella semplice forma “3″ nella riga kernel, come ti dicevo, viene completamente ignorata!

23 05 2007
emaj (09:10:49) :

@paper0k

volevo aggiungere peraltro, che avevo dimenticato di creare il file /etc/inittab
Il problema a questo punto è che, una volta editato il suddetto file ad es. nella forma id:3:initdefault:, gdm NON partirà comunque in ogni caso, ma se di converso dovessi sostituire la riga con id:2:initdefault, non ci sarà script che tenga: gdm si avvierà!!!!
C’è qualcosa che nn mi torna :-)

23 05 2007
paper0k (11:01:32) :

@emaj
Lo script intercetta “runlevel=3″ non “runlevel 3″ o solo 3, infatti in /boot/grub/menu.lst avevo suggerito:
kernel /boot/vmlinuz-2.6.17-10-generic root=/dev/hda1 ro runlevel=3
Se cambi /etc/inittab il runlevel viene impostato come default (cioè il parametro di avvio non è considerato) e quindi GDM lo devi lanciare manualmente ;)

23 05 2007
emaj (11:30:50) :

@paper0k
Si scusa, mi sono espresso male: avevo già letto ed interpretato lo script sin dall’inizio, ed ero al corrente del fatto che la riga corretta fosse “runlevel=3″ e non “runlevel 3″
però ti posso assicurare che nonostante ciò e nonostante il file /etc/inittab sia id:2:initdefault:, quando vado a selezionare l’avvio con runlevel 3, Feisty parte con tutto gdm e alla richiesta di runlevel, continua a ritornarmi N 2…..

23 05 2007
paper0k (11:39:40) :

MMM… servono più info :)
Controlla, il contenuto di /proc/cmdline
cat /proc/cmdline
e lancia questo comando, ti dovrebbe dare 3 come risultato:
sed -e "s/.* runlevel=\([0-9]\).*/\1/g” /proc/cmdline
;)

23 05 2007
emaj (11:43:07) :

root=/dev/hda6 ro runlevel=3 è il primo risultato;

e 3 è il secondo….

23 05 2007
paper0k (12:14:36) :

Scusa, non ho precisato che se esiste il file /etc/inittab, la gestione del runlevel=X, non si attiva… forse è questo il problema? ;)

23 05 2007
emaj (18:31:56) :

@papero0k

Il file /etc/inittab, come tu m’insegni, non esiste originariamente nelle distribuzioni 6.10 e 7.04, infatti sono stato io a crearlo dopo svariati tentativi andati a vuoto.
L’ho cancellato.
La cancellazione ha creato i seguenti effetti:

1 - Avvio (non richiesto) di gdm
2 - Errore “failed to initialize HAL” al momento dell’avvio di gnome
3 - passando su tty1, si legge la seguente riga: “init: rc3 main process killed by TERM signal” e poi “Starting gnome…”
4 - al comando runlevel, Feisty ritorna “3 2″

Mi devi perdonare lo stress che ti sto creando con tutte queste domande….. :-)

23 05 2007
paper0k (21:15:46) :

@emaj
Ho fatto un topic sul forum allegando lo script che uso su Feisty magari può aiutarti
http://forum.ubuntu-it.org/index.php?topic=88651.0
;)

23 05 2007
emaj (21:30:18) :

Funziona!
Ho già cancellato lo script precedente, ma sono sicuro ci fosse qualcosa di errato nella pubblicazione dello stesso su WordPress!
Grazie mille x l’interessamento e scusa ancora il disturbo!
emaj

25 05 2007
paper0k (07:17:26) :

Credo di aver capito il problema… oltre a togliere i “\”, alcune volte se scrivo due trattini attaccati questi vengono “convertiti” in un trattino lungo…
Capito il problema trovata la soluzione :D

26 05 2007
paper0k (11:06:49) :

Grazie alla segnalazione di scia sul forum, ho corretto per Feisty lo script che trovate allegato al post http://forum.ubuntu-it.org/index.php?topic=88651.msg545901#msg545901 ;)

Lascia un commento

Puoi usare questi tag : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>