Hex Artifact Content

Artifact c6b18551fbfe0f5a9959e41dc8fa3b7769732b14:


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 69 6e 74 20 6d 6f 75 6e 74 5f 72 65   {..int mount_re
02e0: 74 3b 0a 0a 09 2f 2a 0a 09 20 2a 20 4c 6f 61 64  t;.../*.. * Load
02f0: 20 6b 65 72 6e 65 6c 20 6d 6f 64 75 6c 65 73 20   kernel modules 
0300: 28 64 72 69 76 65 72 73 29 0a 09 20 2a 2f 0a 09  (drivers).. */..
0310: 6d 6b 64 69 72 28 22 2f 73 79 73 22 2c 20 30 37  mkdir("/sys", 07
0320: 35 35 29 3b 0a 09 6d 6f 75 6e 74 28 22 73 79 73  55);..mount("sys
0330: 66 73 22 2c 20 22 2f 73 79 73 22 2c 20 22 73 79  fs", "/sys", "sy
0340: 73 66 73 22 2c 20 30 2c 20 4e 55 4c 4c 29 3b 0a  sfs", 0, NULL);.
0350: 0a 09 72 75 6e 28 22 2f 62 69 6e 2f 69 6e 69 74  ..run("/bin/init
0360: 2d 6d 6f 64 75 6c 65 73 22 2c 20 22 69 6e 69 74  -modules", "init
0370: 2d 6d 6f 64 75 6c 65 73 22 2c 20 4e 55 4c 4c 29  -modules", NULL)
0380: 3b 0a 0a 09 75 6d 6f 75 6e 74 28 22 2f 73 79 73  ;...umount("/sys
0390: 22 29 3b 0a 09 72 6d 64 69 72 28 22 2f 73 79 73  ");..rmdir("/sys
03a0: 22 29 3b 0a 0a 09 2f 2a 0a 09 20 2a 20 4d 6f 75  ");.../*.. * Mou
03b0: 6e 74 20 72 6f 6f 74 20 66 69 6c 65 73 79 73 74  nt root filesyst
03c0: 65 6d 0a 09 20 2a 2f 0a 09 6d 6b 64 69 72 28 22  em.. */..mkdir("
03d0: 2f 64 65 76 22 2c 20 30 37 35 35 29 3b 0a 09 6d  /dev", 0755);..m
03e0: 6f 75 6e 74 28 22 64 65 76 74 6d 70 66 73 22 2c  ount("devtmpfs",
03f0: 20 22 2f 64 65 76 22 2c 20 22 64 65 76 74 6d 70   "/dev", "devtmp
0400: 66 73 22 2c 20 30 2c 20 4e 55 4c 4c 29 3b 0a 0a  fs", 0, NULL);..
0410: 09 6d 6b 64 69 72 28 22 2f 6e 65 77 2d 72 6f 6f  .mkdir("/new-roo
0420: 74 22 2c 20 30 37 35 35 29 3b 0a 09 6d 6f 75 6e  t", 0755);..moun
0430: 74 5f 72 65 74 20 3d 20 6d 6f 75 6e 74 28 22 2f  t_ret = mount("/
0440: 64 65 76 2f 76 64 61 32 22 2c 20 22 2f 6e 65 77  dev/vda2", "/new
0450: 2d 72 6f 6f 74 22 2c 20 22 65 78 74 34 22 2c 20  -root", "ext4", 
0460: 30 2c 20 4e 55 4c 4c 29 3b 0a 09 69 66 20 28 6d  0, NULL);..if (m
0470: 6f 75 6e 74 5f 72 65 74 20 21 3d 20 30 29 20 7b  ount_ret != 0) {
0480: 0a 09 09 6d 6f 75 6e 74 5f 72 65 74 20 3d 20 6d  ...mount_ret = m
0490: 6f 75 6e 74 28 22 2f 64 65 76 2f 73 64 61 32 22  ount("/dev/sda2"
04a0: 2c 20 22 2f 6e 65 77 2d 72 6f 6f 74 22 2c 20 22  , "/new-root", "
04b0: 65 78 74 34 22 2c 20 30 2c 20 4e 55 4c 4c 29 3b  ext4", 0, NULL);
04c0: 0a 09 7d 0a 09 69 66 20 28 6d 6f 75 6e 74 5f 72  ..}..if (mount_r
04d0: 65 74 20 21 3d 20 30 29 20 7b 0a 09 09 6d 6f 75  et != 0) {...mou
04e0: 6e 74 5f 72 65 74 20 3d 20 6d 6f 75 6e 74 28 22  nt_ret = mount("
04f0: 2f 64 65 76 2f 68 64 61 32 22 2c 20 22 2f 6e 65  /dev/hda2", "/ne
0500: 77 2d 72 6f 6f 74 22 2c 20 22 65 78 74 34 22 2c  w-root", "ext4",
0510: 20 30 2c 20 4e 55 4c 4c 29 3b 0a 09 7d 0a 09 75   0, NULL);..}..u
0520: 6d 6f 75 6e 74 28 22 2f 64 65 76 22 29 3b 0a 09  mount("/dev");..
0530: 72 6d 64 69 72 28 22 2f 64 65 76 22 29 3b 0a 0a  rmdir("/dev");..
0540: 09 69 66 20 28 6d 6f 75 6e 74 5f 72 65 74 20 3d  .if (mount_ret =
0550: 3d 20 30 29 20 7b 0a 09 09 6d 6b 64 69 72 28 22  = 0) {...mkdir("
0560: 2f 6e 65 77 2d 72 6f 6f 74 2f 69 6e 69 74 72 61  /new-root/initra
0570: 6d 66 73 22 2c 20 30 37 35 35 29 3b 0a 09 09 6d  mfs", 0755);...m
0580: 6b 64 69 72 28 22 2f 6e 65 77 2d 72 6f 6f 74 2f  kdir("/new-root/
0590: 62 69 6e 22 2c 20 30 37 35 35 29 3b 0a 09 09 6d  bin", 0755);...m
05a0: 6b 64 69 72 28 22 2f 6e 65 77 2d 72 6f 6f 74 2f  kdir("/new-root/
05b0: 6c 69 62 22 2c 20 30 37 35 35 29 3b 0a 09 09 73  lib", 0755);...s
05c0: 79 6d 6c 69 6e 6b 28 22 2e 2e 2f 69 6e 69 74 72  ymlink("../initr
05d0: 61 6d 66 73 2f 62 69 6e 2f 61 70 70 66 73 64 22  amfs/bin/appfsd"
05e0: 2c 20 22 2f 6e 65 77 2d 72 6f 6f 74 2f 62 69 6e  , "/new-root/bin
05f0: 2f 61 70 70 66 73 64 22 29 3b 0a 09 09 73 79 6d  /appfsd");...sym
0600: 6c 69 6e 6b 28 22 2e 2e 2f 69 6e 69 74 72 61 6d  link("../initram
0610: 66 73 2f 62 69 6e 2f 69 6e 69 74 22 2c 20 22 2f  fs/bin/init", "/
0620: 6e 65 77 2d 72 6f 6f 74 2f 62 69 6e 2f 69 6e 69  new-root/bin/ini
0630: 74 22 29 3b 0a 09 09 73 79 6d 6c 69 6e 6b 28 22  t");...symlink("
0640: 2e 2e 2f 69 6e 69 74 72 61 6d 66 73 2f 62 69 6e  ../initramfs/bin
0650: 2f 69 6e 69 74 2d 6d 6f 64 75 6c 65 73 22 2c 20  /init-modules", 
0660: 22 2f 6e 65 77 2d 72 6f 6f 74 2f 62 69 6e 2f 69  "/new-root/bin/i
0670: 6e 69 74 2d 6d 6f 64 75 6c 65 73 22 29 3b 0a 09  nit-modules");..
0680: 09 73 79 6d 6c 69 6e 6b 28 22 2e 2e 2f 69 6e 69  .symlink("../ini
0690: 74 72 61 6d 66 73 2f 62 69 6e 2f 69 6e 69 74 2d  tramfs/bin/init-
06a0: 6e 65 74 77 6f 72 6b 69 6e 67 22 2c 20 22 2f 6e  networking", "/n
06b0: 65 77 2d 72 6f 6f 74 2f 62 69 6e 2f 69 6e 69 74  ew-root/bin/init
06c0: 2d 6e 65 74 77 6f 72 6b 69 6e 67 22 29 3b 0a 09  -networking");..
06d0: 09 73 79 6d 6c 69 6e 6b 28 22 2e 2e 2f 69 6e 69  .symlink("../ini
06e0: 74 72 61 6d 66 73 2f 62 69 6e 2f 61 70 70 66 73  tramfs/bin/appfs
06f0: 2d 63 61 63 68 65 22 2c 20 22 2f 6e 65 77 2d 72  -cache", "/new-r
0700: 6f 6f 74 2f 62 69 6e 2f 61 70 70 66 73 2d 63 61  oot/bin/appfs-ca
0710: 63 68 65 22 29 3b 0a 09 09 73 79 6d 6c 69 6e 6b  che");...symlink
0720: 28 22 2e 2e 2f 69 6e 69 74 72 61 6d 66 73 2f 62  ("../initramfs/b
0730: 69 6e 2f 74 63 6c 6b 69 74 22 2c 20 22 2f 6e 65  in/tclkit", "/ne
0740: 77 2d 72 6f 6f 74 2f 62 69 6e 2f 74 63 6c 6b 69  w-root/bin/tclki
0750: 74 22 29 3b 0a 09 09 73 79 6d 6c 69 6e 6b 28 22  t");...symlink("
0760: 2e 2e 2f 69 6e 69 74 72 61 6d 66 73 2f 6c 69 62  ../initramfs/lib
0770: 2f 6d 6f 64 75 6c 65 73 22 2c 20 22 2f 6e 65 77  /modules", "/new
0780: 2d 72 6f 6f 74 2f 6c 69 62 2f 6d 6f 64 75 6c 65  -root/lib/module
0790: 73 22 29 3b 0a 09 09 63 68 64 69 72 28 22 2f 6e  s");...chdir("/n
07a0: 65 77 2d 72 6f 6f 74 22 29 3b 0a 09 09 6d 6f 75  ew-root");...mou
07b0: 6e 74 28 22 2f 22 2c 20 22 2f 6e 65 77 2d 72 6f  nt("/", "/new-ro
07c0: 6f 74 2f 69 6e 69 74 72 61 6d 66 73 22 2c 20 22  ot/initramfs", "
07d0: 62 69 6e 64 22 2c 20 4d 53 5f 42 49 4e 44 2c 20  bind", MS_BIND, 
07e0: 4e 55 4c 4c 29 3b 0a 09 09 63 68 72 6f 6f 74 28  NULL);...chroot(
07f0: 22 2f 6e 65 77 2d 72 6f 6f 74 22 29 3b 0a 09 09  "/new-root");...
0800: 63 68 64 69 72 28 22 2f 22 29 3b 0a 09 7d 0a 0a  chdir("/");..}..
0810: 09 2f 2a 0a 09 20 2a 20 4d 6f 75 6e 74 20 6e 65  ./*.. * Mount ne
0820: 65 64 65 64 20 66 69 6c 65 73 79 73 74 65 6d 73  eded filesystems
0830: 0a 09 20 2a 2f 0a 09 6d 6b 64 69 72 28 22 2f 64  .. */..mkdir("/d
0840: 65 76 22 2c 20 30 37 35 35 29 3b 0a 09 6d 6f 75  ev", 0755);..mou
0850: 6e 74 28 22 64 65 76 74 6d 70 66 73 22 2c 20 22  nt("devtmpfs", "
0860: 2f 64 65 76 22 2c 20 22 64 65 76 74 6d 70 66 73  /dev", "devtmpfs
0870: 22 2c 20 30 2c 20 4e 55 4c 4c 29 3b 0a 0a 09 6d  ", 0, NULL);...m
0880: 6b 64 69 72 28 22 2f 74 6d 70 22 2c 20 30 37 35  kdir("/tmp", 075
0890: 35 29 3b 0a 09 6d 6f 75 6e 74 28 22 74 6d 70 66  5);..mount("tmpf
08a0: 73 22 2c 20 22 2f 74 6d 70 22 2c 20 22 74 6d 70  s", "/tmp", "tmp
08b0: 66 73 22 2c 20 30 2c 20 4e 55 4c 4c 29 3b 0a 0a  fs", 0, NULL);..
08c0: 09 6d 6b 64 69 72 28 22 2f 70 72 6f 63 22 2c 20  .mkdir("/proc", 
08d0: 30 37 35 35 29 3b 0a 09 6d 6f 75 6e 74 28 22 70  0755);..mount("p
08e0: 72 6f 63 22 2c 20 22 2f 70 72 6f 63 22 2c 20 22  roc", "/proc", "
08f0: 70 72 6f 63 22 2c 20 30 2c 20 4e 55 4c 4c 29 3b  proc", 0, NULL);
0900: 0a 0a 09 6d 6b 64 69 72 28 22 2f 73 79 73 22 2c  ...mkdir("/sys",
0910: 20 30 37 35 35 29 3b 0a 09 6d 6f 75 6e 74 28 22   0755);..mount("
0920: 73 79 73 66 73 22 2c 20 22 2f 73 79 73 22 2c 20  sysfs", "/sys", 
0930: 22 73 79 73 66 73 22 2c 20 30 2c 20 4e 55 4c 4c  "sysfs", 0, NULL
0940: 29 3b 0a 0a 09 2f 2a 0a 09 20 2a 20 53 65 74 75  );.../*.. * Setu
0950: 70 20 6e 65 74 77 6f 72 6b 69 6e 67 0a 09 20 2a  p networking.. *
0960: 2f 0a 09 72 75 6e 28 22 2f 62 69 6e 2f 69 6e 69  /..run("/bin/ini
0970: 74 2d 6e 65 74 77 6f 72 6b 69 6e 67 22 2c 20 22  t-networking", "
0980: 69 6e 69 74 2d 6e 65 74 77 6f 72 6b 69 6e 67 22  init-networking"
0990: 2c 20 4e 55 4c 4c 29 3b 0a 0a 09 6d 6b 64 69 72  , NULL);...mkdir
09a0: 28 22 2f 65 74 63 22 2c 20 30 37 35 35 29 3b 0a  ("/etc", 0755);.
09b0: 09 6d 6b 64 69 72 28 22 2f 62 69 6e 22 2c 20 30  .mkdir("/bin", 0
09c0: 37 35 35 29 3b 0a 09 6d 6b 64 69 72 28 22 2f 6c  755);..mkdir("/l
09d0: 69 62 22 2c 20 30 37 35 35 29 3b 0a 09 6d 6b 64  ib", 0755);..mkd
09e0: 69 72 28 22 2f 6f 70 74 22 2c 20 30 37 35 35 29  ir("/opt", 0755)
09f0: 3b 0a 09 6d 6b 64 69 72 28 22 2f 6f 70 74 2f 61  ;..mkdir("/opt/a
0a00: 70 70 66 73 22 2c 20 30 37 35 35 29 3b 0a 0a 09  ppfs", 0755);...
0a10: 6d 6b 64 69 72 28 22 2f 76 61 72 22 2c 20 30 37  mkdir("/var", 07
0a20: 35 35 29 3b 0a 09 6d 6b 64 69 72 28 22 2f 76 61  55);..mkdir("/va
0a30: 72 2f 63 61 63 68 65 22 2c 20 30 37 35 35 29 3b  r/cache", 0755);
0a40: 0a 09 6d 6b 64 69 72 28 22 2f 76 61 72 2f 63 61  ..mkdir("/var/ca
0a50: 63 68 65 2f 61 70 70 66 73 22 2c 20 30 37 35 35  che/appfs", 0755
0a60: 29 3b 0a 0a 09 72 75 6e 28 22 2f 62 69 6e 2f 61  );...run("/bin/a
0a70: 70 70 66 73 64 22 2c 20 22 61 70 70 66 73 64 22  ppfsd", "appfsd"
0a80: 2c 20 22 2f 76 61 72 2f 63 61 63 68 65 2f 61 70  , "/var/cache/ap
0a90: 70 66 73 22 2c 20 22 2f 6f 70 74 2f 61 70 70 66  pfs", "/opt/appf
0aa0: 73 22 2c 20 4e 55 4c 4c 29 3b 0a 0a 09 73 79 6d  s", NULL);...sym
0ab0: 6c 69 6e 6b 28 22 2e 22 2c 20 22 2f 75 73 72 22  link(".", "/usr"
0ac0: 29 3b 0a 09 73 79 6d 6c 69 6e 6b 28 22 6c 69 62  );..symlink("lib
0ad0: 22 2c 20 22 2f 6c 69 62 36 34 22 29 3b 0a 0a 09  ", "/lib64");...
0ae0: 73 79 6d 6c 69 6e 6b 28 22 2f 70 72 6f 63 2f 73  symlink("/proc/s
0af0: 65 6c 66 2f 6d 6f 75 6e 74 73 22 2c 20 22 2f 65  elf/mounts", "/e
0b00: 74 63 2f 6d 74 61 62 22 29 3b 0a 0a 09 73 79 6d  tc/mtab");...sym
0b10: 6c 69 6e 6b 28 22 2f 6f 70 74 2f 61 70 70 66 73  link("/opt/appfs
0b20: 2f 63 6f 72 65 2e 61 70 70 66 73 2e 72 6b 65 65  /core.appfs.rkee
0b30: 6e 65 2e 6f 72 67 2f 62 61 73 68 2f 70 6c 61 74  ne.org/bash/plat
0b40: 66 6f 72 6d 2f 6c 61 74 65 73 74 2f 62 69 6e 2f  form/latest/bin/
0b50: 62 61 73 68 22 2c 20 22 2f 62 69 6e 2f 62 61 73  bash", "/bin/bas
0b60: 68 22 29 3b 0a 09 73 79 6d 6c 69 6e 6b 28 22 2f  h");..symlink("/
0b70: 6f 70 74 2f 61 70 70 66 73 2f 63 6f 72 65 2e 61  opt/appfs/core.a
0b80: 70 70 66 73 2e 72 6b 65 65 6e 65 2e 6f 72 67 2f  ppfs.rkeene.org/
0b90: 63 6f 72 65 75 74 69 6c 73 2f 70 6c 61 74 66 6f  coreutils/platfo
0ba0: 72 6d 2f 6c 61 74 65 73 74 2f 62 69 6e 2f 65 6e  rm/latest/bin/en
0bb0: 76 22 2c 20 22 2f 62 69 6e 2f 65 6e 76 22 29 3b  v", "/bin/env");
0bc0: 0a 0a 09 73 79 6d 6c 69 6e 6b 28 22 2f 62 69 6e  ...symlink("/bin
0bd0: 2f 62 61 73 68 22 2c 20 22 2f 62 69 6e 2f 73 68  /bash", "/bin/sh
0be0: 22 29 3b 0a 0a 09 73 65 74 65 6e 76 28 22 50 41  ");...setenv("PA
0bf0: 54 48 22 2c 20 22 2f 62 69 6e 3a 2f 6f 70 74 2f  TH", "/bin:/opt/
0c00: 61 70 70 66 73 2f 63 6f 72 65 2e 61 70 70 66 73  appfs/core.appfs
0c10: 2e 72 6b 65 65 6e 65 2e 6f 72 67 2f 63 6f 72 65  .rkeene.org/core
0c20: 75 74 69 6c 73 2f 70 6c 61 74 66 6f 72 6d 2f 6c  utils/platform/l
0c30: 61 74 65 73 74 2f 62 69 6e 22 2c 20 31 29 3b 0a  atest/bin", 1);.
0c40: 09 72 75 6e 28 22 2f 62 69 6e 2f 61 70 70 66 73  .run("/bin/appfs
0c50: 2d 63 61 63 68 65 22 2c 20 22 61 70 70 66 73 2d  -cache", "appfs-
0c60: 63 61 63 68 65 22 2c 20 22 69 6e 73 74 61 6c 6c  cache", "install
0c70: 22 2c 20 22 2d 6c 69 62 22 2c 20 22 63 6f 72 65  ", "-lib", "core
0c80: 2e 61 70 70 66 73 2e 72 6b 65 65 6e 65 2e 6f 72  .appfs.rkeene.or
0c90: 67 22 2c 20 22 67 6c 69 62 63 22 2c 20 4e 55 4c  g", "glibc", NUL
0ca0: 4c 29 3b 0a 09 72 75 6e 28 22 2f 62 69 6e 2f 61  L);..run("/bin/a
0cb0: 70 70 66 73 2d 63 61 63 68 65 22 2c 20 22 61 70  ppfs-cache", "ap
0cc0: 70 66 73 2d 63 61 63 68 65 22 2c 20 22 69 6e 73  pfs-cache", "ins
0cd0: 74 61 6c 6c 22 2c 20 22 63 6f 72 65 2e 61 70 70  tall", "core.app
0ce0: 66 73 2e 72 6b 65 65 6e 65 2e 6f 72 67 22 2c 20  fs.rkeene.org", 
0cf0: 22 63 6f 72 65 75 74 69 6c 73 22 2c 20 4e 55 4c  "coreutils", NUL
0d00: 4c 29 3b 0a 09 72 75 6e 28 22 2f 62 69 6e 2f 61  L);..run("/bin/a
0d10: 70 70 66 73 2d 63 61 63 68 65 22 2c 20 22 61 70  ppfs-cache", "ap
0d20: 70 66 73 2d 63 61 63 68 65 22 2c 20 22 69 6e 73  pfs-cache", "ins
0d30: 74 61 6c 6c 22 2c 20 22 63 6f 72 65 2e 61 70 70  tall", "core.app
0d40: 66 73 2e 72 6b 65 65 6e 65 2e 6f 72 67 22 2c 20  fs.rkeene.org", 
0d50: 22 70 72 6f 63 70 73 2d 6e 67 22 2c 20 4e 55 4c  "procps-ng", NUL
0d60: 4c 29 3b 0a 09 73 65 74 65 6e 76 28 22 50 41 54  L);..setenv("PAT
0d70: 48 22 2c 20 22 2f 62 69 6e 22 2c 20 31 29 3b 0a  H", "/bin", 1);.
0d80: 0a 09 72 75 6e 28 22 2f 62 69 6e 2f 73 68 22 2c  ..run("/bin/sh",
0d90: 20 22 73 68 22 2c 20 4e 55 4c 4c 29 3b 0a 0a 09   "sh", NULL);...
0da0: 73 79 6e 63 28 29 3b 0a 0a 09 72 65 74 75 72 6e  sync();...return
0db0: 28 30 29 3b 0a 7d 0a                             (0);.}.