snap-pac/man8/snap-pac.8
James Barnett c41c294dba
Get parent of script call (may not be pacman)
Check for pre or post args, since no longer checking command. Update manpage.
2017-03-20 07:54:21 -05:00

240 lines
8.4 KiB
Groff

'\" t
.TH SNAP-PAC 8 2017-02-04 SNAP-PAC
.SH NAME
snap-pac \- Pacman hooks that use snapper to create pre/post btrfs snapshots
like openSUSE's YaST
.SH DESCRIPTION
This is a set of \fIpacman\fR hooks and script that causes \fIsnapper\fR to
automatically take a pre and post snapshot before and after pacman transactions,
similar to how YaST does with OpenSuse. This provides a simple way to undo
changes to a system after a pacman transaction.
Because these are pacman hooks, it doesn't matter how you call pacman—whether
directly, through an AUR helper, or using an alias—snapper will create the
snapshots when pacman installs, upgrades, or removes a package. The pacman
command used is logged in the snapper description for the snapshots.
Additionally the snapshot numbers are output to the screen and to the pacman log
for each snapper configuration during the pacman transaction.
To undo changes from a pacman transaction, use \fIsnapper undochange\fR. See
\fBsnapper\fR(8) and the following example.
If you have severe breakage—like snapper is gone for some reason and you can't
get it back—you'll have to resort to more extreme methods, such as taking a
snapshot of the pre snapshot and making it the default subvolume or mounting it
as \fI/\fR. Most likely you'll need to use a live USB to get into a chroot
environment to do any of these things. Snapper has a snapper rollback feature,
but your setup has to be properly configured to use it. The exact procedure
depends on your specific setup. Be careful.
.SH CONFIGURATION
Configuration is done via the snapper configuration files, with extra variables
specific to these pacman hooks (see \fBsnapper-configs\fR(5)). The defaults
of the following should be suitable for most users.
The following are possible settings you can place in each snapper configuration
file (e.g., \fI/etc/snapper/configs/root\fR, etc.). Follow the pattern of other
variables in the configuration file (VAR=setting).
\fBPACMAN_PRE_POST=\fR\fB\fIyes\fR\fR\fB or \fR\fB\fIno\fR\fR
.RS 4
Perform pacman pre/post snapshots for this configuration.
Default is "no", except for the root configuration which is "yes".
.RE
.BR PACMAN_CLEANUP_ALGORITHM
.RS 4
Snapper algorithm used in cleaning up the pacman pre/post snapshots. See \fBsnapper\fR(8) for list of valid options.
Default is "number".
.RE
\fBPACMAN_PRE_DESCRIPTION=\fR\fB\fIstring\fR\fR
.RS 4
snapper description used for the pacman pre snapshot.
Default is the parent program (usually pacman) that called the snapshot script.
.RE
\fBPACMAN_POST_DESCRIPTION=\fR\fB\fIstring\fR\fR
.RS 4
snapper description used for the pacman post snapshot.
Default is the parent program (usually pacman) that called the snapshot script.
.RE
The following setting can be changed in the snapper configuration file
\fI/etc/conf.d/snapper\fR:
\fBPACMAN_ABORT_ON_FAIL=\fR\fB\fIyes\fR\fR\fB or \fR\fB\fIno\fR\fR
.RS 4
When set to "yes" this causes pacman to abort a transaction if the snap-pac pre
hook fails. This prevents an upgrade/installation/removal from occurring if a
pre snapshot cannot be performed.
Default is "no".
.RE
.SH EXAMPLE
Installing the nano package as normal:
.EX
# pacman -S nano
resolving dependencies...
looking for conflicting packages...
Packages (1) nano-2.5.3-1
Total Installed Size: 2.14 MiB
:: Proceed with installation? [Y/n] Y
(1/1) checking keys in keyring [######################################] 100%
(1/1) checking package integrity [######################################] 100%
(1/1) loading package files [######################################] 100%
(1/1) checking for file conflicts [######################################] 100%
(1/1) checking available disk space [######################################] 100%
:: Running pre-transaction hooks...
(1/1) Performing snapper pre snapshots for the following configurations...
root: 1033
:: Processing package changes...
(1/1) installing nano [######################################] 100%
:: Running post-transaction hooks...
(1/1) Performing snapper post snapshots for the following configurations...
root: 1034
.EE
The snapper snapshot number is given for each snapper configuration that is
used. Tip: this is also logged in pacman's log).
And here are the snapshots:
.EX
# snapper -c root list -t pre-post | tail -n 1
1033 | 1034 | Fri 22 Apr 2016 01:54:13 PM CDT | Fri 22 Apr 2016 01:54:14 PM CDT | pacman -S nano |
.EE
What changed?
.EX
# snapper -c root status 1033..1034
+..... /etc/nanorc
c..... /etc/snapper/.snap-pac-pre
+..... /usr/bin/nano
+..... /usr/bin/rnano
+..... /usr/share/doc/nano
+..... /usr/share/doc/nano/faq.html
+..... /usr/share/doc/nano/fr
+..... /usr/share/doc/nano/fr/nano.1.html
+..... /usr/share/doc/nano/fr/nanorc.5.html
+..... /usr/share/doc/nano/fr/rnano.1.html
.EE
I truncated the above output, but it continues. See the manpage for snapper to
see what each symbol means. You can also do snapper diff in the same way—I'll
spare you that one.
To undo the upgrade:
.EX
# snapper -c root undochange 1033..1034
create:0 modify:3 delete:100
.EE
And nano is now gone, along with all the files it changed:
.EX
$ pacman -Qi nano
error: package 'nano' was not found
.EE
.SH TROUBLESHOOTING
.SS ERROR: \fI/etc/conf.d/snapper\fR does not exist!
snap-pac reads in the snapper configurations from \fI/etc/conf.d/snapper\fR. It can't
do that if the file doesn't exist. I'm not sure what you've done to not have it
exist in the default location.
.SS WARNING: No snapper configurations found, so not taking any snapshots!
No snapper configurations were found in \fI/etc/conf.d/snapper\fR. This means you
haven't created any configurations yet using snapper create-config. See the
snapper manpage on how to do this.
.SS WARNING: No snapper configurations are set up for snapshots to be taken!
Although you seem to have created at least one snapper configuration, none of
them are set up for snap-pac's pacman hooks. By default snap-pac will take
snapshots for the root configuration and any other configuration which has
PACMAN_PRE_POST set to yes in its configuration file. This message means you
don't have a snapper configuration named root (or PACMAN_PRE_POST is set to no
for it) and no other configuration is set up for snapshots. See configuration.
.SS WARNING: prefile does not exist, so no post snapshot will be taken. If you are initially installing snap-pac, this is normal.
snap-pac saves the pre snapshot's number in a temporary file. Somehow it got
removed before the post snapshot could be taken. When you initially install
snap-pac the post hook is run, but the pre hook never was, so this message will
show up then as well and is safe to ignore in that circumstance.
.SS WARNING: Didn't find pacman running.
The script gets the description from the pacman command that was run. If you get
this warning it looks like you may have run the script directly instead of
letting it run through pacman's hooks.
.SS ERROR: Unable to use snapper without dbus. Are you in a chroot environment?
Snapper requires dbus. If you chroot into another environment, dbus will not be
available, so snapper can't take snapshots. Although snapper can be set up to
not need dbus, this is a simple way to check if one is in a chroot and avoid
attempting snapshots in it.
.SS After restoring snapshot from snap-pac, pacman database is locked
The pre/post snaphots are taken while pacman is running, so this is expected.
Follow the instructions pacman gives you (e.g., removing the lock file).
.SS snap-pac is only taking snapshots of the root configuration
That's the default behavior. See \fBCONFIGURATION\fR.
.SH FAQ
.SS Does snap-pac backup non-btrfs /boot partitions?
Nope. But you can add hook that does it for you. It would be something like the
following:
.EX
[Trigger]
Operation = Upgrade
Operation = Install
Operation = Remove
Type = Package
Target = linux
[Action]
Description = Backing up /boot...
When = PreTransaction
Exec = /usr/bin/rsync -avzq --delete /boot /.bootbackup
.EE
.SH HOMEPAGE
https://github.com/wesbarnett
.SH AUTHORS
Wes Barnett <wes@wbarnett.us>
.SH SEE ALSO
.BR alpm-hooks (5),
.BR snapper (8),
.BR snapper-configs (5),
.BR pacman (8)