[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 1/2] tools: remove systemd xenstore socket definitions
On a system with systemd the xenstore sockets are created via systemd. Remove the related configuration files in order to be able to decide at runtime whether the sockets should be created or not. This will enable Xen to start xenstore either via a daemon or via a stub domain. Signed-off-by: Juergen Gross <jgross@xxxxxxxx> --- tools/configure | 2 +- tools/hotplug/Linux/systemd/Makefile | 5 - tools/hotplug/Linux/systemd/xenstored.service.in | 6 +- tools/hotplug/Linux/systemd/xenstored.socket.in | 13 -- tools/hotplug/Linux/systemd/xenstored_ro.socket.in | 13 -- tools/ocaml/xenstored/Makefile | 10 +- tools/ocaml/xenstored/systemd.ml | 17 --- tools/ocaml/xenstored/systemd.mli | 24 ---- tools/ocaml/xenstored/systemd_stubs.c | 153 --------------------- tools/ocaml/xenstored/utils.ml | 21 +-- tools/ocaml/xenstored/xenstored.ml | 2 - tools/xenstore/Makefile | 3 - tools/xenstore/xenstored_core.c | 113 +-------------- 13 files changed, 13 insertions(+), 369 deletions(-) delete mode 100644 tools/hotplug/Linux/systemd/xenstored.socket.in delete mode 100644 tools/hotplug/Linux/systemd/xenstored_ro.socket.in delete mode 100644 tools/ocaml/xenstored/systemd.ml delete mode 100644 tools/ocaml/xenstored/systemd.mli delete mode 100644 tools/ocaml/xenstored/systemd_stubs.c diff --git a/tools/configure b/tools/configure index 5b5dcce..a04fe3f 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 diff --git a/tools/hotplug/Linux/systemd/Makefile b/tools/hotplug/Linux/systemd/Makefile index 558e459..7d24bbe 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 a5f836b..4dff683 100644 --- a/tools/hotplug/Linux/systemd/xenstored.service.in +++ b/tools/hotplug/Linux/systemd/xenstored.service.in @@ -1,13 +1,14 @@ [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 ConditionPathExists=/proc/xen/capabilities [Service] -Type=notify +Type=oneshot +RemainAfterExit=true KillMode=none Environment=XENSTORED_ARGS= Environment=XENSTORED=@XENSTORED@ @@ -19,6 +20,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 375c4b7..0000000 --- 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 82fe377..0000000 --- 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/Makefile b/tools/ocaml/xenstored/Makefile index 1769e55..a7008b1 100644 --- a/tools/ocaml/xenstored/Makefile +++ b/tools/ocaml/xenstored/Makefile @@ -4,8 +4,6 @@ include $(OCAML_TOPLEVEL)/common.make # Include configure output (config.h) CFLAGS += -include $(XEN_ROOT)/tools/config.h -CFLAGS-$(CONFIG_SYSTEMD) += $(SYSTEMD_CFLAGS) -LDFLAGS-$(CONFIG_SYSTEMD) += $(SYSTEMD_LIBS) CFLAGS += $(CFLAGS-y) CFLAGS += $(APPEND_CFLAGS) @@ -25,11 +23,6 @@ select_OBJS = select select_C_OBJS = select_stubs OCAML_LIBRARY = syslog select -LIBS += systemd.cma systemd.cmxa -systemd_OBJS = systemd -systemd_C_OBJS = systemd_stubs -OCAML_LIBRARY += systemd - $(foreach obj,$(systemd_C_OBJS),$(obj).o): _paths.h LIBS_systemd += $(LDFLAGS-y) @@ -57,12 +50,11 @@ OBJS = paths \ process \ xenstored -INTF = symbol.cmi trie.cmi syslog.cmi systemd.cmi select.cmi +INTF = symbol.cmi trie.cmi syslog.cmi select.cmi XENSTOREDLIBS = \ unix.cmxa \ -ccopt -L -ccopt . syslog.cmxa \ - -ccopt -L -ccopt . systemd.cmxa \ -ccopt -L -ccopt . select.cmxa \ -ccopt -L -ccopt $(OCAML_TOPLEVEL)/libs/mmap $(OCAML_TOPLEVEL)/libs/mmap/xenmmap.cmxa \ -ccopt -L -ccopt $(OCAML_TOPLEVEL)/libs/eventchn $(OCAML_TOPLEVEL)/libs/eventchn/xeneventchn.cmxa \ diff --git a/tools/ocaml/xenstored/systemd.ml b/tools/ocaml/xenstored/systemd.ml deleted file mode 100644 index 732446d..0000000 --- a/tools/ocaml/xenstored/systemd.ml +++ /dev/null @@ -1,17 +0,0 @@ -(* - * Copyright (C) 2014 Luis R. Rodriguez <mcgrof@xxxxxxxx> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; version 2.1 only. with the special - * exception on linking described in file LICENSE. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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 deleted file mode 100644 index 538fc5e..0000000 --- a/tools/ocaml/xenstored/systemd.mli +++ /dev/null @@ -1,24 +0,0 @@ -(* - * Copyright (C) 2014 Luis R. Rodriguez <mcgrof@xxxxxxxx> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; version 2.1 only. with the special - * exception on linking described in file LICENSE. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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 deleted file mode 100644 index 322f1e0..0000000 --- a/tools/ocaml/xenstored/systemd_stubs.c +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright (C) 2014 Luis R. Rodriguez <mcgrof@xxxxxxxx> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; version 2.1 only. with the special - * exception on linking described in file LICENSE. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - */ - -#include <string.h> -#include <stdio.h> -#include <stdbool.h> -#include <errno.h> -#include <caml/mlvalues.h> -#include <caml/memory.h> -#include <caml/alloc.h> -#include <caml/custom.h> -#include <caml/signals.h> -#include <caml/fail.h> - -#if defined(HAVE_SYSTEMD) - -#include <sys/socket.h> -#include <systemd/sd-daemon.h> - -#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); - CAMLlocal1(ret); - - ret = Val_int(0); - - sd_notify(1, "READY=1"); - - CAMLreturn(ret); -} - -#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); - CAMLlocal1(ret); - - ret = Val_int(-1U); - - CAMLreturn(ret); -} -#endif diff --git a/tools/ocaml/xenstored/utils.ml b/tools/ocaml/xenstored/utils.ml index 9f82c1c..68b70c5 100644 --- a/tools/ocaml/xenstored/utils.ml +++ b/tools/ocaml/xenstored/utils.ml @@ -73,21 +73,14 @@ let trim_path path = let join_by_null ls = String.concat "\000" ls (* unix utils *) -let create_regular_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 + 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.bind sock sockaddr; + Unix.listen sock 1; + sock let read_file_single_integer filename = let fd = Unix.openfile filename [ Unix.O_RDONLY ] 0o640 in diff --git a/tools/ocaml/xenstored/xenstored.ml b/tools/ocaml/xenstored/xenstored.ml index 30570ed..8a61dfe 100644 --- a/tools/ocaml/xenstored/xenstored.ml +++ b/tools/ocaml/xenstored/xenstored.ml @@ -428,8 +428,6 @@ let _ = process_domains store cons domains in - if Systemd.launched_by_systemd () then - Systemd.sd_notify_ready (); while not !quit do try diff --git a/tools/xenstore/Makefile b/tools/xenstore/Makefile index 36b6fd4..47d7fe0 100644 --- a/tools/xenstore/Makefile +++ b/tools/xenstore/Makefile @@ -14,9 +14,6 @@ CFLAGS += $(CFLAGS_libxenctrl) CFLAGS += -DXEN_LIB_STORED="\"$(XEN_LIB_STORED)\"" CFLAGS += -DXEN_RUN_STORED="\"$(XEN_RUN_STORED)\"" -CFLAGS-$(CONFIG_SYSTEMD) += $(SYSTEMD_CFLAGS) -LDFLAGS-$(CONFIG_SYSTEMD) += $(SYSTEMD_LIBS) - CFLAGS += $(CFLAGS-y) LDFLAGS += $(LDFLAGS-y) diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c index ffc0634..9bd6fd8 100644 --- a/tools/xenstore/xenstored_core.c +++ b/tools/xenstore/xenstored_core.c @@ -54,16 +54,6 @@ #include "hashtable.h" -#ifndef NO_SOCKETS -#if defined(HAVE_SYSTEMD) -#define XEN_SYSTEMD_ENABLED 1 -#endif -#endif - -#if defined(XEN_SYSTEMD_ENABLED) -#include <systemd/sd-daemon.h> -#endif - extern xenevtchn_handle *xce_handle; /* in xenstored_domain.c */ static int xce_pollfd_idx = -1; static struct pollfd *fds; @@ -1782,84 +1772,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; @@ -1978,9 +1890,6 @@ 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) { @@ -2044,16 +1953,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 */ @@ -2080,10 +1979,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); @@ -2115,13 +2011,6 @@ int main(int argc, char *argv[]) /* Tell the kernel we're up and running. */ xenbus_notify_running(); -#if defined(XEN_SYSTEMD_ENABLED) - if (systemd) { - sd_notify(1, "READY=1"); - fprintf(stderr, SD_NOTICE "xenstored is ready\n"); - } -#endif - /* Main loop. */ for (;;) { struct connection *conn, *next; -- 2.6.6 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |