Precisa verificar se você precisa reinicializar para uma atualização do kernel?

4

Estou usando o Ansible para verificar hosts se eles precisarem ser reinicializados se o kernel /vmlinuz não resolver para uname -r .

A condição if é, apesar de sempre, identificar uma reinicialização, mesmo que a máquina de teste tenha sido reinicializada e o kernel esteja resolvido para o mesmo kernel:

if [ $(readlink -f /vmlinuz) != /boot/vmlinuz-$(uname -r) ]; then echo 'reboot'; else echo 'no'; fi

- name: Check for reboot hint.
  shell: if [ $(readlink -f /vmlinuz) != /boot/vmlinuz-$(uname -r) ]; then echo 'reboot'; else echo 'no'; fi
  ignore_errors: true
  register: reboot_hint

- name: Rebooting ...
  command: shutdown -r now "Ansible kernel update applied"
  async: 0
  poll: 0
  ignore_errors: true
  when: kernelup|changed or reboot_hint.stdout.find("reboot") != -1
  register: rebooting

- name: Wait for thing to reboot...
  pause: seconds=45
  when: rebooting|changed
    
por nicoX 27.02.2015 / 12:52

1 resposta

4

Você pode determinar com segurança a versão mais recente do kernel instalada por meio da seguinte consulta do rpm:

rpm -q kernel --queryformat '%{installtime} %{version}-%{release}.%{arch}\n' | sort -n -k1 | tail -1 | cut -d ' ' -f 2

Exemplo de saída no RHEL 7:

3.10.0-229.11.1.el7.x86_64

Agora, verifique se a saída de uname -r corresponde:

3.10.0-229.1.2.el7.x86_64

Neste exemplo, ele não corresponde e uma reinicialização é necessária.

Você pode usar o teste para comparar as strings:

if [ "'rpm -q kernel --queryformat '%{installtime} %{version}-%{release}.%{arch}\n' | sort -n -k1 | tail -1 | cut -d ' ' -f 2'" = "'uname -r'" ]; then echo "latest kernel already booted."; else echo "new kernel. reboot required."; fi
    
por 19.08.2015 / 23:54