Recuperando inicialização do Slackware após atualização do kernel via slackpkg

Publicado por Luís Fernando C. Cavalheiro em 21/09/2014

[ Hits: 6.968 ]

Blog: https://github.com/lcavalheiro/

 


Recuperando inicialização do Slackware após atualização do kernel via slackpkg



Respeitável público do Viva o Linux, aqui começa mais uma Dica do Dino®, trazendo entretenimento para toda a família!

Hoje, nós vamos aprender a corrigir um erro razoavelmente irritante que pode acontecer ao atualizar o kernel do seu verdadeiro GNU/Linux via slackpkg.

Já vi isso acontecendo duas vezes e nas duas, a solução demandou um pouco de trabalho manual para resolver. Para tanto, você precisa apenas de um disco de inicialização do verdadeiro GNU/Linux.

Cenário do problema

Após atualizar pacotes que possuam novos arquivos de configuração, o slackpkg pergunta ao usuário se ele pretende manter os arquivos de configuração antigos, atualizá-los com os novos ou decidir mais tarde.

Normalmente, é seguro manter as configurações antigas, mas quando o assunto é kernel, a coisa muda de figura. Basicamente, como já ensinou "Bob" Dobbs:
"Não se pode inicializar kernels novos com configurações antigas, pois as configurações antigas quebrarão o kernel novo e a inicialização se derramará pelo chão" (exceto de "O mundo vai acabar amanhã e você pode morrer", sem tradução para o português, escrito pelo maior vendedor de todos os tempos, J. R. "Bob" Dobbs)."

Entretanto, o slackpkg, às vezes, ignora que o usuário escolheu usar as novas configurações e o resultado é um sistema que inicializa até a tela de login, mas sem nenhum módulo levantado, sendo impossível usar o teclado até mesmo para um "three finger salute" (Ctrl+Alt+Del nas palavras do Cara).

Resumindo: você está com um sistema quebrado.

Para resolver o problema você precisará de:
  • O DVD ou o CD1 de instalação do Slackware;
  • Algum conhecimento de terminal;
  • Alguma intimidade com o vi (seja o elvis, o vi padrão do Slack, seja com o Vim mesmo);

E, sacrificar um bode e uma galinha preta em homenagem ao Dino®, caso você seja um clicador assumido.

Modo de fazer

Inicie o seu computador pelo DVD de instalação do Slackware. Na tela em que o ISOLINUX pergunta qual kernel você quer usar para inicializar, dê Enter normalmente.

Escolha o teclado que seja de acordo com a sua situação (querty-br-abnt2 para teclados brasileiros, ou querty-us-acentos para teclados padrão americano) e faça login como root. Até aqui, você apenas seguiu as instruções escritas na tela, então, não deve ter experimentado maiores problemas.

O próximo passo é montar todas as suas partições em /mnt, conforme elas seriam montadas caso o sistema inicializasse normalmente. Por exemplo, no meu Dell Inspiron (aquele que já quebrou meu pé, que meus gatos já usaram como banheiro e ainda assim funciona virado no capeta com uptimes médios de sete semanas), o particionamento está assim:
  • /dev/sda1 para SWAP;
  • /dev/sda2 montado em /boot;
  • /dev/sda3 montado em /;
  • /dev/sda5 montado em /home.

A primeira coisa sempre, é montar o /, então, o primeiro comando no meu cenário, é:

# mount /dev/sda3 /mnt

Depois, monte as demais partições. No meu cenário, fica assim:

# mount /dev/sda2 /mnt/boot
# mount /dev/sda5 /mnt/home

Pelos exemplos, é evidente que você deverá montar seu / em /mnt e as demais partições em seus respectivos pontos de montagem.

Hora de ativar a SWAP. No meu cenário, fica assim:

# swapon /dev/sda1

É interessante notar que todos os comandos aqui, devem ser passados sem opções, visto que no ISOLINUX eles são versões simplificadas daqueles aos quais estamos acostumados.

Após montar todas as partições, vamos ao começo do trabalho que separa um verdadeiro GNU/Linuxer dos usuários das demais distros.

Para editar as configurações do sistema instalado, use primeiramente o comando:

# chroot /mnt

O terminal vai compreender que você está usando o Slackware instalado no seu disco rígido e não o instalador do ISOLINUX. Isso é extremamente importante para os próximos passos, principalmente na hora de reinstalar o LILO. Agora, vamos acertar as configurações do seu verdadeiro GNU/Linux.

O primeiro passo é saber qual é o kernel instalado de fato. Esta distinção é importante para o segundo passo. Para tanto, o comando:

# ls -l /boot

Basta. No meu cenário ele retorna:

  -rw-r--r--  1 root root     512 Jul 26 16:47 boot.0800
  -rw-r--r--  1 root root     137 Jul 26 16:46 boot_message.txt
  -rw-r--r--  1 root root  220070 Set 11 20:22 catboot.bmp
  lrwxrwxrwx  1 root root      19 Set 14 13:19 config -> config-huge-3.14.18
  -rw-r--r--  1 root root  142496 Set  9 00:46 config-generic-3.14.18
  -rw-r--r--  1 root root  142496 Set  9 00:52 config-huge-3.14.18
  -rwxr-xr-x  1 root root  217646 Jan 10  2011 elilo-ia32.efi*
  -rwxr-xr-x  1 root root  250510 Jan 10  2011 elilo-x86_64.efi*
  -rw-r--r--  1 root root 5590032 Set 14 13:23 initrd.gz
  drwxr-xr-x 14 root root    4096 Set 14 13:23 initrd-tree/
  -rw-r--r--  1 root root   22578 Out 27  2013 inside.bmp
  drwx------  2 root root   16384 Jul 26 15:37 lost+found/
  -rw-------  1 root root  397312 Set 15 18:25 map
  -rw-r--r--  1 root root    6878 Out 27  2013 onlyblue.bmp
  lrwxrwxrwx  1 root root      37 Jul 26 15:43 README.initrd -> /usr/doc/mkinitrd-1.4.8/README.initrd
  -rw-r--r--  1 root root   15634 Mar 27  2011 slack.bmp
  lrwxrwxrwx  1 root root      23 Set 15 18:25 System.map -> System.map-huge-3.14.18
  -rw-r--r--  1 root root 2418149 Set  9 00:46 System.map-generic-3.14.18
  -rw-r--r--  1 root root 3617277 Set  9 00:52 System.map-huge-3.14.18
  -rw-r--r--  1 root root   33192 Out 27  2013 tuxlogo.bmp
  lrwxrwxrwx  1 root root      20 Set 14 13:20 vmlinuz -> vmlinuz-huge-3.14.18
  lrwxrwxrwx  1 root root      23 Set 14 13:24 vmlinuz-generic -> vmlinuz-generic-3.14.18
  -rw-r--r--  1 root root 3681296 Set  9 00:46 vmlinuz-generic-3.14.18
  lrwxrwxrwx  1 root root      20 Set 14 13:19 vmlinuz-huge -> vmlinuz-huge-3.14.18
  -rw-r--r--  1 root root 6705024 Set  9 00:52 vmlinuz-huge-3.14.18


Se você tiver mais de um kernel instalado, vai ver mais de um config-generic, config-huge, etc. Os números após os diversos config e vmlinuz, indicam a versão do kernel instalado.

Vamos acertar as configurações começando por aqui, recriando os vínculos simbólicos corretos. No meu cenário os comandos, em que uso o kernel 3.14.18, os comandos ficam:

# cd /boot
# ln -sf System.map-huge-3.14-18 System.map
# ln -sf config-huge-3.14.18 config
# ln -sf vmlinuz-huge-3.14.18 vmlinuz
# ln -sf vmlinuz-huge-3.14.18 vmlinuz-huge
# ln -sf vmlinuz-generic-3.14-18 vmlinuz-generic

O segundo passo é acertar o rc.modules. Localizado em /etc/rc.d, este script é o responsável por carregar os módulos apropriados ao kernel instalado em seu sistema. Para verificar como a situação está, rode o comando:

# ls -l /etc/rc.d/rc.modules*

Você deve ter uma saída similar a essa:

  lrwxrwxrwx 1 root root    18 Set 14 13:21 /etc/rc.d/rc.modules -> rc.modules-3.14.18*
  -rwxr-xr-x 1 root root 35406 Out 23  2013 /etc/rc.d/rc.modules-3.10.17*
  -rwxr-xr-x 1 root root 35406 Jul 23 15:42 /etc/rc.d/rc.modules-3.14.13*
  -rwxr-xr-x 1 root root 35406 Ago  8 01:04 /etc/rc.d/rc.modules-3.14.16*
  -rwxr-xr-x 1 root root 35406 Ago 25 16:11 /etc/rc.d/rc.modules-3.14.17*
  -rwxr-xr-x 1 root root 35406 Set  9 00:47 /etc/rc.d/rc.modules-3.14.18*


Lembrando que esse é o meu cenário, o retorno desse comando no seu computador pode variar. Você precisa criar o vínculo simbólico correto correspondendo à versão do kernel que você escolheu usar anteriormente.

Assim, no meu cenário o comando fica:

# cd /etc/rc.d/
# ln -sf rc.modules-3.14.18 rc.modules

O próximo passo é obrigatório, apenas se você usa o kernel genérico. Será preciso recriar o /boot/initrd.gz. No meu cenário, o comando:

# mkinitrd -c -k 3.14.18 -f ext4 -r /dev/sda3 -m usbhid:hid_generic:mbcache:jbd2:ext4:ext2 -u -o /boot/initrd.gz

Resolve, visto que meu /boot é formatado em ext2 por questões de compatibilidade geral. Não é possível usar o /usr/share/mkinitrd/mkinitrd_command_generator porque em chroot, você não carrega realmente os módulos do sistema instalado, então, você deverá criar o comando na mão, ou reinicializar o computador e resolver o kernel genérico depois.

Reinstalação do LILO

O último passo, obrigatório em qualquer circunstância, é reinstalar o LILO.

Verifique em /etc/lilo.conf se a imagem de inicialização do kernel-huge aponta para /boot/vmlinuz. Ou seja, se a parte do LILO responsável pela inicialização do kernel-huge, tem uma linha: image = /boot/vmlinuz

...e verifique se a linha image da parte que inicializa o kernel-generic aponta para a versão correta do kernel. Edite o que for necessário, e então, reinstale o LILO:

# lilo -v

Adicione uma camada de verbosidade, apenas para ser informado caso aconteça um erro. Não havendo erros, basta reinicializar o computador, desta vez pelo sistema instalado no disco rígido.

Explicando o procedimento

No Slackware, os arquivos /boot/config, /boot/vmlinuz, /boot/vmlinuz-huge, /boot/vmlinuz-generic e /boot/System.map, são vínculos simbólicos para os verdadeiros arquivos de configuração de inicialização da distribuição.

Isso fica em nome da simplicidade: o LILO é instruído a olhar para esses arquivos (parâmetro "image", por exemplo) e assim, o arquivo de configuração /etc/lilo.conf pode ser mantido o mesmo, não importa a versão do kernel instalada.

O arquivo /etc/rc.d/rc.modules contém os módulos com respectivas configurações necessárias para inicializar o sistema operacional, e é um vínculo simbólico pelas mesmas razões apresentadas.

A atualização do kernel via slackpkg, normalmente, atualiza esses vínculos simbólicos, mas no caso dessa atualização não ocorrer, basta recorrer a mais esta Dica do Dino® para resolver o problema.

Conclusão

E com essa, eu encerro mais esta Dica do Dino® nas nuvens do cachimbo doido que sobem por trás do bambuzal, perguntando se elas me fazem bem ou me fazem mal, mas, jamais duvidando de "Bob" Dobbs como mensageiro do Slack Original.

E quanto a vocês, compilações longas e prósperas!

Outras dicas deste autor

Usando o Spotify como despertador no openSUSE Tumbleweed XFCE via spotify-rise

Software Data Cable - Transfira arquivos de aparelho Android para computador via Wireless

Instalando e configurando controle PS-like no Debian Stretch

FFmpeg: criando dois ou mais arquivos de saída simultaneamente

Abrindo aplicativos gráficos como usuário root logado como usuário comum sem kdesudo ou gksudo

Leitura recomendada

mkpasswd: no DBM database on system - no action performed

LSOF: Quem está ouvindo aí no seu Linux?

Como fazer o curl ignorar certificado SSL inválido

Efetuando varreduras de rede com o nmap

pv - Acompanhando progresso de comandos no terminal via barra de progresso

  

Comentários
[1] Comentário enviado por lcavalheiro em 22/09/2014 - 01:01h

Apenas um aviso, caso realmente seja necessário: o excerto do livro de "Bob" Dobbs é falso, embora o livro realmente exista.

[2] Comentário enviado por heuer em 22/09/2014 - 12:17h

Muito obrigado @lcavalheiro, comigo aconteceu esse problema, eu estava pesquisando mas não tinha encontrado nada ainda até me deparar com sua dica. Chegando em casa eu vou testar e dou um retorno. Mas desde já lhe agradeço muito você já ajudou muito esse simples iniciante no Slackwere com suas dicas.

[3] Comentário enviado por lcavalheiro em 22/09/2014 - 12:46h

Testa aí e me avisa

[4] Comentário enviado por heuer em 28/09/2014 - 23:48h


[3] Comentário enviado por lcavalheiro em 22/09/2014 - 12:46h:

Testa aí e me avisa


Só tive tempo para testar hoje. Funcionou perfeitamente. Só que dava erro ao gravar o lilo.
Como tenho dual boot com o linux mint exprementei gravar o lilo somente com o Slack e deu certo. Porem fiquei sem o mint. Terei que estudar um pouco mais.

[5] Comentário enviado por lcavalheiro em 30/09/2014 - 13:47h


[4] Comentário enviado por leo_heuer em 28/09/2014 - 23:48h:


[3] Comentário enviado por lcavalheiro em 22/09/2014 - 12:46h:

Testa aí e me avisa

Só tive tempo para testar hoje. Funcionou perfeitamente. Só que dava erro ao gravar o lilo.
Como tenho dual boot com o linux mint exprementei gravar o lilo somente com o Slack e deu certo. Porem fiquei sem o mint. Terei que estudar um pouco mais.


Então... se o LILO funcionava antes, então pode ser porque a partição do Mint não estava montada no momento em que você rodou o LILO. Ou se ela estava montada, talvez seja preciso desmontar. Quem gerenciava esse dual boot antes, era o LILO mesmo?

[6] Comentário enviado por sapinho em 01/10/2014 - 22:33h

(E, sacrificar um bode e uma galinha preta em homenagem ao Dino®, caso você seja um clicador assumido.)

rindo muito aqui kkkkkkkkkkkkkkkkkkkkkkk

[7] Comentário enviado por Nerdiarretado em 29/11/2017 - 11:01h

Não precisei sacrificar nada e deu tudo certo! Cara como fiquei preocupado quando vi isso, muito obrigado por partilhar esse tamanho conhecimento. Me tirou de uma furada!

[8] Comentário enviado por CelsonNunes em 17/08/2022 - 15:42h


Boa tarde à todos , em especial ao Dino , esse grande colaborador desta magnífica distro.
Hoje 17/08/2022 acabo de seguir esse tutorial e deu certo !!! Publicado por Luís Fernando C. Cavalheiro em 21/09/2014 .
Agora meu SLACKWARE/KDE está atualizado e rodando liso !!! Obrigado DINO !!!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts