108 lines
4.6 KiB
Diff
108 lines
4.6 KiB
Diff
|
From ee2deebc855d1db93b89000f3524b4e22e5d0d71 Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||
|
Date: Tue, 5 Sep 2017 11:30:33 +0200
|
||
|
Subject: [PATCH] cryptsetup-generator: use remote-cryptsetup.target when
|
||
|
_netdev is present
|
||
|
|
||
|
This allows such devices to depend on the network. Their startup will
|
||
|
be delayed similarly to network mount units.
|
||
|
|
||
|
Fixes #4642.
|
||
|
|
||
|
(cherry picked from commit b001ad61e91b6499897f0c977045c7608c233bfa)
|
||
|
(cherry picked from commit 8f21747f369f6d88768d1409d95527c60f2cd7c7)
|
||
|
---
|
||
|
man/crypttab.xml | 13 +++++++++++++
|
||
|
src/cryptsetup/cryptsetup-generator.c | 30 +++++++++++++++++-------------
|
||
|
2 files changed, 30 insertions(+), 13 deletions(-)
|
||
|
|
||
|
diff --git a/man/crypttab.xml b/man/crypttab.xml
|
||
|
index 17976f3704..162377ebc1 100644
|
||
|
--- a/man/crypttab.xml
|
||
|
+++ b/man/crypttab.xml
|
||
|
@@ -213,6 +213,19 @@
|
||
|
<option>size=</option>.</para></listitem>
|
||
|
</varlistentry>
|
||
|
|
||
|
+ <varlistentry>
|
||
|
+ <term><option>_netdev</option></term>
|
||
|
+
|
||
|
+ <listitem><para>Marks this cryptsetup device as requiring network. It will be
|
||
|
+ started after the network is available, similarly to
|
||
|
+ <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>
|
||
|
+ units marked with <option>_netdev</option>. The service unit to set up this device
|
||
|
+ will be ordered between <filename>remote-cryptsetup-pre.target</filename> and
|
||
|
+ <filename>remote-cryptsetup.target</filename>, instead of
|
||
|
+ <filename>cryptsetup-pre.target</filename> and
|
||
|
+ <filename>cryptsetup.target</filename>.</para></listitem>
|
||
|
+ </varlistentry>
|
||
|
+
|
||
|
<varlistentry>
|
||
|
<term><option>noauto</option></term>
|
||
|
|
||
|
diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
|
||
|
index f10e9fdc24..7d3f480a2a 100644
|
||
|
--- a/src/cryptsetup/cryptsetup-generator.c
|
||
|
+++ b/src/cryptsetup/cryptsetup-generator.c
|
||
|
@@ -62,7 +62,7 @@ static int create_disk(
|
||
|
*filtered = NULL;
|
||
|
_cleanup_fclose_ FILE *f = NULL;
|
||
|
const char *dmname;
|
||
|
- bool noauto, nofail, tmp, swap;
|
||
|
+ bool noauto, nofail, tmp, swap, netdev;
|
||
|
int r;
|
||
|
|
||
|
assert(name);
|
||
|
@@ -72,6 +72,7 @@ static int create_disk(
|
||
|
nofail = fstab_test_yes_no_option(options, "nofail\0" "fail\0");
|
||
|
tmp = fstab_test_option(options, "tmp\0");
|
||
|
swap = fstab_test_option(options, "swap\0");
|
||
|
+ netdev = fstab_test_option(options, "_netdev\0");
|
||
|
|
||
|
if (tmp && swap) {
|
||
|
log_error("Device '%s' cannot be both 'tmp' and 'swap'. Ignoring.", name);
|
||
|
@@ -102,20 +103,22 @@ static int create_disk(
|
||
|
if (!f)
|
||
|
return log_error_errno(errno, "Failed to create unit file %s: %m", p);
|
||
|
|
||
|
- fputs("# Automatically generated by systemd-cryptsetup-generator\n\n"
|
||
|
- "[Unit]\n"
|
||
|
- "Description=Cryptography Setup for %I\n"
|
||
|
- "Documentation=man:crypttab(5) man:systemd-cryptsetup-generator(8) man:systemd-cryptsetup@.service(8)\n"
|
||
|
- "SourcePath=/etc/crypttab\n"
|
||
|
- "DefaultDependencies=no\n"
|
||
|
- "Conflicts=umount.target\n"
|
||
|
- "IgnoreOnIsolate=true\n"
|
||
|
- "After=cryptsetup-pre.target\n",
|
||
|
- f);
|
||
|
+ fprintf(f,
|
||
|
+ "# Automatically generated by systemd-cryptsetup-generator\n\n"
|
||
|
+ "[Unit]\n"
|
||
|
+ "Description=Cryptography Setup for %%I\n"
|
||
|
+ "Documentation=man:crypttab(5) man:systemd-cryptsetup-generator(8) man:systemd-cryptsetup@.service(8)\n"
|
||
|
+ "SourcePath=/etc/crypttab\n"
|
||
|
+ "DefaultDependencies=no\n"
|
||
|
+ "Conflicts=umount.target\n"
|
||
|
+ "IgnoreOnIsolate=true\n"
|
||
|
+ "After=%s\n",
|
||
|
+ netdev ? "remote-cryptsetup-pre.target" : "cryptsetup-pre.target");
|
||
|
|
||
|
if (!nofail)
|
||
|
fprintf(f,
|
||
|
- "Before=cryptsetup.target\n");
|
||
|
+ "Before=%s\n",
|
||
|
+ netdev ? "remote-cryptsetup.target" : "cryptsetup.target");
|
||
|
|
||
|
if (password) {
|
||
|
if (STR_IN_SET(password, "/dev/urandom", "/dev/random", "/dev/hw_random"))
|
||
|
@@ -191,7 +194,8 @@ static int create_disk(
|
||
|
if (r < 0)
|
||
|
return r;
|
||
|
|
||
|
- r = generator_add_symlink(arg_dest, "cryptsetup.target",
|
||
|
+ r = generator_add_symlink(arg_dest,
|
||
|
+ netdev ? "remote-cryptsetup.target" : "cryptsetup.target",
|
||
|
nofail ? "wants" : "requires", n);
|
||
|
if (r < 0)
|
||
|
return r;
|