Hex Artifact Content

Artifact 67d154f3148e827584d6698abc83a32931a96b27:


0000: 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 79  #include <sys/ty
0010: 70 65 73 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  pes.h>.#include 
0020: 3c 73 79 73 2f 6d 6f 75 6e 74 2e 68 3e 0a 23 69  <sys/mount.h>.#i
0030: 6e 63 6c 75 64 65 20 3c 73 79 73 2f 73 74 61 74  nclude <sys/stat
0040: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79  .h>.#include <sy
0050: 73 2f 77 61 69 74 2e 68 3e 0a 23 69 6e 63 6c 75  s/wait.h>.#inclu
0060: 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 0a 23 69  de <unistd.h>.#i
0070: 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68  nclude <stdlib.h
0080: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 61  >.#include <stda
0090: 72 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  rg.h>.#include <
00a0: 73 74 64 69 6f 2e 68 3e 0a 0a 69 6e 74 20 72 75  stdio.h>..int ru
00b0: 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 61  n(const char *pa
00c0: 74 68 2c 20 2e 2e 2e 29 20 7b 0a 09 76 61 5f 6c  th, ...) {..va_l
00d0: 69 73 74 20 61 70 3b 0a 09 63 68 61 72 20 2a 2a  ist ap;..char **
00e0: 61 72 67 76 3b 0a 09 69 6e 74 20 61 72 67 76 4d  argv;..int argvM
00f0: 61 78 2c 20 61 72 67 76 49 64 78 3b 0a 09 70 69  ax, argvIdx;..pi
0100: 64 5f 74 20 70 69 64 3b 0a 09 69 6e 74 20 70 69  d_t pid;..int pi
0110: 64 73 74 61 74 3b 0a 0a 09 70 69 64 20 3d 20 66  dstat;...pid = f
0120: 6f 72 6b 28 29 3b 0a 09 69 66 20 28 70 69 64 20  ork();..if (pid 
0130: 3d 3d 20 28 28 70 69 64 5f 74 29 20 2d 31 29 29  == ((pid_t) -1))
0140: 20 7b 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b   {...return(-1);
0150: 0a 09 7d 0a 09 0a 09 69 66 20 28 70 69 64 20 21  ..}....if (pid !
0160: 3d 20 30 29 20 7b 0a 09 09 77 61 69 74 70 69 64  = 0) {...waitpid
0170: 28 70 69 64 2c 20 26 70 69 64 73 74 61 74 2c 20  (pid, &pidstat, 
0180: 30 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 70 69  0);....return(pi
0190: 64 73 74 61 74 29 3b 0a 09 7d 0a 0a 09 61 72 67  dstat);..}...arg
01a0: 76 4d 61 78 20 3d 20 33 32 3b 0a 09 61 72 67 76  vMax = 32;..argv
01b0: 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66   = malloc(sizeof
01c0: 28 2a 61 72 67 76 29 20 2a 20 61 72 67 76 4d 61  (*argv) * argvMa
01d0: 78 29 3b 0a 0a 09 76 61 5f 73 74 61 72 74 28 61  x);...va_start(a
01e0: 70 2c 20 70 61 74 68 29 3b 0a 0a 09 66 6f 72 20  p, path);...for 
01f0: 28 61 72 67 76 49 64 78 20 3d 20 30 3b 20 61 72  (argvIdx = 0; ar
0200: 67 76 49 64 78 20 3c 20 61 72 67 76 4d 61 78 3b  gvIdx < argvMax;
0210: 20 61 72 67 76 49 64 78 2b 2b 29 20 7b 0a 09 09   argvIdx++) {...
0220: 61 72 67 76 5b 61 72 67 76 49 64 78 5d 20 3d 20  argv[argvIdx] = 
0230: 76 61 5f 61 72 67 28 61 70 2c 20 63 68 61 72 20  va_arg(ap, char 
0240: 2a 29 3b 0a 09 09 69 66 20 28 61 72 67 76 5b 61  *);...if (argv[a
0250: 72 67 76 49 64 78 5d 20 3d 3d 20 4e 55 4c 4c 29  rgvIdx] == NULL)
0260: 20 7b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d   {....break;...}
0270: 0a 09 7d 0a 09 0a 09 76 61 5f 65 6e 64 28 61 70  ..}....va_end(ap
0280: 29 3b 0a 0a 09 65 78 65 63 76 28 70 61 74 68 2c  );...execv(path,
0290: 20 61 72 67 76 29 3b 0a 0a 09 65 78 69 74 28 45   argv);...exit(E
02a0: 58 49 54 5f 46 41 49 4c 55 52 45 29 3b 0a 7d 0a  XIT_FAILURE);.}.
02b0: 0a 69 6e 74 20 6d 61 69 6e 28 69 6e 74 20 61 72  .int main(int ar
02c0: 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 29  gc, char **argv)
02d0: 20 7b 0a 09 2f 2a 0a 09 20 2a 20 52 65 6d 6f 75   {../*.. * Remou
02e0: 6e 74 20 72 6f 6f 74 20 66 69 6c 65 73 79 73 74  nt root filesyst
02f0: 65 6d 20 72 65 61 64 2d 77 72 69 74 65 0a 09 20  em read-write.. 
0300: 2a 2f 0a 09 6d 6f 75 6e 74 28 22 2f 64 65 76 2f  */..mount("/dev/
0310: 76 64 61 32 22 2c 20 22 2f 22 2c 20 22 65 78 74  vda2", "/", "ext
0320: 32 22 2c 20 4d 53 5f 52 45 4d 4f 55 4e 54 2c 20  2", MS_REMOUNT, 
0330: 4e 55 4c 4c 29 3b 0a 0a 09 2f 2a 0a 09 20 2a 20  NULL);.../*.. * 
0340: 4d 6f 75 6e 74 20 6e 65 65 64 65 64 20 66 69 6c  Mount needed fil
0350: 65 73 79 73 74 65 6d 73 0a 09 20 2a 2f 0a 09 6d  esystems.. */..m
0360: 6b 64 69 72 28 22 2f 64 65 76 22 2c 20 30 37 35  kdir("/dev", 075
0370: 35 29 3b 0a 09 6d 6f 75 6e 74 28 22 64 65 76 74  5);..mount("devt
0380: 6d 70 66 73 22 2c 20 22 2f 64 65 76 22 2c 20 22  mpfs", "/dev", "
0390: 64 65 76 74 6d 70 66 73 22 2c 20 30 2c 20 4e 55  devtmpfs", 0, NU
03a0: 4c 4c 29 3b 0a 0a 09 6d 6b 64 69 72 28 22 2f 74  LL);...mkdir("/t
03b0: 6d 70 22 2c 20 30 37 35 35 29 3b 0a 09 6d 6f 75  mp", 0755);..mou
03c0: 6e 74 28 22 74 6d 70 66 73 22 2c 20 22 2f 74 6d  nt("tmpfs", "/tm
03d0: 70 22 2c 20 22 74 6d 70 66 73 22 2c 20 30 2c 20  p", "tmpfs", 0, 
03e0: 4e 55 4c 4c 29 3b 0a 0a 09 6d 6b 64 69 72 28 22  NULL);...mkdir("
03f0: 2f 70 72 6f 63 22 2c 20 30 37 35 35 29 3b 0a 09  /proc", 0755);..
0400: 6d 6f 75 6e 74 28 22 70 72 6f 63 22 2c 20 22 2f  mount("proc", "/
0410: 70 72 6f 63 22 2c 20 22 70 72 6f 63 22 2c 20 30  proc", "proc", 0
0420: 2c 20 4e 55 4c 4c 29 3b 0a 0a 09 6d 6b 64 69 72  , NULL);...mkdir
0430: 28 22 2f 73 79 73 22 2c 20 30 37 35 35 29 3b 0a  ("/sys", 0755);.
0440: 09 6d 6f 75 6e 74 28 22 73 79 73 66 73 22 2c 20  .mount("sysfs", 
0450: 22 2f 73 79 73 22 2c 20 22 73 79 73 66 73 22 2c  "/sys", "sysfs",
0460: 20 30 2c 20 4e 55 4c 4c 29 3b 0a 0a 09 2f 2a 0a   0, NULL);.../*.
0470: 09 20 2a 20 53 65 74 75 70 20 6e 65 74 77 6f 72  . * Setup networ
0480: 6b 69 6e 67 0a 09 20 2a 2f 0a 09 72 75 6e 28 22  king.. */..run("
0490: 2f 62 69 6e 2f 69 6e 69 74 2d 6e 65 74 77 6f 72  /bin/init-networ
04a0: 6b 69 6e 67 22 2c 20 22 69 6e 69 74 2d 6e 65 74  king", "init-net
04b0: 77 6f 72 6b 69 6e 67 22 2c 20 4e 55 4c 4c 29 3b  working", NULL);
04c0: 0a 09 72 75 6e 28 22 2f 62 69 6e 2f 69 6e 69 74  ..run("/bin/init
04d0: 2d 66 75 73 65 22 2c 20 22 69 6e 69 74 2d 66 75  -fuse", "init-fu
04e0: 73 65 22 2c 20 4e 55 4c 4c 29 3b 0a 0a 09 6d 6b  se", NULL);...mk
04f0: 64 69 72 28 22 2f 62 69 6e 22 2c 20 30 37 35 35  dir("/bin", 0755
0500: 29 3b 0a 09 6d 6b 64 69 72 28 22 2f 6c 69 62 22  );..mkdir("/lib"
0510: 2c 20 30 37 35 35 29 3b 0a 09 6d 6b 64 69 72 28  , 0755);..mkdir(
0520: 22 2f 6f 70 74 22 2c 20 30 37 35 35 29 3b 0a 09  "/opt", 0755);..
0530: 6d 6b 64 69 72 28 22 2f 6f 70 74 2f 61 70 70 66  mkdir("/opt/appf
0540: 73 22 2c 20 30 37 35 35 29 3b 0a 09 6d 6b 64 69  s", 0755);..mkdi
0550: 72 28 22 2f 76 61 72 22 2c 20 30 37 35 35 29 3b  r("/var", 0755);
0560: 0a 09 6d 6b 64 69 72 28 22 2f 76 61 72 2f 63 61  ..mkdir("/var/ca
0570: 63 68 65 22 2c 20 30 37 35 35 29 3b 0a 09 6d 6b  che", 0755);..mk
0580: 64 69 72 28 22 2f 76 61 72 2f 63 61 63 68 65 2f  dir("/var/cache/
0590: 61 70 70 66 73 22 2c 20 30 37 35 35 29 3b 0a 09  appfs", 0755);..
05a0: 72 75 6e 28 22 2f 62 69 6e 2f 61 70 70 66 73 64  run("/bin/appfsd
05b0: 22 2c 20 22 61 70 70 66 73 64 22 2c 20 22 2f 76  ", "appfsd", "/v
05c0: 61 72 2f 63 61 63 68 65 2f 61 70 70 66 73 22 2c  ar/cache/appfs",
05d0: 20 22 2f 6f 70 74 2f 61 70 70 66 73 22 2c 20 4e   "/opt/appfs", N
05e0: 55 4c 4c 29 3b 0a 0a 09 73 79 6d 6c 69 6e 6b 28  ULL);...symlink(
05f0: 22 2e 22 2c 20 22 2f 75 73 72 22 29 3b 0a 09 73  ".", "/usr");..s
0600: 79 6d 6c 69 6e 6b 28 22 6c 69 62 22 2c 20 22 2f  ymlink("lib", "/
0610: 6c 69 62 36 34 22 29 3b 0a 0a 09 73 79 6d 6c 69  lib64");...symli
0620: 6e 6b 28 22 2f 6f 70 74 2f 61 70 70 66 73 2f 63  nk("/opt/appfs/c
0630: 6f 72 65 2e 61 70 70 66 73 2e 72 6b 65 65 6e 65  ore.appfs.rkeene
0640: 2e 6f 72 67 2f 62 61 73 68 2f 70 6c 61 74 66 6f  .org/bash/platfo
0650: 72 6d 2f 6c 61 74 65 73 74 2f 62 69 6e 2f 62 61  rm/latest/bin/ba
0660: 73 68 22 2c 20 22 2f 62 69 6e 2f 62 61 73 68 22  sh", "/bin/bash"
0670: 29 3b 0a 09 73 79 6d 6c 69 6e 6b 28 22 2f 6f 70  );..symlink("/op
0680: 74 2f 61 70 70 66 73 2f 63 6f 72 65 2e 61 70 70  t/appfs/core.app
0690: 66 73 2e 72 6b 65 65 6e 65 2e 6f 72 67 2f 63 6f  fs.rkeene.org/co
06a0: 72 65 75 74 69 6c 73 2f 70 6c 61 74 66 6f 72 6d  reutils/platform
06b0: 2f 6c 61 74 65 73 74 2f 62 69 6e 2f 65 6e 76 22  /latest/bin/env"
06c0: 2c 20 22 2f 62 69 6e 2f 65 6e 76 22 29 3b 0a 0a  , "/bin/env");..
06d0: 09 73 79 6d 6c 69 6e 6b 28 22 2f 62 69 6e 2f 62  .symlink("/bin/b
06e0: 61 73 68 22 2c 20 22 2f 62 69 6e 2f 73 68 22 29  ash", "/bin/sh")
06f0: 3b 0a 0a 09 73 65 74 65 6e 76 28 22 50 41 54 48  ;...setenv("PATH
0700: 22 2c 20 22 2f 62 69 6e 3a 2f 6f 70 74 2f 61 70  ", "/bin:/opt/ap
0710: 70 66 73 2f 63 6f 72 65 2e 61 70 70 66 73 2e 72  pfs/core.appfs.r
0720: 6b 65 65 6e 65 2e 6f 72 67 2f 63 6f 72 65 75 74  keene.org/coreut
0730: 69 6c 73 2f 70 6c 61 74 66 6f 72 6d 2f 6c 61 74  ils/platform/lat
0740: 65 73 74 2f 62 69 6e 22 2c 20 31 29 3b 0a 09 72  est/bin", 1);..r
0750: 75 6e 28 22 2f 62 69 6e 2f 61 70 70 66 73 2d 63  un("/bin/appfs-c
0760: 61 63 68 65 22 2c 20 22 61 70 70 66 73 2d 63 61  ache", "appfs-ca
0770: 63 68 65 22 2c 20 22 69 6e 73 74 61 6c 6c 22 2c  che", "install",
0780: 20 22 2d 6c 69 62 22 2c 20 22 63 6f 72 65 2e 61   "-lib", "core.a
0790: 70 70 66 73 2e 72 6b 65 65 6e 65 2e 6f 72 67 22  ppfs.rkeene.org"
07a0: 2c 20 22 67 6c 69 62 63 22 2c 20 4e 55 4c 4c 29  , "glibc", NULL)
07b0: 3b 0a 09 72 75 6e 28 22 2f 62 69 6e 2f 61 70 70  ;..run("/bin/app
07c0: 66 73 2d 63 61 63 68 65 22 2c 20 22 61 70 70 66  fs-cache", "appf
07d0: 73 2d 63 61 63 68 65 22 2c 20 22 69 6e 73 74 61  s-cache", "insta
07e0: 6c 6c 22 2c 20 22 63 6f 72 65 2e 61 70 70 66 73  ll", "core.appfs
07f0: 2e 72 6b 65 65 6e 65 2e 6f 72 67 22 2c 20 22 63  .rkeene.org", "c
0800: 6f 72 65 75 74 69 6c 73 22 2c 20 4e 55 4c 4c 29  oreutils", NULL)
0810: 3b 0a 09 73 65 74 65 6e 76 28 22 50 41 54 48 22  ;..setenv("PATH"
0820: 2c 20 22 2f 62 69 6e 22 2c 20 31 29 3b 0a 0a 09  , "/bin", 1);...
0830: 72 75 6e 28 22 2f 62 69 6e 2f 73 68 22 2c 20 22  run("/bin/sh", "
0840: 73 68 22 2c 20 4e 55 4c 4c 29 3b 0a 0a 09 72 65  sh", NULL);...re
0850: 74 75 72 6e 28 30 29 3b 0a 7d 0a                 turn(0);.}.