Devo reiniciar após uma atualização do pacman?

16

após a execução

sudo pacman -Syyu

ou

sudo pacman -S [something to install]

devo recomeçar apenas para estar seguro?

    
por ahtmatrix 12.05.2013 / 13:52

4 respostas

8

Se houver atualizações no kernel, glibc ou systemd, você pode querer reiniciar para que as versões atualizadas estejam em uso. Se você tiver, digamos, atualizações em seu ambiente de área de trabalho, um simples logout / login será suficiente.

    
por 12.05.2013 / 14:02
10

A melhor maneira é descobrir quais programas / serviços usam as bibliotecas antigas e reiniciá-las. E você pode conseguir listando todos os arquivos usados usando 'lsof' e encontrar aqueles que têm o tipo 'DEL'. DEL significa nome do arquivo foi removido do sistema de arquivos, mas ainda está preso na memória porque alguém o usa.

Aqui está a linha de comando completa:

 sudo lsof +c 0 | grep 'DEL.*lib' | awk '1 { print $1 ": " $NF }' | sort -u
    
por 08.04.2014 / 19:17
6

A única razão obrigatória para reiniciar é um novo kernel (e você pode reinicializar usando o kexec). Consulte o link para obter detalhes, em suma:

  • carregue o novo kernel, initramfs e especifique o cmdline de inicialização

    kexec -l /boot/new-kernel --initrd=/boot/new-initramfs --reuse-cmdline
    
  • invoque kexec (use systemctl para o encerramento adequado, kexec -e será executado diretamente)

    systemctl kexec
    
  • Observe que, se você criar um [email protected] como explicado no wiki, se você reiniciar, systemd será automaticamente reinicializado usando kexec em vez de fazer uma reinicialização bios

Versão pouco melhorada que fornece nomes de serviço do systemd:

PIDS="(lsof +c0 -n 2> /dev/null | grep 'DEL.*lib' | awk '{print $2}' | sort -u)"
for PID in $PIDS; do
    systemctl status $i
done | grep '●' | awk '{print $2}' | sort -u

ou uma linha:

for i in $(lsof +c0 -n 2> /dev/null | grep 'DEL.*lib' | awk '{print $2}' | sort -u); do systemctl status $i; done | grep '●' | awk '{print $2}' | sort -u

Observe que há alguns problemas:

  • systemctl daemon-reload deve ser executado antes de reiniciar qualquer outra coisa
  • se PID 1 ( systemd propriamente dito) precisar ser reiniciado, isso pode ser feito usando systemctl daemon-reexec
  • systemctl restart dbus.service quebra alguns outros serviços, eles precisam ser reiniciados após o reinício do dbus:
    • systemd em si: systemctl daemon-reexec
    • systemd-logind
    • systemd-machined
    • provavelmente outros systemd - * / outros serviços que (muito) usam dbus
  • Se você estiver conectado via SSH e SSH precisar ser reiniciado, mas systemctl restart sshd não for reiniciado enquanto estiver conectado, vejo duas opções:
    • agendar systemctl restart sshd usando at/cron/systemd timers
    • reinicie SSH usando outro shell remoto (seguro), como mosh
  • executar screen/tmux também pode bloquear serviços como SSH de reiniciar, a maneira mais fácil é fechar essas sessões antes de reiniciar os serviços
  • como dito em uma resposta anterior, logout / login pode ser necessário, especialmente para sessões gráficas
por 16.11.2015 / 11:26
0

Uma maneira fácil é comparar a versão do kernel em execução com o kernel mais recente no disco. Eu encontrei um script que pode fazer isso facilmente.

Como eu tenho vários kernels instalados, modifiquei o script para checar apenas o que corresponde ao kernel em execução. Por exemplo, atualmente tenho versões 4.9.79 e 4.14.16 instaladas e, portanto, preciso verificar /boot/vmlinuz-4.14-x86_64. Infelizmente isso não funcionará quando eu começar a usar a versão 5.1, então uma atualização será necessária (substitua 4 por 3) ou eu preciso encontrar uma maneira mais robusta.

Aqui está o meu script:

#!/bin/sh
NEXTLINE=0
FIND=""
CURRENT_KERNEL='uname -r'
KERNEL_PATH="/boot/vmlinuz-${CURRENT_KERNEL:0:4}"
for I in 'file $KERNEL_PATH*'; do
  if [ ${NEXTLINE} -eq 1 ]; then
    FIND="${I}"
    NEXTLINE=0
   else
    if [ "${I}" = "version" ]; then NEXTLINE=1; fi
  fi
done
    if [ ! "${FIND}" = "" ]; then
      if [ ! "${CURRENT_KERNEL}" = "${FIND}" ]; then
    echo "Boot required"
  else echo "No boot required"
  fi
fi
    
por 06.02.2018 / 21:42