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 lilo reboot;exit
Nota: se a instalação for interrompida por algum motivo, posso sempre atualizar os ficheiros de configuração correndo o comando abaixo.
slackpkg new-config
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
Se algum dos discos adicionais (/disco2, p.ex.) não arrancar por causa de um problema do RAID1, fazer o seguinte:
cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath] md3 : active raid1 sdc1[2] sdd1[1] 1953512400 blocks super 1.2 [2/2] [UU] md2 : inactive sde1[0](S) 1953512536 blocks super 1.2 md0 : active raid1 sdb3[1] sda3[0] 73939072 blocks [2/2] [UU] unused devices: mount -a mount: /disco2: can't read superblock on /dev/md2. dmesg(1) may have more information after failed mount system call. mdadm -A /dev/md2 mdadm: Fail to create md2 when using /sys/module/md_mod/parameters/new_array, fallback to creation via node mdadm: /dev/md2 is already in use. mdadm --stop /dev/md2 mdadm --assemble --force /dev/md2 /dev/sde1 /dev/sdf1
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
VirtualBox e KVM
O VirtualBox deixou de arrancar quando instalei o kernel 6.12.3 no Slackware. A mensagem é: VBoxManage: error: VirtualBox can’t operate in VMX root mode.
Encontrei uma solução na net e, para já, estou a desativar o KVM com os comandos seguintes:
modprobe -r kvm_intel
modprobe -r kvm
Na página de onde tirei isto, mencionam que pode haver soluções mais definitivas para o problema, mas vou esperar para perceber melhor.
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