diff --git a/ejabberd-base/Dockerfile b/ejabberd-base/Dockerfile index 7d362d4..a58b17c 100644 --- a/ejabberd-base/Dockerfile +++ b/ejabberd-base/Dockerfile @@ -1,7 +1,7 @@ FROM alpine:3.6 MAINTAINER ProcessOne -ENV REFRESHED_AT=2017-09-18 \ +ENV REFRESHED_AT=2017-10-13 \ HOME=/home/p1 \ TERM=xterm \ LC_ALL=C.UTF-8 \ @@ -20,9 +20,9 @@ ENV P1DATA=${HOME}/db \ COPY ejabberd.yml ${HOME}/cfg/ # TODO Make it possible to define which version of Alpine we would like to use. -RUN echo "http://nl.alpinelinux.org/alpine/v3.6/main" > /etc/apk/repositories && \ - echo "http://nl.alpinelinux.org/alpine/v3.6/community" >> /etc/apk/repositories && \ - apk upgrade --update musl && \ +#RUN echo "http://nl.alpinelinux.org/alpine/v3.6/main" > /etc/apk/repositories && \ +# echo "http://nl.alpinelinux.org/alpine/v3.6/community" >> /etc/apk/repositories && \ +RUN apk upgrade --update musl && \ apk add bash su-exec libstdc++ ncurses-libs openssl expat yaml zlib sqlite && \ rm -rf /var/cache/apk/* diff --git a/ejabberd-base/build.sh b/ejabberd-base/build.sh index f4461f6..ec97e88 100755 --- a/ejabberd-base/build.sh +++ b/ejabberd-base/build.sh @@ -1,6 +1,6 @@ #/bin/bash -VERSION=17.08 +VERSION=17.09 GREEN='\033[0;32m' NC='\033[0m' # No Color]]' @@ -15,6 +15,7 @@ if [ ! -d ejbuild ]; then git clone https://github.com/processone/ejabberd.git ejbuild fi (cd ejbuild; git checkout master && git pull && git checkout $VERSION) +cp mix.exs ejbuild cat > ejbuild/vars.config < 1.4", + elixirc_paths: ["lib"], + compile_path: ".", + compilers: [:asn1] ++ Mix.compilers, + erlc_options: erlc_options(), + erlc_paths: ["asn1", "src"], + # Elixir tests are starting the part of ejabberd they need + aliases: [test: "test --no-start"], + package: package(), + deps: deps()] + end + + def description do + """ + Robust, ubiquitous and massively scalable Jabber / XMPP Instant Messaging platform. + """ + end + + def application do + [mod: {:ejabberd_app, []}, + applications: [:ssl], + included_applications: [:lager, :mnesia, :inets, :p1_utils, :cache_tab, + :fast_tls, :stringprep, :fast_xml, :xmpp, + :stun, :fast_yaml, :esip, :jiffy, :p1_oauth2] + ++ cond_apps()] + end + + defp erlc_options do + # Use our own includes + includes from all dependencies + includes = ["include"] ++ deps_include(["fast_xml", "xmpp", "p1_utils"]) + [:debug_info, {:d, :ELIXIR_ENABLED}] ++ Enum.map(includes, fn(path) -> {:i, path} end) + end + + defp deps do + [{:lager, "~> 3.4.0"}, + {:p1_utils, github: "processone/p1_utils", tag: "1.0.10", override: true, manager: :rebar}, + {:cache_tab, github: "processone/cache_tab", tag: "1.0.11", override: true, manager: :rebar}, + {:fast_tls, github: "processone/fast_tls", tag: "1.0.16", override: true, manager: :rebar}, + {:fast_xml, github: "processone/fast_xml", tag: "1.1.24", override: true, manager: :rebar}, + {:fast_yaml, github: "processone/fast_yaml", tag: "1.0.11", override: true, manager: :rebar}, + {:stringprep, github: "processone/stringprep", tag: "1.0.10", override: true, manager: :rebar}, + {:xmpp, github: "processone/xmpp", tag: "1.1.15", override: true, manager: :rebar}, + {:stun, "~> 1.0"}, + {:esip, "~> 1.0"}, + {:jiffy, "~> 0.14.7"}, + {:p1_oauth2, "~> 0.6.1"}, + {:distillery, "~> 1.0"}, + {:ex_doc, ">= 0.0.0", only: :dev}] + ++ cond_deps() + end + + defp deps_include(deps) do + base = case Mix.Project.deps_paths()[:ejabberd] do + nil -> "deps" + _ -> ".." + end + Enum.map(deps, fn dep -> base<>"/#{dep}/include" end) + end + + defp cond_deps do + for {:true, dep} <- [{config(:mysql), {:p1_mysql, "~> 1.0"}}, + {config(:pgsql), {:p1_pgsql, "~> 1.1"}}, + {config(:sqlite), {:sqlite3, "~> 1.1"}}, + {config(:riak), {:riakc, "~> 2.4"}}, + {config(:redis), {:eredis, "~> 1.0"}}, + {config(:zlib), {:ezlib, "~> 1.0"}}, + {config(:iconv), {:iconv, "~> 1.0"}}, + {config(:pam), {:epam, "~> 1.0"}}, + {config(:tools), {:luerl, github: "rvirding/luerl", tag: "v0.2"}}, + {config(:tools), {:meck, "~> 0.8.4"}}, + {config(:tools), {:moka, github: "processone/moka", tag: "1.0.5c"}}], do: + dep + end + + defp cond_apps do + for {:true, app} <- [{config(:redis), :eredis}, + {config(:mysql), :p1_mysql}, + {config(:pgsql), :p1_pgsql}, + {config(:sqlite), :sqlite3}, + {config(:zlib), :ezlib}, + {config(:iconv), :iconv}], do: + app + end + + defp package do + [# These are the default files included in the package + files: ["lib", "src", "priv", "mix.exs", "include", "README.md", "COPYING"], + maintainers: ["ProcessOne"], + licenses: ["GPLv2"], + links: %{"Site" => "https://www.ejabberd.im", + "Documentation" => "http://docs.ejabberd.im", + "Source" => "https://github.com/processone/ejabberd", + "ProcessOne" => "http://www.process-one.net/"}] + end + + defp vars do + case :file.consult("vars.config") do + {:ok,config} -> config + _ -> [zlib: true, iconv: true] + end + end + + defp config(key) do + case vars()[key] do + nil -> false + value -> value + end + end + +end + +defmodule Mix.Tasks.Compile.Asn1 do + use Mix.Task + alias Mix.Compilers.Erlang + + @recursive true + @manifest ".compile.asn1" + + def run(args) do + {opts, _, _} = OptionParser.parse(args, switches: [force: :boolean]) + + project = Mix.Project.config + source_paths = project[:asn1_paths] || ["asn1"] + dest_paths = project[:asn1_target] || ["src"] + mappings = Enum.zip(source_paths, dest_paths) + options = project[:asn1_options] || [] + + force = case opts[:force] do + :true -> [force: true] + _ -> [force: false] + end + + Erlang.compile(manifest(), mappings, :asn1, :erl, force, fn + input, output -> + options = options ++ [:noobj, outdir: Erlang.to_erl_file(Path.dirname(output))] + case :asn1ct.compile(Erlang.to_erl_file(input), options) do + :ok -> {:ok, :done} + error -> error + end + end) + end + + def manifests, do: [manifest()] + defp manifest, do: Path.join(Mix.Project.manifest_path, @manifest) + + def clean, do: Erlang.clean(manifest()) +end diff --git a/ejabberd-mix/Dockerfile b/ejabberd-mix/Dockerfile index b37f451..67caf06 100644 --- a/ejabberd-mix/Dockerfile +++ b/ejabberd-mix/Dockerfile @@ -1,17 +1,13 @@ FROM alpine:3.6 MAINTAINER ProcessOne -RUN echo "http://nl.alpinelinux.org/alpine/v3.6/main" > /etc/apk/repositories && \ - echo "http://nl.alpinelinux.org/alpine/v3.6/community" >> /etc/apk/repositories && \ - apk upgrade --update musl && \ +RUN apk upgrade --update musl && \ apk add build-base git zlib-dev openssl-dev yaml-dev expat-dev sqlite-dev \ elixir erlang-crypto erlang-eunit erlang-mnesia erlang-xmerl erlang-erts \ erlang-tools erlang-os-mon erlang-syntax-tools erlang-parsetools \ erlang-runtime-tools erlang-reltool && \ rm -rf /var/cache/apk/* - -# Install Hex+Rebar RUN mix local.hex --force && \ mix local.rebar --force