Newsgroup: it.comp.os.linux.iniziare
Titolo: Re: Manjaro dualboot

 
 
 
https://tinyurl.com/qay3nr8
 
 
 
A) stai blaterando di arch o manjaro?  (no!,non e' la stessa cosa!)
 
B) non e' colpa di arch ne di manjaro se tu non sei in grado di gestirle 
(evidentemente)
 
C) se non erro hai posto lo stesso problema pochi giorni fa'...
 
D) fanculo *buntu,ma solo perche' non ho mai avuto voglia di imparare ad 
usarla...


 
e cmq sono mesi che ci smeni 'sta stronzata: se sei così pigro
da non risolverla, è giusto che tu stia lontano da Manjaro.

)

 problema del c...o
 
stai facendo del casino tu. se installi due distro e a tutte e due dici 
di installare il suo grub, entrambe penseranno di gestirlo. quindi ad 
ogni aggiornamento riconfigurano il boot a proprio piacimento con il 
rischio di rompere gli altri. in quel caso non riconosce il fs di root 
della manjaro, che fs usi?
 
io torno a ripetere, avere diverse distro linux in multi-boot è cercarsi 
inutili  complicazioni. 


Ma se il problema è quello basta lavorare sul “grub master”, tipicamente
quello del primo sistema che si aveva installato, ma non è detto.
 
Sul mio ho fatto così:
 
 
$ cat /etc/grub.d/42_slackware
-------------------------------
#!/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.
menuentry 'Slackware 14.2+ Current | Kernel Generic' {
        savedefault
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt4'
        echo    'caricamento linux vmlinuz-generic...'
        linux   /boot/vmlinuz-generic root=/dev/sda4 ro
        initrd  /boot/initrd-generic.img
}
menuentry 'Slackware 14.2+ Current | Kernel Huge' {
        savedefault
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt4'
        echo    'caricamento linux vmlinuz-huge...'
        linux   /boot/vmlinuz-huge root=/dev/sda4 ro
        initrd  /boot/initrd-generic.img
}
menuentry 'Slackware 14.2 Stable | Kernel Generic' {
        savedefault
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt3'
        echo    'caricamento linux vmlinuz-generic...'
        linux   /boot/vmlinuz-generic root=/dev/sda3 ro
        initrd  /boot/initrd-generic.img
}
menuentry 'Slackware 14.2 Stable | Kernel Huge' {
        savedefault
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt3'
        echo    'caricamento linux vmlinuz-huge...'
        linux   /boot/vmlinuz-huge root=/dev/sda3 ro
        initrd  /boot/initrd-generic.img
}
----------------------------------------
 
Quando poi lancio grub-mkconfig, o chi per esso tipo updategrub, insomma
il comando per aggiornare il /boot/grub/grub.cfg ecco che si sistema tutto.
Il kernel panic lo avevo ottenuto anche io coi kernel "generic" che non
hanno il filesystem compilato statico ma come modulo. In quel caso bisogna
creare la "initrd" e richiamarla come si vede sopra nella configurazione di
grub.
Quando si lancia upgrade-grub lui fa girare gli scripts che trova in:
 
/etc/grub.d/
 
Solo quelli coi permessi di esecuzione.
Quindi con
 
chmod +x
 
oppure
 
chmod -x
 
Si può stabilire quali script saranno eseguiti e quindi come di conseguenza
sarà scritto il vero file di configurazione /boot/grub/grub.cfg.
Ora spesso, anche su slackware gli script presenti sono tutti precotti e di default
eseguibili. E fanno cose...
Diciamo che cercano di creare un grub.cfg in modo automagico, bene ottimo
proposito. Ma spesso toppano, perché la ricerca della initrd si basa anche
sul nome del kernel e se non lo nomini così non la trova e ottieni kernel panic
ecc ecc.
 
Per non sbagliare io ho tolto i permessi d'esecuzione a tutti gli script.
Poi ho scopiazzato quello che trovate lì sopra, mettendoci i nomi giusti
dei kernel, e delle initrd. In questo modo si ha il pieno controllo senza
automatismi (tanto si fa una volta sola o al massimo si rivede quando si
aggiorna il kernel, nel mio caso neanche perché il kernel e le initrd
in realtà sono link simbolici che restano invariati, quindi quando aggiorno
il kernel mi basta ricreare gli stessi link e grub non lo tocco proprio).
 
Se non sono autoesplicativi chiedete pure e se so rispondere, non mancherò.
 
Infine ho ridato i permessi d'esecuzione a due scripts soli:
-----------------
-rwxr-xr-x 1 root  7552 gen  7 00:04 00_header
-rwxr-xr-x 1 root  1636 gen  9 15:13 42_slackware
-----------------
 
Il primo è il suo di default e serve per forza ma non fa nulla di concreto
in termini di cercare i kernel ecc...
Il secondo è ovviamente quello che ho riportato sopra scritto a mano con
cognizione di causa.
 
Tenete conto che nel mio caso ho partizionato il disco in GPT.
 
# fdisk -l /dev/sda
Disk /dev/sda: 232,9 GiB, 250059350016 bytes, 488397168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A176F3CE-5FBF-4682-BD67-F68331CE7D3
 
Dispositivo     Start      Fine   Settori   Size Tipo
/dev/sda1        2048      4095      2048     1M BIOS boot
/dev/sda2        4096    413695    409600   200M EFI System
/dev/sda3      413696 210128895 209715200   100G Linux filesystem
/dev/sda4   210128896 480112639 269983744 128,8G Linux filesystem
/dev/sda5   480112640 488397134   8284495     4G Linux swap
 
La prima partizione è necessaria proprio per grub, quando lo si installa
con grub install o similari comandi, si va a sistemare lì.
 
hd0,gpt3 corrisponde a /dev/sda3 (a --> 0 , 3 ---> 3) cioè nel set root
il primo disco "sda" lo cnta come "hd0" (non hd1) mentre il numero della
partizione inizia a contarlo da 1, nel mio caso Slackware Stabile sta sulla
partizione 3 quindi gpt3, perché è partizionato in GPT. Occhio ai moduli
attivati insmod part_gpt e insmod ext2.
 
 
La initrd per crearla ho usato questo script:
 
mkinitrd_command_generator.sh
 
Che in pratica ti dice quale comando devi usare per creare una initrd corretta,
solo che si basa su "uname -r" per determinare il nome del kernel.
In quel modo in pratica si basa su quello correntemente in uso. Occhio però
che se voi state creando tipo la initrd per manjaro e state lavorando da arch,
non funge perchè vi crea la initrd relativa al kernel che sta girando ovvero
quello di arch, e quindi poi se tentate di avviare manjaro salta fuori il panic.
 
La soluzione in questo caso (cioè creo la init di X lavorando da Y) è aggungere
all'output del comando sopra il flag "-k $VERSIONE_KERNEL":
 
mkinitrd -c -k 5.4.8 -m ext4 -o /boot/initrd.gz
 
La versione del kernel la trovate sotto /lib/modules/
Tipo se sono su arch e voglio vedere la versione del kernel di manjaro:
 
mount /dev/sda$MANJARO /mnt/tmp
 
ls /mnt/tmp/lib/modules
 
col flag "-o initrd.gz" potete specificare il nome che avrà la nostra immagine
initramdisk. E quel nome a meno di link simbolici come nel mio caso potrà essere
usato nel file di configurazione di grub alla voce initrd.
Però il giochino del link simbolico ve lo consiglio perchè così poi non toccate
più grub all'aggiornamento del kernel.
 
Esempio:
 
cd /mnt/tmp/boot
mkinitrd -c -k 5.4.8 -m ext4 -o initrd-5.4.8.img
ln -s initrd-5.4.8.img initrd.img
 
Poi ovviamente nello script di grub ci metterete:
 
initrd  /boot/initrd.img
 
Quando si aggiorna il kernel alla versione tipo 5.5.11, si dovrà
ricreare la initrd e il collegamento simbolico:
 
mkinitrd -c -k 5.5.11 -m ext4 -o initrd-5.5.11.img
rm initrd.img
ln -s initrd-5.5.11.img initrd.img
 
E si avvierà senza problemi senza aver ritoccato lo script di grub, nè
tantomeno aggiornato con update-grub. Il grub.cfg resta sempre uguale.
 
Scritto fin troppo chiudo qui!  :)