albatross/packaging/Linux/gen_socket.ml

52 lines
1.3 KiB
OCaml

let pp_service ppf = function
| `Console -> Fmt.pf ppf "console"
| `Vmmd -> Fmt.pf ppf "daemon"
| `Stats -> Fmt.pf ppf "stats"
| `Log -> Fmt.pf ppf "log"
let unprivileged_services = [ `Console; `Log; `Stats ]
let privileged_services = [ `Vmmd ]
let unprivileged_format : _ format= {|[Unit]
Description=Albatross %s socket
PartOf=%s
[Socket]
ListenStream=%s
SocketUser=albatross
SocketMode=0600
Accept=no
[Install]
WantedBy=sockets.target
|}
let privileged_format : _ format = {|[Unit]
Description=Albatross %s socket
PartOf=%s
[Socket]
ListenStream=%s
SocketMode=0600
Accept=no
[Install]
WantedBy=sockets.target
|}
let write_socket privileged service =
let out_file = Fmt.str "albatross_%a.socket" pp_service service in
let systemd_service = Fmt.str "albatross_%a.service" pp_service service in
let service_name = Fmt.str "%a" pp_service service in
let socket_path = Vmm_core.socket_path (service :> Vmm_core.service) in
let oc = open_out out_file in
let ppf = Format.formatter_of_out_channel oc in
Fmt.pf ppf (if privileged then privileged_format else unprivileged_format)
service_name systemd_service socket_path
let () =
let tmpdir = Fpath.(v "%t" / "albatross") in
let () = Vmm_core.set_tmpdir tmpdir in
List.iter (write_socket false) unprivileged_services;
List.iter (write_socket true) privileged_services