summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2020-05-04 10:02:16 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2020-05-04 10:02:16 +0200
commit9942e77e8a0aa0ff2d87e2bc612acca7fe569107 (patch)
tree6603d3e026e0d272b3cc3bf3d019bb28065063ee
parentd4615e73ed54ca90db666e4c846635a3e8292994 (diff)
downloadNetworkManager-9942e77e8a0aa0ff2d87e2bc612acca7fe569107.tar.gz
initrd: add command line option to specify initrd data directory
-rw-r--r--man/nm-initrd-generator.xml14
-rw-r--r--src/initrd/nm-initrd-generator.c20
2 files changed, 29 insertions, 5 deletions
diff --git a/man/nm-initrd-generator.xml b/man/nm-initrd-generator.xml
index df2cf12a4b..c3594a4e2a 100644
--- a/man/nm-initrd-generator.xml
+++ b/man/nm-initrd-generator.xml
@@ -77,6 +77,20 @@
<varlistentry>
<term>
<group choice='plain'>
+ <arg choice='plain'><option>-i</option></arg>
+ <arg choice='plain'><option>--initrd-data-dir</option></arg>
+ </group>
+ <arg choice='plain'><replaceable>path</replaceable></arg>
+ </term>
+
+ <listitem>
+ <para>Output directory for initrd data (e.g. hostname).</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <group choice='plain'>
<arg choice='plain'><option>-d</option></arg>
<arg choice='plain'><option>--sysfs-dir</option></arg>
</group>
diff --git a/src/initrd/nm-initrd-generator.c b/src/initrd/nm-initrd-generator.c
index dccb21f87f..974213ba17 100644
--- a/src/initrd/nm-initrd-generator.c
+++ b/src/initrd/nm-initrd-generator.c
@@ -64,24 +64,27 @@ err_out:
}
#define DEFAULT_SYSFS_DIR "/sys"
+#define DEFAULT_INITRD_DATA_DIR NMRUNDIR "/initrd"
int
main (int argc, char *argv[])
{
GHashTable *connections;
gs_free char *connections_dir = NULL;
+ gs_free char *initrd_dir = NULL;
gs_free char *sysfs_dir = NULL;
gboolean dump_to_stdout = FALSE;
gs_strfreev char **remaining = NULL;
GOptionEntry option_entries[] = {
- { "connections-dir", 'c', 0, G_OPTION_ARG_FILENAME, &connections_dir, "Output connection directory", NM_KEYFILE_PATH_NAME_RUN },
- { "sysfs-dir", 'd', 0, G_OPTION_ARG_FILENAME, &sysfs_dir, "The sysfs mount point", DEFAULT_SYSFS_DIR },
- { "stdout", 's', 0, G_OPTION_ARG_NONE, &dump_to_stdout, "Dump connections to standard output", NULL },
- { G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &remaining, NULL, NULL },
+ { "connections-dir", 'c', 0, G_OPTION_ARG_FILENAME, &connections_dir, "Output connection directory", NM_KEYFILE_PATH_NAME_RUN },
+ { "initrd-data-dir", 'i', 0, G_OPTION_ARG_FILENAME, &initrd_dir, "Output initrd data directory", DEFAULT_INITRD_DATA_DIR },
+ { "sysfs-dir", 'd', 0, G_OPTION_ARG_FILENAME, &sysfs_dir, "The sysfs mount point", DEFAULT_SYSFS_DIR },
+ { "stdout", 's', 0, G_OPTION_ARG_NONE, &dump_to_stdout, "Dump connections to standard output", NULL },
+ { G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &remaining, NULL, NULL },
{ NULL }
};
GOptionContext *option_context;
- GError *error = NULL;
+ gs_free_error GError *error = NULL;
int errsv;
option_context = g_option_context_new ("-- [ip=...] [rd.route=...] [bridge=...] [bond=...] [team=...] [vlan=...] "
@@ -108,6 +111,8 @@ main (int argc, char *argv[])
connections_dir = g_strdup (NM_KEYFILE_PATH_NAME_RUN);
if (!sysfs_dir)
sysfs_dir = g_strdup (DEFAULT_SYSFS_DIR);
+ if (!initrd_dir)
+ initrd_dir = g_strdup (DEFAULT_INITRD_DATA_DIR);
if (dump_to_stdout)
nm_clear_g_free (&connections_dir);
@@ -121,5 +126,10 @@ main (int argc, char *argv[])
g_hash_table_foreach (connections, output_conn, connections_dir);
g_hash_table_destroy (connections);
+ if (g_mkdir_with_parents (initrd_dir, 0755) != 0) {
+ errsv = errno;
+ _LOGW (LOGD_CORE, "%s: %s", initrd_dir, nm_strerror_native (errsv));
+ return 1;
+ }
return 0;
}