Já há uns anos que uso a versão current do Slackware. Com alguma frequência, atualizo as minhas máquinas todas para a última versão dos vários pacotes. Algumas são máquinas virtuais, outras são máquinas físicas, duas delas têm o VirtualBox.
Durante as atualizações, têm surgido vários problemas, e tenho escrito artigos soltos sobre as soluções encontradas para os resolver. Vou tentar copiar para esta crónica, toda a lista de problemas e soluções que estão espalhadas por este blog.
slackpkg
Eis a lista de comandos que utilizo no Slackware para fazer update das minhas máquinas, a partir de um mirror que tenho e que é atualizado diariamente.
slackpkg update
slackpkg update gpg
slackpkg install-new
slackpkg upgrade-all
slackpkg clean-system
De vez em quando, e ainda não percebi porquê, o slackpkg pendura. A máquina que estava a ser atualizada deixa de responder. Não sei se é por fazer muitas atualizações em simultâneo, todas a ler no mesmo mirror, se é demasiado peso na rede a carregar os pacotes para as atualizações… Duvido que a causa seja uma destas, mas ainda não consegui descobrir a origem dos problemas.
Algumas vezes tenho que mandar a máquina abaixo, embora nem sempre. Mas uma consequência chata destes penduranços é que os pacotes que estavam a ser atualizados são considerados instalados, apesar de não estarem. Ainda demorei algum tempo a encontrar solução para este problema, por isso fica aqui para consulta futura.
cd /var/lib/slackpkg/
rm ChangeLog.txt
E depois já posso recomeçar os updates.
LILO
Há cerca de um ano (em 2018), o Slackware passou a avisar que instalou um novo kernel, mas já não corre o lilo; pede antes que sejamos nós a fazê-lo.
Se me esquecer de correr o lilo numa máquina virtual, a solução para voltar a arrancar com ela é a seguinte:
Nos settings da máquina, no VirtualBox, pedir para arrancar com o ISO da versão mais recente do Slackware. Depois de entrar, correr os seguintes comandos:
mount /dev/sda2 /mnt
chroot /mnt
lilo
reboot
Se me esquecer de correr o lilo num host das máquinas virtuais (que têm o disco de boot em RAID 1), a solução é arrancar de DVD e correr os seguintes comandos:
mdadm --assemble --run /dev/md0 /dev/sda2 /dev/sdb2
mount /dev/md0 /mnt
chroot /mnt
lilo
exit
reboot
Pacotes duplicados
Depois de recuperar a máquina que pendurou nas atualizações, retomei o processo de atualização e recebi uma mensagem à qual nunca soube responder:
Checking local integrity... DONE
You have a broken /var/log/packages - with two versions of the same package.
The list of packages duplicated in your machine are shown below, but don't worry about this list - when you select your action, slackpkg will show a better list:
llvm-3.8.0-x86_64-1
llvm-3.8.0-x86_64-2
You can (B)lacklist, (R)emove, or (I)gnore these packages.
Select your action (B/R/I):
Premi ENTER, sem escolher opção nenhuma e fui à net@ ver o que deveria fazer. Descobri que devia remover o pacote llvm-3.8.0-x86_64-1 que não tinha sido removido na instalação anterior, que pendurou. Removi-o com o comando:
removepkg llvm-3.8.0-x86_64-1
e depois continuei a atualização com:
slackpkg upgrade-all
VirtualBox
Para atualizar a versão do VirtualBox nos hosts das máquinas virtuais, uso os comandos seguintes:
cd /root
bat/vboxes stop
cd /usr/local/
VBoxManage extpack uninstall "Oracle VM VirtualBox Extension Pack"
reboot
exit
cd /usr/local/
chmod +x ./VirtualBox-X.X.X-XXXXXX-Linux_amd64.run
./VirtualBox-X.X.X-XXXXXX-Linux_amd64.run
VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-X.X.X-XXXXXX.vbox-extpack
cd /root
bat/vboxes start
O ficheiro bat/vboxes é um ficheiro de comandos que criei para gerir as máquinas virtuais do VirtualBox. [ver aqui]
Entretanto, se alguma das máquinas falhar, posso recuperá-la da forma seguinte (para casos em que há problemas com o kernel):
Reiniciar a máquina virtual, ligando ao leitor de CD um ISO com a última versão do sistema operativo. Depois de arrancar e escolher o layout do teclado, executar os comandos seguintes.
mount /dev/sda2 /mnt
mount -t proc proc /mnt/proc (this was the magic step)
chroot /mnt
cd /boot
mkinitrd -c -k 4.14.2 -m ext3
# No ficheiro /etc/lilo.conf colocar a linha
initrd = /boot/initrd.gz
# no fim do ficheiro, logo após a linha
root = /dev/sda2
# depois, executar os comandos:
lilo
reboot
SSHD
A nova configuração do SSHD, no Slackware, não permite o acesso de clientes à conta “root”. Para permitir, é necessário, antes do último reboot, colocar a linha seguinte no ficheiro /etc/ssh/sshd_config: PermitRootLogin yes
Ou então apagar o ficheiro /etc/ssh/sshd_config.new antes de fazer o upgrade.
Ou, sempre que o SSHD é atualizado, não fazer o overwrite desse ficheiro.
input/output error
Durante a atualização das máquinas, uma das máquinas virtuais deu um erro de input/output, enquanto estava a remover um pacote. E a atualização ficou por ali.
Tive que reiniciar a máquina, mas só o consegui fazer dentro do VirtualBox, e não em modo headless através de um ficheiro batch que uso para lançar as máquinas. Qualquer acesso ao sistema de ficheiros dava um erro de input/output (o df, o mount). Tentei retomar a atualização, mas a diretoria remota – onde estão os pacotes do Slackware – não estava montada. Descobri, então, que não tinha rede e o sistema não permitia fazer o modprobe da placa de rede: dizia que o dispositivo não existia na diretoria /lib/modules/4.4.13.
Fui à pasta /lib/modules/4.4.13 ver que dispositivos de rede estavam disponíveis, mas a pasta /lib/modules/4.4.13 não existia. No entanto, havia uma mais recente: /lib/modules/4.4.14.
Ah! Durante a atualização, o kernel 4.4.14 já tinha sido instalado, mas como não cheguei a correr o lilo, devido à interrupção da instalação, o sistema ainda estava a arrancar com o 4.4.13. Contudo, as bibliotecas do 4.4.13 já tinham sido removidas. Corri o lilo e reiniciei a máquina. Depois já pude mandar verificar o sistema de ficheiros, com um comando que desliga a máquina e força a verificação no próximo arranque:
shutdown -rF now