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
This commit is contained in:
William Manley 2016-07-18 17:03:11 +01:00 committed by Atomic Bot
parent 1364e6e30d
commit c9551dc231
1 changed files with 14 additions and 7 deletions

View File

@ -156,12 +156,10 @@ main(int argc, char *argv[])
int orig_cwd_dfd; int orig_cwd_dfd;
if (argc < 2) if (argc < 2)
{ root_mountpoint = "/";
fprintf (stderr, "usage: ostree-prepare-root SYSROOT\n"); else
exit (EXIT_FAILURE); root_mountpoint = argv[1];
}
root_mountpoint = argv[1];
deploy_path = resolve_deploy_path (root_mountpoint); deploy_path = resolve_deploy_path (root_mountpoint);
/* Create a temporary target for our mounts in the initramfs; this will /* 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); perrorv ("failed to MS_MOVE %s to %s", deploy_path, root_mountpoint);
exit (EXIT_FAILURE); 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);
}
} }