Zbigniew Jędrzejewski-Szmek 5509c0
From ed5678903964de92ba74baf2e5597914a3d44583 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 5509c0
From: Lennart Poettering <lennart@poettering.net>
Zbigniew Jędrzejewski-Szmek 5509c0
Date: Wed, 18 Jun 2014 00:07:56 +0200
Zbigniew Jędrzejewski-Szmek 5509c0
Subject: [PATCH] cryptsetup: introduce new cryptsetup-pre.traget unit so that
Zbigniew Jędrzejewski-Szmek 5509c0
 services can make sure they are started before and stopped after any LUKS
Zbigniew Jędrzejewski-Szmek 5509c0
 setup
Zbigniew Jędrzejewski-Szmek 5509c0
Zbigniew Jędrzejewski-Szmek 5509c0
https://bugzilla.redhat.com/show_bug.cgi?id=1097938
Zbigniew Jędrzejewski-Szmek 5509c0
(cherry picked from commit 9542239eaf481decca6c254dffb3f2b4e716545e)
Zbigniew Jędrzejewski-Szmek 5509c0
---
Zbigniew Jędrzejewski-Szmek 5509c0
 Makefile.am                           |  3 ++-
Zbigniew Jędrzejewski-Szmek 5509c0
 man/systemd.special.xml               | 22 ++++++++++++++++++++++
Zbigniew Jędrzejewski-Szmek 5509c0
 src/cryptsetup/cryptsetup-generator.c |  2 +-
Zbigniew Jędrzejewski-Szmek 5509c0
 units/cryptsetup-pre.target           | 11 +++++++++++
Zbigniew Jędrzejewski-Szmek 5509c0
 4 files changed, 36 insertions(+), 2 deletions(-)
Zbigniew Jędrzejewski-Szmek 5509c0
 create mode 100644 units/cryptsetup-pre.target
Zbigniew Jędrzejewski-Szmek 5509c0
Zbigniew Jędrzejewski-Szmek 5509c0
diff --git a/Makefile.am b/Makefile.am
Zbigniew Jędrzejewski-Szmek 5509c0
index cb9b1fa8..75d62f06 100644
Zbigniew Jędrzejewski-Szmek 5509c0
--- a/Makefile.am
Zbigniew Jędrzejewski-Szmek 5509c0
+++ b/Makefile.am
Zbigniew Jędrzejewski-Szmek 5509c0
@@ -3846,7 +3846,8 @@ systemgenerator_PROGRAMS += \
Zbigniew Jędrzejewski-Szmek 5509c0
 	systemd-cryptsetup-generator
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
 dist_systemunit_DATA += \
Zbigniew Jędrzejewski-Szmek 5509c0
-	units/cryptsetup.target
Zbigniew Jędrzejewski-Szmek 5509c0
+	units/cryptsetup.target \
Zbigniew Jędrzejewski-Szmek 5509c0
+	units/cryptsetup-pre.target
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
 systemd_cryptsetup_SOURCES = \
Zbigniew Jędrzejewski-Szmek 5509c0
 	src/cryptsetup/cryptsetup.c
Zbigniew Jędrzejewski-Szmek 5509c0
diff --git a/man/systemd.special.xml b/man/systemd.special.xml
Zbigniew Jędrzejewski-Szmek 5509c0
index cda6edd4..f29cc23c 100644
Zbigniew Jędrzejewski-Szmek 5509c0
--- a/man/systemd.special.xml
Zbigniew Jędrzejewski-Szmek 5509c0
+++ b/man/systemd.special.xml
Zbigniew Jędrzejewski-Szmek 5509c0
@@ -52,6 +52,7 @@
Zbigniew Jędrzejewski-Szmek 5509c0
                 <filename>bluetooth.target</filename>,
Zbigniew Jędrzejewski-Szmek 5509c0
                 <filename>ctrl-alt-del.target</filename>,
Zbigniew Jędrzejewski-Szmek 5509c0
                 <filename>cryptsetup.target</filename>,
Zbigniew Jędrzejewski-Szmek 5509c0
+                <filename>cryptsetup-pre.target</filename>,
Zbigniew Jędrzejewski-Szmek 5509c0
                 <filename>dbus.service</filename>,
Zbigniew Jędrzejewski-Szmek 5509c0
                 <filename>dbus.socket</filename>,
Zbigniew Jędrzejewski-Szmek 5509c0
                 <filename>default.target</filename>,
Zbigniew Jędrzejewski-Szmek 5509c0
@@ -841,6 +842,27 @@
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
                 <variablelist>
Zbigniew Jędrzejewski-Szmek 5509c0
                         <varlistentry>
Zbigniew Jędrzejewski-Szmek 5509c0
+                                <term><filename>cryptsetup-pre.target</filename></term>
Zbigniew Jędrzejewski-Szmek 5509c0
+                                <listitem>
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        <para>This passive target unit
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        may be pulled in by services
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        that want to run before any
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        encrypted block device is set
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        up. All encrypted block
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        devices are set up after this
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        target has been reached. Since
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        the shutdown order is
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        implicitly the reverse
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        start-up order between units
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        this target is particularly
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        useful to ensure that a
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        service is shut down only
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        after all encrypted block
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        devices are fully
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        stopped.</para>
Zbigniew Jędrzejewski-Szmek 5509c0
+                                </listitem>
Zbigniew Jędrzejewski-Szmek 5509c0
+                        </varlistentry>
Zbigniew Jędrzejewski-Szmek 5509c0
+                        <varlistentry>
Zbigniew Jędrzejewski-Szmek 5509c0
                                 <term><filename>local-fs-pre.target</filename></term>
Zbigniew Jędrzejewski-Szmek 5509c0
                                 <listitem>
Zbigniew Jędrzejewski-Szmek 5509c0
                                         <para>This target unit is
Zbigniew Jędrzejewski-Szmek 5509c0
diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
Zbigniew Jędrzejewski-Szmek 5509c0
index f4eeb2ad..dfdca1e4 100644
Zbigniew Jędrzejewski-Szmek 5509c0
--- a/src/cryptsetup/cryptsetup-generator.c
Zbigniew Jędrzejewski-Szmek 5509c0
+++ b/src/cryptsetup/cryptsetup-generator.c
Zbigniew Jędrzejewski-Szmek 5509c0
@@ -127,7 +127,7 @@ static int create_disk(
Zbigniew Jędrzejewski-Szmek 5509c0
                 "Conflicts=umount.target\n"
Zbigniew Jędrzejewski-Szmek 5509c0
                 "BindsTo=dev-mapper-%i.device\n"
Zbigniew Jędrzejewski-Szmek 5509c0
                 "IgnoreOnIsolate=true\n"
Zbigniew Jędrzejewski-Szmek 5509c0
-                "After=systemd-readahead-collect.service systemd-readahead-replay.service\n",
Zbigniew Jędrzejewski-Szmek 5509c0
+                "After=systemd-readahead-collect.service systemd-readahead-replay.service cryptsetup-pre.target\n",
Zbigniew Jędrzejewski-Szmek 5509c0
                 f);
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
         if (!nofail)
Zbigniew Jędrzejewski-Szmek 5509c0
diff --git a/units/cryptsetup-pre.target b/units/cryptsetup-pre.target
Zbigniew Jędrzejewski-Szmek 5509c0
new file mode 100644
Zbigniew Jędrzejewski-Szmek 5509c0
index 00000000..65353419
Zbigniew Jędrzejewski-Szmek 5509c0
--- /dev/null
Zbigniew Jędrzejewski-Szmek 5509c0
+++ b/units/cryptsetup-pre.target
Zbigniew Jędrzejewski-Szmek 5509c0
@@ -0,0 +1,11 @@
Zbigniew Jędrzejewski-Szmek 5509c0
+#  This file is part of systemd.
Zbigniew Jędrzejewski-Szmek 5509c0
+#
Zbigniew Jędrzejewski-Szmek 5509c0
+#  systemd is free software; you can redistribute it and/or modify it
Zbigniew Jędrzejewski-Szmek 5509c0
+#  under the terms of the GNU Lesser General Public License as published by
Zbigniew Jędrzejewski-Szmek 5509c0
+#  the Free Software Foundation; either version 2.1 of the License, or
Zbigniew Jędrzejewski-Szmek 5509c0
+#  (at your option) any later version.
Zbigniew Jędrzejewski-Szmek 5509c0
+
Zbigniew Jędrzejewski-Szmek 5509c0
+[Unit]
Zbigniew Jędrzejewski-Szmek 5509c0
+Description=Encrypted Volumes (Pre)
Zbigniew Jędrzejewski-Szmek 5509c0
+Documentation=man:systemd.special(7)
Zbigniew Jędrzejewski-Szmek 5509c0
+RefuseManualStart=yes