User:Thorko/Automatically update system
This page describes how to automatically update your arch sytem.
First create the necessary configuration and systemd files
/etc/archupgrade.conf
# ignore packages to be updated # multiple packages seperated by comma ignore="linux,pacman" log="/var/log/archupgrade.log" mailto="<your mail address>"
/etc/sytemd/system/archupgrade.timer
[Unit] Description=Upgrade arch [Timer] OnCalendar=Wed 02:07:00 Persistent=true Unit=archupgrade.service [Install] WantedBy=default.target
/etc/systemd/system/archupgrade.service
[Unit] Description=Upgrade arch with pacman [Service] Type=oneshot User=root Environment=SHELL=/bin/sh Environment=PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin ExecStart=/usr/local/bin/archupgrade minimal reboot
Once your have created the files above add the script to run the update in /usr/local/bin/archupgrade
and make it executable
#!/bin/bash function log() { date=$(date +'%Y-%m-%d %H:%M') echo "[$date] $1" >> $log 2>&1 } function mail() { host=$(hostname) day=$(date +'%Y-%m-%d') msg=$(grep "$day" $log) echo -e "$msg" | mailx -s "Arch upgrade: $host" $mailto } function list_updates() { list=$(pacman -Qu) if [ $? -ne 0 ]; then echo "nothing to do" exit 0 else echo "$list" fi } function will_reboot() { dd=$(date +'%Y-%m-%d') grep $dd $log | grep "upgrading linux..." if [ $? -eq 0 ]; then log "Will reboot in 10 minutes" shutdown -r +10 else log "no linux kernel upgrade" fi } function minimal() { pacman -Syu --ignore=$ignore --noconfirm --overwrite '*' | tee -a $log if [ $? -ne 0 ]; then log "Upgrade not complete" mail "Minimal upgrade not complete" exit 1 fi log "minimal upgrade done" if [ $reboot -eq 1 ]; then will_reboot fi mail "minimal upgrade done" } function full() { # do an archlinux-keyring before upgrading sudo pacman -Sy --noconfirm archlinux-keyring | ts '[%Y-%m-%d %H:%M:%S]' | tee -a $log sudo pacman -Syu --noconfirm --overwrite '*' | ts '[%Y-%m-%d %H:%M:%S]' | tee -a $log if [ $? -ne 0 ]; then log "Upgrade not complete" mail "Full upgrade not complete" exit 1 fi if [ $reboot -eq 1 ]; then will_reboot fi mail "full upgrade done" } config="/etc/archupgrade.conf" if [ ! -f $config ]; then echo "No config file found: $config" exit 1 fi source $config pacman -Sy reboot=$2 if [ -z $reboot ]; then reboot=0 else reboot=1 fi case "$1" in list_updates) list_updates ;; minimal) minimal $2 ;; full) full $2 ;; *) echo "$0 <list_updates|minimal|full> [reboot]" echo "reboot: will only reboot if a kernel update has been done" exit 0 ;; esac
chmod a+x /usr/local/bin/archupgrade
Now enable the timer
systemctl enable --now archupgrade.timer