commit:     9c9e4daa436281959325c4cdf7feef84313c2ae8
Author:     Alexey Korepanov <kaikaikai <AT> yandex <DOT> ru>
AuthorDate: Thu Apr  7 13:48:35 2016 +0000
Commit:     Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Fri Apr  8 09:49:20 2016 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=9c9e4daa

net-misc/i2pd: add graceful shutdown and fix pid file problem

 net-misc/i2pd/files/i2pd-2.6.0-r2.confd   |  9 ++++
 net-misc/i2pd/files/i2pd-2.6.0-r2.initd   | 46 +++++++++++++++++
 net-misc/i2pd/files/i2pd-2.6.0-r2.service | 20 +++++++
 net-misc/i2pd/i2pd-2.6.0-r2.ebuild        | 86 +++++++++++++++++++++++++++++++
 4 files changed, 161 insertions(+)

diff --git a/net-misc/i2pd/files/i2pd-2.6.0-r2.confd 
b/net-misc/i2pd/files/i2pd-2.6.0-r2.confd
new file mode 100644
index 0000000..8f5ee8c
--- /dev/null
+++ b/net-misc/i2pd/files/i2pd-2.6.0-r2.confd
@@ -0,0 +1,9 @@
+I2PD_USER="${I2PD_USER:-i2pd}"
+I2PD_GROUP="${I2PD_GROUP:-i2pd}"
+I2PD_LOG="/var/log/i2pd.log"
+I2PD_PID="/run/i2pd/i2pd.pid"
+
+# Options to i2pd
+I2PD_OPTIONS="--daemon --service --pidfile=${I2PD_PID} \
+--log=file --logfile=${I2PD_LOG} \
+--conf=/etc/i2pd/i2pd.conf --tunconf=/etc/i2pd/tunnels.conf"

diff --git a/net-misc/i2pd/files/i2pd-2.6.0-r2.initd 
b/net-misc/i2pd/files/i2pd-2.6.0-r2.initd
new file mode 100644
index 0000000..72b9905
--- /dev/null
+++ b/net-misc/i2pd/files/i2pd-2.6.0-r2.initd
@@ -0,0 +1,46 @@
+#!/sbin/openrc-run
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+description="C++ daemon for accessing the I2P network"
+description_graceful="Graceful shutdown, takes 10 minutes"
+
+command="/usr/bin/i2pd"
+command_args="${I2PD_OPTIONS}"
+user="${I2PD_USER}:${I2PD_GROUP}"
+start_stop_daemon_args="
+    --user \"${user}\"
+    --pidfile \"${I2PD_PID}\"
+    --progress --retry 'SIGTERM/20 SIGKILL/20'
+"
+I2PD_PID_DIR=$(dirname "${I2PD_PID}")
+
+extra_started_commands="graceful"
+
+depend() {
+    use dns logger netmount
+}
+
+start_pre() {
+    if [ -z "${I2PD_USER}" ] || \
+       [ -z "${I2PD_GROUP}" ] || \
+       [ -z "${I2PD_PID}" ] || \
+       [ -z "${I2PD_LOG}" ] || \
+       [ -z "${I2PD_OPTIONS}" ] ; then
+        eerror "Not all variables I2PD_USER, I2PD_GROUP, I2PD_PID, 
I2PD_OPTIONS, I2PD_LOG are defined."
+        eerror "Check your /etc/conf.d/i2pd."
+        return 1
+    fi
+    checkpath -f -o "${user}" "${I2PD_LOG}"
+    checkpath -d -m 0750 -o "${user}" "${I2PD_PID_DIR}"
+}
+
+graceful() {
+    # on SIGINT, i2pd stops accepting tunnels and shuts down in 600 seconds
+    ebegin "Gracefully stopping i2pd, this takes 10 minutes"
+    mark_service_stopping
+    eval start-stop-daemon --stop ${start_stop_daemon_args} \
+        --exec "${command}" --retry 'SIGINT/620 SIGTERM/20 SIGKILL/20'
+    eend $? && mark_service_stopped
+}

diff --git a/net-misc/i2pd/files/i2pd-2.6.0-r2.service 
b/net-misc/i2pd/files/i2pd-2.6.0-r2.service
new file mode 100644
index 0000000..5cc34eb
--- /dev/null
+++ b/net-misc/i2pd/files/i2pd-2.6.0-r2.service
@@ -0,0 +1,20 @@
+[Unit]
+Description=C++ daemon for accessing the I2P network
+After=network.target
+
+[Service]
+Type=forking
+Restart=on-abnormal
+PIDFile=/run/i2pd/i2pd.pid
+User=i2pd
+Group=i2pd
+PermissionsStartOnly=yes
+ExecStartPre=/bin/mkdir -p /run/i2pd
+ExecStartPre=/bin/chown i2pd:i2pd /run/i2pd
+ExecStartPre=/bin/touch /run/i2pd/i2pd.pid /var/log/i2pd.log
+ExecStartPre=/bin/chown i2pd:i2pd /run/i2pd/i2pd.pid /var/log/i2pd.log
+ExecStart=/usr/bin/i2pd --daemon --service --pidfile=/run/i2pd/i2pd.pid 
--log=file --logfile=/var/log/i2pd.log --conf=/etc/i2pd/i2pd.conf 
--tunconf=/etc/i2pd/tunnels.conf
+
+[Install]
+WantedBy=multi-user.target
+

diff --git a/net-misc/i2pd/i2pd-2.6.0-r2.ebuild 
b/net-misc/i2pd/i2pd-2.6.0-r2.ebuild
new file mode 100644
index 0000000..dfb03b1
--- /dev/null
+++ b/net-misc/i2pd/i2pd-2.6.0-r2.ebuild
@@ -0,0 +1,86 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=6
+inherit eutils systemd user cmake-utils
+
+DESCRIPTION="A C++ daemon for accessing the I2P anonymous network"
+HOMEPAGE="https://github.com/PurpleI2P/i2pd";
+SRC_URI="https://github.com/PurpleI2P/${PN}/archive/${PV}.tar.gz -> 
${P}.tar.gz"
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~x86"
+IUSE="cpu_flags_x86_aes i2p-hardening libressl pch static +upnp"
+
+RDEPEND="!static? ( >=dev-libs/boost-1.49[threads]
+                       dev-libs/crypto++
+                       !libressl? ( dev-libs/openssl:0 )
+                       libressl? ( dev-libs/libressl )
+                       upnp? ( net-libs/miniupnpc )
+               )"
+DEPEND="${RDEPEND}
+       static? ( >=dev-libs/boost-1.49[static-libs,threads]
+               dev-libs/crypto++[static-libs]
+               !libressl? ( dev-libs/openssl:0[-bindist,static-libs] )
+               libressl? ( dev-libs/libressl[static-libs] )
+               upnp? ( net-libs/miniupnpc[static-libs] ) )
+       i2p-hardening? ( >=sys-devel/gcc-4.7 )
+       || ( >=sys-devel/gcc-4.7 >=sys-devel/clang-3.3 )"
+
+I2PD_USER="${I2PD_USER:-i2pd}"
+I2PD_GROUP="${I2PD_GROUP:-i2pd}"
+
+CMAKE_USE_DIR="${S}/build"
+
+src_prepare() {
+       eapply "${FILESDIR}/${PN}-2.5.1-fix_installed_components.patch"
+       eapply_user
+}
+
+src_configure() {
+       mycmakeargs=(
+               -DWITH_AESNI=$(usex cpu_flags_x86_aes ON OFF)
+               -DWITH_HARDENING=$(usex i2p-hardening ON OFF)
+               -DWITH_PCH=$(usex pch ON OFF)
+               -DWITH_STATIC=$(usex static ON OFF)
+               -DWITH_UPNP=$(usex upnp ON OFF)
+               -DWITH_LIBRARY=ON
+               -DWITH_BINARY=ON
+       )
+       cmake-utils_src_configure
+}
+
+src_install() {
+       cmake-utils_src_install
+       dodoc README.md
+       keepdir /var/lib/i2pd/
+       insinto "/var/lib/i2pd"
+       doins -r "${S}/contrib/certificates"
+       dosym /etc/i2pd/subscriptions.txt /var/lib/i2pd/subscriptions.txt
+       fowners "${I2PD_USER}:${I2PD_GROUP}" /var/lib/i2pd/
+       fperms 700 /var/lib/i2pd/
+       dodir "/etc/${PN}"
+       insinto "/etc/${PN}"
+       doins "${S}/docs/${PN}.conf"
+       doins "${S}/debian/subscriptions.txt"
+       doins "${S}/debian/tunnels.conf"
+       dodir /usr/share/i2pd
+       newconfd "${FILESDIR}/${PN}-2.6.0-r2.confd" "${PN}"
+       newinitd "${FILESDIR}/${PN}-2.6.0-r2.initd" "${PN}"
+       systemd_newunit "${FILESDIR}/${PN}-2.6.0-r2.service" "${PN}.service"
+       doenvd "${FILESDIR}/99${PN}"
+       insinto /etc/logrotate.d
+       newins "${FILESDIR}/${PN}-2.5.0.logrotate" "${PN}"
+       fowners "${I2PD_USER}:${I2PD_GROUP}" "/etc/${PN}/${PN}.conf" \
+               "/etc/${PN}/subscriptions.txt" \
+               "/etc/${PN}/tunnels.conf"
+       fperms 600 "/etc/${PN}/${PN}.conf" \
+               "/etc/${PN}/subscriptions.txt" \
+               "/etc/${PN}/tunnels.conf"
+}
+
+pkg_setup() {
+       enewgroup "${I2PD_GROUP}"
+       enewuser "${I2PD_USER}" -1 -1 "/var/lib/run/${PN}" "${I2PD_GROUP}"
+}

Reply via email to