diff --git a/arch_update b/arch_update new file mode 100755 index 0000000..2230694 --- /dev/null +++ b/arch_update @@ -0,0 +1,62 @@ +#! /bin/sh - +#Full Arch Linux Update Script + +SNAPSHOT_DIR=/.snapshots +DAYS_TO_KEEP=90 + +# Backup system +if which btrfs >/dev/null; then + echo -e '\nCreating backup...' >&2 + + cur_time=$(date -Is) + cur_time_s=$(date -d $cur_time +%s) + + for file in $(ls "$SNAPSHOT_DIR"); do + old_time_s=$(date -d $(echo "$file" | sed 's/[[:alpha:]]\+-//') +%s) + if [ $(((cur_time_s - old_time_s) / 86400)) -gt $DAYS_TO_KEEP ]; then + sudo btrfs subvolume delete "$SNAPSHOT_DIR"/"$file" + fi + done + + sudo btrfs subvolume snapshot / "$SNAPSHOT_DIR"/root-$cur_time + sudo btrfs subvolume snapshot /home "$SNAPSHOT_DIR"/home-$cur_time +fi + +# Check dependencies +echo -e '\nInstalling dependencies ...' >&2 +! which curl >/dev/null 2>&1 && sudo pacman -Syu curl +! which git >/dev/null 2>&1 && sudo pacman -Syu git +! which rankmirrors >/dev/null 2>&1 && sudo pacman -Syu pacman-contrib +if ! which yay >/dev/null 2>&1; then + sudo pacman -Syu + git clone https://aur.archlinux.org/yay.git + cd yay + makepkg -cirs + cd .. + rm -fr yay +fi +! which yaycache >/dev/null 2>&1 && yay -Syu yaycache + +# Update mirrors +echo -e '\nUpdating mirrors ...' >&2 +curl -s 'https://archlinux.org/mirrorlist/?country=DE&protocol=https&use_mirror_status=on' | sed -e 's/^#\(Server\)/\1/' -e '/^#/d' | rankmirrors - | sudo tee /etc/pacman.d/mirrorlist + +# Update system +echo -e '\nUpdating system ...' >&2 +yay -Syu + +# Remove orphans +echo -e '\nRemoving orphans ...' >&2 +orphans=$(yay -Qtdq) +[ ! "X$orphans" = 'X' ] && yay -Rns $orphans + +# Clean cache +echo -e '\nCleaning cache ...' >&2 +sudo paccache -r +yaycache -r + +# Find new configs +echo -e '\nSearching for new configs ...' >&2 +sudo pacdiff + +echo -e '\nIt is recommended to restart the system.'