This commit is contained in:
root 2017-04-10 03:35:13 +02:00
commit fb8414a85d
4 changed files with 106 additions and 26 deletions

View File

@ -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
View File

@ -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

View File

@ -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 ]]

View File

@ -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))