tmpfiles: automatically remove old machine snapshots at boot

Remove old temporary snapshots, but only at boot. Ideally we'd have
"self-destroying" btrfs snapshots that go away if the last last
reference to it does. To mimic a scheme like this at least remove the
old snapshots on fresh boots, where we know they cannot be referenced
anymore. Note that we actually remove all temporary files in
/var/lib/machines/ at boot, which should be safe since the directory has
defined semantics. In the root directory (where systemd-nspawn
--ephemeral places snapshots) we are more strict, to avoid removing
unrelated temporary files.

This also splits out nspawn/container related tmpfiles bits into a new
tmpfiles snippet to systemd-nspawn.conf
This commit is contained in:
Lennart Poettering 2015-06-15 19:24:43 +02:00
parent 1b26f09eb0
commit 770b5ce4fc
4 changed files with 27 additions and 4 deletions

View File

@ -2183,7 +2183,8 @@ dist_tmpfiles_DATA = \
tmpfiles.d/tmp.conf \
tmpfiles.d/x11.conf \
tmpfiles.d/var.conf \
tmpfiles.d/home.conf
tmpfiles.d/home.conf \
tmpfiles.d/systemd-nspawn.conf
if HAVE_SYSV_COMPAT
dist_tmpfiles_DATA += \

View File

@ -4522,9 +4522,9 @@ int main(int argc, char *argv[]) {
goto finish;
}
if (r > 0)
r = tempfn_random_child(arg_directory, NULL, &np);
r = tempfn_random_child(arg_directory, "machine.", &np);
else
r = tempfn_random(arg_directory, NULL, &np);
r = tempfn_random(arg_directory, "machine.", &np);
if (r < 0) {
log_error_errno(r, "Failed to generate name for snapshot: %m");
goto finish;

View File

@ -0,0 +1,23 @@
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
# See tmpfiles.d(5) for details
v /var/lib/machines 0700 - - -
# Remove old temporary snapshots, but only at boot. Ideally we'd have
# "self-destroying" btrfs snapshots that go away if the last last
# reference to it does. To mimic a scheme like this at least remove
# the old snapshots on fresh boots, where we know they cannot be
# referenced anymore. Note that we actually remove all temporary files
# in /var/lib/machines/ at boot, which should be safe since the
# directory has defined semantics. In the root directory (where
# systemd-nspawn --ephemeral places snapshots) we are more strict, to
# avoid removing unrelated temporary files.
R! /var/lib/machines/.#*
R! /.#machine.*

View File

@ -18,6 +18,5 @@ f /var/log/btmp 0600 root utmp -
d /var/cache 0755 - - -
d /var/lib 0755 - - -
v /var/lib/machines 0700 - - -
d /var/spool 0755 - - -