## arg 1: the new package version ## arg 2: the old package version users=$(loginctl --no-legend list-users | awk '{ print $2 }' | sed ':a;N;$!ba;s/\n/ /g') pre_upgrade() { # version 6.00 is a major rebuild # yes, I realize that pacman should not stop services but in this case it # is required or else browser profiles (user data) can get renamed and confuse # people if it does not happen if [ $(vercmp $2 6.00) -lt 0 ]; then echo 'ATTENTION: MAJOR CHANGES TO PSD WITH VERSION 6.00+' echo '-> 1. A global /etc/psd.conf is no longer used. $HOME/.config/psd/psd.conf will be' echo '-> created when psd is invoked the first time.' echo '-> 2. A system service is no longer used. A user service is provided and can be' echo '-> used like this: systemctl --user start psd.service' echo '-> 3. Users wanting to use overlayfs mode MUST have sudo access with nopasswd to' echo '-> /usr/bin/psd-overlay-helper. See the man page for an example configured with visudo.' # stop system service now since it will be removed upon updating systemctl is-active psd.service &>/dev/null if [ $? -eq 0 ]; then systemctl stop psd.service &>/dev/null fi fi # version 6.01 redefines the location of tmpfs for the software so it is # required that pacman stop the user service here if running if [ $(vercmp $2 6.01) -lt 0 ]; then for i in "$users"; do running="$(su $i -s /bin/sh -c 'XDG_RUNTIME_DIR=/run/user/$UID systemctl --user is-active psd')" if [[ "$running" = "active" ]]; then su $i -s /bin/sh -c 'XDG_RUNTIME_DIR=/run/user/$UID systemctl --user stop psd.service' echo '-> Internal changes to psd require it to be stopped now before updating.' echo '-> Recommend that you diff /usr/share/doc/psd/psd.conf against ~/.config/psd/psd.conf' fi done fi if [ $(vercmp $2 6.03) -lt 0 ]; then for i in "$users"; do HOMEDIR="$(getent passwd $i | cut -d: -f6)" if [[ -d "$HOMEDIR"/.psd ]]; then echo '-> The use of $HOME/.psd is deprecated.' echo '-> Psd will move it for you upon next invocation to $XDG_CONFIG_HOME/psd' fi done # version 6.05 impliments changes to both the service and the way overlayfs is mounted/umount # so it is required that pacman stop the user service here if running if [ $(vercmp $2 6.05) -lt 0 ]; then for i in "$users"; do running="$(su $i -s /bin/sh -c 'XDG_RUNTIME_DIR=/run/user/$UID systemctl --user is-active psd')" if [[ "$running" = "active" ]]; then su $i -s /bin/sh -c 'XDG_RUNTIME_DIR=/run/user/$UID systemctl --user stop psd.service' echo '-> Internal changes to psd require it to be stopped now before updating.' echo '-> Users of overlayfs: you must run the following before starting the service: psd p' fi done fi fi # version 6.07 has minor changes to config file if [ $(vercmp $2 6.07) -lt 0 ]; then echo '-> Recommend that you diff /usr/share/psd/psd.conf against ~/.config/psd/psd.conf' fi # version 6.10 relocates pid file if [ $(vercmp $2 6.10) -lt 0 ]; then for i in "$users"; do running="$(su $i -s /bin/sh -c 'XDG_RUNTIME_DIR=/run/user/$UID systemctl --user is-active psd')" if [[ "$running" = "active" ]]; then su $i -s /bin/sh -c 'XDG_RUNTIME_DIR=/run/user/$UID systemctl --user stop psd.service' echo '-> Internal changes to psd require it to be stopped now before updating.' fi done fi # version 6.14 changes the way overlayfs works if [ $(vercmp $2 6.14) -lt 0 ]; then for i in "$users"; do running="$(su $i -s /bin/sh -c 'XDG_RUNTIME_DIR=/run/user/$UID systemctl --user is-active psd')" if [[ "$running" = "active" ]]; then su $i -s /bin/sh -c 'XDG_RUNTIME_DIR=/run/user/$UID systemctl --user stop psd.service' echo '-> Internal changes to psd require it to be stopped now before updating.' fi done fi # version 6.16 has minor changes to config file if [ $(vercmp $2 6.16) -lt 0 ]; then echo '-> Recommend that you diff /usr/share/psd/psd.conf against ~/.config/psd/psd.conf' fi # version 6.22 has minor changes to config file if [ $(vercmp $2 6.22) -lt 0 ]; then echo '-> Recommend that you diff /usr/share/psd/psd.conf against ~/.config/psd/psd.conf' fi # version 6.30 has minor changes to config file if [ $(vercmp $2 6.30) -lt 0 ]; then echo '-> Recommend that you diff /usr/share/psd/psd.conf against ~/.config/psd/psd.conf' fi } post_upgrade() { # version 6.01 redefines the location of tmpfs for the software so it is # required that pacman stop the user service here if running if [ $(vercmp $2 6.01) -lt 0 ]; then _daemon_refresh fi # version 6.05 impliments changes to both the service and the way overlayfs is mounted/umount # so it is required that pacman stop the user service here if running if [ $(vercmp $2 6.05) -lt 0 ]; then _daemon_refresh fi # version 6.10 relocates pid file if [ $(vercmp $2 6.10) -lt 0 ]; then _daemon_refresh fi # version 6.11 modified services if [ $(vercmp $2 6.11) -lt 0 ]; then _daemon_refresh fi # version 6.14 modified services if [ $(vercmp $2 6.14) -lt 0 ]; then _daemon_refresh fi } pre_remove() { for i in "$users"; do running="$(su $i -s /bin/sh -c 'XDG_RUNTIME_DIR=/run/user/$UID systemctl --user is-active psd')" if [[ "$running" = "active" ]]; then echo "--> In order to preserve your profiles, pacman will now stop your psd service." echo "--> Any running and managed browsers will be exited." su $i -s /bin/sh -c 'XDG_RUNTIME_DIR=/run/user/$UID systemctl --user stop psd.service' fi done } _daemon_refresh() { for i in "$users"; do su $i -s /bin/sh -c 'XDG_RUNTIME_DIR=/run/user/$UID systemctl --user daemon-reload' done }