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
This commit is contained in:
parent
aef5a7331e
commit
517dd9c964
|
|
@ -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];
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS(normal_toplevels); i++)
|
||||
glnx_fd_close int root_dfd = -1;
|
||||
if (!glnx_opendirat (AT_FDCWD, sysroot_path, TRUE, &root_dfd, error))
|
||||
return FALSE;
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue