From c9551dc2310c86afebb33b3e58d5a04a3ea18a1d Mon Sep 17 00:00:00 2001 From: William Manley Date: Mon, 18 Jul 2016 17:03:11 +0100 Subject: [PATCH] ostree-prepare-root as init: exec init from deployment if run as PID1 This supports running ostree on embedded platforms without an initrd. Specificially I'm trying to do bringup on an NVidia Tegra based Jetson TK1 dev board. Closes: #403 Approved by: cgwalters --- src/switchroot/ostree-prepare-root.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/switchroot/ostree-prepare-root.c b/src/switchroot/ostree-prepare-root.c index df3e3219..a233007e 100644 --- a/src/switchroot/ostree-prepare-root.c +++ b/src/switchroot/ostree-prepare-root.c @@ -156,12 +156,10 @@ main(int argc, char *argv[]) int orig_cwd_dfd; if (argc < 2) - { - fprintf (stderr, "usage: ostree-prepare-root SYSROOT\n"); - exit (EXIT_FAILURE); - } + root_mountpoint = "/"; + else + root_mountpoint = argv[1]; - root_mountpoint = argv[1]; deploy_path = resolve_deploy_path (root_mountpoint); /* Create a temporary target for our mounts in the initramfs; this will @@ -303,6 +301,15 @@ main(int argc, char *argv[]) perrorv ("failed to MS_MOVE %s to %s", deploy_path, root_mountpoint); exit (EXIT_FAILURE); } - - exit (EXIT_SUCCESS); + + if (getpid() == 1) + { + execl ("/sbin/init", "/sbin/init", NULL); + perrorv ("failed to exec init inside ostree"); + exit (EXIT_FAILURE); + } + else + { + exit (EXIT_SUCCESS); + } }