summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2017-09-01 14:57:53 -0400
committerAtomic Bot <atomic-devel@projectatomic.io>2017-09-01 21:34:33 +0000
commit517dd9c9648f6d1508343429086ac5a471bea7ec (patch)
tree199dfa66ba7df7de5b03a74877ccc0e091c74d71 /src
parentaef5a7331e112f4d8c3ce7ccc4abcc4b6c2a2c76 (diff)
downloadostree-517dd9c9648f6d1508343429086ac5a471bea7ec.tar.gz
bin/admin: Change init-fs to stop loading a sysroot to init one
This is exactly analogous to the `ostree init` case where we have `OSTREE_BUILTIN_FLAG_NO_REPO` to avoid trying to load a repo when we're creating one. Let's avoid the pointless sysroot for `init-fs`; among other things this will then let us do `ostree_sysroot_load()` inside the argument parsing, and drop it from every other user. Closes: #1123 Approved by: jlebon
Diffstat (limited to 'src')
-rw-r--r--src/ostree/ot-admin-builtin-init-fs.c54
-rw-r--r--src/ostree/ot-main.c7
-rw-r--r--src/ostree/ot-main.h5
3 files changed, 34 insertions, 32 deletions
diff --git a/src/ostree/ot-admin-builtin-init-fs.c b/src/ostree/ot-admin-builtin-init-fs.c
index c1fa16b0..a92d67dc 100644
--- a/src/ostree/ot-admin-builtin-init-fs.c
+++ b/src/ostree/ot-admin-builtin-init-fs.c
@@ -41,57 +41,51 @@ static GOptionEntry options[] = {
gboolean
ot_admin_builtin_init_fs (int argc, char **argv, GCancellable *cancellable, GError **error)
{
- g_autoptr(GOptionContext) context = NULL;
- g_autoptr(OstreeSysroot) sysroot = NULL;
- gboolean ret = FALSE;
- glnx_fd_close int root_dfd = -1;
- g_autoptr(OstreeSysroot) target_sysroot = NULL;
- guint i;
- const char *normal_toplevels[] = {"boot", "dev", "home", "proc", "run", "sys"};
-
- context = g_option_context_new ("PATH - Initialize a root filesystem");
+ g_autoptr(GOptionContext) context = g_option_context_new ("PATH - Initialize a root filesystem");
if (!ostree_admin_option_context_parse (context, options, &argc, &argv,
- OSTREE_ADMIN_BUILTIN_FLAG_SUPERUSER | OSTREE_ADMIN_BUILTIN_FLAG_UNLOCKED,
- &sysroot, cancellable, error))
- goto out;
+ OSTREE_ADMIN_BUILTIN_FLAG_SUPERUSER |
+ OSTREE_ADMIN_BUILTIN_FLAG_UNLOCKED |
+ OSTREE_ADMIN_BUILTIN_FLAG_NO_SYSROOT,
+ NULL, cancellable, error))
+ return FALSE;
if (argc < 2)
{
ot_util_usage_error (context, "PATH must be specified", error);
- goto out;
+ return FALSE;
}
- if (!glnx_opendirat (AT_FDCWD, argv[1], TRUE, &root_dfd, error))
- goto out;
- { g_autoptr(GFile) dir = g_file_new_for_path (argv[1]);
- target_sysroot = ostree_sysroot_new (dir);
- }
+ const char *sysroot_path = argv[1];
+
+ glnx_fd_close int root_dfd = -1;
+ if (!glnx_opendirat (AT_FDCWD, sysroot_path, TRUE, &root_dfd, error))
+ return FALSE;
- for (i = 0; i < G_N_ELEMENTS(normal_toplevels); i++)
+ const char *normal_toplevels[] = {"boot", "dev", "home", "proc", "run", "sys"};
+ for (guint i = 0; i < G_N_ELEMENTS (normal_toplevels); i++)
{
if (!glnx_shutil_mkdir_p_at (root_dfd, normal_toplevels[i], 0755,
cancellable, error))
- goto out;
+ return FALSE;
}
-
+
if (!glnx_shutil_mkdir_p_at (root_dfd, "root", 0700,
cancellable, error))
- goto out;
+ return FALSE;
if (!glnx_shutil_mkdir_p_at (root_dfd, "tmp", 01777,
cancellable, error))
- goto out;
+ return FALSE;
if (fchmodat (root_dfd, "tmp", 01777, 0) == -1)
{
glnx_set_prefix_error_from_errno (error, "chmod: %s", "tmp");
- goto out;
+ return FALSE;
}
+ g_autoptr(GFile) dir = g_file_new_for_path (sysroot_path);
+ g_autoptr(OstreeSysroot) sysroot = ostree_sysroot_new (dir);
+ if (!ostree_sysroot_ensure_initialized (sysroot, cancellable, error))
+ return FALSE;
- if (!ostree_sysroot_ensure_initialized (target_sysroot, cancellable, error))
- goto out;
-
- ret = TRUE;
- out:
- return ret;
+ return TRUE;
}
diff --git a/src/ostree/ot-main.c b/src/ostree/ot-main.c
index c8c3490e..48281c26 100644
--- a/src/ostree/ot-main.c
+++ b/src/ostree/ot-main.c
@@ -377,6 +377,13 @@ ostree_admin_option_context_parse (GOptionContext *context,
if (!ostree_option_context_parse (context, main_entries, argc, argv, OSTREE_BUILTIN_FLAG_NO_REPO, NULL, cancellable, error))
return FALSE;
+ if (flags & OSTREE_ADMIN_BUILTIN_FLAG_NO_SYSROOT)
+ {
+ g_assert_null (out_sysroot);
+ /* Early return if no sysroot is requested */
+ return TRUE;
+ }
+
g_autoptr(GFile) sysroot_path = NULL;
if (opt_sysroot != NULL)
sysroot_path = g_file_new_for_path (opt_sysroot);
diff --git a/src/ostree/ot-main.h b/src/ostree/ot-main.h
index c7db4a07..ddf52959 100644
--- a/src/ostree/ot-main.h
+++ b/src/ostree/ot-main.h
@@ -33,8 +33,9 @@ typedef enum {
typedef enum {
OSTREE_ADMIN_BUILTIN_FLAG_NONE = 0,
- OSTREE_ADMIN_BUILTIN_FLAG_SUPERUSER = 1 << 0,
- OSTREE_ADMIN_BUILTIN_FLAG_UNLOCKED = 1 << 1
+ OSTREE_ADMIN_BUILTIN_FLAG_SUPERUSER = (1 << 0),
+ OSTREE_ADMIN_BUILTIN_FLAG_UNLOCKED = (1 << 1),
+ OSTREE_ADMIN_BUILTIN_FLAG_NO_SYSROOT = (1 << 2),
} OstreeAdminBuiltinFlags;
typedef struct {