Resetar completamente o Grub de uma distro Arch-based

Ok, gente, eu sei que tem alguns tópicos parecidos, mas como meu problema aqui é um tanto complexo, preferi abrir um novo…

Bom, eu tenho duas distros Linux instaladas (Manjaro, em ext4 e Garuda, em btrfs - primeiro complicador, btrfs é enjoado). Instalei um kernel à parte, o Xanmod, e funcionou direitinho, abri pelo grub do Manjaro e foi tudo bem. Um detalhe: o Manjaro é conhecido por ter problemas em bootar pelo grub de outras distros, e é recomendado usar o grub do próprio Manjaro. Contudo, neste caso, o grub do Garuda lidou bem com o Manjaro, isso até agora…

Como é o Garuda que gerencia os boots, lá fui eu pra ele atualizar o grub pra incluir o novo kernel. Preguiçoso como sou (ou prático), abri o grub-customizer. O os-prober fez o trabalho dele, achou tudo e pediu pra salvar o novo grub. Aí veio o erro, um erro de sintaxe numa linha lá no final do grub:

Abrindo com o nano, vejo a primeira coisa estranha: o grub não tem 363 linhas, só 354. Mas ok, abri com o mesmo nano o arquivo grub.cfg.new e mandei ele achar a linha 363. Eis o que é, parece um erro de if… then onde não haveria a variável

image

O que li por aí se resume em duas coisas: NÃO USE GRUB CUSTOMIZER em distros com btrfs e rollback; e recomendou-se, simplesmente, reinstalar o sistema, pq depois de instalado o grub customizer, desfazer o que ele faz é bem difícil.

O que eu pensei de possível solução - destruir os arquivos de grub, desinstalar o grub-customizer e refazê-los do zero. Para tanto, preciso rodar por um live USB e fazer via chroot? Ou consigo pelo próprio sistema carregado?

Fica a dúvida minha e o desafio aos amigos e amigas do fórum…

Ajuda, @chimpa_theist, @RuKsu, @swatquest, @Capezotte?

1 curtida

Fico feliz por me incluir nesta investigação :smile: é uma satisfação para mim.

Estou fazendo pesquisas sobre, vamos tentar resolver e encerrar este caso com sucesso.

3 curtidas

Quais outras entradas esse /etc/grub.d/61_custom define ?
Ele é muito grande ?

3 curtidas

Pera, teria que abrir aqui… mas o grub do Garuda tem entradas a dar com pau… Garuda com 2 entradas (com e sem initfrm) e 7 snapshots, Manjaro com 3 kernels e opções para cada um deles e o Windows Boot Loader… na imagem dá pra ver algo…
Mas deixa tentar abrir aqui com o nano e jogo no pastebin
EDIT: nem é tão grande, lá vai

O grub antigo:

E o novo:

Como eu disse, ele tem a “má” influência do grub-customizer… temos de nos livrar disso

Chile.

Dá pra ver a besteira que ele fez.

O antigo mostra que esse if é para o último menuentry.

Acho que é só corrigir isso aí.

Pode até mover esse 61_custom para outro lugar (por via das dúvidas) e colocar esse antigo aí no diretório.

2 curtidas

Tá… explica com muita calma cada passo… o que fazer primeiro?
Neste momento estou no Manjaro… fico nele pra mexer nos arquivos do Garuda, certo?

1 curtida

O 61_custom tem que ficar assim

#!/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 "Shutdown" --class shutdown {
    	echo "System shutting down..."
    	halt
    }
     
    menuentry "Restart" --class restart {
    	echo "System rebooting..."
    	reboot
    }
     
    if [ ${grub_platform} == "efi" ]; then
    	menuentry "Firmware Setup (UEFI)" --class recovery {
    		fwsetup
    	}
    fi
1 curtida

Eu esqueci o exec tail. Dá uma olhada de novo

1 curtida

Pelo que entendi, basta jogar o if… then pro final do arquivo?

1 curtida

Exatamente

1 curtida

E deixar aquele “menuentry” depois do then.

1 curtida

Ficaria assim?

Yeah, estou aqui acompanhando vocês :relaxed:mas, lendo os 2 códigos, o novo ficou sem o “final” incompleto. Daí deu erro de sintaxe.

1 curtida

vc quer dizer o grub.cfg e o grub.cfg.new?

yep, mas pode ter mais coisas ae, pois como são váriaveis e tals, se bagunça aqui lá frente bagunça também. Tipo aplicar um chmod 777 na raiz depois de várias coisas instaladas e atualizadas. Mas estou acompanhando vocês aqui.

2 curtidas

Não.

o final ficaria assim

   if [ ${grub_platform} == "efi" ]; then
    	menuentry "Firmware Setup (UEFI)" --class recovery {
    		fwsetup
    	}
    fi

Digo, o arquivo tem 3 menuentry

Um é o “Shutdown”, outro é o “Restart” e o último é o “Firmware Setup (UEFI)”

Tá conseguindo identificar isso ???

Pois então.

o menuentry do “Firmware Setup (UEFI)” fica entre as linhas

if .... ; then

fi
2 curtidas

Assim?

1 curtida

No teu caso, a linha 20 vai pra linha 16

1 curtida

É isso aí.

1 curtida