1282113fdSPekka Enberg /* 2*9cec19c8SSasha Levin * This is a simple init for shared rootfs guests. This part should be limited 3*9cec19c8SSasha Levin * to doing mounts and running stage 2 of the init process. 4282113fdSPekka Enberg */ 5282113fdSPekka Enberg #include <sys/mount.h> 6282113fdSPekka Enberg #include <string.h> 7282113fdSPekka Enberg #include <unistd.h> 8282113fdSPekka Enberg #include <stdio.h> 9282113fdSPekka Enberg #include <errno.h> 10282113fdSPekka Enberg 11282113fdSPekka Enberg static int run_process(char *filename) 12282113fdSPekka Enberg { 13282113fdSPekka Enberg char *new_argv[] = { filename, NULL }; 1418194036SPekka Enberg char *new_env[] = { "TERM=linux", NULL }; 15282113fdSPekka Enberg 16282113fdSPekka Enberg return execve(filename, new_argv, new_env); 17282113fdSPekka Enberg } 18282113fdSPekka Enberg 19282113fdSPekka Enberg static void do_mounts(void) 20282113fdSPekka Enberg { 21282113fdSPekka Enberg mount("hostfs", "/host", "9p", MS_RDONLY, "trans=virtio,version=9p2000.L"); 22282113fdSPekka Enberg mount("", "/sys", "sysfs", 0, NULL); 23282113fdSPekka Enberg mount("proc", "/proc", "proc", 0, NULL); 24282113fdSPekka Enberg mount("devtmpfs", "/dev", "devtmpfs", 0, NULL); 25282113fdSPekka Enberg } 26282113fdSPekka Enberg 27282113fdSPekka Enberg int main(int argc, char *argv[]) 28282113fdSPekka Enberg { 29282113fdSPekka Enberg puts("Mounting..."); 30282113fdSPekka Enberg 31282113fdSPekka Enberg do_mounts(); 32282113fdSPekka Enberg 33*9cec19c8SSasha Levin run_process("/virt/init_stage2"); 34282113fdSPekka Enberg 35282113fdSPekka Enberg printf("Init failed: %s\n", strerror(errno)); 36282113fdSPekka Enberg 37282113fdSPekka Enberg return 0; 38282113fdSPekka Enberg } 39