Merge branch 'master' of https://github.com/toloveru/kernelcheck
This commit is contained in:
commit
fb8414a85d
@ -3,7 +3,7 @@
|
||||
### Introduction
|
||||
Ever thought of compiling a custom kernel, but held back because of the need for manual tracking, compilation and installation? Well, I say no more. This tool can do it for you.
|
||||
|
||||
IMPORTANT: this tool is still to be considered a development / pre-alpha release. Use it only in the appropriate testing environments, unless you really know what you are doing.
|
||||
IMPORTANT: this tool has currently reached the alpha stage. It will likely work as expected on testing systems by now, but you should still be cautious on production systems.
|
||||
|
||||
### What does it do?
|
||||
* Periodically check for updates on kernel.org
|
||||
@ -11,7 +11,7 @@ IMPORTANT: this tool is still to be considered a development / pre-alpha release
|
||||
* Verify the kernel signature
|
||||
* Compile and install the kernel
|
||||
* Nofity the users about what is going on (tested only on Xfce).
|
||||
* Remove a distribution kernel if present (currently only on Arch and Manjaro).
|
||||
* Remove a distribution kernel if present (disabled by default).
|
||||
|
||||
### Installation
|
||||
1. Clone and navigate to the repository, then run `./install`
|
||||
@ -35,7 +35,7 @@ So, in a nutshell:
|
||||
In a non-interactive script, it's much easier to run priveleged by default and drop priveleges as needed, instead of requiring authentication every time. If you know of a fully non-interactive way of achieving on-the-fly enhanced priveleges though, feel free to open a pull request.
|
||||
|
||||
### I want to use this code in my own projects. What should I be aware of?
|
||||
If you wish to redistribute, share or otherwise modify the material provided in this project, aside from the license, the following rules also apply and when conflicting with the license supersede it:
|
||||
If you wish to redistribute, share or otherwise modify the material provided in this project, aside from the license, the following rules also apply and when conflicting with the license override it:
|
||||
* You must use it for non-commercial purposes only.
|
||||
* Attribution to this project (my name and a link to this repository) are required.
|
||||
* In disputes, the previous Creative Commons license is invalid.
|
||||
|
89
install
89
install
@ -1,10 +1,81 @@
|
||||
#!/bin/sh
|
||||
printf "Copying files..\n"
|
||||
sudo cp kernelcheck /usr/local/sbin/kernelcheck
|
||||
sudo cp notify_all /usr/local/sbin/notify_all
|
||||
printf "Adding hourly service to cron scheduler..\n"
|
||||
(sudo crontab -l; echo "@hourly /usr/local/sbin/kernelcheck" ) | sudo crontab -
|
||||
printf "Enabling cronie scheduler..\n" # Let me know if you use something else, and enable manually.
|
||||
sudo systemctl start cronie.service
|
||||
sudo systemctl enable cronie.service
|
||||
printf "Installation complete.\n"
|
||||
|
||||
# Copyright 2017 Michael De Roover
|
||||
|
||||
if [ $EUID != 0 ]
|
||||
then
|
||||
printf "This script needs to be run as root.\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
function install_arch_manjaro(){
|
||||
cp kernelcheck /usr/local/sbin/kernelcheck
|
||||
cp notify_all /usr/local/sbin/notify_all
|
||||
if ! hash crontab &>/dev/null
|
||||
then
|
||||
printf "Installing cronie command scheduler..\n"
|
||||
pacman -S --noconfirm cronie &>/dev/null
|
||||
fi
|
||||
if hash systemctl &>/dev/null
|
||||
then
|
||||
if [ $(systemctl is-active cronie) == inactive ]
|
||||
then
|
||||
printf "Enabling cronie command scheduler..\n"
|
||||
systemctl start cronie.service &>/dev/null
|
||||
systemctl enable cronie.service &>/dev/null
|
||||
fi
|
||||
else
|
||||
printf "You don't seem to be using systemd.. Please enable cronie manually.\n"
|
||||
fi
|
||||
if ! grep -Fxq "@hourly /usr/local/sbin/kernelcheck" /var/spool/cron/root 2>/dev/null
|
||||
then
|
||||
printf "Installing hourly service in crontab..\n"
|
||||
(crontab -l 2>/dev/null; echo "@hourly /usr/local/sbin/kernelcheck" ) | crontab -
|
||||
elif grep -Fxq "@hourly /usr/local/sbin/kernelcheck" /var/spool/cron/root
|
||||
then
|
||||
printf "Crontab entry found. Skipping..\n"
|
||||
fi
|
||||
printf "Installation complete.\n"
|
||||
}
|
||||
function install_generic(){
|
||||
cp kernelcheck /usr/local/sbin/kernelcheck
|
||||
cp notify_all /usr/local/sbin/notify_all
|
||||
if ! hash crontab &>/dev/null
|
||||
then
|
||||
printf "This tool depends on cron to schedule kernel checks. Exiting..\n"
|
||||
exit 1
|
||||
fi
|
||||
if hash systemctl &>/dev/null
|
||||
then
|
||||
if [ $(systemctl is-active cronie) == inactive ]
|
||||
then
|
||||
printf "Enabling cronie command scheduler..\n"
|
||||
systemctl start cronie.service &>/dev/null
|
||||
systemctl enable cronie.service &>/dev/null
|
||||
fi
|
||||
else
|
||||
printf "You don't seem to be using systemd.. Please enable cronie manually.\n"
|
||||
fi
|
||||
if ! grep -Fxq "@hourly /usr/local/sbin/kernelcheck" /var/spool/cron/root 2>/dev/null
|
||||
then
|
||||
printf "Installing hourly service in crontab..\n"
|
||||
(crontab -l 2>/dev/null; echo "@hourly /usr/local/sbin/kernelcheck" ) | crontab -
|
||||
elif grep -Fxq "@hourly /usr/local/sbin/kernelcheck" /var/spool/cron/root
|
||||
then
|
||||
printf "Crontab entry found. Skipping..\n"
|
||||
fi
|
||||
printf "Installation complete.\n"
|
||||
}
|
||||
if [ -f /etc/manjaro-release ]
|
||||
then
|
||||
printf "Installing for Manjaro Linux...\n"
|
||||
install_arch_manjaro
|
||||
elif [ -f /etc/arch-release ]
|
||||
then
|
||||
printf "Installing for Arch Linux...\n"
|
||||
install_arch_manjaro
|
||||
elif [ $(uname) == Linux ]
|
||||
then
|
||||
printf "Distribution not yet supported.\nInstalling for generic Linux..\n"
|
||||
install_generic
|
||||
fi
|
||||
|
34
kernelcheck
34
kernelcheck
@ -1,5 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Copyright 2017 Michael De Roover
|
||||
|
||||
# Variables
|
||||
latest="$(wget -qO - 'https://kernel.org' | sed -n '/stable:/{n;p;}' | sed 's.[a-z]\|<\|>\|/\|[[:space:]]..g')"
|
||||
current="$(uname -r)"
|
||||
@ -62,20 +64,24 @@ then
|
||||
make modules_install &>/dev/null
|
||||
cp arch/$(uname -m)/boot/bzImage /boot/vmlinuz-$latest
|
||||
mkinitcpio -k $latest -g /boot/initramfs-$latest.img &>/dev/null
|
||||
if [ "$(echo $(uname -r) | sed 's/ARCH//')" != "$(uname -r)" ]
|
||||
then
|
||||
/usr/local/sbin/notify_all "Kernel update tracker" "Removing the Arch distribution kernel.." --icon=dialog-information
|
||||
pacman -R --noconfirm linux
|
||||
elif [ "$(echo $(uname -r) | sed 's/MANJARO//')" != "$(uname -r)" ]
|
||||
then
|
||||
/usr/local/sbin/notify_all "Kernel update tracker" "Removing the Manjaro distribution kernel.." --icon=dialog-information
|
||||
pacman -R --noconfirm linux
|
||||
else
|
||||
/usr/local/sbin/notify_all "Kernel update tracker" "Removing the current kernel.." --icon=dialog-information
|
||||
rm -f /boot/initramfs-$current.img
|
||||
rm -f /boot/vmlinuz-$current
|
||||
rm -rf /usr/lib/modules/$current
|
||||
fi
|
||||
function remove_distr_kernel(){
|
||||
if [ "$(echo $(uname -r) | sed 's/ARCH//')" != "$(uname -r)" ]
|
||||
then
|
||||
/usr/local/sbin/notify_all "Kernel update tracker" "Removing the Arch distribution kernel.." --icon=dialog-information
|
||||
pacman -R --noconfirm linux
|
||||
elif [ "$(echo $(uname -r) | sed 's/MANJARO//')" != "$(uname -r)" ]
|
||||
then
|
||||
/usr/local/sbin/notify_all "Kernel update tracker" "Removing the Manjaro distribution kernel.." --icon=dialog-information
|
||||
pacman -R --noconfirm linux
|
||||
fi
|
||||
}
|
||||
## Uncomment this function only if you really know what you are doing!!
|
||||
## It removes the Arch / Manjaro distribution kernel, and should only be done if you know how to recover from chroot!
|
||||
# remove_distr_kernel
|
||||
/usr/local/sbin/notify_all "Kernel update tracker" "Removing the current kernel.." --icon=dialog-information
|
||||
rm -f /boot/initramfs-$current.img
|
||||
rm -f /boot/vmlinuz-$current
|
||||
rm -rf /usr/lib/modules/$current
|
||||
grub-mkconfig -o /boot/grub/grub.cfg &>/dev/null
|
||||
/usr/local/sbin/notify_all "Kernel update tracker" "New kernel installed\!" --icon=dialog-information
|
||||
elif [[ "$latest" == "$current" ]] && [[ ! -z $latest ]]
|
||||
|
@ -1,4 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
# I (Michael De Roover) do not own this code. Many thanks to Stack Exchange user Andy (http://unix.stackexchange.com/users/187608/andy) for submitting it on http://unix.stackexchange.com/a/307097.
|
||||
|
||||
PATH=/usr/bin
|
||||
|
||||
XUSERS=($(who|egrep "\(:[0-9](\.[0-9])*\)"|awk '{print $1$5}'|sort -u))
|
||||
|
Reference in New Issue
Block a user