This commit is contained in:
wesbarnett 2021-03-13 10:23:32 +00:00
parent 1129f39f60
commit e89da8d510
23 changed files with 1029 additions and 15 deletions

Binary file not shown.

Binary file not shown.

BIN
.doctrees/examples.doctree Normal file

Binary file not shown.

BIN
.doctrees/faq.doctree Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,34 @@
Configuration
=============
.. toctree::
:maxdepth: 2
Configuration is done via Python ini configuration files. The defaults
should be suitable for most users, so you may not need to do any configuration at all.
By default only the ``root`` snapper configuration is snapshotted.
A commented example configuration files is located at ``/etc/snap-pac.ini.example``.
To configure, copy the example configuration file:
.. code-block:: bash
cp /etc/snap-pac.ini{.example,}
Then edit with your favorite editor. The file is commented and should be
self-explanatory.
Each section corresponds with a snapper configuration. Add additional sections to add
other snapper configurations to be snapshotted. By default, only the root configuration
is snapshotted.
Environment Variables
---------------------
To temporarily prevent snapshots from being performed for a single pacman
command, set the environment variable ``SNAP_PAC_SKIP``. For example:
.. code-block:: bash
sudo SNAP_PAC_SKIP=y pacman -Syu

92
_sources/examples.rst.txt Normal file
View file

@ -0,0 +1,92 @@
Example
=======
.. toctree::
:maxdepth: 2
Here is an example of how the snapshots are created and how to rollback and pacman
transaction. Here the nano package is installed:
.. code-block:: bash
pacman -S nano
.. code-block:: none
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
The snapper snapshot number is given for each snapper configuration that is used. This
is also logged in pacman's log.
Here are the snapshots created before and after the pacman transaction:
.. code-block:: bash
snapper -c root list -t pre-post | tail -n 1
.. code-block:: none
1033 | 1034 | Fri 22 Apr 2016 01:54:13 PM CDT | Fri 22 Apr 2016 01:54:14 PM CDT | pacman -S nano |
Here is what changed during the transaction:
.. code-block:: bash
snapper -c root status 1033..1034
.. code-block:: none
+..... /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
The above output is truncated, but it continues. See the `snapper(8)
<http://snapper.io/manpages/snapper.html>`_ to for what each symbol means. You can also
do ``snapper diff`` in the same way.
Then, to undo the pacman transaction:
.. code-block:: bash
snapper -c root undochange 1033..1034
.. code-block:: none
create:0 modify:3 delete:100
Now nano is no longer installed, along with all the files it changed:
.. code-block:: bash
pacman -Qi nano
.. code-block:: none
error: package 'nano' was not found

42
_sources/faq.rst.txt Normal file
View file

@ -0,0 +1,42 @@
FAQ
===
.. toctree::
:maxdepth: 2
**Does snap-pac backup non-btrfs /boot partitions?**
No, but you can add a hook that does it for you. It would be something like the following:
.. code-block:: none
[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
**How do I link old kernel modules automatically when the kernel is upgraded?**
This behavior is no longer a part of this package. Use a pacman hook like the following:
.. code-block:: none
[Trigger]
Operation = Upgrade
Operation = Install
Operation = Remove
Type = Package
Target = linux
[Action]
Description = Symlinking old kernel modules...
When = PostTransaction
Exec = /usr/bin/bash -c "find /usr/lib/modules -xtype l -delete; ln -sv /.snapshots/$(snapper -c root list | awk 'END{print $1}')/snapshot/usr/lib/modules/$(uname -r) /usr/lib/modules/"

View file

@ -8,13 +8,34 @@ Welcome to snap-pac's documentation!
.. toctree::
:maxdepth: 2
:caption: Contents:
installation
configuration
examples
troubleshooting
faq
This is a set of `pacman <https://archlinux.org/pacman/>`_ hooks and script that causes
`snapper <http://snapper.io/>`_ to automatically take a pre and post snapshot before and
after pacman transactions, similar to how `YaST <https://yast.opensuse.org/>`_ does with
OpenSuse. This provides a simple way to undo changes to a system after a pacman
transaction.
Indices and tables
==================
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, so that the user can easily find which changes he or she may want to
revert.
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
To undo changes from a pacman transaction, use ``snapper undochange``. See the `snapper
documentation <http://snapper.io/documentation.html>`_ for more details as well as
examples.
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 /. 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.

View file

@ -0,0 +1,30 @@
Installation
============
Install the ``snap-pac`` package using pacman:
.. code-block:: bash
pacman -S snap-pac
Alternatively download the `latest release and signature
<https://github.com/wesbarnett/snap-pac/releases>`_. Then, verify the download:
.. code-block:: bash
gpg --verify snap-pac-<version>.tar.gz.sig
where ``<version>`` is the version number you downloaded.
Finally, run:
.. code-block:: bash
make install
I have signed the release tarball and commits with my PGP key. Starting with release
2.2, the tarballs are signed with my key with fingerprint
``F7B28C61944FE30DABEEB0B01070BCC98C18BD66``.
For previous releases, the key's fingerprint was
``8535CEF3F3C38EE69555BF67E4B5E45AA3B8C5C3``.

View file

@ -0,0 +1,23 @@
Troubleshooting
===============
.. toctree::
:maxdepth: 2
**snap-pac is only taking snapshots of the root configuration.**
That's the default behavior. See :doc:`configuration`.
**No snapshots are being taken when I run pacman.**
No snapper configurations 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
SNAPSHOT set to yes in its configuration file. See :doc:`configuration`.
**After restoring snapshot from snap-pac, the 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). You can add the
database lock file to a snapper filter so that snapper won't consider it when
performing snapper diff, snapper status, snapper undochange, etc. See the Filters
section in `snapper(8) <http://snapper.io/manpages/snapper.html>`_ for more information.

137
configuration.html Normal file
View file

@ -0,0 +1,137 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Configuration &#8212; snap-pac documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
<script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Example" href="examples.html" />
<link rel="prev" title="Installation" href="installation.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="configuration">
<h1>Configuration<a class="headerlink" href="#configuration" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
</div>
<p>Configuration is done via Python ini configuration files. The defaults
should be suitable for most users, so you may not need to do any configuration at all.
By default only the <code class="docutils literal notranslate"><span class="pre">root</span></code> snapper configuration is snapshotted.</p>
<p>A commented example configuration files is located at <code class="docutils literal notranslate"><span class="pre">/etc/snap-pac.ini.example</span></code>.</p>
<p>To configure, copy the example configuration file:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>cp /etc/snap-pac.ini<span class="o">{</span>.example,<span class="o">}</span>
</pre></div>
</div>
<p>Then edit with your favorite editor. The file is commented and should be
self-explanatory.</p>
<p>Each section corresponds with a snapper configuration. Add additional sections to add
other snapper configurations to be snapshotted. By default, only the root configuration
is snapshotted.</p>
<div class="section" id="environment-variables">
<h2>Environment Variables<a class="headerlink" href="#environment-variables" title="Permalink to this headline"></a></h2>
<p>To temporarily prevent snapshots from being performed for a single pacman
command, set the environment variable <code class="docutils literal notranslate"><span class="pre">SNAP_PAC_SKIP</span></code>. For example:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo <span class="nv">SNAP_PAC_SKIP</span><span class="o">=</span>y pacman -Syu
</pre></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">snap-pac</a></h1>
<h3>Navigation</h3>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Configuration</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#environment-variables">Environment Variables</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Example</a></li>
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li>Previous: <a href="installation.html" title="previous chapter">Installation</a></li>
<li>Next: <a href="examples.html" title="next chapter">Example</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Wes Barnett, PhD.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="_sources/configuration.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

184
examples.html Normal file
View file

@ -0,0 +1,184 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Example &#8212; snap-pac documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
<script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Troubleshooting" href="troubleshooting.html" />
<link rel="prev" title="Configuration" href="configuration.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="example">
<h1>Example<a class="headerlink" href="#example" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
</div>
<p>Here is an example of how the snapshots are created and how to rollback and pacman
transaction. Here the nano package is installed:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>pacman -S nano
</pre></div>
</div>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>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...
=&gt; root: 1033
:: Processing package changes...
(1/1) installing nano [######################################] 100%
:: Running post-transaction hooks...
(1/1) Performing snapper post snapshots for the following configurations...
=&gt; root: 1034
</pre></div>
</div>
<p>The snapper snapshot number is given for each snapper configuration that is used. This
is also logged in pacmans log.</p>
<p>Here are the snapshots created before and after the pacman transaction:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>snapper -c root list -t pre-post <span class="p">|</span> tail -n <span class="m">1</span>
</pre></div>
</div>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>1033 | 1034 | Fri 22 Apr 2016 01:54:13 PM CDT | Fri 22 Apr 2016 01:54:14 PM CDT | pacman -S nano |
</pre></div>
</div>
<p>Here is what changed during the transaction:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>snapper -c root status <span class="m">1033</span>..1034
</pre></div>
</div>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>+..... /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
</pre></div>
</div>
<p>The above output is truncated, but it continues. See the <a class="reference external" href="http://snapper.io/manpages/snapper.html">snapper(8)</a> to for what each symbol means. You can also
do <code class="docutils literal notranslate"><span class="pre">snapper</span> <span class="pre">diff</span></code> in the same way.</p>
<p>Then, to undo the pacman transaction:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>snapper -c root undochange <span class="m">1033</span>..1034
</pre></div>
</div>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>create:0 modify:3 delete:100
</pre></div>
</div>
<p>Now nano is no longer installed, along with all the files it changed:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>pacman -Qi nano
</pre></div>
</div>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>error: package &#39;nano&#39; was not found
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">snap-pac</a></h1>
<h3>Navigation</h3>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Example</a><ul class="simple">
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li>Previous: <a href="configuration.html" title="previous chapter">Configuration</a></li>
<li>Next: <a href="troubleshooting.html" title="next chapter">Troubleshooting</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Wes Barnett, PhD.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="_sources/examples.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

143
faq.html Normal file
View file

@ -0,0 +1,143 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>FAQ &#8212; snap-pac documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
<script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="prev" title="Troubleshooting" href="troubleshooting.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="faq">
<h1>FAQ<a class="headerlink" href="#faq" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
</div>
<p><strong>Does snap-pac backup non-btrfs /boot partitions?</strong></p>
<p>No, but you can add a hook that does it for you. It would be something like the following:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>[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
</pre></div>
</div>
<p><strong>How do I link old kernel modules automatically when the kernel is upgraded?</strong></p>
<p>This behavior is no longer a part of this package. Use a pacman hook like the following:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>[Trigger]
Operation = Upgrade
Operation = Install
Operation = Remove
Type = Package
Target = linux
[Action]
Description = Symlinking old kernel modules...
When = PostTransaction
Exec = /usr/bin/bash -c &quot;find /usr/lib/modules -xtype l -delete; ln -sv /.snapshots/$(snapper -c root list | awk &#39;END{print $1}&#39;)/snapshot/usr/lib/modules/$(uname -r) /usr/lib/modules/&quot;
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">snap-pac</a></h1>
<h3>Navigation</h3>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Example</a></li>
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">FAQ</a><ul class="simple">
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li>Previous: <a href="troubleshooting.html" title="previous chapter">Troubleshooting</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Wes Barnett, PhD.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="_sources/faq.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View file

@ -54,6 +54,13 @@
<h3>Navigation</h3>
<ul>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Example</a></li>
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>

View file

@ -14,6 +14,7 @@
<script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Installation" href="installation.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
@ -33,15 +34,44 @@
<div class="section" id="welcome-to-snap-pac-s-documentation">
<h1>Welcome to snap-pacs documentation!<a class="headerlink" href="#welcome-to-snap-pac-s-documentation" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
</div>
</div>
<div class="section" id="indices-and-tables">
<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline"></a></h1>
<ul class="simple">
<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li>
<li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></p></li>
<li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li>
<ul>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a><ul>
<li class="toctree-l2"><a class="reference internal" href="configuration.html#environment-variables">Environment Variables</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Example</a><ul class="simple">
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a><ul class="simple">
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a><ul class="simple">
</ul>
</li>
</ul>
</div>
<p>This is a set of <a class="reference external" href="https://archlinux.org/pacman/">pacman</a> hooks and script that causes
<a class="reference external" href="http://snapper.io/">snapper</a> to automatically take a pre and post snapshot before and
after pacman transactions, similar to how <a class="reference external" href="https://yast.opensuse.org/">YaST</a> does with
OpenSuse. This provides a simple way to undo changes to a system after a pacman
transaction.</p>
<p>Because these are pacman hooks, it doesnt 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, so that the user can easily find which changes he or she may want to
revert.</p>
<p>To undo changes from a pacman transaction, use <code class="docutils literal notranslate"><span class="pre">snapper</span> <span class="pre">undochange</span></code>. See the <a class="reference external" href="http://snapper.io/documentation.html">snapper
documentation</a> for more details as well as
examples.</p>
<p>If you have severe breakage—like snapper is gone for some reason and you cant get it
back—youll 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 /. Most likely youll
need to use a live USB to get into a chroot environment to do any of these things.
Snapper has a <code class="docutils literal notranslate"><span class="pre">snapper</span> <span class="pre">rollback</span></code> feature, but your setup has to be properly configured to
use it. The exact procedure depends on your specific setup. Be careful.</p>
</div>
@ -61,11 +91,19 @@
<h3>Navigation</h3>
<ul>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Example</a></li>
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="#">Documentation overview</a><ul>
<li>Next: <a href="installation.html" title="next chapter">Installation</a></li>
</ul></li>
</ul>
</div>

129
installation.html Normal file
View file

@ -0,0 +1,129 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Installation &#8212; snap-pac documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
<script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Configuration" href="configuration.html" />
<link rel="prev" title="Welcome to snap-pacs documentation!" href="index.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="installation">
<h1>Installation<a class="headerlink" href="#installation" title="Permalink to this headline"></a></h1>
<p>Install the <code class="docutils literal notranslate"><span class="pre">snap-pac</span></code> package using pacman:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>pacman -S snap-pac
</pre></div>
</div>
<p>Alternatively download the <a class="reference external" href="https://github.com/wesbarnett/snap-pac/releases">latest release and signature</a>. Then, verify the download:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>gpg --verify snap-pac-&lt;version&gt;.tar.gz.sig
</pre></div>
</div>
<p>where <code class="docutils literal notranslate"><span class="pre">&lt;version&gt;</span></code> is the version number you downloaded.</p>
<p>Finally, run:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>make install
</pre></div>
</div>
<p>I have signed the release tarball and commits with my PGP key. Starting with release
2.2, the tarballs are signed with my key with fingerprint
<code class="docutils literal notranslate"><span class="pre">F7B28C61944FE30DABEEB0B01070BCC98C18BD66</span></code>.</p>
<p>For previous releases, the keys fingerprint was
<code class="docutils literal notranslate"><span class="pre">8535CEF3F3C38EE69555BF67E4B5E45AA3B8C5C3</span></code>.</p>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">snap-pac</a></h1>
<h3>Navigation</h3>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Example</a></li>
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li>Previous: <a href="index.html" title="previous chapter">Welcome to snap-pacs documentation!</a></li>
<li>Next: <a href="configuration.html" title="next chapter">Configuration</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Wes Barnett, PhD.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="_sources/installation.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

Binary file not shown.

View file

@ -74,6 +74,13 @@
<h3>Navigation</h3>
<ul>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Example</a></li>
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>

View file

@ -1 +1 @@
Search.setIndex({docnames:["index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["index.rst"],objects:{},objnames:{},objtypes:{},terms:{index:0,modul:0,page:0,search:0},titles:["Welcome to snap-pac\u2019s documentation!"],titleterms:{document:0,indic:0,pac:0,snap:0,tabl:0,welcom:0}})
Search.setIndex({docnames:["configuration","examples","faq","index","installation","troubleshooting"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["configuration.rst","examples.rst","faq.rst","index.rst","installation.rst","troubleshooting.rst"],objects:{},objnames:{},objtypes:{},terms:{"100":1,"1033":1,"1034":1,"2016":1,"8535cef3f3c38ee69555bf67e4b5e45aa3b8c5c3":4,"default":[0,3,5],"final":4,"while":5,For:[0,4],That:5,The:[0,1,3,5],Then:[0,1,4],Use:2,abov:1,action:2,add:[0,2,5],addit:0,addition:3,after:[1,3,5],alia:3,all:[0,1],along:1,also:1,altern:4,ani:[0,3,5],apr:1,aur:3,automat:[2,3],avail:1,avzq:2,awk:2,back:[2,3],backup:2,bash:2,becaus:3,befor:[1,3],behavior:[2,5],being:[0,5],bin:[1,2],boot:2,bootbackup:2,breakag:3,btrf:2,call:3,can:[1,2,3,5],care:3,caus:3,cdt:1,chang:[1,3],check:1,chroot:3,command:[0,3],comment:0,commit:4,configur:[1,3,5],conflict:1,consid:5,continu:1,copi:0,correspond:0,creat:[1,3],databas:5,delet:[1,2],depend:[1,3],descript:[2,3],detail:3,diff:[1,5],directli:3,disk:1,doc:1,doe:[2,3],doesn:3,done:0,download:4,dure:[1,3],each:[0,1,3],easili:3,edit:0,editor:0,end:2,environ:3,error:1,etc:[0,1,5],exact:3,exampl:[0,3],exec:2,expect:5,explanatori:0,extrem:3,f7b28c61944fe30dabeeb0b01070bcc98c18bd66:4,faq:[1,3],favorit:0,featur:3,file:[0,1,5],filter:5,find:[2,3],fingerprint:4,follow:[1,2,5],found:1,fri:1,from:[0,3,5],get:3,give:5,given:1,gone:3,gpg:4,has:[3,5],have:[3,4],helper:3,here:1,hook:[1,2,3,5],how:[1,2,3],html:1,inform:5,ini:0,instal:[1,2,3],instruct:5,integr:1,its:5,kei:[1,4],kernel:2,keyr:1,latest:4,lib:2,like:[2,3],link:2,linux:2,list:[1,2],live:3,load:1,locat:0,lock:5,log:[1,3],longer:[1,2],look:1,mai:[0,3],make:[3,4],matter:3,mean:1,method:3,mib:1,modifi:1,modul:2,more:[3,5],most:[0,3],mount:3,nano:1,nanorc:1,need:[0,3],non:2,now:1,number:[1,3,4],old:2,onli:[0,5],opensus:3,oper:2,other:[0,5],output:[1,3],pac:[0,1,2,4,5],packag:[1,2,3,4],pacman:[0,1,2,3,4,5],part:2,partit:2,perform:[0,1,5],pgp:4,post:[1,3,5],posttransact:2,pre:[1,3,5],pretransact:2,prevent:0,previou:4,print:2,proce:1,procedur:3,process:1,properli:3,provid:3,python:0,reason:3,releas:4,remov:[2,3,5],resolv:1,resort:3,restor:5,revert:3,rnano:1,rollback:[1,3],root:[0,1,2,5],rsync:2,run:[1,4,5],same:1,screen:3,script:3,section:[0,5],see:[1,3,5],self:0,set:[0,3,5],setup:3,sever:3,share:1,she:3,should:0,sig:4,sign:4,signatur:4,similar:3,simpl:3,singl:0,size:1,snap:[0,1,2,4,5],snap_pac_skip:0,snaphot:5,snapper:[0,1,2,3,5],snapshot:[0,1,2,3,5],some:3,someth:2,space:1,specif:3,start:4,statu:[1,5],subvolum:3,sudo:0,suitabl:0,symbol:1,symlink:2,system:3,syu:0,tail:1,take:[3,5],taken:5,tar:4,tarbal:4,target:2,temporarili:0,thi:[1,2,3,5],thing:3,through:3,total:1,transact:[1,3],trigger:2,troubleshoot:3,truncat:1,type:2,unam:2,undo:[1,3],undochang:[1,3,5],upgrad:[2,3],usb:3,use:3,used:[1,3],user:[0,3],using:[3,4],usr:[1,2],variabl:3,verifi:4,version:4,via:0,wai:[1,3],want:3,well:3,what:1,when:[2,3,5],where:4,whether:3,which:[3,5],won:5,would:2,xtype:2,yast:3,yes:5,you:[0,1,2,3,4,5],your:[0,3]},titles:["Configuration","Example","FAQ","Welcome to snap-pac\u2019s documentation!","Installation","Troubleshooting"],titleterms:{configur:0,document:3,environ:0,exampl:1,faq:2,instal:4,pac:3,snap:3,troubleshoot:5,variabl:0,welcom:3}})

127
troubleshooting.html Normal file
View file

@ -0,0 +1,127 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Troubleshooting &#8212; snap-pac documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
<script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="FAQ" href="faq.html" />
<link rel="prev" title="Example" href="examples.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="troubleshooting">
<h1>Troubleshooting<a class="headerlink" href="#troubleshooting" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
</div>
<p><strong>snap-pac is only taking snapshots of the root configuration.</strong></p>
<p>Thats the default behavior. See <a class="reference internal" href="configuration.html"><span class="doc">Configuration</span></a>.</p>
<p><strong>No snapshots are being taken when I run pacman.</strong></p>
<p>No snapper configurations are set up for snap-pacs pacman hooks. By default snap-pac
will take snapshots for the root configuration and any other configuration which has
SNAPSHOT set to yes in its configuration file. See <a class="reference internal" href="configuration.html"><span class="doc">Configuration</span></a>.</p>
<p><strong>After restoring snapshot from snap-pac, the pacman database is locked.</strong></p>
<p>The pre/post snaphots are taken while pacman is running, so this is expected. Follow
the instructions pacman gives you (<em>e.g.</em>, removing the lock file). You can add the
database lock file to a snapper filter so that snapper wont consider it when
performing snapper diff, snapper status, snapper undochange, etc. See the Filters
section in <a class="reference external" href="http://snapper.io/manpages/snapper.html">snapper(8)</a> for more information.</p>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">snap-pac</a></h1>
<h3>Navigation</h3>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Example</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Troubleshooting</a><ul class="simple">
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li>Previous: <a href="examples.html" title="previous chapter">Example</a></li>
<li>Next: <a href="faq.html" title="next chapter">FAQ</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Wes Barnett, PhD.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="_sources/troubleshooting.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>