This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

at main 1.9 kB View raw
1open Eio.Std 2 3let ( / ) = Eio.Path.( / ) 4 5let test_data fs data = 6 let tempdir = Filename.temp_dir "void-" "-alpine" in 7 Eio.Path.(save ~create:(`If_missing 0o644) (fs / tempdir / "data.txt") data); 8 Eio.traceln "Test data in %s" tempdir; 9 tempdir 10 11let get_alpine_image ~fs ~proc = 12 let tmpdir = Filename.temp_dir "void" "alpine" in 13 Eio.traceln "Extracting alpine to %s..." tmpdir; 14 let container_id = 15 Eio.Process.parse_out proc Eio.Buf_read.take_all 16 [ "docker"; "run"; "-d"; "alpine" ] 17 |> String.trim 18 in 19 Eio.traceln "Container %s" container_id; 20 let () = 21 Eio.Process.run proc 22 [ 23 "docker"; 24 "export"; 25 container_id; 26 "-o"; 27 Filename.concat tmpdir "alpine.tar.gz"; 28 ] 29 in 30 Eio.traceln "Untarring..."; 31 Eio.Path.mkdir ~perm:0o777 (fs / tmpdir / "rootfs"); 32 let () = 33 Eio.Process.run proc 34 [ 35 "tar"; 36 "-xf"; 37 Filename.concat tmpdir "alpine.tar.gz"; 38 "-C"; 39 Filename.concat tmpdir "rootfs"; 40 ] 41 in 42 Filename.concat tmpdir "rootfs" 43 44(* This example read-only mounts a copy of busybox 45 into the root-filesystem of the process. *) 46let () = 47 Eio_posix.run @@ fun env -> 48 Switch.run @@ fun sw -> 49 let fs = env#fs in 50 let proc = env#process_mgr in 51 let alpine_img = get_alpine_image ~fs ~proc in 52 let mount_src = test_data fs "Hello, World!" in 53 let open Void in 54 let args = 55 let l = Array.length Sys.argv in 56 if l <= 1 then 57 [ 58 "/bin/ash"; "-c"; "/bin/echo hello > /hello.txt && /bin/cat /hello.txt"; 59 ] 60 else Array.sub Sys.argv 1 (l - 1) |> Array.to_list 61 in 62 let void = 63 empty |> rootfs ~mode:RW alpine_img 64 |> mount ~mode:R ~src:mount_src ~tgt:"data" 65 |> exec args 66 in 67 let t = Void.spawn ~sw void in 68 let status = Promise.await (Void.exit_status t) in 69 Eio.traceln "Status: %s" (Void.exit_status_to_string status)