#!/bin/sh # arg 1: the new package version # arg 2: the old package version post_upgrade() { # one time stuff for md5sum issue with older pacman versions if [ "$(vercmp $2 3.0.2)" -lt 0 ]; then _resetbackups fi if [ "$(vercmp $2 3.5.0)" -lt 0 ]; then _warnupgrade fi if [ ! -f "etc/pacman.d/gnupg/pubring.gpg" ] || [ "$(vercmp $2 4.0.3-2)" -lt 0 ]; then _check_pubring fi sed -i '/^# If upgrades are available/d' /etc/pacman.conf sed -i '/^SyncFirst/d' /etc/pacman.conf } post_install() { _check_pubring } _check_pubring() { echo " >>> Run \`pacman-key --init; pacman-key --populate archlinux\`" echo " >>> to import the data required by pacman for package verification." echo " >>> See: https://www.archlinux.org/news/having-pacman-verify-packages" } _warnupgrade() { echo ">>> The pacman database format has changed as of pacman 3.5.0." echo ">>> You will need to run \`pacman-db-upgrade\` as root." echo ">>>" } _resetbackups() { echo ">>> Performing one-time reset of NoUpgrade md5sums. After this reset" echo ">>> you are able to remove all NoUpgrade lines of already protected" echo ">>> files from pacman.conf." echo ">>>" # path variables pacconf="/etc/pacman.conf" dbpath="/var/lib/pacman/local" # get a list of NoUpgrade files from the user's pacman.conf echo ">>> Retrieving pacman.conf NoUpgrade list..." config=$(grep "^NoUpgrade" $pacconf | cut -d'=' -f2) # add the standard list of files, even if they are already above config="$config \ etc/passwd etc/group etc/shadow etc/sudoers \ etc/fstab etc/raidtab etc/ld.so.conf \ etc/rc.conf etc/rc.local \ etc/modprobe.conf etc/modules.conf \ etc/lilo.conf boot/grub/menu.lst" # blank md5sum for use in sed expression zeroes='00000000000000000000000000000000' for file in $config; do echo ">>> -> finding owner of /$file..." line=$(LC_ALL=C LANG=C pacman -Qo /$file 2>/dev/null) # if file is owned by a package, go find its incorrectly stored sum if [ ! -z "$line" ]; then # get the name and version of the package owning file name=$(echo $line | awk '{print $5}') version=$(echo $line | awk '{print $6}') # set the path to the backup array holding the md5sum path="$dbpath/$name-$version/files" # run a sed on the path to reset the line containing $file # NOTE: literal tab characters in sed expression after $file echo ">>> -> resetting sum of /$file..." sed -i "s#$file [0-9a-fA-F]*#$file $zeroes#" $path else echo ">>> -> $file is unowned." fi done }