feat(script): Initial commit
This commit is contained in:
parent
d8848c868e
commit
849bb66b55
22
README.md
22
README.md
@ -1,3 +1,23 @@
|
|||||||
# arch-needs-restart
|
# arch-needs-restart
|
||||||
|
|
||||||
A helper script to check which updated libraries and kernel are in use and require a restart
|
A helper script to check which updated libraries and kernel are in use and require a restart
|
||||||
|
|
||||||
|
# Setup
|
||||||
|
|
||||||
|
Get started like so:
|
||||||
|
|
||||||
|
1. Clone repo into arbitrary path `<repo>`
|
||||||
|
1. Make `needs-restart.sh` executable
|
||||||
|
```
|
||||||
|
chmod +x <repo>/needs-restart.sh
|
||||||
|
```
|
||||||
|
1. Symlink to files, for example
|
||||||
|
```
|
||||||
|
sudo ln -s <repo>/needs-restart.sh /usr/local/bin/arch-needs-restart
|
||||||
|
sudo ln -s <repo>/arch-needs-restart.hook /usr/share/libalpm/hooks/arch-needs-restart.hook
|
||||||
|
```
|
||||||
|
Note that while you may choose arbitrary locations for symlinks `arch-needs-restart.hook` references `/usr/local/bin/arch-needs-restart`. Change that accordingly if you need to.
|
||||||
|
|
||||||
|
# Credits
|
||||||
|
|
||||||
|
[StackExchange user Christian Zangl](https://unix.stackexchange.com/users/46158/laktak) aka `laktak` in January 2021 post [unix.stackexchange.com/a/630982](https://unix.stackexchange.com/a/630982)
|
||||||
|
11
arch-needs-restart.hook
Normal file
11
arch-needs-restart.hook
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[Trigger]
|
||||||
|
Operation = Install
|
||||||
|
Operation = Upgrade
|
||||||
|
Operation = Remove
|
||||||
|
Type = Package
|
||||||
|
Target = *
|
||||||
|
|
||||||
|
[Action]
|
||||||
|
Description = Check if anything's using outdated libs or kernel
|
||||||
|
When = PostTransaction
|
||||||
|
Exec = /usr/local/bin/arch-needs-restart
|
32
arch-needs-restart.sh
Executable file
32
arch-needs-restart.sh
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
get_boot_kernel() {
|
||||||
|
local get_version=0
|
||||||
|
for field in $(file /boot/vmlinuz*); do
|
||||||
|
if [[ $get_version -eq 1 ]]; then
|
||||||
|
echo $field
|
||||||
|
return
|
||||||
|
elif [[ $field == version ]]; then
|
||||||
|
# the next field contains the version
|
||||||
|
get_version=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
rc=1
|
||||||
|
|
||||||
|
libs=$(lsof -n +c 0 2> /dev/null | grep 'DEL.*lib' | awk '1 { print $1 ": " $NF }' | sort -u)
|
||||||
|
if [[ -n $libs ]]; then
|
||||||
|
cat <<< $libs
|
||||||
|
echo "# LIBS: reboot required"
|
||||||
|
rc=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
active_kernel=$(uname -r)
|
||||||
|
current_kernel=$(get_boot_kernel)
|
||||||
|
if [[ $active_kernel != $current_kernel ]]; then
|
||||||
|
echo "$active_kernel < $current_kernel"
|
||||||
|
echo "# KERNEL: reboot required"
|
||||||
|
rc=0
|
||||||
|
fi
|
||||||
|
exit $rc
|
Loading…
x
Reference in New Issue
Block a user