diff --git a/tools/configure b/tools/configure index 5b5dccef38..1c84c6c025 100755 --- a/tools/configure +++ b/tools/configure @@ -9670,7 +9670,7 @@ fi if test "x$systemd" = "xy"; then : - ac_config_files="$ac_config_files hotplug/Linux/systemd/proc-xen.mount hotplug/Linux/systemd/var-lib-xenstored.mount hotplug/Linux/systemd/xen-init-dom0.service hotplug/Linux/systemd/xen-qemu-dom0-disk-backend.service hotplug/Linux/systemd/xen-watchdog.service hotplug/Linux/systemd/xenconsoled.service hotplug/Linux/systemd/xendomains.service hotplug/Linux/systemd/xendriverdomain.service hotplug/Linux/systemd/xenstored.service hotplug/Linux/systemd/xenstored.socket hotplug/Linux/systemd/xenstored_ro.socket" + ac_config_files="$ac_config_files hotplug/Linux/systemd/proc-xen.mount hotplug/Linux/systemd/var-lib-xenstored.mount hotplug/Linux/systemd/xen-init-dom0.service hotplug/Linux/systemd/xen-qemu-dom0-disk-backend.service hotplug/Linux/systemd/xen-watchdog.service hotplug/Linux/systemd/xenconsoled.service hotplug/Linux/systemd/xendomains.service hotplug/Linux/systemd/xendriverdomain.service hotplug/Linux/systemd/xenstored.service" fi @@ -10394,8 +10394,6 @@ do "hotplug/Linux/systemd/xendomains.service") CONFIG_FILES="$CONFIG_FILES hotplug/Linux/systemd/xendomains.service" ;; "hotplug/Linux/systemd/xendriverdomain.service") CONFIG_FILES="$CONFIG_FILES hotplug/Linux/systemd/xendriverdomain.service" ;; "hotplug/Linux/systemd/xenstored.service") CONFIG_FILES="$CONFIG_FILES hotplug/Linux/systemd/xenstored.service" ;; - "hotplug/Linux/systemd/xenstored.socket") CONFIG_FILES="$CONFIG_FILES hotplug/Linux/systemd/xenstored.socket" ;; - "hotplug/Linux/systemd/xenstored_ro.socket") CONFIG_FILES="$CONFIG_FILES hotplug/Linux/systemd/xenstored_ro.socket" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac diff --git a/tools/configure.ac b/tools/configure.ac index 87e14a8c98..f991ab3128 100644 --- a/tools/configure.ac +++ b/tools/configure.ac @@ -438,8 +438,6 @@ AS_IF([test "x$systemd" = "xy"], [ hotplug/Linux/systemd/xendomains.service hotplug/Linux/systemd/xendriverdomain.service hotplug/Linux/systemd/xenstored.service - hotplug/Linux/systemd/xenstored.socket - hotplug/Linux/systemd/xenstored_ro.socket ]) ]) diff --git a/tools/hotplug/Linux/systemd/Makefile b/tools/hotplug/Linux/systemd/Makefile index 558e459a19..7d24bbedea 100644 --- a/tools/hotplug/Linux/systemd/Makefile +++ b/tools/hotplug/Linux/systemd/Makefile @@ -6,9 +6,6 @@ XEN_SYSTEMD_MODULES = xen.conf XEN_SYSTEMD_MOUNT = proc-xen.mount XEN_SYSTEMD_MOUNT += var-lib-xenstored.mount -XEN_SYSTEMD_SOCKET = xenstored.socket -XEN_SYSTEMD_SOCKET += xenstored_ro.socket - XEN_SYSTEMD_SERVICE = xenstored.service XEN_SYSTEMD_SERVICE += xenconsoled.service XEN_SYSTEMD_SERVICE += xen-qemu-dom0-disk-backend.service @@ -19,7 +16,6 @@ XEN_SYSTEMD_SERVICE += xendriverdomain.service ALL_XEN_SYSTEMD = $(XEN_SYSTEMD_MODULES) \ $(XEN_SYSTEMD_MOUNT) \ - $(XEN_SYSTEMD_SOCKET) \ $(XEN_SYSTEMD_SERVICE) .PHONY: all @@ -38,7 +34,6 @@ install: $(ALL_XEN_SYSTEMD) $(INSTALL_DIR) $(DESTDIR)$(XEN_SYSTEMD_DIR) [ -d $(DESTDIR)$(XEN_SYSTEMD_MODULES_LOAD) ] || \ $(INSTALL_DIR) $(DESTDIR)$(XEN_SYSTEMD_MODULES_LOAD) - $(INSTALL_DATA) *.socket $(DESTDIR)$(XEN_SYSTEMD_DIR) $(INSTALL_DATA) *.service $(DESTDIR)$(XEN_SYSTEMD_DIR) $(INSTALL_DATA) *.mount $(DESTDIR)$(XEN_SYSTEMD_DIR) $(INSTALL_DATA) *.conf $(DESTDIR)$(XEN_SYSTEMD_MODULES_LOAD) diff --git a/tools/hotplug/Linux/systemd/xenstored.service.in b/tools/hotplug/Linux/systemd/xenstored.service.in index a5f836b5eb..d520d70fcc 100644 --- a/tools/hotplug/Linux/systemd/xenstored.service.in +++ b/tools/hotplug/Linux/systemd/xenstored.service.in @@ -1,6 +1,6 @@ [Unit] Description=The Xen xenstore -Requires=xenstored_ro.socket xenstored.socket proc-xen.mount var-lib-xenstored.mount +Requires=proc-xen.mount var-lib-xenstored.mount After=proc-xen.mount var-lib-xenstored.mount Before=libvirtd.service libvirt-guests.service RefuseManualStop=true @@ -8,6 +8,8 @@ ConditionPathExists=/proc/xen/capabilities [Service] Type=notify +NotifyAccess=all +RemainAfterExit=true KillMode=none Environment=XENSTORED_ARGS= Environment=XENSTORED=@XENSTORED@ @@ -19,6 +21,5 @@ ExecStart=/bin/sh -c "exec $XENSTORED --no-fork $XENSTORED_ARGS" [Install] WantedBy=multi-user.target -Also=xenstored_ro.socket xenstored.socket Also=proc-xen.mount Also=var-lib-xenstored.mount diff --git a/tools/hotplug/Linux/systemd/xenstored.socket.in b/tools/hotplug/Linux/systemd/xenstored.socket.in deleted file mode 100644 index 375c4b7a20..0000000000 --- a/tools/hotplug/Linux/systemd/xenstored.socket.in +++ /dev/null @@ -1,13 +0,0 @@ -[Unit] -Description=xenstore socket -Requires=proc-xen.mount var-lib-xenstored.mount -After=proc-xen.mount var-lib-xenstored.mount -ConditionPathExists=/proc/xen/capabilities - -[Socket] -ListenStream=@XEN_RUN_STORED@/socket -SocketMode=0600 -Service=xenstored.service - -[Install] -WantedBy=sockets.target diff --git a/tools/hotplug/Linux/systemd/xenstored_ro.socket.in b/tools/hotplug/Linux/systemd/xenstored_ro.socket.in deleted file mode 100644 index 82fe377cb9..0000000000 --- a/tools/hotplug/Linux/systemd/xenstored_ro.socket.in +++ /dev/null @@ -1,13 +0,0 @@ -[Unit] -Description=xenstore ro socket -Requires=proc-xen.mount var-lib-xenstored.mount -After=proc-xen.mount var-lib-xenstored.mount -ConditionPathExists=/proc/xen/capabilities - -[Socket] -ListenStream=@XEN_RUN_STORED@/socket_ro -SocketMode=0660 -Service=xenstored.service - -[Install] -WantedBy=sockets.target diff --git a/tools/ocaml/xenstored/systemd.ml b/tools/ocaml/xenstored/systemd.ml index 732446d8e5..39127f712d 100644 --- a/tools/ocaml/xenstored/systemd.ml +++ b/tools/ocaml/xenstored/systemd.ml @@ -12,6 +12,4 @@ * GNU Lesser General Public License for more details. *) -external sd_listen_fds: string -> Unix.file_descr = "ocaml_sd_listen_fds" -external launched_by_systemd: unit -> bool = "ocaml_launched_by_systemd" external sd_notify_ready: unit -> unit = "ocaml_sd_notify_ready" diff --git a/tools/ocaml/xenstored/systemd.mli b/tools/ocaml/xenstored/systemd.mli index 538fc5e1b5..18b9331031 100644 --- a/tools/ocaml/xenstored/systemd.mli +++ b/tools/ocaml/xenstored/systemd.mli @@ -12,13 +12,5 @@ * GNU Lesser General Public License for more details. *) -(** Calls the C library sd_listen_fds() function for us. Although - * the library doesn't accept argument we send one over to help - * us do sanity checks on the expected sockets *) -val sd_listen_fds: string -> Unix.file_descr - -(** Tells us whether the process is launched by systemd *) -val launched_by_systemd: unit -> bool - (** Tells systemd we're ready *) external sd_notify_ready: unit -> unit = "ocaml_sd_notify_ready" diff --git a/tools/ocaml/xenstored/systemd_stubs.c b/tools/ocaml/xenstored/systemd_stubs.c index 322f1e012e..490156c06a 100644 --- a/tools/ocaml/xenstored/systemd_stubs.c +++ b/tools/ocaml/xenstored/systemd_stubs.c @@ -25,88 +25,10 @@ #if defined(HAVE_SYSTEMD) -#include #include #include "_paths.h" -/* Will work regardless of the order systemd gives them to us */ -static int oxen_get_sd_fd(const char *connect_to) -{ - int fd = SD_LISTEN_FDS_START; - int r; - - while (fd <= SD_LISTEN_FDS_START + 1) { - r = sd_is_socket_unix(fd, SOCK_STREAM, 1, connect_to, 0); - if (r > 0) - return fd; - fd++; - } - - return -EBADR; -} - -static int oxen_verify_socket_socket(const char *connect_to) -{ - if ((strcmp(XEN_RUN_STORED "/socket_ro", connect_to) != 0) && - (strcmp(XEN_RUN_STORED "/socket", connect_to) != 0)) { - sd_notifyf(0, "STATUS=unexpected socket: %s\n" - "ERRNO=%i", - connect_to, - EBADR); - return -EBADR; - } - - return oxen_get_sd_fd(connect_to); -} - -CAMLprim value ocaml_sd_listen_fds(value connect_to) -{ - CAMLparam1(connect_to); - CAMLlocal1(sock_ret); - int sock = -EBADR, n; - - n = sd_listen_fds(0); - if (n <= 0) { - sd_notifyf(0, "STATUS=Failed to get any active sockets: %s\n" - "ERRNO=%i", - strerror(errno), - errno); - caml_failwith("ocaml_sd_listen_fds() failed to get any sockets"); - } else if (n != 2) { - fprintf(stderr, SD_ERR "Expected 2 fds but given %d\n", n); - sd_notifyf(0, "STATUS=Mismatch on number (2): %s\n" - "ERRNO=%d", - strerror(EBADR), - EBADR); - caml_failwith("ocaml_sd_listen_fds() mismatch"); - } - - sock = oxen_verify_socket_socket(String_val(connect_to)); - if (sock <= 0) { - fprintf(stderr, "failed to verify sock %s\n", - String_val(connect_to)); - caml_failwith("ocaml_sd_listen_fds_init() invalid socket"); - } - - sock_ret = Val_int(sock); - - CAMLreturn(sock_ret); -} - -CAMLprim value ocaml_launched_by_systemd(value ignore) -{ - CAMLparam1(ignore); - CAMLlocal1(ret); - - ret = Val_false; - - if (sd_listen_fds(0) > 0) - ret = Val_true; - - CAMLreturn(ret); -} - CAMLprim value ocaml_sd_notify_ready(value ignore) { CAMLparam1(ignore); @@ -121,26 +43,6 @@ CAMLprim value ocaml_sd_notify_ready(value ignore) #else -CAMLprim value ocaml_sd_listen_fds(value connect_to) -{ - CAMLparam1(connect_to); - CAMLlocal1(sock_ret); - - sock_ret = Val_int(-1U); - - CAMLreturn(sock_ret); -} - -CAMLprim value ocaml_launched_by_systemd(value ignore) -{ - CAMLparam1(ignore); - CAMLlocal1(ret); - - ret = Val_false; - - CAMLreturn(ret); -} - CAMLprim value ocaml_sd_notify_ready(value ignore) { CAMLparam1(ignore); diff --git a/tools/ocaml/xenstored/utils.ml b/tools/ocaml/xenstored/utils.ml index 9f82c1ca8d..e89c1aff04 100644 --- a/tools/ocaml/xenstored/utils.ml +++ b/tools/ocaml/xenstored/utils.ml @@ -73,22 +73,15 @@ let trim_path path = let join_by_null ls = String.concat "\000" ls (* unix utils *) -let create_regular_unix_socket name = +let create_unix_socket name = Unixext.unlink_safe name; Unixext.mkdir_rec (Filename.dirname name) 0o700; let sockaddr = Unix.ADDR_UNIX(name) in let sock = Unix.socket Unix.PF_UNIX Unix.SOCK_STREAM 0 in - Unix.set_close_on_exec sock; Unix.bind sock sockaddr; Unix.listen sock 1; sock -let create_unix_socket name = - if Systemd.launched_by_systemd() then - Systemd.sd_listen_fds name - else - create_regular_unix_socket name - let read_file_single_integer filename = let fd = Unix.openfile filename [ Unix.O_RDONLY ] 0o640 in let buf = String.make 20 (char_of_int 0) in diff --git a/tools/ocaml/xenstored/xenstored.ml b/tools/ocaml/xenstored/xenstored.ml index 7ea4026273..2efcce6cdb 100644 --- a/tools/ocaml/xenstored/xenstored.ml +++ b/tools/ocaml/xenstored/xenstored.ml @@ -428,8 +428,7 @@ let _ = process_domains store cons domains in - if Systemd.launched_by_systemd () then - Systemd.sd_notify_ready (); + Systemd.sd_notify_ready (); while not !quit do try diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c index 693d47d4d1..3df977b0c8 100644 --- a/tools/xenstore/xenstored_core.c +++ b/tools/xenstore/xenstored_core.c @@ -1788,84 +1788,6 @@ static int destroy_fd(void *_fd) return 0; } -#if defined(XEN_SYSTEMD_ENABLED) -/* Will work regardless of the order systemd gives them to us */ -static int xs_get_sd_fd(const char *connect_to) -{ - int fd = SD_LISTEN_FDS_START; - int r; - - while (fd <= SD_LISTEN_FDS_START + 1) { - r = sd_is_socket_unix(fd, SOCK_STREAM, 1, connect_to, 0); - if (r > 0) - return fd; - fd++; - } - - return -EBADR; -} - -static int xs_validate_active_socket(const char *connect_to) -{ - if ((strcmp(xs_daemon_socket_ro(), connect_to) != 0) && - (strcmp(xs_daemon_socket(), connect_to) != 0)) { - sd_notifyf(0, "STATUS=unexpected socket: %s\n" - "ERRNO=%i", - connect_to, - EBADR); - return -EBADR; - } - - return xs_get_sd_fd(connect_to); -} - -/* Return true if started by systemd and false if not. Exit with - * error if things go wrong. - */ -static bool systemd_checkin(int **psock, int **pro_sock) -{ - int *sock, *ro_sock; - const char *soc_str = xs_daemon_socket(); - const char *soc_str_ro = xs_daemon_socket_ro(); - int n; - - n = sd_listen_fds(0); - - if (n == 0) - return false; - - if (n < 0) { - sd_notifyf(0, "STATUS=Failed to get any active sockets: %s\n" - "ERRNO=%i", - strerror(errno), - errno); - barf_perror("sd_listen_fds() failed\n"); - } else if (n != 2) { - fprintf(stderr, SD_ERR "Expected 2 fds but given %d\n", n); - sd_notifyf(0, "STATUS=Mismatch on number (2): %s\n" - "ERRNO=%d", - strerror(EBADR), - EBADR); - barf_perror("sd_listen_fds() gave too many fds\n"); - } - - *psock = sock = talloc(talloc_autofree_context(), int); - *sock = xs_validate_active_socket(soc_str); - if (*sock <= 0) - barf_perror("%s", soc_str); - - *pro_sock = ro_sock = talloc(talloc_autofree_context(), int); - *ro_sock = xs_validate_active_socket(soc_str_ro); - if (*ro_sock <= 0) - barf_perror("%s", soc_str_ro); - - talloc_set_destructor(sock, destroy_fd); - talloc_set_destructor(ro_sock, destroy_fd); - - return true; -} -#endif - static void init_sockets(int **psock, int **pro_sock) { struct sockaddr_un addr; @@ -1984,9 +1906,7 @@ int main(int argc, char *argv[]) const char *pidfile = NULL; const char *memfile = NULL; int timeout; -#if defined(XEN_SYSTEMD_ENABLED) - bool systemd; -#endif + while ((opt = getopt_long(argc, argv, "DE:F:HNPS:t:T:RLVW:M:", options, NULL)) != -1) { @@ -2050,16 +1970,6 @@ int main(int argc, char *argv[]) if (optind != argc) barf("%s: No arguments desired", argv[0]); -#if defined(XEN_SYSTEMD_ENABLED) - systemd = systemd_checkin(&sock, &ro_sock); - if (systemd) { - dofork = false; - if (pidfile) - xprintf("%s: PID file not needed on systemd", argv[0]); - pidfile = NULL; - } -#endif - reopen_log(); /* make sure xenstored directories exist */ @@ -2086,10 +1996,7 @@ int main(int argc, char *argv[]) signal(SIGUSR1, do_talloc_report); } -#if defined(XEN_SYSTEMD_ENABLED) - if (!systemd) -#endif - init_sockets(&sock, &ro_sock); + init_sockets(&sock, &ro_sock); init_pipe(reopen_log_pipe); @@ -2122,10 +2029,8 @@ int main(int argc, char *argv[]) xenbus_notify_running(); #if defined(XEN_SYSTEMD_ENABLED) - if (systemd) { - sd_notify(1, "READY=1"); - fprintf(stderr, SD_NOTICE "xenstored is ready\n"); - } + sd_notify(1, "READY=1"); + fprintf(stderr, SD_NOTICE "xenstored is ready\n"); #endif /* Main loop. */