Update to the R16B03-1

- Update to the R16B03-1
- Initial systemd support in EPMD (w.i.p.)

Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
This commit is contained in:
Peter Lemenkov 2014-03-27 18:43:47 +04:00
parent 77ce5ed9dd
commit f7eb6dd95b
8 changed files with 259 additions and 11 deletions

4
.gitignore vendored
View File

@ -46,3 +46,7 @@ otp_src_R14A.tar.gz
/otp_doc_html_R16B03.tar.gz
/otp_doc_man_R16B03.tar.gz
/otp_src_R16B03.readme
/otp_src_R16B03-1.readme
/otp_doc_html_R16B03-1.tar.gz
/otp_doc_man_R16B03-1.tar.gz
/otp_src_R16B03-1.tar.gz

18
epmd.service Normal file
View File

@ -0,0 +1,18 @@
[Unit]
Description=Erlang Port Mapper Daemon
After=network.target
Requires=epmd.socket
[Service]
ExecStart=/usr/bin/epmd -systemd
ExecStop=/usr/bin/epmd -kill
Type=simple
StandardOutput=journal
StandardError=journal
User=epmd
Group=epmd
[Install]
Also=epmd.socket
WantedBy=multi-user.target

10
epmd.socket Normal file
View File

@ -0,0 +1,10 @@
[Unit]
Description=Erlang Port Mapper Daemon Activation Socket
[Socket]
ListenStream=127.0.0.1:4369
Accept=false
[Install]
WantedBy=sockets.target

View File

@ -32,18 +32,20 @@
Name: erlang
Version: %{upstream_ver}
Release: %{upstream_rel_for_rpm}.2%{?dist}
Release: %{upstream_rel_for_rpm}.3%{?dist}
Summary: General-purpose programming language and runtime environment
Group: Development/Languages
License: ERPL
URL: http://www.erlang.org
Source0: http://www.erlang.org/download/otp_src_%{upstream_ver}%{upstream_rel}.tar.gz
Source0: http://www.erlang.org/download/otp_src_%{upstream_ver}%{upstream_rel}-1.tar.gz
%if %{use_prebuilt_docs}
Source1: http://erlang.org/download/otp_doc_html_%{upstream_ver}%{upstream_rel}.tar.gz
Source2: http://erlang.org/download/otp_doc_man_%{upstream_ver}%{upstream_rel}.tar.gz
Source1: http://erlang.org/download/otp_doc_html_%{upstream_ver}%{upstream_rel}-1.tar.gz
Source2: http://erlang.org/download/otp_doc_man_%{upstream_ver}%{upstream_rel}-1.tar.gz
%endif
Source4: http://www.erlang.org/download/otp_src_%{upstream_ver}%{upstream_rel}.readme
Source4: http://www.erlang.org/download/otp_src_%{upstream_ver}%{upstream_rel}-1.readme
Source5: epmd.service
Source6: epmd.socket
Source999: otp-get-patches.sh
@ -91,6 +93,12 @@ Patch9: otp-0009-TEMPORARILY-disable-ECC-until-dust-settles.patch
# Fedora specific patch
# Fix for powerpc architecture
Patch10: otp-0010-Fix-for-powerpc-architecture.patch
# Fedora specific patch
# Add -systemd option to empd. Check for include
Patch11: otp-0011-Add-systemd-option-to-empd.-Check-for-include-system.patch
# Fedora specific patch
# Add systemd support to epmd
Patch12: otp-0012-Add-systemd-support-to-epmd.patch
# end of autogenerated patch tag list
# BuildRoot not strictly needed since F10, but keep it for spec file robustness
@ -122,6 +130,13 @@ BuildRequires: emacs-el
BuildRequires: xemacs-packages-extra-el
%endif
%if 0%{?el7}%{?fedora}
Requires(post): systemd
Requires(preun):systemd
Requires(postun):systemd
Requires: systemd
%endif
Requires: erlang-appmon%{?_isa} = %{version}-%{release}
Requires: erlang-asn1%{?_isa} = %{version}-%{release}
Requires: erlang-common_test%{?_isa} = %{version}-%{release}
@ -958,6 +973,8 @@ Erlang mode for XEmacs (source lisp files).
%patch8 -p1 -b .Fix_for_armv7hl_architecture
%patch9 -p1 -b .TEMPORARILY_disable_ECC_until_dust_settles
%patch10 -p1 -b .Fix_for_powerpc_architecture
%patch11 -p1 -b .Add_systemd_option_to_empd_Check_for_include_system
%patch12 -p1 -b .Add_systemd_support_to_epmd
# end of autogenerated prep patch list
# FIXME we should come up with a better solution
@ -1153,6 +1170,12 @@ test -d "$RPM_BUILD_ROOT$jinterface_lib_dir"
install -m 0755 -d "$RPM_BUILD_ROOT%{_javadir}"
ln -s "${jinterface_lib_dir}priv/OtpErlang.jar" "$RPM_BUILD_ROOT%{_javadir}/%{name}/"
# systemd-related stuff
%if 0%{?el7}%{?fedora}
install -D -p -m 0644 %{SOURCE5} %{buildroot}%{_unitdir}/epmd.service
install -D -p -m 0644 %{SOURCE6} %{buildroot}%{_unitdir}/epmd.socket
%endif
%clean
rm -rf $RPM_BUILD_ROOT
@ -1493,6 +1516,10 @@ rm -rf $RPM_BUILD_ROOT
%endif
%{_libdir}/erlang/releases/*
%{_libdir}/erlang/usr/
%if 0%{?el7}%{?fedora}
%{_unitdir}/epmd.service
%{_unitdir}/epmd.socket
%endif
%files et
%dir %{_libdir}/erlang/lib/et-*/
@ -2289,6 +2316,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
* Thu Mar 27 2014 Peter Lemenkov <lemenkov@gmail.com> - R16B-03.3
- Ver. R16B03-1 (Bugfix release)
- Enabled systemd support in EPMD
* Fri Feb 7 2014 Sam Kottler <skottler@fedoraproject.org> - R16B-03.2
- Fix macro usage for EPEL7 build and added need_bootstrap

View File

@ -460,10 +460,10 @@ index 51167b3..a623824 100644
$(INSTALL_DATA) $(TARGET_FILES) "$(RELSYSDIR)/ebin"
diff --git a/lib/inets/src/http_server/Makefile b/lib/inets/src/http_server/Makefile
index 67555d5..0620f3a 100644
index 2660d04..c873a27 100644
--- a/lib/inets/src/http_server/Makefile
+++ b/lib/inets/src/http_server/Makefile
@@ -125,7 +125,7 @@ include $(ERL_TOP)/make/otp_release_targets.mk
@@ -126,7 +126,7 @@ include $(ERL_TOP)/make/otp_release_targets.mk
release_spec: opt
$(INSTALL_DIR) "$(RELSYSDIR)/src"
$(INSTALL_DIR) "$(RELSYSDIR)/src/http_server"

View File

@ -0,0 +1,74 @@
From: "Matwey V. Kornilov" <matwey.kornilov@gmail.com>
Date: Tue, 17 Dec 2013 18:16:56 +0400
Subject: [PATCH] Add -systemd option to empd. Check for include
systemd/sd-daemon.h and wrap systemd code into ifdef-s.
diff --git a/erts/configure.in b/erts/configure.in
index 9ad3671..125e579 100644
--- a/erts/configure.in
+++ b/erts/configure.in
@@ -1565,6 +1565,8 @@ AC_CHECK_MEMBERS([struct ifreq.ifr_enaddr], [], [],
#endif
])
+AC_CHECK_HEADERS(systemd/sd-daemon.h)
+
dnl ----------------------------------------------------------------------
dnl Check the availability for libdlpi
dnl ----------------------------------------------------------------------
diff --git a/erts/epmd/src/epmd.c b/erts/epmd/src/epmd.c
index 2d55b37..fc58882 100644
--- a/erts/epmd/src/epmd.c
+++ b/erts/epmd/src/epmd.c
@@ -175,6 +175,9 @@ int main(int argc, char** argv)
g->nodes.reg = g->nodes.unreg = g->nodes.unreg_tail = NULL;
g->nodes.unreg_count = 0;
g->active_conn = 0;
+#ifdef HAVE_SYSTEMD_SD_DAEMON_H
+ g->is_systemd = 0;
+#endif
for (i = 0; i < MAX_LISTEN_SOCKETS; i++)
g->listenfd[i] = -1;
@@ -248,8 +251,12 @@ int main(int argc, char** argv)
else
usage(g);
epmd_cleanup_exit(g,0);
- }
- else
+#ifdef HAVE_SYSTEMD_SD_DAEMON_H
+ } else if (strcmp(argv[0], "-systemd") == 0) {
+ g->is_systemd = 1;
+ argv++; argc--;
+#endif
+ } else
usage(g);
}
dbg_printf(g,1,"epmd running - daemon = %d",g->is_daemon);
@@ -454,6 +461,11 @@ static void usage(EpmdVars *g)
fprintf(stderr, " Forcibly unregisters a name with epmd\n");
fprintf(stderr, " (only allowed if -relaxed_command_check was given when \n");
fprintf(stderr, " epmd was started).\n");
+#ifdef HAVE_SYSTEMD_SD_DAEMON_H
+ fprintf(stderr, " -systemd\n");
+ fprintf(stderr, " Wait for socket from systemd. The option makes sense\n");
+ fprintf(stderr, " when started from .socket unit.\n");
+#endif
epmd_cleanup_exit(g,1);
}
diff --git a/erts/epmd/src/epmd_int.h b/erts/epmd/src/epmd_int.h
index 656dbd1..bf1ddd8 100644
--- a/erts/epmd/src/epmd_int.h
+++ b/erts/epmd/src/epmd_int.h
@@ -321,6 +321,9 @@ typedef struct {
int listenfd[MAX_LISTEN_SOCKETS];
char *addresses;
char **argv;
+#ifdef HAVE_SYSTEMD_SD_DAEMON_H
+ int is_systemd;
+#endif
} EpmdVars;
void dbg_printf(EpmdVars*,int,const char*,...);

View File

@ -0,0 +1,111 @@
From: "Matwey V. Kornilov" <matwey.kornilov@gmail.com>
Date: Tue, 17 Dec 2013 18:57:54 +0400
Subject: [PATCH] Add systemd support to epmd
diff --git a/erts/configure.in b/erts/configure.in
index 125e579..d9bc1ec 100644
--- a/erts/configure.in
+++ b/erts/configure.in
@@ -969,6 +969,8 @@ AC_CHECK_LIB(dl, dlopen)
AC_CHECK_LIB(inet, main)
AC_CHECK_LIB(util, openpty)
+AC_CHECK_LIB(systemd-daemon, sd_listen_fds)
+
dnl Try to find a thread library.
dnl
dnl ETHR_LIB_NAME, ETHR_LIBS, ETHR_X_LIBS, ETHR_THR_LIB_BASE and ETHR_DEFS
diff --git a/erts/epmd/src/epmd_int.h b/erts/epmd/src/epmd_int.h
index bf1ddd8..363923e 100644
--- a/erts/epmd/src/epmd_int.h
+++ b/erts/epmd/src/epmd_int.h
@@ -110,6 +110,10 @@
#include <stdarg.h>
+#ifdef HAVE_SYSTEMD_SD_DAEMON_H
+# include <systemd/sd-daemon.h>
+#endif
+
/* ************************************************************************ */
/* Replace some functions by others by making the function name a macro */
diff --git a/erts/epmd/src/epmd_srv.c b/erts/epmd/src/epmd_srv.c
index 90df7cc..cb8ca96 100644
--- a/erts/epmd/src/epmd_srv.c
+++ b/erts/epmd/src/epmd_srv.c
@@ -208,6 +208,39 @@ void run(EpmdVars *g)
node_init(g);
g->conn = conn_init(g);
+#ifdef HAVE_SYSTEMD_SD_DAEMON_H
+ if (g->is_systemd)
+ {
+ int n;
+
+ dbg_printf(g,2,"try to obtain sockets from systemd");
+
+ n = sd_listen_fds(0);
+ if (n < 0)
+ {
+ dbg_perror(g,"cannot obtain sockets from systemd");
+ epmd_cleanup_exit(g,1);
+ }
+ else if (n == 0)
+ {
+ dbg_tty_printf(g,0,"systemd provides no sockets");
+ epmd_cleanup_exit(g,1);
+ }
+ else if (n > MAX_LISTEN_SOCKETS)
+ {
+ dbg_tty_printf(g,0,"cannot listen on more than %d IP addresses", MAX_LISTEN_SOCKETS);
+ epmd_cleanup_exit(g,1);
+ }
+ num_sockets = n;
+ for (i = 0; i < num_sockets; i++)
+ {
+ g->listenfd[i] = listensock[i] = SD_LISTEN_FDS_START + i;
+ }
+ }
+ else
+ {
+#endif
+
dbg_printf(g,2,"try to initiate listening port %d", g->port);
if (g->addresses != NULL && /* String contains non-separator characters if: */
@@ -272,6 +305,9 @@ void run(EpmdVars *g)
SET_ADDR(iserv_addr[0],EPMD_ADDR_ANY,sport);
num_sockets = 1;
}
+#ifdef HAVE_SYSTEMD_SD_DAEMON_H
+ }
+#endif
#if !defined(__WIN32__)
/* We ignore the SIGPIPE signal that is raised when we call write
@@ -289,6 +325,13 @@ void run(EpmdVars *g)
FD_ZERO(&g->orig_read_mask);
g->select_fd_top = 0;
+#ifdef HAVE_SYSTEMD_SD_DAEMON_H
+ if (g->is_systemd)
+ for (i = 0; i < num_sockets; i++)
+ select_fd_set(g, listensock[i]);
+ else
+ {
+#endif
for (i = 0; i < num_sockets; i++)
{
if ((listensock[i] = socket(FAMILY,SOCK_STREAM,0)) < 0)
@@ -351,6 +394,9 @@ void run(EpmdVars *g)
}
select_fd_set(g, listensock[i]);
}
+#ifdef HAVE_SYSTEMD_SD_DAEMON_H
+ }
+#endif
dbg_tty_printf(g,2,"entering the main select() loop");

View File

@ -1,4 +1,4 @@
fb39e206739e43501f6d27edf9b04b37 otp_doc_html_R16B03.tar.gz
099ed598feadc54e7efea908cc598f08 otp_doc_man_R16B03.tar.gz
d8b65a1492007f388545176300182d4f otp_src_R16B03.readme
c330150913556a0fe73e57a441cb6375 otp_src_R16B03.tar.gz
d27250e9ee98d6388e7f2e65379a0406 otp_src_R16B03-1.readme
eff44490c9bbae3a5c5741bec2390ba3 otp_doc_html_R16B03-1.tar.gz
39113c0d2515bdd8cd7e0f975a380122 otp_doc_man_R16B03-1.tar.gz
e5ece977375197338c1b93b3d88514f8 otp_src_R16B03-1.tar.gz