diff --git a/Makefile-ostree.am b/Makefile-ostree.am index 2bff6c9f..d4649c5c 100644 --- a/Makefile-ostree.am +++ b/Makefile-ostree.am @@ -47,6 +47,7 @@ ostree_SOURCES = src/ostree/main.c \ # Admin subcommand ostree_SOURCES += \ src/ostree/ot-admin-builtin-init.c \ + src/ostree/ot-admin-builtin-init-fs.c \ src/ostree/ot-admin-builtin-diff.c \ src/ostree/ot-admin-builtin-deploy.c \ src/ostree/ot-admin-builtin-prune.c \ diff --git a/src/libgsystem b/src/libgsystem index 56d72734..a98e4be8 160000 --- a/src/libgsystem +++ b/src/libgsystem @@ -1 +1 @@ -Subproject commit 56d727341706c82742c5427bef35cdde00c3713a +Subproject commit a98e4be8ef5c57b8f79f896b7bf13142499a17c3 diff --git a/src/ostree/ot-admin-builtin-init-fs.c b/src/ostree/ot-admin-builtin-init-fs.c new file mode 100644 index 00000000..52a4dcda --- /dev/null +++ b/src/ostree/ot-admin-builtin-init-fs.c @@ -0,0 +1,87 @@ +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- + * + * Copyright (C) 2012 Colin Walters + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Colin Walters + */ + +#include "config.h" + +#include "ot-admin-builtins.h" +#include "ot-admin-functions.h" +#include "otutil.h" + +#include + +static GOptionEntry options[] = { + { NULL } +}; + +gboolean +ot_admin_builtin_init_fs (int argc, char **argv, GFile *ostree_dir, GError **error) +{ + GOptionContext *context; + gboolean ret = FALSE; + ot_lobj GFile *dir = NULL; + ot_lobj GFile *child = NULL; + guint i; + const char *normal_toplevels[] = {"boot", "dev", "home", "proc", "run", "sys"}; + GCancellable *cancellable = NULL; + + context = g_option_context_new ("PATH - Initialize a root filesystem"); + g_option_context_add_main_entries (context, options, NULL); + + if (!g_option_context_parse (context, &argc, &argv, error)) + goto out; + + if (argc < 2) + { + ot_util_usage_error (context, "PATH must be specified", error); + goto out; + } + + dir = g_file_new_for_path (argv[1]); + + for (i = 0; i < G_N_ELEMENTS(normal_toplevels); i++) + { + child = g_file_get_child (dir, normal_toplevels[i]); + if (!gs_file_ensure_directory_mode (child, 0755, cancellable, error)) + goto out; + g_clear_object (&child); + } + + child = g_file_get_child (dir, "root"); + if (!gs_file_ensure_directory_mode (child, 0700, cancellable, error)) + goto out; + g_clear_object (&child); + + child = g_file_get_child (dir, "tmp"); + if (!gs_file_ensure_directory_mode (child, 01777, cancellable, error)) + goto out; + g_clear_object (&child); + + child = g_file_get_child (dir, "ostree"); + if (!ot_admin_ensure_initialized (child, cancellable, error)) + goto out; + + ret = TRUE; + out: + if (context) + g_option_context_free (context); + return ret; +} diff --git a/src/ostree/ot-admin-builtins.h b/src/ostree/ot-admin-builtins.h index 743c4c67..6994c96f 100644 --- a/src/ostree/ot-admin-builtins.h +++ b/src/ostree/ot-admin-builtins.h @@ -28,6 +28,7 @@ G_BEGIN_DECLS gboolean ot_admin_builtin_init (int argc, char **argv, GFile *ostree_dir, GError **error); +gboolean ot_admin_builtin_init_fs (int argc, char **argv, GFile *ostree_dir, GError **error); gboolean ot_admin_builtin_deploy (int argc, char **argv, GFile *ostree_dir, GError **error); gboolean ot_admin_builtin_prune (int argc, char **argv, GFile *ostree_dir, GError **error); gboolean ot_admin_builtin_pull_deploy (int argc, char **argv, GFile *ostree_dir, GError **error); diff --git a/src/ostree/ot-builtin-admin.c b/src/ostree/ot-builtin-admin.c index 869a1348..2f2340e9 100644 --- a/src/ostree/ot-builtin-admin.c +++ b/src/ostree/ot-builtin-admin.c @@ -44,6 +44,7 @@ typedef struct { static OstreeAdminCommand admin_subcommands[] = { { "init", ot_admin_builtin_init }, + { "init-fs", ot_admin_builtin_init_fs }, { "deploy", ot_admin_builtin_deploy }, { "pull-deploy", ot_admin_builtin_pull_deploy }, { "prune", ot_admin_builtin_prune },