1 |
commit: c8d1e4560d3eff6e034ef1ef2e83ef37f4702510 |
2 |
Author: Florian Schmaus <flow <AT> gentoo <DOT> org> |
3 |
AuthorDate: Tue May 17 18:46:36 2022 +0000 |
4 |
Commit: Florian Schmaus <flow <AT> gentoo <DOT> org> |
5 |
CommitDate: Tue May 17 20:01:27 2022 +0000 |
6 |
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c8d1e456 |
7 |
|
8 |
net-im/ejabberd: add 22.05 |
9 |
|
10 |
Fix bashism in OpenRC init script. Drop support for logrotate in favor |
11 |
of ejabberd's built-in log rotation mechanism. |
12 |
|
13 |
Also depend on >=acct-user/ejabberd-1, which will create the ejabberd |
14 |
with HOME set to /var/lib/ejabberd, i.e., ejabberd's spool |
15 |
directory. This allows us to drop ${PN}-19.08-ejabberdctl.patch. |
16 |
|
17 |
Closes: https://bugs.gentoo.org/841976 |
18 |
Closes: https://github.com/gentoo/gentoo/pull/25540 |
19 |
Signed-off-by: Florian Schmaus <flow <AT> gentoo.org> |
20 |
|
21 |
net-im/ejabberd/Manifest | 2 + |
22 |
net-im/ejabberd/ejabberd-22.05.ebuild | 232 +++++++++++++++++++++++++++++ |
23 |
net-im/ejabberd/files/ejabberd-22.05.initd | 54 +++++++ |
24 |
3 files changed, 288 insertions(+) |
25 |
|
26 |
diff --git a/net-im/ejabberd/Manifest b/net-im/ejabberd/Manifest |
27 |
index 4507c95a647f..e8815deaf151 100644 |
28 |
--- a/net-im/ejabberd/Manifest |
29 |
+++ b/net-im/ejabberd/Manifest |
30 |
@@ -1,2 +1,4 @@ |
31 |
DIST ejabberd-21.12.tar.gz 2532288 BLAKE2B 847fa90ce0140c384add489a97d566e3edf9927f71c4abf4f51869f2e0ba4a5183002cb5e4f7a9d7f4ad5ed5902a47b2dd336ab1ef854673a3a2f337326a3fc2 SHA512 4f1e56becb9970355b98c0ad177ee162130346e53aa92c274e502fe300d6f4dc7fda8fcca845821087da78379a19a2962b50794b71d139c91764539fcfeec73c |
32 |
DIST ejabberd-21.12.tar.gz.asc 195 BLAKE2B 6e2b409dd6e5eb24890b0ecaa58019cb1cfcfef78eddedb5fe4436ba72f15c1525ba6f254d24b6a11b84c2360d67d93036f47007cf6af9c3475fefbd10f48093 SHA512 81d838b35d1ea54205187d4c74fb2232b18466e562bce01ed6287aa17b80c5b287041d456a7fda9de4791eb635c102c25b19a9b26d794723cd9d36c740513bc1 |
33 |
+DIST ejabberd-22.05.tar.gz 2527957 BLAKE2B d7fc614b8fe88bc8997d78821334a5e26a4201a5d199e6a04fe668e192ed0c7a37b68aff2fd9c6740844634c005b492b1dd76de4b9ed841863d0285f6097edd9 SHA512 33f98a9c45ff8257d240e7b90181e399ecab84e361f5619dc8d57252642e81d4958467cfa89b90681f3cf0d1d56a3079eb98d4e80cc6af5ca11938bb2a69f865 |
34 |
+DIST ejabberd-22.05.tar.gz.asc 195 BLAKE2B 634cb0a338c68d8ee1d3b2e3e267a758deff3a925c93273c5aaa209d12a5bb40565831869cc7e81fa66de8648211eb60f9644ac7d4d0ec557e9332a8cdd9dfce SHA512 42ffc224915f3f0ac4df42cfe0c35e65861be38856e398ac6172cdcbf5de543ae808a4b201a1c1d64d10234d02d754d1376ff21ee9d679095497479c717c17da |
35 |
|
36 |
diff --git a/net-im/ejabberd/ejabberd-22.05.ebuild b/net-im/ejabberd/ejabberd-22.05.ebuild |
37 |
new file mode 100644 |
38 |
index 000000000000..029431d351cb |
39 |
--- /dev/null |
40 |
+++ b/net-im/ejabberd/ejabberd-22.05.ebuild |
41 |
@@ -0,0 +1,232 @@ |
42 |
+# Copyright 1999-2022 Gentoo Authors |
43 |
+# Distributed under the terms of the GNU General Public License v2 |
44 |
+ |
45 |
+EAPI=7 |
46 |
+ |
47 |
+inherit autotools pam rebar systemd verify-sig |
48 |
+ |
49 |
+DESCRIPTION="Robust, scalable and extensible XMPP server" |
50 |
+HOMEPAGE="https://www.ejabberd.im/ https://github.com/processone/ejabberd/" |
51 |
+SRC_URI=" |
52 |
+ https://github.com/processone/${PN}/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz |
53 |
+ verify-sig? ( https://github.com/processone/${PN}/releases/download/${PV}/${P}.tar.gz.asc ) |
54 |
+" |
55 |
+VERIFY_SIG_OPENPGP_KEY_PATH=${BROOT}/usr/share/openpgp-keys/process-one.net.asc |
56 |
+ |
57 |
+LICENSE="GPL-2" |
58 |
+SLOT="0" |
59 |
+KEYWORDS="~amd64 ~arm ~ia64 ~sparc ~x86" |
60 |
+REQUIRED_USE="mssql? ( odbc )" |
61 |
+# TODO: Add 'tools' flag. |
62 |
+IUSE="captcha debug full-xml ldap mssql mysql odbc pam postgres redis |
63 |
+ roster-gw selinux sip sqlite +stun zlib" |
64 |
+ |
65 |
+RESTRICT="test" |
66 |
+ |
67 |
+# TODO: Add dependencies for 'tools' flag enabled. |
68 |
+# TODO: tools? ( |
69 |
+# TODO: >=dev-erlang/luerl-0.3 |
70 |
+# TODO: ) |
71 |
+DEPEND=" |
72 |
+ >=dev-lang/erlang-19.3[odbc?,ssl] |
73 |
+ >=dev-erlang/cache_tab-1.0.30 |
74 |
+ >=dev-erlang/eimp-1.0.22 |
75 |
+ >=dev-erlang/fast_tls-1.1.15 |
76 |
+ >=dev-erlang/fast_xml-1.1.49 |
77 |
+ >=dev-erlang/fast_yaml-1.0.33 |
78 |
+ >=dev-erlang/yconf-1.0.13 |
79 |
+ >=dev-erlang/jiffy-1.0.5 |
80 |
+ >=dev-erlang/jose-1.11.2 |
81 |
+ >=dev-erlang/lager-3.9.1 |
82 |
+ >=dev-erlang/p1_oauth2-0.6.11 |
83 |
+ >=dev-erlang/p1_utils-1.0.25 |
84 |
+ >=dev-erlang/stringprep-1.0.28 |
85 |
+ >=dev-erlang/xmpp-1.5.6 |
86 |
+ >=dev-erlang/pkix-1.0.9 |
87 |
+ >=dev-erlang/mqtree-1.0.15 |
88 |
+ >=dev-erlang/idna-6.0.0-r1 |
89 |
+ >=dev-erlang/p1_acme-1.0.19 |
90 |
+ >=dev-erlang/base64url-1.0.1 |
91 |
+ ldap? ( =net-nds/openldap-2* ) |
92 |
+ mysql? ( >=dev-erlang/p1_mysql-1.0.19 ) |
93 |
+ odbc? ( dev-db/unixODBC ) |
94 |
+ pam? ( >=dev-erlang/epam-1.0.12 ) |
95 |
+ postgres? ( >=dev-erlang/p1_pgsql-1.1.18 ) |
96 |
+ redis? ( >=dev-erlang/eredis-1.2.0 ) |
97 |
+ sip? ( >=dev-erlang/esip-1.0.45 ) |
98 |
+ sqlite? ( >=dev-erlang/sqlite3-1.1.13 ) |
99 |
+ stun? ( >=dev-erlang/stun-1.2.2 ) |
100 |
+ zlib? ( >=dev-erlang/ezlib-1.0.12 ) |
101 |
+" |
102 |
+RDEPEND=" |
103 |
+ ${DEPEND} |
104 |
+ >=acct-user/ejabberd-1 |
105 |
+ captcha? ( media-gfx/imagemagick[truetype,png] ) |
106 |
+ selinux? ( sec-policy/selinux-jabber ) |
107 |
+" |
108 |
+BDEPEND="verify-sig? ( sec-keys/openpgp-keys-processone )" |
109 |
+ |
110 |
+DOCS=( CHANGELOG.md README.md ) |
111 |
+PATCHES=( |
112 |
+ "${FILESDIR}/adjust-ejabberd.service.template-to-Gentoo.patch" |
113 |
+) |
114 |
+ |
115 |
+# Get path to ejabberd lib directory. |
116 |
+# |
117 |
+# This is the path ./configure script Base for this path is path set in |
118 |
+# ./configure script which is /usr/lib by default. If libdir is explicitely set |
119 |
+# to something else than this should be adjusted here as well. |
120 |
+get_ejabberd_path() { |
121 |
+ echo "/usr/$(get_libdir)/${P}" |
122 |
+} |
123 |
+ |
124 |
+src_prepare() { |
125 |
+ default |
126 |
+ |
127 |
+ eautoreconf |
128 |
+ |
129 |
+ rebar_remove_deps |
130 |
+ |
131 |
+ # Set paths to ejabberd lib directory consistently to point always to directory |
132 |
+ # suffixed with version. |
133 |
+ sed -e "/^EJABBERDDIR[[:space:]]*=/{s:ejabberd:${P}:}" \ |
134 |
+ -i "${S}/Makefile.in" \ |
135 |
+ || die 'failed to set ejabberd path in Makefile.in' |
136 |
+ sed -e "/EJABBERD_BIN_PATH=/{s:ejabberd:${P}:}" \ |
137 |
+ -i "${S}/ejabberdctl.template" \ |
138 |
+ || die 'failed to set ejabberd path in ejabberdctl.template' |
139 |
+ |
140 |
+ # Get epam-wrapper from 'files' directory and correct path to lib directory in |
141 |
+ # it. epam-wrapper is placed into work directory. It is assumed no epam-wrapper |
142 |
+ # file exists there already. |
143 |
+ local epam_wrapper_src="${FILESDIR}/epam-wrapper" |
144 |
+ local epam_wrapper_dst="${S}/epam-wrapper" |
145 |
+ [[ -e ${epam_wrapper_dst} ]] && die 'epam-wrapper already exists' |
146 |
+ sed -r -e "s@^(ERL_LIBS=).*\$@\1${EPREFIX}$(get_erl_libs)@" \ |
147 |
+ "${epam_wrapper_src}" >"${epam_wrapper_dst}" \ |
148 |
+ || die 'failed to install epam-wrapper' |
149 |
+ |
150 |
+ rebar_fix_include_path fast_xml |
151 |
+ rebar_fix_include_path p1_utils |
152 |
+ rebar_fix_include_path xmpp |
153 |
+ |
154 |
+ # Fix bug #591862. ERL_LIBS should point directly to ejabberd directory |
155 |
+ # rather than its parent which is default. That way ejabberd directory |
156 |
+ # takes precedence is module lookup. |
157 |
+ local ejabberd_erl_libs="$(get_ejabberd_path):$(get_erl_libs)" |
158 |
+ sed -e "s|\(ERL_LIBS=\)'{{libdir}}'\.*|\1${ejabberd_erl_libs}|" \ |
159 |
+ -i "${S}/ejabberdctl.template" \ |
160 |
+ || die 'failed to set ERL_LIBS in ejabberdctl.template' |
161 |
+} |
162 |
+ |
163 |
+src_configure() { |
164 |
+ econf \ |
165 |
+ --docdir="${EPREFIX}/usr/share/doc/${PF}/html" \ |
166 |
+ --localstatedir="${EPREFIX}/var" \ |
167 |
+ --enable-user=${PN} \ |
168 |
+ $(use_enable debug) \ |
169 |
+ $(use_enable full-xml) \ |
170 |
+ $(use_enable mssql) \ |
171 |
+ $(use_enable mysql) \ |
172 |
+ $(use_enable odbc) \ |
173 |
+ $(use_enable pam) \ |
174 |
+ $(use_enable postgres pgsql) \ |
175 |
+ $(use_enable redis) \ |
176 |
+ $(use_enable roster-gw roster-gateway-workaround) \ |
177 |
+ $(use_enable sqlite) \ |
178 |
+ $(use_enable sip) \ |
179 |
+ $(use_enable stun) \ |
180 |
+ $(use_enable zlib) |
181 |
+ |
182 |
+ # more options to support |
183 |
+ # --enable-elixir requires https://github.com/elixir-lang/elixir |
184 |
+} |
185 |
+ |
186 |
+src_compile() { |
187 |
+ # Note that we also add ejabberdctl.example, which will be used by |
188 |
+ # ejabberd's build system to create /usr/sbin/ejabberdctl, as |
189 |
+ # target. Otherwise, ejabberdctl.example is due to be created by the |
190 |
+ # 'install' target (as per upstream's Makefile.in). However when |
191 |
+ # invoke the 'install' target (in src_install below), DESTDIR is |
192 |
+ # set, which causes DESTDIR to scope into the ejabberdctl.example |
193 |
+ # generation. |
194 |
+ emake REBAR='rebar -v' src ejabberdctl.example |
195 |
+} |
196 |
+ |
197 |
+src_install() { |
198 |
+ default |
199 |
+ |
200 |
+ if use pam; then |
201 |
+ local epam_path="$(get_ejabberd_path)/priv/bin/epam" |
202 |
+ |
203 |
+ pamd_mimic_system xmpp auth account |
204 |
+ into "$(get_ejabberd_path)/priv" |
205 |
+ newbin epam-wrapper epam |
206 |
+ fi |
207 |
+ |
208 |
+ newconfd "${FILESDIR}/${PN}.confd" "${PN}" |
209 |
+ newinitd "${FILESDIR}/${PN}-22.05.initd" "${PN}" |
210 |
+ systemd_dounit "${PN}.service" |
211 |
+ |
212 |
+ keepdir /var/{lib,log}/ejabberd |
213 |
+} |
214 |
+ |
215 |
+pkg_preinst() { |
216 |
+ if use pam; then |
217 |
+ einfo "Adding ejabberd user to epam group to allow ejabberd to use PAM" \ |
218 |
+ "authentication" |
219 |
+ # See |
220 |
+ # <https://docs.ejabberd.im/admin/configuration/#pam-authentication>. |
221 |
+ # epam binary is installed by dev-erlang/epam package, therefore SUID |
222 |
+ # is set by that package. Instead of jabber group it uses epam group, |
223 |
+ # therefore we need to add jabber user to epam group. |
224 |
+ usermod -a -G epam ejabberd || die |
225 |
+ fi |
226 |
+} |
227 |
+ |
228 |
+pkg_postinst() { |
229 |
+ local migrate_to_ejabberd_user=false |
230 |
+ |
231 |
+ if [[ ${REPLACING_VERSIONS} ]]; then |
232 |
+ for v in ${REPLACING_VERSIONS}; do |
233 |
+ if ver_test "${v}" -lt 21.04-r1; then |
234 |
+ migrate_to_ejabberd_user=true |
235 |
+ break |
236 |
+ fi |
237 |
+ done |
238 |
+ fi |
239 |
+ |
240 |
+ # Sarting with >=21.04-r1, the ejabberd configuration is now in |
241 |
+ # /etc/ejabberd and no longer in /etc/jabber. See if we need to |
242 |
+ # migrate the configuration. Furthermore, ejabberd no longer runs |
243 |
+ # under the, shared via net-im/jabber-base, 'jabber' use, but under |
244 |
+ # its own user. This increase isolation and hence robustness and |
245 |
+ # security. |
246 |
+ if $migrate_to_ejabberd_user; then |
247 |
+ ewarn "Newer versions of the ejabberd Gentoo package use /etc/ejabberd" |
248 |
+ ewarn "(just as upstream) and *not* /etc/jabber." |
249 |
+ ewarn "The files from /etc/jabber will now be copied to /etc/ejabberd." |
250 |
+ ewarn "Also ejabberd's spool directory became /var/lib/ejabberd (was /var/spool/jabber)." |
251 |
+ ewarn "Please check your configuration, and finish the migration by stopping ejabberd" |
252 |
+ ewarn "followed by rsync'ing /var/spool/jabber to /var/lib/ejabberd." |
253 |
+ |
254 |
+ local -A dirs_to_migrate=( |
255 |
+ [/etc/jabber]=/etc/ejabberd |
256 |
+ [/var/spool/jabber]=/var/lib/ejabberd |
257 |
+ ) |
258 |
+ |
259 |
+ for src_dir in "${!dirs_to_migrate[@]}"; do |
260 |
+ local eroot_src_dir="${EROOT}${src_dir}" |
261 |
+ local eroot_dst_dir="${EROOT}${dirs_to_migrate[${src_dir}]}" |
262 |
+ |
263 |
+ cp -r "${eroot_src_dir}"/. "${eroot_dst_dir}" || die "Could not copy ${eroot_src_dir} to ${eroot_dst_dir}" |
264 |
+ |
265 |
+ if [[ -f "${eroot_dst_dir}"/.keep_net-im_jabber-base-0 ]]; then |
266 |
+ rm "${eroot_dst_dir}"/.keep_net-im_jabber-base-0 || die |
267 |
+ fi |
268 |
+ if ! use prefix; then |
269 |
+ chown --recursive ejabberd:ejabberd "${eroot_dst_dir}" || die |
270 |
+ fi |
271 |
+ done |
272 |
+ fi |
273 |
+} |
274 |
|
275 |
diff --git a/net-im/ejabberd/files/ejabberd-22.05.initd b/net-im/ejabberd/files/ejabberd-22.05.initd |
276 |
new file mode 100644 |
277 |
index 000000000000..57f9cd5aa335 |
278 |
--- /dev/null |
279 |
+++ b/net-im/ejabberd/files/ejabberd-22.05.initd |
280 |
@@ -0,0 +1,54 @@ |
281 |
+#!/sbin/openrc-run |
282 |
+# Copyright 1999-2022 Gentoo Authors |
283 |
+# Distributed under the terms of the GNU General Public License v2 |
284 |
+ |
285 |
+extra_started_commands="reload" |
286 |
+ |
287 |
+depend() { |
288 |
+ use dns |
289 |
+ need epmd net |
290 |
+ provide jabber-server |
291 |
+} |
292 |
+ |
293 |
+start() { |
294 |
+ if ejabberdctl status >/dev/null 2>&1; then |
295 |
+ ewarn "ejabberd is already started (manually?)." |
296 |
+ return 0 |
297 |
+ fi |
298 |
+ ebegin "Starting ejabberd" |
299 |
+ /usr/sbin/ejabberdctl ${EJABBERDCTL_OPTS} start |
300 |
+ eend $? |
301 |
+} |
302 |
+ |
303 |
+reload() { |
304 |
+ ebegin "Reloading ejabberd configuration" |
305 |
+ /usr/sbin/ejabberdctl ${EJABBERDCTL_OPTS} reload_config |
306 |
+ eend $? |
307 |
+} |
308 |
+ |
309 |
+stop() { |
310 |
+ ejabberdctl status >/dev/null 2>&1 |
311 |
+ if test $? = 3; then |
312 |
+ ewarn "ejabberd is already stopped (manually?)." |
313 |
+ return 0 |
314 |
+ fi |
315 |
+ ebegin "Stopping ejabberd" |
316 |
+ if /usr/sbin/ejabberdctl stop >/dev/null 2>&1; then |
317 |
+ cnt=0 |
318 |
+ sleep 1 |
319 |
+ while ejabberdctl status >/dev/null 2>&1 || test $? = 1; do |
320 |
+ echo . |
321 |
+ cnt=`expr $cnt + 1` |
322 |
+ if [ $cnt -ge 60 ] ; then |
323 |
+ eend 1 |
324 |
+ break |
325 |
+ fi |
326 |
+ sleep 1 |
327 |
+ done |
328 |
+ eend 0 |
329 |
+ else |
330 |
+ eend 1 |
331 |
+ einfo "Please, run '/usr/sbin/ejabberdctl stop' to see what's going on." |
332 |
+ fi |
333 |
+ eend 0 |
334 |
+} |