From aa077dc5d275594816621d6351c62f1e7f965ac6 Mon Sep 17 00:00:00 2001 From: rubicon <5662-rubicon@users.gitlab.alpinelinux.org> Date: Sat, 25 Jun 2022 11:58:22 +0800 Subject: [PATCH] testing/ejabberd: fix and upgrade vendored elixir it no longer conflicts with community/elixir, upgraded version no longer complains about get_stacktrace being removed, fixes the crash in Elixir.Logger.App, and the missing plugins warnings at compilation are reduced by compiling rebar_elixir_plugin earlier --- testing/ejabberd/APKBUILD | 28 +++++++++++++++++-- testing/ejabberd/elixir-mix.sh | 16 +++++++++++ testing/ejabberd/elixir-rebar.config | 21 ++++++++++++++ testing/ejabberd/elixir.app.src | 11 ++++++++ testing/ejabberd/fix-elixir-dirs.patch | 28 +++++++++++++++++++ testing/ejabberd/fix-missing-plugins.patch | 32 ++++++++++++++++++++++ 6 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 testing/ejabberd/elixir-mix.sh create mode 100644 testing/ejabberd/elixir-rebar.config create mode 100644 testing/ejabberd/elixir.app.src create mode 100644 testing/ejabberd/fix-elixir-dirs.patch create mode 100644 testing/ejabberd/fix-missing-plugins.patch diff --git a/testing/ejabberd/APKBUILD b/testing/ejabberd/APKBUILD index 1fb0ca053307..d5b29f10b5b0 100644 --- a/testing/ejabberd/APKBUILD +++ b/testing/ejabberd/APKBUILD @@ -9,7 +9,7 @@ _base64url=1.0.1 _cache_tab=1.0.30 _eimp=1.0.22 _ejabberd_po=9849703c3664e43452eae3245016a1c187f3edc4 -_elixir=1.4.4 +_elixir=1.12.3 _epam=1.0.12 _eredis=1.2.0 _esip=1.0.47 @@ -54,6 +54,7 @@ source="$pkgname-$pkgver.tar.gz::https://github.com/processone/ejabberd/archive/ eimp-$_eimp.tar.gz::https://github.com/processone/eimp/archive/refs/tags/$_eimp.tar.gz ejabberd_po-$_ejabberd_po.tar.gz::https://github.com/processone/ejabberd-po/archive/$_ejabberd_po.tar.gz elixir-$_elixir.tar.gz::https://github.com/elixir-lang/elixir/archive/refs/tags/v$_elixir.tar.gz + elixir.app.src elixir-mix.sh elixir-rebar.config epam-$_epam.tar.gz::https://github.com/processone/epam/archive/refs/tags/$_epam.tar.gz eredis-$_eredis.tar.gz::https://github.com/wooga/eredis/archive/refs/tags/v$_eredis.tar.gz esip-$_esip.tar.gz::https://github.com/processone/esip/archive/refs/tags/$_esip.tar.gz @@ -87,6 +88,8 @@ source="$pkgname-$pkgver.tar.gz::https://github.com/processone/ejabberd/archive/ ejabberd.confd dont-leak-destdir.patch + fix-elixir-dirs.patch + fix-missing-plugins.patch " prepare() { @@ -126,7 +129,20 @@ prepare() { mv "$srcdir"/erlang-sqlite3-$_sqlite3 "$builddir"/deps/sqlite3 mv "$srcdir"/erlang-idna-$_idna "$builddir"/deps/idna mv "$srcdir"/erlang-jose-$_jose "$builddir"/deps/jose + + install -Dm755 "$srcdir"/elixir-mix.sh \ + "$builddir"/deps/elixir/bin/mix + install -Dm644 "$srcdir"/elixir-rebar.config \ + "$builddir"/deps/elixir/rebar.config + install -Dm644 "$srcdir"/elixir.app.src \ + -t "$builddir"/deps/elixir/src/ + sed -i "s/@ELIXIR_VERSION@/$_elixir/" \ + "$builddir"/deps/elixir/src/elixir.app.src + cp -a "$builddir"/deps/elixir/bin/elixir \ + "$builddir"/deps/elixir/bin/elixir-install + default_prepare + sed -i "s/@ELIXIR_VERSION@/$_elixir/" Makefile.in GIT_DIR=. sh ./autogen.sh } @@ -167,6 +183,9 @@ package() { chgrp ejabberd "$pkgdir"/etc/ejabberd/ejabberd.yml \ "$pkgdir"/etc/ejabberd/ejabberdctl.cfg "$pkgdir"/etc/ejabberd + sed -i "s|/usr/bin/iex|/usr/lib/ejabberd/ejabberd-$pkgver/priv/bin/iex|" \ + "$pkgdir"/usr/sbin/ejabberdctl + cd "$pkgdir"/usr/lib/ejabberd/ejabberd-$pkgver/priv/bin/ rm -f captcha.sh ln -sf ../../../*/priv/bin/* . @@ -178,7 +197,10 @@ sha512sums=" bc8aaacea404d8a8b9a8fb14bc1eec9ec0c07ba4fac910287f448be66b0b3475b3913297dfce8d9de9fc208d9eb413dd8bf154cd1bd6edf86ee40100629e4553 cache_tab-1.0.30.tar.gz 5426df9a00d5b614ebb236729e2b397d5e72e12e68cbed32550a074b1b86557e1dee6585b917166e5ebf2fc41297329574c181471885638236c82a66a29d2232 eimp-1.0.22.tar.gz ee70d9fcd28b5b1b43206ead9283b848f1d526a242b323ccc4e1211759683d914ad8ce9e33d4b864490b1a6e3f0542956eb1fa4fc8e1502a0a36587f41c3aab9 ejabberd_po-9849703c3664e43452eae3245016a1c187f3edc4.tar.gz -e339a27e1b31c7783077fc336703c30066d18af990c26741508caa16f15d33d71c56ca7884ed27d046b310db5e051adc428fc51535abecb06992225c6d2d274d elixir-1.4.4.tar.gz +945e33ca9c3e50015531f87630c1bc1b9966acc64bbf7d01c8c4f8cfc104ee1e08113f572f0ad6a9f5e8ee37e33144e58b2ac33dc0a2b01e1355fc5f8b1b9329 elixir-1.12.3.tar.gz +ffb1ed8db363f008bc08af2871d6defa89f197347e488c739218c80143e217c71a7fd7579ba4949ce21f15027221038a78fc33803264502be8fa0b0a475ccf13 elixir.app.src +29ac3d68b3a69c720ed94194c24702cb1ceb2cafd47ad1dd52a7a74a29557fe06a31d671612c4e4d03c60b15be7208d0d993fec22cc1334dcc04ab6c34a79b58 elixir-mix.sh +4b10f66bdfe044b71849499127c68891185b1d3ec05efae5b5f9c7969cd364deea0d7635a9c918a0791ce84001470c267c087a41c647bed67c9aae1648e6d447 elixir-rebar.config 61a1d49c3316fb7f8fcc8b7d7c1ab0b5dd87fa31cecac679a850d191fe9171f7e01473b9979f8107c1c4567836e07ced67336dd5133dfdc5d4680cb3b6c3b270 epam-1.0.12.tar.gz c72ae291389e47d1ac4c1de69dccb6121f4f9195283665d490904226b2ea15cb7671b48bb08db507a5e62c6bced62d890a9ecb9752da6e0aad24a28da137907c eredis-1.2.0.tar.gz 68be1c8cf507180e73f3a16dfd8ca44ffad825c40df0d1874888afa41f3cb89b445b033036d041af29ec3fdbdab7acc68f770124171ba4af73abd0775a03c0ba esip-1.0.47.tar.gz @@ -210,4 +232,6 @@ ee5bc1600ea00ad9c1d9f1565d04d073dd357c6f69c0728e770e17f7e4f1a07c2d2883d05e344d33 47fd2cfd9177c4e978a9799a153ba74392a9891822221af8194686a40f6bf01f38644833e1e1f5416c6357e0bfb7ca3dae96f55a4fcd7cd629ec798d85a72807 ejabberd.logrotate 96a571c0ab2be366e931bda423a61ef920cbaba2107e61ddbc501472ce3efe2804418cc6579c99310b902a9a99aaecb9284cf2420c071dbca2f670efb4034135 ejabberd.confd 7b6debff487880dfacd8e882c03a9d948178dfd450c336657e11442a51b62574e9bd41c0af131b6b4f3b1b0f450c442c2eff04ad3f13439540685740295bf71e dont-leak-destdir.patch +e1efee3ef1535febfe9a9d10b1ba1ecf798d1b17d14accc43b2c77536b93a956ae6c4c71c135f7e6d03bf2cd4f61bb0c12d27ef69576db71c3a915dc7c61c103 fix-elixir-dirs.patch +b6e23b16a8f931a2da9f052333dedc2b37667cf9265b84174590ac9a72e5f16d9dcd4c7153532bf45def7f94a71ce012dbb9d3227b7c7449b105fd711d085d59 fix-missing-plugins.patch " diff --git a/testing/ejabberd/elixir-mix.sh b/testing/ejabberd/elixir-mix.sh new file mode 100644 index 000000000000..d6c342c8b34a --- /dev/null +++ b/testing/ejabberd/elixir-mix.sh @@ -0,0 +1,16 @@ +#!/bin/sh +set -e + +readlink_f () { + cd "$(dirname "$1")" > /dev/null + filename="$(basename "$1")" + if [ -h "$filename" ]; then + readlink_f "$(readlink "$filename")" + else + echo "$(pwd -P)/$filename" + fi +} + +SELF=$(readlink_f "$0") +SCRIPT_PATH=$(dirname "$SELF") +exec "$SCRIPT_PATH"/elixir -e "Mix.start(); Mix.CLI.main()" -- "$@" diff --git a/testing/ejabberd/elixir-rebar.config b/testing/ejabberd/elixir-rebar.config new file mode 100644 index 000000000000..9154464fa23e --- /dev/null +++ b/testing/ejabberd/elixir-rebar.config @@ -0,0 +1,21 @@ +%% Using Elixir as a Rebar dependency + +%% This configuration file only exists so Elixir can be used +%% as a Rebar dependency, the same happens for the file +%% src/elixir.app.src. + +%% In practice, Elixir is structured as OTP where many applications +%% are placed in the lib directory. Since this structure is not +%% supported by default by Rebar, after adding Elixir as a dependency +%% you need to explicitly add it to lib_dirs: +%% +%% {lib_dirs, [ +%% "deps/elixir/lib" +%% ]}. +%% + +%% Run "make" as the proper compilation step +{post_hooks, [{compile, "make compile"}]}. + +%% This prevents rebar_elixir_plugin from recompiling Elixir +{ex_opts, [{src_dirs, [".PHONY"]}]}. diff --git a/testing/ejabberd/elixir.app.src b/testing/ejabberd/elixir.app.src new file mode 100644 index 000000000000..2855dfcbe1eb --- /dev/null +++ b/testing/ejabberd/elixir.app.src @@ -0,0 +1,11 @@ +{application, elixir, +[{description, "elixir"}, + {vsn, "@ELIXIR_VERSION@"}, + {modules, [ + elixir + ]}, + {registered, [elixir_config, elixir_code_server]}, + {applications, [kernel,stdlib,compiler]}, + {mod, {elixir,[]}}, + {env, [{ansi_enabled, false}]} +]}. diff --git a/testing/ejabberd/fix-elixir-dirs.patch b/testing/ejabberd/fix-elixir-dirs.patch new file mode 100644 index 000000000000..38ba556966d9 --- /dev/null +++ b/testing/ejabberd/fix-elixir-dirs.patch @@ -0,0 +1,28 @@ +--- a/Makefile.in ++++ b/Makefile.in +@@ -324,10 +324,10 @@ + [ -d $(DESTDIR)$(SBINDIR) ] || $(INSTALL) -d -m 755 $(DESTDIR)$(SBINDIR) + $(INSTALL) -m 550 $(G_USER) ejabberdctl.example $(DESTDIR)$(SBINDIR)/ejabberdctl + # Elixir binaries +- [ -d $(DESTDIR)$(BINDIR) ] || $(INSTALL) -d -m 755 $(DESTDIR)$(BINDIR) +- [ -f $(DEPSDIR)/elixir/bin/iex ] && $(INSTALL) -m 550 $(G_USER) $(DEPSDIR)/elixir/bin/iex $(DESTDIR)$(BINDIR)/iex || true +- [ -f $(DEPSDIR)/elixir/bin/elixir ] && $(INSTALL) -m 550 $(G_USER) $(DEPSDIR)/elixir/bin/elixir $(DESTDIR)$(BINDIR)/elixir || true +- [ -f $(DEPSDIR)/elixir/bin/mix ] && $(INSTALL) -m 550 $(G_USER) $(DEPSDIR)/elixir/bin/mix $(DESTDIR)$(BINDIR)/mix || true ++ [ -f $(DEPSDIR)/elixir/bin/iex ] && $(INSTALL) -Dm 550 $(G_USER) $(DEPSDIR)/elixir/bin/iex -t $(DESTDIR)$(LIBDIR)/elixir-@ELIXIR_VERSION@/priv/bin/ || true ++ [ -f $(DEPSDIR)/elixir/bin/elixir-install ] && $(INSTALL) -Dm 550 $(G_USER) $(DEPSDIR)/elixir/bin/elixir-install $(DESTDIR)$(LIBDIR)/elixir-@ELIXIR_VERSION@/priv/bin/elixir || true ++ [ -f $(DEPSDIR)/elixir/bin/elixirc ] && $(INSTALL) -Dm 550 $(G_USER) $(DEPSDIR)/elixir/bin/elixirc -t $(DESTDIR)$(LIBDIR)/elixir-@ELIXIR_VERSION@/priv/bin/ || true ++ [ -f $(DEPSDIR)/elixir/bin/mix ] && $(INSTALL) -Dm 550 $(G_USER) $(DEPSDIR)/elixir/bin/mix -t $(DESTDIR)$(LIBDIR)/elixir-@ELIXIR_VERSION@/priv/bin/ || true + # + # Init script + $(SED) -e "s*@ctlscriptpath@*$(SBINDIR)*g" \ +--- a/deps/elixir/bin/elixir-install ++++ b/deps/elixir/bin/elixir-install +@@ -211,7 +211,7 @@ + fi + + ERTS_BIN= +-set -- "$ERTS_BIN$ERL_EXEC" -pa "$SCRIPT_PATH"/../lib/*/ebin $ELIXIR_ERL_OPTIONS $ERL "$@" ++set -- "$ERTS_BIN$ERL_EXEC" -pa "$SCRIPT_PATH"/../../../*/ebin $ELIXIR_ERL_OPTIONS $ERL "$@" + + if [ -n "$RUN_ERL_PIPE" ]; then + ESCAPED="" diff --git a/testing/ejabberd/fix-missing-plugins.patch b/testing/ejabberd/fix-missing-plugins.patch new file mode 100644 index 000000000000..014fd4fa9cf8 --- /dev/null +++ b/testing/ejabberd/fix-missing-plugins.patch @@ -0,0 +1,32 @@ +--- a/rebar.config ++++ b/rebar.config +@@ -18,13 +18,16 @@ + %%% + %%%---------------------------------------------------------------------- + +-{deps, [{base64url, ".*", {git, "https://github.com/dvv/base64url", {tag, "1.0.1"}}}, ++{deps, [{if_not_rebar3, %% Needed because modules are not fully migrated to new structure and mix ++ {if_var_true, elixir, ++ {rebar_elixir_plugin, ".*", {git, "https://github.com/processone/rebar_elixir_plugin", "0.1.0"}}}}, ++ {if_var_true, elixir, ++ {elixir, ".*", {git, "https://github.com/elixir-lang/elixir", {tag, "v1.4.4"}}}}, ++ {base64url, ".*", {git, "https://github.com/dvv/base64url", {tag, "1.0.1"}}}, + {cache_tab, ".*", {git, "https://github.com/processone/cache_tab", {tag, "1.0.30"}}}, + {eimp, ".*", {git, "https://github.com/processone/eimp", {tag, "1.0.22"}}}, + {if_var_true, tools, + {ejabberd_po, ".*", {git, "https://github.com/processone/ejabberd-po", {branch, "main"}}}}, +- {if_var_true, elixir, +- {elixir, ".*", {git, "https://github.com/elixir-lang/elixir", {tag, "v1.4.4"}}}}, + {if_var_true, pam, + {epam, ".*", {git, "https://github.com/processone/epam", {tag, "1.0.12"}}}}, + {if_var_true, redis, +@@ -62,9 +65,6 @@ + {p1_pgsql, ".*", {git, "https://github.com/processone/p1_pgsql", {tag, "1.1.18"}}}}, + {p1_utils, ".*", {git, "https://github.com/processone/p1_utils", {tag, "1.0.25"}}}, + {pkix, ".*", {git, "https://github.com/processone/pkix", {tag, "1.0.9"}}}, +- {if_not_rebar3, %% Needed because modules are not fully migrated to new structure and mix +- {if_var_true, elixir, +- {rebar_elixir_plugin, ".*", {git, "https://github.com/processone/rebar_elixir_plugin", "0.1.0"}}}}, + {if_var_true, sqlite, + {sqlite3, ".*", {git, "https://github.com/processone/erlang-sqlite3", {tag, "1.1.13"}}}}, + {stringprep, ".*", {git, "https://github.com/processone/stringprep", {tag, "1.0.28"}}}, -- GitLab