Considerazioni su Slackware e alternative

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
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.
rik70
Iper Master
Iper Master
Messaggi: 2489
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 15.0
Kernel: 5.15.x-generic
Desktop: Sway
Distribuzione: Arch Linux

Re: Considerazioni su Slackware e alternative[GRUB+SLACK]

Messaggio da rik70 »

Il problema grub+initrd su slackware è dovuto essenzialmente a come sono definite le immagini dei kernel in /boot. La presenza poi dei collegamenti simbolici, più il 'nome' che devi dare all'initrd affinché grub-mkconfig lo associ all'immagine del kernel corretta, fa il resto.

L'ideale sarebbe avere in '/boot/ una cosa del genere:

Codice: Seleziona tutto

vmlinux-generic
vmlinux-huge
Basterebbe creare un initrd di questo tipo

Codice: Seleziona tutto

initrd-generic.img
e grub-mkconfig lo assocerebbe al solo kernel 'generic'.
Questa è la soluzione adottata su Archlinux.

Oppure, per rimanere in linea con la tradizione, basterebbe mettere al 'centro' la versione del kernel anziché alla fine - chi ha il numero di Pat? :) - e non creare link simbolici.
Ad esempio:

Codice: Seleziona tutto

vmlinuz-5.4.8-generic
initrd-5.4.8-generic.img

# ed eventualmente:
vmlinuz-5.4.8-huge

È lo stile Debian.

La prima soluzione sarebbe l'ideale, in quanto non richiede l'aggiornamento di grub.cfg ma solo dell'initramfs. D'altronde, è questa una delle ragioni per cui si dovrebbe preferire grub rispetto a lilo.
L'alternativa in stile Debian è più indicata se ad esempio vuoi mantenere nel sistema le vecchie versioni del kernel - esempio: 5.4.6, 5.4.7, etc. - ma richiede sempre la rigenerazione di grub.cfg ad ogni aggiornamento del kernel(perché di fatto l'aggiornamento ne aggiunge di nuovi) e infatti in Debian viene fatta in automatico.

Slackware invece è ancora 'LiloCentrica'.
L'approccio da questo punto di vista è impeccabile: nel mio 'lilo.conf' punto direttamente ai collegamenti simbolici - vmlinux e/o vmlinux-generic - e in caso di aggiornamento dei kernel devo solo rigenerare l'initrd del kernel generic. Dopo, probabilmente, devo dare anche 'lilo -v', ma sicuramente non devo più mettere mano alla configurazione.


Fatte queste premesse, con grub2 su Slackware l'unico modo per non sbattersi troppo secondo me è questo:

- disinstallare il 'kernel-huge' e reinstallare il 'kernel-generic'(giusto per rimettere in ordine i symlink in /boot);
- creare un initrd, dandogli un nome che serva allo scopo. Esempio:

Codice: Seleziona tutto

mkinitrd -c -k 5.4.8 -m ext4 -o /boot/initrd.gz
- e generare il grub.cfg:

Codice: Seleziona tutto

~# grub-mkconfig -o /boot/grub/grub.cfg
Found linux image: /boot/vmlinuz-generic-5.4.8
Found initrd image: /boot/initrd.gz
Found linux image: /boot/vmlinuz-generic
Found initrd image: /boot/initrd.gz
Perfetto, ma... ...ma c'è un doppione.
Sì, però meglio uno che "ottantacinque".

Ma posso fare di più se ciò non mi piace: modifico /boot/grub/grub.cfg e tolgo le 2 voci che puntano a 'vmlinuz-generic-5.4.8

Codice: Seleziona tutto

menuentry 'Slackware-14.2+ GNU/Linux, with Linux 5.4.8' [***]
[....]
menuentry 'Slackware-14.2+ GNU/Linux, with Linux 5.4.8 (recovery mode)'
lasciando intatte quelle che puntano a 'vmlinux-generic':

Codice: Seleziona tutto

menuentry 'Slackware-14.2+ GNU/Linux, with Linux generic[***]
[****]
menuentry 'Slackware-14.2+ GNU/Linux, with Linux generic (recovery mode)'[***]
[***]
- occhio alla sintassi: backup... ...backup ...backup!

A questo punto, su grub.cfg non ci torno più e in caso di upgrade del kernel della distro devo aggiornare solo

Codice: Seleziona tutto

/boot/initrd.gz
P.s.
Domanda:
e se voglio gestire i kernel compilati da me, come devo procedere?
La risposta è già in ciò che è scritto sopra, magari se ne riparla.

Scusate la lungaggine.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3789
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Considerazioni su Slackware e alternative

Messaggio da joe »

A me questo comportamento di grub-mkconfig pare un bug bell'ebbuono.
Esagero?

Se per far associare l'initrd al kernel generic (in caso si abbia installato anche l'huge, che alla fine potrebbe sempre servire come fallback in caso qualcosa andasse storto) bisogna stravolgere l'installazione dei pacchetti del kernel prevista da Pat, allora sarebbe anche bello che Pat stesso nel pacchetto di grub2 predisponesse uno script mkconfig tagliato e cucito sulle necessità di slackware.

A me personalmente piaceva più Lilo. Ma non supporta il partizionamento GPT che in prospettiva presenta vantaggi concreti.

La soluzione arch particolarmente snella ed elegante ma la versione del kernel nel nome si perde e in caso di più kernel installati magari compilati da noi non so come sia meglio gestirla.

Ad ogni modo alla fine va bene anche così, basta saperlo. Forse sarebbe il caso di spenderci due righe in più in questa guida che avevo seguito qualche anno fa quando avevo preso l'SSD nuovo in occasione dell'usicta di slackware 14.2:

https://docs.slackware.com/howtos:slack ... thout_uefi

Seguendo quella guida dopo aver installato le immagini dei kernel sia huge che generic e riavviando e scegliendo il kernel generic in teoria si dovrebbe finire in kernel panic, anche predisponendo la initrd senza nominarla adeguatamente.




PS.
Non mi sono mai accorto della cosa sulla 14.2, ma solo perché sto utilizzando il kernel huge che in qualche modo risulta il primo della lista al boot.

Codice: Seleziona tutto

# zgrep EXT4_FS= /proc/config.gz
CONFIG_EXT4_FS=y
[/i]
Ultima modifica di joe il lun 6 gen 2020, 16:29, modificato 1 volta in totale.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3789
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Considerazioni su Slackware e alternative

Messaggio da joe »

Ho fatto una piccola prova:
- sistema in uso slack-14.2 su /dev/sda3, sistema slack-current installato in /dev/sda4
- creazione initrd da slack-14.2 incollando l'output dello script mkinitrd_command_generator.sh
- Backup vecchio grub.cfg
- Rimozione grub.cfg.old forse non necessario ma non si sa mai
- grub-mkconfig -o ecc

Allego il grub.cfg che ne è venuto fuori.
In particolare greppando un attimo i kernel lanciati e corrispondente initrd (righe numerate), ecco cosa vien fuori:

Codice: Seleziona tutto

# grep -n 'linux.*root=\|initrd' /boot/grub/grub.cfg
92:     linux   /boot/vmlinuz-huge-4.4.190 root=UUID=3aaab5fc-325d-4fd7-8acb-f644d1dd3b9a ro
94:     initrd  /boot/initrd.gz
111:            linux   /boot/vmlinuz-huge-4.4.190 root=UUID=3aaab5fc-325d-4fd7-8acb-f644d1dd3b9a ro
113:            initrd  /boot/initrd.gz
129:            linux   /boot/vmlinuz-huge root=UUID=3aaab5fc-325d-4fd7-8acb-f644d1dd3b9a ro
131:            initrd  /boot/initrd.gz
147:            linux   /boot/vmlinuz-generic-4.4.190 root=UUID=3aaab5fc-325d-4fd7-8acb-f644d1dd3b9a ro
149:            initrd  /boot/initrd.gz
165:            linux   /boot/vmlinuz-generic root=UUID=3aaab5fc-325d-4fd7-8acb-f644d1dd3b9a ro
167:            initrd  /boot/initrd-generic.gz
187:    linux /boot/vmlinuz root=/dev/sda4
188:    initrd /boot/initrd.gz
201:            linux /boot/vmlinuz root=/dev/sda4
202:            initrd /boot/initrd.gz
214:            linux /boot/vmlinuz root=/dev/sda4
215:            initrd /boot/initrd.gz
227:            linux /boot/vmlinuz-generic root=/dev/sda4
239:            linux /boot/vmlinuz-generic-5.4.7 root=/dev/sda4
251:            linux /boot/vmlinuz-huge root=/dev/sda4
263:            linux /boot/vmlinuz-huge-5.4.7 root=/dev/sda4
Notare l'indentazione.
Quindi il comportamento di grub-mkconfig è un po' singolare:
Per quanto riguarda le immagini che trova nella directory /boot del suistema in uso, ovvero slack14.2 su /dev/sda3:
- aggiunge la initrd a tutti i kernel che trova (vmlinuz-huge-4.4.190 e vmlinuz-generic-4.4.190) anche se al kernel huge non servirebbe, va be' ci può anche stare

Per quanto riguarda il sistema smontato, la current instalalta su /dev/sda4
- aggiunge la initrd (non so come faccia a rilevare le immagini ma comunque...) all'immagine "vmlinuz" che è un collegamento al kernel huge della current 5.4.7
- ripete (forse non altre opzioni) lo stessa immagine kernel e initrd (è sempre l'huge in pratica)
- lo ripete una terza volta anche sta volta con initrd inutile
- trova il -generic (link a generic-$versione) lo aggiunge ma senza l'initrd (quindi questo porta a kernel panic)
- trova il -generic-5.4.7, lo aggiunge ma senza initrd. Kernel panic come sopra
- ritrova l'huge (link) e niente initrd, ma qua non serve
- trova huge-5.4.7 e niente initrd anche qui come sopra

In pratica grub-mkconfig lavora accettabilmente con le immagini del sistema in uso, nonostante faccia doppioni aggiunge a tutte la initrd che anche se con gli huge non serve, alla fine si ha un risultato che fa partire tutti i kernel anche il generic senza errori.
Invece con il sistema non in uso si comporta diversamente, aggiungendo l'initrd solo a "vmlinuz" (cosa inutile perché è un collegamento all kernel huge). E lasciando gli altri kernel che trova senza, in modo che nel caso del kernel-generic si ottiene kernel panic.

Proverò a generare una initrd nominata diversamente e vedere cosa succede...

gian_d
Linux 3.x
Linux 3.x
Messaggi: 654
Iscritto il: mer 16 lug 2014, 17:35
Nome Cognome: Giancarlo Dessì
Slackware: 64 current
Kernel: 6.6.xx
Desktop: KDE 5.27
Località: Sardinia
Contatta:

Re: Considerazioni su Slackware e alternative

Messaggio da gian_d »

Premetto che uso sempre il kernel huge e quindi non conosco i problemi che ci sono con il kernel generic e initrd, non mi sono mai piaciuti i tentativi di grub di configurare i boot andando a scandagliare nelle partizioni, quindi predispongo le impostazioni sui file di grub.d disattivando quelli che non mi interessano. Questo perché il grub di ogni distribuzione fa un po' a modo suo. Non è meglio procedere in questo modo?

rik70
Iper Master
Iper Master
Messaggi: 2489
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 15.0
Kernel: 5.15.x-generic
Desktop: Sway
Distribuzione: Arch Linux

Re: Considerazioni su Slackware e alternative

Messaggio da rik70 »

Sì, si potrebbe pensare anche a modificare

Codice: Seleziona tutto

/etc/grub.d/10_linux

Codice: Seleziona tutto

cat /etc/grub.d/10_linux >/etc/grub.d/11_linux
chmod -x -v /etc/grub.d/10_linux
chmod +x -v /etc/grub.d/11_linux
Questo il diff tra i 2:

Codice: Seleziona tutto

@@ -215,7 +215,7 @@
 	   "initrd-${version}" "initramfs-${version}.img" \
 	   "initrd.img-${alt_version}" "initrd-${alt_version}.img" \
 	   "initrd-${alt_version}" "initramfs-${alt_version}.img" \
-	   "initramfs-genkernel-${version}" \
+	   "initramfs-genkernel-${version}" "initramfs-generic-${version}" "initrd.img-generic-${version}" \
 	   "initramfs-genkernel-${alt_version}" \
 	   "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
 	   "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}" \

Codice: Seleziona tutto

/boot/vmlinuz-generic -> vmlinuz-generic-5.4.8
/boot/vmlinuz-generic-5.4.8
/boot/initrd.img-generic-5.4.8
/boot/vmlinuz-generic-5.4.8
grub-mkconfig

Codice: Seleziona tutto

Found linux image: /boot/vmlinuz-generic-5.4.8
Found initrd image: /boot/initrd.img-generic-5.4.8
Found linux image: /boot/vmlinuz-generic
Found initrd image: /boot/initrd.img-generic
Tuttavia occorre un secondo initrd per il link simbolico vmlinuz-generic e comunque non impedisce che venga associato l'initrd anche all'immagine "reale" del kernel huge.

Si potrà fare di meglio sicuramente, però poi uno si dovrebbe sbattere ad ogni release di grub a patchare e quant'altro.

Per me la soluzione auspicabile è una ridenominazione delle immagini dei kernel lato pacchetti. Perché diavolo devo aggiornare la configurazione del bootloader ogni volta che c'è un aggiornamento del kernel stock?

La soluzione 'pulita' poi non impedirebbe di lavorare con i propri kernel. Questa ad esempio è la mia situazione, volutamente "esoterica", in current con 3 kernel:

Codice: Seleziona tutto

ls /lib/modules/
5.4.0-rc5/  5.4.8/  5.5.0-rc4+/

grub-mkconfig -o [...]
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-linux-rc+
Found initrd image: /boot/initrd-rc+.img
Found linux image: /boot/vmlinuz-generic-5.4.8
Found initrd image: /boot/initrd.gz
Found linux image: /boot/vmlinuz-generic
Found initrd image: /boot/initrd.gz
Found linux image: /boot/vmlinuz-5.4.0-rc5
Found initrd image: /boot/initrd-5.4.0-rc5.img
Sullo huge poi non sono d'accordo. Io non lo vedo come un fallback, piuttosto come un kernel per il primo boot del sistema.

Sulla questione sistema smontato, quoto:
gian_d ha scritto:non mi sono mai piaciuti i tentativi di grub di configurare i boot andando a scandagliare nelle partizioni, quindi predispongo le impostazioni sui file di grub.d disattivando quelli che non mi interessano
Edit:
Usi

Codice: Seleziona tutto

/etc/grub.d/40_custom
per crearti la entry copiando dall'output di grub-mkconfig lanciato "liscio", cioè senza l'output su file, modificando quello che c'è da modificare.
Poi:

Codice: Seleziona tutto

chmod -x -v /etc/grub.d/30_os-prober 
Tra l'altro, se leggi la documentazione di grub, il comando grub-mkconfig andrebbe usato per generare una configurazione ad uso e consumo dell'utente, che poi dovrebbe utilizzare come base per gestire il proprio sistema.
L'idea di un qualcosa di "automatico" è stata introdotta dall'uso che ne è stato fatto da alcune distribuzioni - ometto volutamente nomi e cognomi.
Ultima modifica di rik70 il mar 7 gen 2020, 8:33, modificato 1 volta in totale.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3789
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Considerazioni su Slackware e alternative

Messaggio da joe »

Ma sì, in teoria credo che sia proprio quello il modo corretto di procedere, ovvero senza toccare il /boot/grub/grub.cfg.
Per capirci un po' meglio Gian, facciamo un esempio?
Nel mio caso ho SSD con due partizioni di sistema:
  • /dev/sda3 slackware-14.2 (sistema in uso al momento)
    con in /boot:

    Codice: Seleziona tutto

    # ls -1tl /boot/{vmlinuz*,initrd*z}
    -rw-r--r-- 1 root root 8414821 gen  6 20:32 /boot/initrd.gz
    lrwxrwxrwx 1 root root      20 nov  8 19:48 /boot/vmlinuz -> vmlinuz-huge-4.4.190
    lrwxrwxrwx 1 root root      20 nov  8 19:48 /boot/vmlinuz-huge -> vmlinuz-huge-4.4.190
    lrwxrwxrwx 1 root root      23 nov  8 19:47 /boot/vmlinuz-generic -> vmlinuz-generic-4.4.190
    -rw-r--r-- 1 root root 4450272 ago 26 22:59 /boot/vmlinuz-generic-4.4.190
    -rw-r--r-- 1 root root 7731168 ago 26 22:58 /boot/vmlinuz-huge-4.4.190
     
  • /dev/sda4 slackware-current (montata temporaneamente in /mnt/ssd)

    Codice: Seleziona tutto

    # ls -1tl /mnt/ssd/boot/{vmlinuz*,initrd*z}
    -rw-r--r-- 1 root root  8635986 gen  4 01:02 /mnt/ssd/boot/initrd.gz
    lrwxrwxrwx 1 root root       18 gen  2 13:28 /mnt/ssd/boot/vmlinuz-huge -> vmlinuz-huge-5.4.7
    lrwxrwxrwx 1 root root       18 gen  2 13:28 /mnt/ssd/boot/vmlinuz -> vmlinuz-huge-5.4.7
    lrwxrwxrwx 1 root root       21 gen  2 13:28 /mnt/ssd/boot/vmlinuz-generic -> vmlinuz-generic-5.4.7
    -rw-r--r-- 1 root root  6498688 dic 31 20:54 /mnt/ssd/boot/vmlinuz-generic-5.4.7
    -rw-r--r-- 1 root root 10013056 dic 31 20:52 /mnt/ssd/boot/vmlinuz-huge-5.4.7
    
Si vorrebbe ottenere una configurazione molto semplice che alla fine mostri solo 4 voci praticamente:

Codice: Seleziona tutto

Slackware 14.2 Stabile - Kernel 4.4.190 Generic

Slackware 14.2 Stabile - Kernel 4.4.190 Huge

Slackware 14.2+ Current - Kernel 5.4.7 Generic

Slackware 14.2+ Current - Kernel 5.4.7 Huge
Ora, chiedo per mia abissale ignoranza, come si potrebbero configurare i files di cui parlavi per indurre grub-mkconfig a creare un siffatto menù di avvio?
Ovviamente comprensivo di direttiva initrd per far partire anche coi kernel generic (cioè si tratta solo di far si che ci sia la riga "initrd /boot/initrd.gz" nella sezione relativa ai kernel generic, niente di ché...)

rik70
Iper Master
Iper Master
Messaggi: 2489
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 15.0
Kernel: 5.15.x-generic
Desktop: Sway
Distribuzione: Arch Linux

Re: Considerazioni su Slackware e alternative

Messaggio da rik70 »

joe ha scritto:Si vorrebbe ottenere una configurazione molto semplice che alla fine mostri solo 4 voci praticamente:
Devi per forza crearti un custom template in /etc/grub.d/ partendo dal grub.cfg ottenuto via grub-mkconfig con i template di default.

- Prima di tutto modifica '/etc/default/grub' e aggiungi

Codice: Seleziona tutto

GRUB_DISABLE_SUBMENU="y"
(in questo modo non crei i sotto menù sistemando così la faccenda dell'indentazione.
Se poi vuoi eliminare anche le voci "recovery mode", inserisci

Codice: Seleziona tutto

GRUB_DISABLE_RECOVERY="true"
- A questo punto generi il config con grub-mkconfig e ti salvi l'output da qualche parte. Se non sei sicuro di ciò che fai, allegalo qui.
La parte che interessa è quella che inizia dopo

Codice: Seleziona tutto

### END /etc/grub.d/00_header ###
- A seguire, utilizzi come base del tuo template '/etc/grub.d/40_custom'

Codice: Seleziona tutto

# esempio:

cat /etc/grub.d/40_custom > /etc/grub.d/39_custom 
e incolli dentro quello che ti serve dal file generato da grub-mkconfig.
Esempio:

Codice: Seleziona tutto

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

## /etc/grub.d/39_custom ##

menuentry 'Slackware-14.2+ GNU/Linux with Linux generic' --class slackware_14_2_ --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-generic-36d4156b-6f29-4e2a-8c12-3c54ad3b7c68' {
        load_video
        insmod gzio
        insmod part_gpt
        insmod ext2
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root  36d4156b-6f29-4e2a-8c12-3c54ad3b7c68
        else
          search --no-floppy --fs-uuid --set=root 36d4156b-6f29-4e2a-8c12-3c54ad3b7c68
        fi
        echo    'Loading Linux generic ...'
        linux   /boot/vmlinuz-generic root=UUID=36d4156b-6f29-4e2a-8c12-3c54ad3b7c68 ro  printk.time=0 quiet vt.default_utf8=1
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.gz
}

menuentry 'Slackware-14.2+ GNU/Linux, with Linux huge' --class slackware_14_2_ --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-huge-36d4156b-6f29-4e2a-8c12-3c54ad3b7c68' {
        load_video
        insmod gzio
        insmod part_gpt
        insmod ext2
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root  36d4156b-6f29-4e2a-8c12-3c54ad3b7c68
        else
          search --no-floppy --fs-uuid --set=root 36d4156b-6f29-4e2a-8c12-3c54ad3b7c68
        fi
        echo    'Loading Linux huge ...'
        linux   /boot/vmlinuz-huge root=UUID=36d4156b-6f29-4e2a-8c12-3c54ad3b7c68 ro printk.time=0 quiet vt.default_utf8=1
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.gz
}
## [ etc, etc.]
- Infine, concedi i permessi di esecuzione al tuo template e li togli a

Codice: Seleziona tutto

/etc/grub.d/10_linux
/etc/grub.d/30_os-prober
e rigeneri il grub.cfg "definitivo" con grub-mkconfig.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3789
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Considerazioni su Slackware e alternative

Messaggio da joe »

Alla fine ho fatto una prova un po' più "estrema". 8)
Fondamentalmente creando un 39_custom come hai suggerito tu e lasciando i permessi di esecuzione solo a 00_header e appunto a 39_custom.
Però...
Il "custom" che ho provato è di fatto uno script bash che contiene un template "hardcoded" via here document: questo non è statico però.
Lo script cerca di riempire il template con i nomi del kernel, del relativo disco/partizione, titolo dell'entry.
Cerca i kernel nella partizione in uso, ma anche quelli delle altre partizioni del disco o eventualmente anche su altri dischi.

Ovviamente è un accrocchio: limitato ad esempio a partizionamento GPT (si potrebbe fargli determinare anche quesl particolare e adattarlo dinamicamente ma non mi serviva...).
Altra limitazione è il nome del kernel. Cioè funziona solo se i kernel sono nominati tipo:

vmlinuz-$TIPO-$VERSIONE

$TIPO è huge o generic.

Inoltre $VERSIONE deve terminare con un numero, questo porta a malfunzionamento con le convenzioni di distribuzioni non slackware (come Arch e Debian che avevi ben descritto), ma avrebbe problemi anche con eventuali kernel ricompilati a mano cui si è appeso giustamente un TAG nel nome. Insomma alla fine qualcosa si può migliorare semplicemente, qualcos'altro meno facilmente.
Ad ogni modo per uso slackware multiboot sembra funzionare: genera un grub.cfg discretamente semplice a parte il primo pezzo "header" (che a qualcosa servirà quindi non l'ho toccato come hai consigliato), il menu di avvio presenta le 4 voci corrispondenti ai 4 kernel che ci sono: 2 per ogni sistema/partizione. Una roba molto essenziale come volevo.

Anche le initrd devono essere nominate in modo rigido:

initrd-$TIPO-$VERSIONE

E questo potrebbe essere un altro tallone d'achille ovviamente.

Per la ricerca dei sistemi non in uso e relativi kernel da avviare, nonché per il titolo da dare alle sezioni che vengono create, ho usato due tool che usa anche grub nello script "PROBE":
- os-prober
- linux-boot-prober

Per il nome del sistema montato ho pescato il "PRETTY_NAME" da /etc/os-release.
Ripeto è un accrocchio pesantemente migliorabile, ma tutto sommato in occasione di un aggiornamento di kernel ufficiali slackware dovrebbe funzionare, previa creazione di initrd nominata come indicato sopra. E inoltre mi è servito per dipanare più di un dubbio sulla configurazione di grub2.

Lo metto in allegato se avete voglia di darci un'occhiata:
39_custom.TXT
(1.72 KiB) Scaricato 114 volte

gian_d
Linux 3.x
Linux 3.x
Messaggi: 654
Iscritto il: mer 16 lug 2014, 17:35
Nome Cognome: Giancarlo Dessì
Slackware: 64 current
Kernel: 6.6.xx
Desktop: KDE 5.27
Località: Sardinia
Contatta:

Re: Considerazioni su Slackware e alternative

Messaggio da gian_d »

joe ha scritto:Alla fine ho fatto una prova un po' più "estrema". 8)
Fondamentalmente creando un 39_custom come hai suggerito tu e lasciando i permessi di esecuzione solo a 00_header e appunto a 39_custom.
Però...
Il "custom" che ho provato è di fatto uno script bash che contiene un template "hardcoded" via here document: questo non è statico però.
Lo script cerca di riempire il template con i nomi del kernel, del relativo disco/partizione, titolo dell'entry.
Da quello che ho capito hai lasciato i permessi a 30_os-prober oppure ne hai integrato gli "automatismi" perciò ti inserisce le impostazioni ai vari kernel trovati andando per tentativi. Secondo me dovresti evitare questo se vuoi una soluzione interamente personalizzata e che non ti metta su grub.cfg delle voci taroccate. Mi capitava quando usavo il grub di ubuntu: trovava la partizione con la slackware e inseriva, in grub.cfg, 5 o 6 voci diverse per il boot di slackware!

@risk: lo so, in teoria dovrei optare per il generic, ma per non rompermi troppo le scatole con il boot ho sempre optato per l'huge. Peraltro non sono certo di aver capito la differenza tra i due kernel e non avendo voglia di documentarmi in proposito ho optato per la soluzione più sbrigativa. Probabilmente perdo in snellezza del sistema, ma alla fine chi se ne frega... :-D

Per ora rispondo solo a questo perché tra un po' devo scappare al lavoro, devo leggermi tutto con calma questo pomeriggio.

rik70
Iper Master
Iper Master
Messaggi: 2489
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 15.0
Kernel: 5.15.x-generic
Desktop: Sway
Distribuzione: Arch Linux

Re: Considerazioni su Slackware e alternative

Messaggio da rik70 »

joe ha scritto:[...]
Della serie: quando il gioco si fa duro.... 8)

In effetti, la mia idea di un custom template che di fatto genera un config "statico", forza un po il modo con cui in realtà bisognerebbe fare le cose.

Nelle intenzioni degli sviluppatori, la generazione del config di grub dovrebbe "prendere" sia da /etc/default/grub che da ciò che trova eseguibile in /etc/grub.d/. Quel 40_custom preso come riferimento dovrebbe servire "ad aggiungere" nuove voci alla lista - ad es. per i propri kernel - e non a generare un config completo come ho fatto io.

Partendo da questa considerazione, e viste le peculiarità dei pacchetti kernel di Slackware, continua a ronzarmi in testa l'idea che sia meglio seguire i link simbolici piuttosto che le immagini reali dei kernel.

Proviamo dunque a incasinare le cose:

Codice: Seleziona tutto

cat /etc/grub.d/10_linux > /etc/grub.d/11_linux
chmod -x -v /etc/grub.d/10_linux
chmod +x -v /etc/grub.d/11_linux
Il diff tra i 2:

Codice: Seleziona tutto

@@ -165,12 +165,16 @@
     xi?86 | xx86_64)
 	list=
 	for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do
-	    if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
+	    if [ -h "$i" ]; then
+              if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
+            fi
 	done ;;
     *) 
 	list=
 	for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do
-                  if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
+                  if [ -h "$i" ]; then
+                    if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
+                  fi
 	done ;;
 esac
L'initrd a questo punto dovrà puntare al solo 'vmlinux-generic'. Quindi in /boot avrò:

Codice: Seleziona tutto

initrd.img-generic
grub-mkconfig:

Codice: Seleziona tutto

Found linux image: /boot/vmlinuz-huge
Found linux image: /boot/vmlinuz-generic
Found initrd image: /boot/initrd.img-generic
Se per ipotesi anche il kernel-huge avesse bisogno di un suo initrd per il boot - vedi Slack in qemu+kvm con dischi virtio' - basterebbe generarne un altro con questo nome:

Codice: Seleziona tutto

initrd.img-huge
Anche in questo caso grub-mkconfig fa il suo dovere:

Codice: Seleziona tutto

Found linux image: /boot/vmlinuz-huge
Found initrd image: /boot/initrd.img-huge
Found linux image: /boot/vmlinuz-generic
Found initrd image: /boot/initrd.img-generic
Se poi, l'initrd dovesse essere identico per entrambi i tipi di kernel, basterebbe un solo

Codice: Seleziona tutto

initrd.gz
A questo punto, i nostri kernel custom andrebbero in un template apposito che riprodurrebbe, con le opportune modifiche, le voci del menu grub generato in precedenza. Nel mio caso, ad esempio:

Codice: Seleziona tutto

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

# /etc/grub.d/29_custom

menuentry 'Slackware-14.2+ GNU/Linux with Linux rc+' --class slackware_14_2_ --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-rc+-advanced-36d4156b-6f29-4e2a-8c12-3c54ad3b7c68' {
	load_video
	insmod gzio
	insmod part_gpt
	insmod ext2
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root  36d4156b-6f29-4e2a-8c12-3c54ad3b7c68
	else
	  search --no-floppy --fs-uuid --set=root 36d4156b-6f29-4e2a-8c12-3c54ad3b7c68
	fi
	echo	'Loading Linux rc+ ...'
	linux	/boot/vmlinuz-linux-rc+ root=UUID=36d4156b-6f29-4e2a-8c12-3c54ad3b7c68 ro  printk.time=0 quiet vt.default_utf8=1
	echo	'Loading initial ramdisk ...'
	initrd	/boot/initrd-rc+.img
}
EDIT Oppure, potremmo gestire anche le immagini dei nostri kernel ricorrendo a link simbolici - e quanto riportato sopra non sarebbe necessario.

Si potrebbe pensare di fare anche l'esatto contrario, ovvero escludere i link simbolici - è sufficiente invertire la condizione dell' 'if statement' aggiunto nel codice sopra - ma si otterrebbero 2 voci del menu grub identiche che puntano a 2 kernel diversi - lo huge e il generic - con un initrd caricato sempre e comunque anche per il kernel huge.

In conclusione, attraverso queste modifiche si otterrebbero i seguenti risultati:
- un menu grub coerente con la distribuzione in uso e che richiama un po l'approccio Lilo;
- in caso di aggiornamento dei kernel - sia della distribuzione che i propri - è sufficiente aggiornare gli initramfs e non anche il grub.cfg.

Restano aperte altre questioni - come l'os-prober - ma lo lascio alla vostra fantasia.
Ultima modifica di rik70 il gio 9 gen 2020, 6:15, modificato 2 volte in totale.

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Considerazioni su Slackware e alternative

Messaggio da conraid »

@joe

non ho più letto, comunque io ho attivo solo 10_ e tolgo il link simbolico vmlinuz, alla fine ho solo le voci dei due kernel, a volte anche di quel che compilo io.
Gli initrd come detto uso il nome initrd-5.4.7.gz e l'unico incoveniente è anche huge me lo prende, a cui servirebbe un po' diverso, cioè senza moduli e con solo intel-ucode, ma tanto huge lo uso solo quando qualcosa non va.


/etc/default/grub è così

Codice: Seleziona tutto

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="video=SVIDEO-1:d ipv6.disable=1"
GRUB_CMDLINE_LINUX="vt.default_uf8=1 raid=noautodetect"

GRUB_DISABLE_LINUX_RECOVERY="true"
GRUB_DISABLE_RECOVERY="true"
GRUB_DISABLE_SUBMENU="true"
Ecco, una cosa che non mi ha mai funzionato è l'ordine di boot, qualsiasi cosa scriva me lo mette poi in ordine alfabetico. Ma avendo "saved" mi ricorda l'ultima scelta e quindi ok.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3789
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Considerazioni su Slackware e alternative

Messaggio da joe »

@rik70
Ciao, in questo modo, cioè sfruttando i link simbolici, sbaglio o all'avvio nel menù non vedi la versione del kernel?
E il sistema che sta su partizione diversa da quella in uso? Te lo aggiunge?

@conraid
Ma hai multiboot?
Perché in caso contrario non ti dovrebbe scovare né il kernel, né la initrd che risiedono su partizione diversa da quella del sistema in uso. O sbaglio?

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Considerazioni su Slackware e alternative

Messaggio da conraid »

@conraid
Ma hai multiboot?
Perché in caso contrario non ti dovrebbe scovare né il kernel, né la initrd che risiedono su partizione diversa da quella del sistema in uso. O sbaglio?
No, ho solo un sistema avviabile. Altri li uso in chroot, con lxc o con qemu per compilare i pacchetti.

Infatti non è che gli altri file siano inutili, ma al mio scopo sì, e mi creavano troppe voci nel kernel.
Slackware, come già segnalato sopra da altri, ha il problema del nome, e ti mostra in alcune voci nome kernel e versione senza capire se sia huge o kernel. Fino a quando usavo solo i miei kernel, con huge per le emergenze, ok, andava tutto bene. Quando ho ripreso a usare anche il generic (ora uso principalmente questo che perdo meno tempo e mi funzionano le cose che voglio) si era creato quel problema. Quindi alla fine uso la voce creata dal link simbolico. Cosa non ottimale, ma per ora va bene così.

rik70
Iper Master
Iper Master
Messaggi: 2489
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 15.0
Kernel: 5.15.x-generic
Desktop: Sway
Distribuzione: Arch Linux

Re: Considerazioni su Slackware e alternative

Messaggio da rik70 »

joe ha scritto:Ciao, in questo modo, cioè sfruttando i link simbolici, sbaglio o all'avvio nel menù non vedi la versione del kernel?
Esatto. Ma per me è irrilevante, visto che non sono io a gestire la versione dei kernel stock.
joe ha scritto:E il sistema che sta su partizione diversa da quella in uso? Te lo aggiunge?
Quello dipende da

Codice: Seleziona tutto

/etc/grub.d/30_os-prober
e lì che devi "customizzare" o usare un template statico.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3789
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Considerazioni su Slackware e alternative

Messaggio da joe »

Volevo provare a far girare il 10_linux con le opzioni indicate da Corrado, per vedere se intanto si sfoltiva un po' la fazenda. Però, a me non funziona mai niente alla prima! #-o

Codice: Seleziona tutto

# grep -v "^#\|^$" /etc/default/grub
GRUB_DEFAULT=saved
GRUB_SAVED_DEFAULT=true
GRUB_HIDDEN_TIMEOUT_QUIET=false
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=$( sed 's/Slackware /Slackware-/' /etc/slackware-version )
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""
GRUB_GFXMODE=1024x768x32
GRUB_DISABLE_RECOVERY="true"
GRUB_DISABLE_SUBMENU="true"

Codice: Seleziona tutto

# ls -l /etc/grub.d/*
-rwxr-xr-x 1 root root  7552 giu 13  2016 /etc/grub.d/00_header*
-rwxr-xr-x 1 root root  9263 giu 13  2016 /etc/grub.d/10_linux*
-rw-r--r-- 1 root root 10054 giu 13  2016 /etc/grub.d/20_linux_xen
-rw-r--r-- 1 root root  9348 giu 13  2016 /etc/grub.d/30_os-prober
-rw-r--r-- 1 root root  1766 gen  8 00:05 /etc/grub.d/39_custom
-rw-r--r-- 1 root root   214 set 20  2016 /etc/grub.d/40_custom
-rw-r--r-- 1 root root   216 giu 13  2016 /etc/grub.d/41_custom
-rw-r--r-- 1 root root   483 giu 13  2016 /etc/grub.d/README
Tant'è dopo aver lanciato il solito:

Codice: Seleziona tutto

grub-mkconfig -o /boot/grub/grub.cfg
Ecco come appare il risultato:

Codice: Seleziona tutto

# grep -i "menuentry\|submenu" /boot/grub/grub.cfg
if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option
menuentry 'Slackware-14.2 GNU/Linux' --class slackware-14.2 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-3aaab5fc-325d-4fd7-8acb-f644d1dd3b9a' {
submenu 'Opzioni avanzate per Slackware-14.2 GNU/Linux' $menuentry_id_option 'gnulinux-advanced-3aaab5fc-325d-4fd7-8acb-f644d1dd3b9a' {
        menuentry 'Slackware-14.2 GNU/Linux, con Linux 4.4.190' --class slackware-14.2 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.190-advanced-3aaab5fc-325d-4fd7-8acb-f644d1dd3b9a' {
        menuentry 'Slackware-14.2 GNU/Linux, con Linux huge' --class slackware-14.2 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-huge-advanced-3aaab5fc-325d-4fd7-8acb-f644d1dd3b9a' {
        menuentry 'Slackware-14.2 GNU/Linux, con Linux 4.4.190' --class slackware-14.2 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.190-advanced-3aaab5fc-325d-4fd7-8acb-f644d1dd3b9a' {
        menuentry 'Slackware-14.2 GNU/Linux, con Linux generic' --class slackware-14.2 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-generic-advanced-3aaab5fc-325d-4fd7-8acb-f644d1dd3b9a' {
In pratica i "submenu" ci sono ancora, neanche una piega... E ho anche provato a rimuovere il grub.cfg prima, che non si sa mai...

Rispondi