|
#!/bin/bash |
|
|
|
# this script is an enhancement of https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=770938 |
|
|
|
# we need to work up the process tree to find the apt command that triggered the call to this script |
|
# get the initial PID |
|
|
|
PID=$$ |
|
|
|
# find the apt command by working up the process tree |
|
# loop until |
|
# - PID is empty |
|
# - PID is 1 |
|
# - or PID command is apt |
|
while [[ -n "$PID" && "$PID" != "1" && "$(ps -ho comm "${PID}")" != "apt" ]] ; do |
|
# the current PID is not the apt command so go up one by getting the parent PID of hte current PID |
|
PID=$(ps -ho ppid "$PID" | xargs) |
|
done |
|
|
|
SNAPPER_DESCRIPTION="apt" |
|
|
|
# assuming we found the apt command, get the full args |
|
if [[ "$(ps -ho comm "${PID}")" = "apt" ]] ; then |
|
SNAPPER_DESCRIPTION="$(ps -ho args "${PID}")" |
|
fi |
|
|
|
# main event |
|
|
|
# source /etc/default/snapper if it exists |
|
if [ -e /etc/default/snapper ] ; then |
|
. /etc/default/snapper |
|
fi |
|
|
|
# what action are we taking |
|
if [ "$1" = "pre" ] ; then |
|
# pre, so take a pre snapshot |
|
|
|
# if snapper is installed |
|
# and if snapper snapshots are not being disabled using the DISABLE_APT_SNAPSHOT variable |
|
# and if /etc/snapper/configs/root exists |
|
if [ -x /usr/bin/snapper ] && [ ! x$DISABLE_APT_SNAPSHOT = 'xyes' ] && [ -e /etc/snapper/configs/root ] ; then |
|
# delete any lingering temp files |
|
rm -f /var/tmp/snapper-apt || true |
|
|
|
# create a snapshot |
|
# and save the snapshot number for reference later |
|
snapper create -d "${SNAPPER_DESCRIPTION}" -c number -t pre -p > /var/tmp/snapper-apt || true |
|
|
|
# clean up snapper |
|
snapper cleanup number || true |
|
fi |
|
elif [ "$1" = "post" ] ; then |
|
# post, so take a post snapshot |
|
|
|
# if snapper is installed |
|
# and if snapper snapshots are not being disabled using the DISABLE_APT_SNAPSHOT variable |
|
# and if the temp file with the snapshot number from the pre snapshot exists |
|
if [ -x /usr/bin/snapper ] && [ ! x$DISABLE_APT_SNAPSHOT = 'xyes' ] && [ -e /var/tmp/snapper-apt ] |
|
then |
|
# take a post snapshot and link it to the # of the pre snapshot |
|
snapper create -d "${SNAPPER_DESCRIPTION}" -c number -t post --pre-number=`cat /var/tmp/snapper-apt` || true |
|
|
|
# clean up snapper |
|
snapper cleanup number || true |
|
fi |
|
fi |
Hi @imthenachoman,
Thank you for the clarification and for confirming the licensing. That answers exactly what I needed to know.
I really appreciate the work you put into this. Your idea of moving Debian's inline
80snapperhook into a standalone script and adding process-tree detection provided a much stronger foundation to build on.My version has grown quite a bit beyond the original gist with additional package manager detection, improved snapshot descriptions, locking, duplicate snapshot prevention, and various reliability improvements, but your work was the starting point that made it possible.
I'll make sure the project documentation properly credits Debian's original
80snapperhook, Debian Bug #770938, and your contributions so the project's history is preserved accurately.Regarding your question about the license, your confirmation here is exactly what I was hoping to document. If you ever decide to add a GPL-2 license notice to the gist itself, it would certainly make the licensing explicit for future readers, but I don't think it's necessary for my project. Your response here gives me the clarification I was looking for.
I also saw your previous Salsa merge request. That's unfortunate that it never gained any traction. My immediate goal is to get the standalone repository cleaned up, documented, and well tested. If it proves useful, I'd certainly like to see the improvements make their way back into Debian one day.
Thanks again for taking the time to respond and for sharing the original work with the community. I hope you'll take a look at the finished repository once it's published.