use a variant for uname result, not strings
This commit is contained in:
parent
e1239366e1
commit
1d33c17b53
|
@ -355,7 +355,23 @@ let should_restart config name = function
|
||||||
126 (bash, unused) command invoked cannot execute
|
126 (bash, unused) command invoked cannot execute
|
||||||
127 (bash, unused) command not found
|
127 (bash, unused) command not found
|
||||||
128+n (bash, unused) fatal error signal n
|
128+n (bash, unused) fatal error signal n
|
||||||
255 solo5-abort -> OCaml 4.10: fatal error (instead of 2) -> restart *)
|
255 solo5-abort -> OCaml 4.10: fatal error (instead of 2) -> restart
|
||||||
|
|
||||||
|
opam exit codes:
|
||||||
|
1 False. Returned when a boolean return value is expected, e.g. when running with --check, or for queries like opam lint.
|
||||||
|
2 Bad command-line arguments, or command-line arguments pointing to an invalid context (e.g. file not following the expected format).
|
||||||
|
5 Not found. You requested something (package, version, repository, etc.) that couldn't be found.
|
||||||
|
10 Aborted. The operation required confirmation, which wasn't given.
|
||||||
|
15 Could not acquire the locks required for the operation.
|
||||||
|
20 There is no solution to the user request. This can be caused by asking to install two incompatible packages, for example.
|
||||||
|
30 Error in package definition, or other metadata files. Using --strict raises this error more often.
|
||||||
|
31 Package script error. Some package operations were unsuccessful. This may be an error in the packages or an incompatibility with your system. This can be a partial error.
|
||||||
|
40 Sync error. Could not fetch some remotes from the network. This can be a partial error.
|
||||||
|
50 Configuration error. Opam or system configuration doesn't allow operation, and needs fixing.
|
||||||
|
60 Solver failure. The solver failed to return a sound answer. It can be due to a broken external solver, or an error in solver configuration.
|
||||||
|
99 Internal error. Something went wrong, likely due to a bug in opam itself.
|
||||||
|
130 User interrupt. SIGINT was received, generally due to the user pressing Ctrl-C.
|
||||||
|
*)
|
||||||
let opt_mem i =
|
let opt_mem i =
|
||||||
match config.Unikernel.fail_behaviour with
|
match config.Unikernel.fail_behaviour with
|
||||||
| `Quit -> assert false
|
| `Quit -> assert false
|
||||||
|
|
|
@ -89,20 +89,24 @@ let rec fifo_exists file =
|
||||||
| Unix.Unix_error (e, _, _) ->
|
| Unix.Unix_error (e, _, _) ->
|
||||||
R.error_msgf "file %a exists: %s" Fpath.pp file (Unix.error_message e)
|
R.error_msgf "file %a exists: %s" Fpath.pp file (Unix.error_message e)
|
||||||
|
|
||||||
|
type supported = FreeBSD | Linux
|
||||||
|
|
||||||
let uname =
|
let uname =
|
||||||
let cmd = Bos.Cmd.(v "uname" % "-s") in
|
let cmd = Bos.Cmd.(v "uname" % "-s") in
|
||||||
lazy (match Bos.OS.Cmd.(run_out cmd |> out_string) with
|
lazy (match Bos.OS.Cmd.(run_out cmd |> out_string) with
|
||||||
| Ok (s, _) -> s
|
| Ok (s, _) when s = "FreeBSD" -> FreeBSD
|
||||||
|
| Ok (s, _) when s = "Linux" -> Linux
|
||||||
|
| Ok (s, _) -> invalid_arg (Printf.sprintf "OS %s not supported" s)
|
||||||
| Error (`Msg m) -> invalid_arg m)
|
| Error (`Msg m) -> invalid_arg m)
|
||||||
|
|
||||||
let create_tap bridge =
|
let create_tap bridge =
|
||||||
match Lazy.force uname with
|
match Lazy.force uname with
|
||||||
| x when x = "FreeBSD" ->
|
| FreeBSD ->
|
||||||
let cmd = Bos.Cmd.(v "ifconfig" % "tap" % "create") in
|
let cmd = Bos.Cmd.(v "ifconfig" % "tap" % "create") in
|
||||||
Bos.OS.Cmd.run_out cmd |> Bos.OS.Cmd.out_string >>= fun (name, _) ->
|
Bos.OS.Cmd.run_out cmd |> Bos.OS.Cmd.out_string >>= fun (name, _) ->
|
||||||
Bos.OS.Cmd.run Bos.Cmd.(v "ifconfig" % bridge % "addm" % name) >>= fun () ->
|
Bos.OS.Cmd.run Bos.Cmd.(v "ifconfig" % bridge % "addm" % name) >>= fun () ->
|
||||||
Ok name
|
Ok name
|
||||||
| x when x = "Linux" ->
|
| Linux ->
|
||||||
let prefix = "vmmtap" in
|
let prefix = "vmmtap" in
|
||||||
let rec find_n x =
|
let rec find_n x =
|
||||||
let nam = prefix ^ string_of_int x in
|
let nam = prefix ^ string_of_int x in
|
||||||
|
@ -114,15 +118,13 @@ let create_tap bridge =
|
||||||
Bos.OS.Cmd.run Bos.Cmd.(v "ip" % "tuntap" % "add" % "mode" % "tap" % tap) >>= fun () ->
|
Bos.OS.Cmd.run Bos.Cmd.(v "ip" % "tuntap" % "add" % "mode" % "tap" % tap) >>= fun () ->
|
||||||
Bos.OS.Cmd.run Bos.Cmd.(v "brctl" % "addif" % bridge % tap) >>= fun () ->
|
Bos.OS.Cmd.run Bos.Cmd.(v "brctl" % "addif" % bridge % tap) >>= fun () ->
|
||||||
Ok tap
|
Ok tap
|
||||||
| x -> Error (`Msg ("unsupported operating system " ^ x))
|
|
||||||
|
|
||||||
let destroy_tap tapname =
|
let destroy_tap tapname =
|
||||||
match Lazy.force uname with
|
match Lazy.force uname with
|
||||||
| x when x = "FreeBSD" ->
|
| FreeBSD ->
|
||||||
Bos.OS.Cmd.run Bos.Cmd.(v "ifconfig" % tapname % "destroy")
|
Bos.OS.Cmd.run Bos.Cmd.(v "ifconfig" % tapname % "destroy")
|
||||||
| x when x = "Linux" ->
|
| Linux ->
|
||||||
Bos.OS.Cmd.run Bos.Cmd.(v "ip" % "tuntap" % "del" % "dev" % tapname % "mode" % "tap")
|
Bos.OS.Cmd.run Bos.Cmd.(v "ip" % "tuntap" % "del" % "dev" % tapname % "mode" % "tap")
|
||||||
| x -> Error (`Msg ("unsupported operating system " ^ x))
|
|
||||||
|
|
||||||
let prepare name vm =
|
let prepare name vm =
|
||||||
(match vm.Unikernel.typ with
|
(match vm.Unikernel.typ with
|
||||||
|
@ -153,8 +155,8 @@ let prepare name vm =
|
||||||
|
|
||||||
let vm_device vm =
|
let vm_device vm =
|
||||||
match Lazy.force uname with
|
match Lazy.force uname with
|
||||||
| x when x = "FreeBSD" -> Ok ("solo5-" ^ string_of_int vm.Unikernel.pid)
|
| FreeBSD -> Ok ("solo5-" ^ string_of_int vm.Unikernel.pid)
|
||||||
| _ -> Error (`Msg "don't know what you mean, sorry")
|
| _ -> Error (`Msg "don't know what you mean (trying to find vm device)")
|
||||||
|
|
||||||
let free_system_resources name taps =
|
let free_system_resources name taps =
|
||||||
(* same order as prepare! *)
|
(* same order as prepare! *)
|
||||||
|
@ -165,11 +167,8 @@ let free_system_resources name taps =
|
||||||
let cpuset cpu =
|
let cpuset cpu =
|
||||||
let cpustring = string_of_int cpu in
|
let cpustring = string_of_int cpu in
|
||||||
match Lazy.force uname with
|
match Lazy.force uname with
|
||||||
| x when x = "FreeBSD" ->
|
| FreeBSD -> Ok ([ "cpuset" ; "-l" ; cpustring ])
|
||||||
Ok ([ "cpuset" ; "-l" ; cpustring ])
|
| Linux -> Ok ([ "taskset" ; "-c" ; cpustring ])
|
||||||
| x when x = "Linux" ->
|
|
||||||
Ok ([ "taskset" ; "-c" ; cpustring ])
|
|
||||||
| x -> Error (`Msg ("unsupported operating system " ^ x))
|
|
||||||
|
|
||||||
let exec name config bridge_taps blocks =
|
let exec name config bridge_taps blocks =
|
||||||
let net, macs =
|
let net, macs =
|
||||||
|
|
Loading…
Reference in a new issue