Pagina 1 di 1

grub2 in stallo

Inviato: mer 25 nov 2015, 16:11
da conraid
Ho installato il sistema su sd.
A parte qualche problema nella configurazione delle cose, tipo font più grandi e più sgranati, ed altre cose in qua e là, ed una reattività che sinceramente non vedo così marcata come leggende narravano, mi sono trovato un po' in crisi con grub.
Vi spiego.
Ho installato slackware da chiavetta usb, configurato il sistema ed alla fine prima di riavviare ho installato grub come avevo letto nella documentazione. Ed infatti il sistema si riavvia con grub2.
Ora però voglio modificare, modificando i parametri di avvio (quelli fatti con append in lilo) ed aggiungendo kernel.
Leggendo in rete vedo che devo che nel primo caso devo modificare /etc/default/grub e la variabile GRUB_CMDLINE_LINUX. Lo faccio, poi quando vado a dare
grob-mkconfig -o /boot/grub/grub.cfg
il sistema trova 4 voci (huge, generic ed i 2 link ad esse), e si ferma. Dopo decine di minuti ho fatto CTRL+C. Cosa può essere?




UPDATE
aggiungo qui.

Ho risolto, nel senso che dopo tot riavvii per sistemare cose non si è bloccato. Ma son curioso di capire come mai può averlo fatto.

Ora però c'è un problema diverso. Mi ritrovo sempre 4 voci. Ma non come credevo i kernel dentro, ma sono:
Slackware 14.1
Slackware (14.1)
ora non sono proprio così, ma tra le voci cambia solamente delle parentesi.

Dentro la prima voce ci sono 6 kernel. Generic, Huge, il mio compilato e le relativi voci di ripristino o safe mode insomma.
Dentro la seconda voce tantissimi immagini kernel, come se fossero ripetute varie volte.
vedo che sono in /boot/grub/grub.cfg, ma consigliano di non editarlo e di usare /etc/default/grub, dove infatti ho messo DEFAULT=saved in modo da far avviare nell'ultima voce salvata. Altrimenti come modifico l'ordine?
Come faccio a togliere le voci duplicate e pulire un po' il menù?

Questo è il mio /etc/default/grub il resto per adesso è di default

Codice: Seleziona tutto

# If you change this file, run grub-mkconfig -o /boot/grub/grub.cfg
# afterwards to update /boot/grub/grub.cfg.

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=false
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=$( sed 's/Slackware /Slackware-/' /etc/slackware-version )
GRUB_CMDLINE_LINUX_DEFAULT="vt.default_utf8=1 acpi_blacklight=vendor raid=noautodetect"
GRUB_CMDLINE_LINUX="vt.default_utf8=1 acpi_blacklight=vendor raid=noautodetect"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
#GRUB_GFXMODE=1024x768x32

# Font used on the graphical terminal:
#GRUB_FONT=/usr/share/grub/dejavusansmono.pf2

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entrys
#GRUB_DISABLE_LINUX_RECOVERY="true"

Re: grub2 in stallo

Inviato: gio 26 nov 2015, 15:44
da hashbang
conraid ha scritto:Ho risolto, nel senso che dopo tot riavvii per sistemare cose non si è bloccato. Ma son curioso di capire come mai può averlo fatto.
Solitamente quello che rallenta il tutto è 30_os-prober che controlla la presenza di ogni file system montato e cerca di piazzarci una voce al boot.

Per esserne sicuro dai un grub-mkconfig senza reindirizzazione (-o /boot/grub/grub.cfg) così stampa in stdout.
Oppure eseguilo con un sh -x, tanto come buona parte di GRUB2 è uno script shell, quindi puoi tracciarne l'esecuzione.

In ogni caso, se il problema è 30_os-prober puoi risolvere come ho fatto io: 0644 agli script che non servono.
Nel mio caso: 10_linux, 20_linux_xen, 30_os-prober e 41_custom.
10_linux tecnicamente lo dovresti lasciare, ma nel mio caso ho potuto evitarlo. E adesso ti spiego perché.

Il modificare /etc/default/grub è una mezza verità. Le voci che vedi al boot non vengono gestite da lì, ma da script shell (a mio avviso MOLTO poco eleganti) presenti in /etc/grub.d. Per essere precisi, lo script responsabile di tutte quelle voci doppie è 10_linux.

IMHO quell'ammasso di script è una roba troppo fallata; l'esempio pratico è che non fa nemmeno distinzione tra un symlink ed il binario vero e proprio.
Di conseguenza, se hai cinque symlink allo stesso binario, per lui è come se avessi cinque kernel.

Bisognerebbe mettere mano allo script, ma sinceramente lo trovo uno sbattimento inutile.
Nel mio caso ho risolto creando un mio script custom che non fa altro che copiare sempre la mia voce.
Si chiama 10_slackware ed è fatto così:

Codice: Seleziona tutto

#!/bin/sh

cat << EOF
menuentry 'Slackware64-current' {
	load_video
	insmod gzio
	insmod part_gpt
	insmod btrfs
	set root='hd0,gpt5'
	if [ x\$feature_platform_search_hint = xy ]; then
		search --no-floppy --fs-uuid --set=root --hint=bios=hd0,gpt5 --hint-efi=hd0,gpt5 --hint-baremetal=ahci0,gpt5 39c8d05b-519f-4d37-9a24-0016722a2afb
	else
		search --no-floppy --fs-uuid --set=root 39c8d05b-519f-4d37-9a24-0016722a2afb
	fi		
	echo 'Loading kernel...'
	linux /__current/ROOT/boot/vmlinuz root=/dev/sda5 ro rootflags=subvol=__current/ROOT resume=/dev/sda4
	echo 'Loading initial ramdisk...'
	initrd /__current/ROOT/boot/initrd.gz
}
EOF
vmlinuz è un symlink al kernel generic. Io ho solo quello, quindi so che sarà sempre riferito a lui.
Te lo posto nel caso in cui ti possa servire come modello.

Re: grub2 in stallo

Inviato: gio 26 nov 2015, 17:07
da conraid
Thanks.

Intanto ho risolto alcune cose.
1) era 30_os-proper. Tolto flag eseguibile.
2) Ho visto che poi c'è xen e custom, che in pratica sono uno vuoto ed uno richiama il file custom.cfg. Per adesso non mi servono, ed ho lasciato eseguibile solo 10. Per adesso senza modifiche.
3) Ho tolto il generic, tanto uso o il mio o huge per le emergenze. Ho anche tolto il link simbolico vmlinuz-huge. vmlinuz no, in quanto ho visto dallo script che grub-mkconfig cerca solo vmlinuz-*, ed infatti adesso mi trova solo due kernel. Ed al riavvio ho solo due voci
- slackware 14.1
- slackware 14.1 impostazioni avanzate [da dove posso scegliere quale dei 4 kernel avviare. Cioè i due più i ripristino]
prima avevo altre due voci uguali, con tantissime voci dentro.

Così va bene, poi con calma studio i temi, le personalizzazioni, etc... e mi salvo il tuo script.


Altra domanda.
Come default ho huge, da cosa lo prende? da vmlinuz? da cosa?
Se voglio cambiarlo nelle impostazioni devo mettere GRUB_DEFAULT=X dove X è 1 (cioè il secondo trovato da mkconfig) o 2 (cioè la terza voce tra quelle elencate in grub)?
Per ora ho SAVED così ogni volta dopo i secondi di timeout parte con l'ultimo scelto, ma per capire cosa mettere di default.

Re: grub2 in stallo

Inviato: gio 26 nov 2015, 19:20
da hashbang
conraid ha scritto:Altra domanda.
Come default ho huge, da cosa lo prende? da vmlinuz? da cosa?
Basandomi sull'output (con e senza -x passato ad /bin/sh) di 10_linux e sul contenuto di esso e di /usr/share/grub/grub-mkconfig_lib sembra che vengano chiamate diverse funzioni ( version_find_latest(), version_test_gt(), version_sort() e version_test_numeric() ) sui kernel che vengono trovati nel pattern vmlinuz-*, in modo da far tornare la lista al contrario.
Ho fatto anche una prova mettendo un finto symlink, vmlinuz-zxzxzx-4.1.13, e difatti torna prima questo.

In sostanza, a quanto ho capito hanno replicato il comportamento di tac.

Codice: Seleziona tutto

$ ls /boot/vmlinuz-* | tac
almeno nel mio caso torna una lista identica a quella che si cerca di ottenere in quella libreria di GRUB2.
Tuttavia non so dirti perché hanno creato tutte quelle funzioni. Probabilmente o volevano una soluzione ad hoc e magari più robusta in scenari complessi, oppure odiavano semplicemente il fatto che ci fosse già una utility UNIX di tre lettere che facesse una cosa del genere con poco sbattimento.
E la cosa non mi sorprenderebbe, di questi tempi. :lol:

In aggiunta a questo, GRUB_DEFAULT è normalmente settata a 0 (stando a quanto dice la documentazione), quindi la voce vmlinuz-huge-4.1.13, che in quel "sort con gli steroidi" risulta essere la prima, è quella che viene identificata come predefinita.
Se voglio cambiarlo nelle impostazioni devo mettere GRUB_DEFAULT=X dove X è 1 (cioè il secondo trovato da mkconfig) o 2 (cioè la terza voce tra quelle elencate in grub)?
Per ora ho SAVED così ogni volta dopo i secondi di timeout parte con l'ultimo scelto, ma per capire cosa mettere di default.
Stando alla documentazione, sì.
Devi settare come valore di GRUB_DEFAULT l'indice corrispondente alla voce che vuoi tenere come default.

Re: grub2 in stallo

Inviato: ven 27 nov 2015, 0:51
da conraid
Boh, modificando il valore ho sempre la stessa voce di default. Per adesso tengo SAVED, poi con calma lo studio meglio.