# Recuperando uma instalação do Arch Linux
Nota: essa é a segunda vez que estou tendo que escrever isso, pois na primeira, por algum motivo muito específico, o Fatdog não escreveu o arquivo no meu disco; então talvez eu esteja um pouco menos animado para escrever e explicar isso.
Não sei você, mas comigo o meu sistema sempre quebra em algum momento, seja
sozinho — como no caso do Arch — seja por algo que eu faça de errado —
como já foi no Slackware há uns meses atrás.
Recentemente — na real anteontem — minha instalação do Arch Linux
simplesmente quebrou depois de uma atualização. Eu atualizei depois que o
Firefox simplesmente tinha parado de reproduzir vídeo e áudio; a atualização
em si correu normal.
Nessas horas apenas duas coisas vêm à cabeça: “Como eu queria ter uma máquina
decente para rodar NixOS” e “F*deu”
Dentre essas duas, a que ecoou mais alto foi a segunda, afinal o sistema quebrou
apenas há menos de duas semanas antes que eu pudesse finalizar meu trabalho de
física que, como estou fazendo utilizando um programa praticamente exclusivo para
Linux (e que estou sem saco de tentar fazer funcionar no Windows), eu precisaria
do meu sistema funcional o mais rápido o possível.
A causa para esse erro, possivelmente, é porque o pacman
não atualiza o LiLo
automaticamente, logo quando você vai bootar ele sempre redireciona para a
imagem antiga do kernel, o que fica num loop infernal do LiLo tentando
carregar o kernel e voltando para a BIOS.
Como isso já tinha acontecido comigo antes, há umas semanas atrás, eu sei o que
fazer.
Para reparar, estarei utilizando um CD com Fatdog Linux 64-bits apenas, pois ele
contém os drivers para minha placa de rede wireless, que será essencial para
conseguir reparar o sistema (afinal, vou reinstalar os pacotes do kernel).
Primeiramente, caso você não tenha a imagem de disco do Fatdog, vá no seu site
hospedado em https://distro.ibiblio.org/fatdog/web/ e faça o download da ISO,
isso vai requerer conhecimento mínimo em inglês para que você entenda as
instruções iniciais de download.
Após isso, apenas grave a imagem em um CD ou em uma pendrive, não estarei
falando sobre essa parte aqui pois não é o objetivo principal desse texto.
Normalmente eu bootaria no modo sem o servidor gráfico X habilitado (na tela de
boot, ele é chamado "Fatdog64 without graphical desktop"
), mas para fins de
demonstração gráfica eu subirei o X para que eu possa anexar as screenshots
neste artigo; demora um pouco mais que o normal, mas nada que seja doloroso de
esperar.
Após subir o X no Fatdog, caso você tenha o feito, a interface que irá
subir será o jwm; não é de muita importância falar sobre isso aqui — a
interface é análoga ao Windows 2000 e só precisamos abrir o terminal
mesmo, que tem um ícone próprio na barra de tarefas.
O terminal vai abrir já logado no usuário root (assim como toda a sessão do Fatdog em si), então não teremos a preocupação de procurar pela senha na documentação.
Montando os discos
A primeira coisa que vamos fazer de fato aqui é montar as partições
necessárias, vamos precisar apenas da partição de root do sistema (/
)
e da partição de boot (/boot
).
Primeiramente, liste todas suas partições usando o fdisk -l
:
Nota: O Fatdog tem várias partições /dev/ram
que acabam por
aparecer no fdisk
, mas podemos ignorá-las para o que estamos fazendo
aqui.
# fdisk -l
Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0xa2109934
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 411647 409600 200M 83 Linux
/dev/sda2 411648 234786815 234375168 111.8G 83 Linux
/dev/sda3 234786816 910626815 675840000 322.3G 83 Linux
/dev/sda4 910626816 976771071 66144256 31.6G 7 HPFS/NTFS/exFAT
Disk /dev/sdc: 298.1 GiB, 320072933376 bytes, 625142448 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: dos
Disk identifier: 0xdf7fdf7f
Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 625139711 625137664 298.1G 7 HPFS/NTFS/exFAT
Eu localizei minhas partições de boot e root, que são /dev/sda1
e
/dev/sda2
, respectivamente. Só irei montá-las normalmente com o
mount
em /mnt
:
# mount /dev/sda2 /mnt # disco root (/)
# mount /dev/sda1 /mnt/boot # disco boot ( /boot)
Também precisamos espelhar os sistemas de arquivos virtuais /sys
,
/proc
e /dev
, usando o mount
com a opção rbind (-R
).
Isso porque sem eles montados no chroot, o LiLo não consegue ler a lista
de partições legíveis (ou não) criadas pelo kernel a tempo de execução
no /proc
e o pacman
não consegue operar sem o /sys
e o /proc
montados.
# mount -R /proc /mnt/proc # espelhando o /proc no chroot
# mount -R /sys /mnt/sys # espelhando o /sys no chroot
# mount -R /dev /mnt/dev # espelhando o /dev/ no chroot
Conectando à Internet
Para que a gente consiga reinstalar os pacotes pelo pacman, nós iremos precisar de conexão com a internet. Se você usa cabo de rede, pode pular todos esses passos.
Por padrão, no Fatdog, a placa de rede está sempre “baixa”, para subi-la
usaremos o comando ip
, que ficaria assim:
# ip a # listando as interfaces
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 00:23:5a:62:08:66 brd ff:ff:ff:ff:ff:ff
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 78:e4:00:49:b5:93 brd ff:ff:ff:ff:ff:ff
# ip link set wlan0 up
Feito isso, agora só precisamos conectar o Fatdog na internet usando o
wpa_supplicant
. É necessário que você saiba o identificador (nome
bonito para o literal nome da rede) e a senha. Estarei usando um
redirecionamento em Shell script que nos poupa de criar um arquivo só
com essas informações:
# wpa_supplicant -Dnl80211 -iwlan0 -c<(wpa_passphrase 'nome da sua rede' senha4lph4numeric4)
Feita a conexão básica ao roteador, nós precisamos subir a daemon DHCP.
É ela que determina o IP que sua máquina terá na rede e, sem ela, você não vai
conseguir conectar à outras máquinas na rede.
Como possivelmente seu terminal estará com o log do wpa_supplicant
na tela, você precisará abrir um novo. Abra-o e digite dhcpcd
:
# dhcpcd
dev: loaded udev
eth0: adding address fe80::d13:9adf:d62a:433e
DUID 00:01:00:01:29:0c:1d:cb:78:e4:00:49:b5:93
wlan0: IAID 00:49:b5:93
eth0: waiting for carrier
wlan0: rebinding lease of 192.168.100.80
wlan0: leased 192.168.100.80 for 86400 seconds
wlan0: changing route to 192.168.100.0/24
wlan0: changing default route via 192.168.100.1
forked to background, child pid 4929
E, por último, mas extremamente importante, copie o arquivo /etc/resolv.conf
para o nosso chroot. Sem esse arquivo no nosso chroot, ele estará sem um
IP válido (que, deve ser compartilhado tanto entre o Fatdog quanto entre
o chroot):
# cp -v /etc/resolv.conf /mnt/etc/resolv.conf
‘/etc/resolv.conf’ -> ‘/mnt/etc/resolv.conf’
Pronto, agora estamos conectados.
Entrando no chroot e consertando o sistema
Entre normalmente no chroot.
É mais um capricho meu, mas eu sempre mudo o meu $PS1
quando uso
chroot, no caso sempre coloco o nome da minha máquina (no caso, G450)
seguido de um sinal de porcentagem, um ponto-e-vírgula e um espaço, para
lembrar que estou num chroot e não no Fatdog. Isso é feito de tal forma:
PS1='G450%; '
Após configurarmos, opcionalmente, nosso $PS1
, apenas rodamos o
seguinte comando do pacman
:
# pacman -Syyyu linux linux-firmware
Ele irá reinstalar o kernel por completo; caso você, assim como eu, use
o kernel LTS, só adicione -lts
após o nome.
G450%; pacman -Syyyu linux-lts linux-firmware
:: Synchronizing package databases...
core
extra
community
warning: linux-lts-5.10.75-1 is up to date -- reinstalling
warning: linux-firmware-20210919.d526e04-1 is up to date -- reinstalling
:: Starting full system upgrade...
resolving dependencies...
looking for conflicting packages...
Packages (3) yt-dlp-2021.10.22-3 linux-firmware-20210919.d526e04-1
linux-lts-5.10.75-1
Total Download Size: 2.69 MiB
Total Installed Size: 810.94 MiB
Net Upgrade Size: 13.51 MiB
:: Proceed with installation? [Y/n] Y
Dependendo da velocidade da sua rede (e do seu processador, para descompactar os pacotes), talvez demore um pouco. Recomendo que levante um pouco da cadeira e prepare um café ou sirva um copo d’água, olhe o céu e talvez até tire uma foto.
Depois que o kernel for (re-)instalado, apenas rode o binário do LiLo usando o caminho completo, para que ele possa gerar novamente o seu arquivo de configuração e carregar a imagem nova do kernel ao invés da antiga agora inexistente:
G450%; /sbin/lilo
Added arch + *
Added arch-fallback +
Added windows
Feito, finalmente.
Agora podemos sair do chroot e reiniciar. Cruzem os dedos para que
boote.
No meu caso, bootou com sucesso (estou finalizando esse artigo por meio
do Vim). Missão cumprida!
Esse artigo pode ser moldado ao seu problema, afinal grande parte dele é
dedicada ao chroot em si.
Boa sorte!