diff --git a/kernel_func b/kernel_func index e0acfd6..839b74e 100644 --- a/kernel_func +++ b/kernel_func @@ -1,13 +1,39 @@ kernel_func () { - machine_id=$(cat /etc/machine-id) - current_kernel=$(uname -r) - current_ucode=$(awk -F'[[:space:]]*:[[:space:]]*' '/microcode/ {print $2}' /proc/cpuinfo | uniq) - [[ -f /run/next_kernel ]] && next_kernel="$(sudo cat /run/next_kernel)" - next_ucode=$(iucode_tool -lqS /lib/firmware/intel-ucode/ | grep -Po 'rev 0x\d+' | tr -d '[rev ]' | tail -1) - if [[ "${current_kernel}" == ${next_kernel} ]] && [[ "${current_ucode}" == ${next_ucode} ]] || [[ -z "${next_kernel}" ]] + distro="$(awk -F= '/^ID/ {print $NF}' /etc/os-release)" + if [[ "${distro}" == arch ]] then - print -P "[%F{#00ff00}OK%f]" - else - print -P "[%F{yellow}needs reboot%f]" + package="$(pacman -Q \ + | grep -vE -- '-(firmware|api|keyring|linux|docs|headers)' \ + | grep linux | awk '{print $1}')" + current_kernel=$(uname -r) + next_kernel="$(pacman -Q | grep "${package}" \ + | awk '{print $NF}' | tail -1 | tr -d '\n')" + current_ucode=$(awk -F'[[:space:]]*:[[:space:]]*' '/microcode/ {print $2}' /proc/cpuinfo | uniq) + if whence iucode_tool &> /dev/null + then + next_ucode=$(iucode_tool -lqS /lib/firmware/intel-ucode/ | grep -Po 'rev 0x\d+' | tr -d '[rev ]' | tail -1) + fi + if [[ "${current_kernel}" =~ ${next_kernel} ]] + then + if [[ -n "${next_ucode}" ]] && [[ "${current_ucode}" == ${next_ucode} ]] + then + print -P "[%F{#00ff00}OK%f]" + else + print -P "[%F{yellow}needs reboot%f]" + fi + else + print -P "[%F{yellow}needs reboot%f]" + fi + elif [[ "${distro}" == debian ]] + then + current_kernel="$(uname -v | awk '{print $5}')" + next_kernel="$(dpkg -l | grep -P '^ii\s+linux-image' | awk '{print $3}' \ + | sort -Vu | tail -1)" + if [[ "${current_kernel}" == ${next_kernel} ]] + then + print -P "[%F{#00ff00}OK%f]" + else + print -P "[%F{yellow}needs reboot%f]" + fi fi } diff --git a/reboot.yml b/reboot.yml index 2590bcd..c348b3f 100644 --- a/reboot.yml +++ b/reboot.yml @@ -1,13 +1,19 @@ -- name: Stop mollyguard if active - ansible.builtin.script: stop_mollyguard - register: mg - name: Determine if a reboot is necessary ansible.builtin.command: cmd: ~/bin/needs_reboot register: needs_reboot +- name: Stop mollyguard if active + become: true + ansible.builtin.script: stop_mollyguard + register: mg +- name: Print mg dict + ansible.builtin.debug: + var: mg + when: needs_reboot.stdout == "yes" - name: Conditionally reboot + become: true ansible.builtin.reboot: when: - - inventory_hostname not in group['controller'] - - mgc succeeded - - needs_reboot succeeded + - inventory_hostname not in groups['control'] + - mg.failed is false + - needs_reboot.stdout == "yes"