From 1f40bbf3fbd013f0aa0f59c279e3e77d1bb26aa3 Mon Sep 17 00:00:00 2001 From: tsoganov Date: Mon, 14 Apr 2025 12:57:40 +0300 Subject: [PATCH] Upgraded and created dockerfiles --- .tool-versions | 6 +- Dockerfile | 70 ++++++------ ...base => Dockerfile.Erlang-ruby.base.legacy | 0 Dockerfile.amd64.legacy | 58 ++++++++++ Dockerfile.k8s | 105 ++++++++++++++++++ ...rfile.release => Dockerfile.release.legacy | 0 Dockerfile.test => Dockerfile.test.legacy | 2 +- README.md | 20 +++- apps/epp_proxy/priv/test_backend_app/Gemfile | 1 + .../priv/test_backend_app/Gemfile.lock | 19 ++-- apps/epp_proxy/src/epp_tls_worker.erl | 61 +++++++--- apps/epp_proxy/test/tcp_client_SUITE.erl | 14 ++- apps/epp_proxy/test/tls_client_SUITE.erl | 14 ++- config/sys.config | 18 +-- config/test.config | 6 +- docker/apt/sources.list | 9 +- rebar.config | 8 +- rebar.lock | 26 +++-- 18 files changed, 343 insertions(+), 94 deletions(-) rename Dockerfile.Erlang-ruby.base => Dockerfile.Erlang-ruby.base.legacy (100%) create mode 100644 Dockerfile.amd64.legacy create mode 100644 Dockerfile.k8s rename Dockerfile.release => Dockerfile.release.legacy (100%) rename Dockerfile.test => Dockerfile.test.legacy (60%) diff --git a/.tool-versions b/.tool-versions index ea4e118..eb0e586 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,3 +1,3 @@ -erlang 21.3.8 -ruby 2.6.3 -rebar 3.11.0 +erlang 23.3.4.20 +ruby 3.2.2 +rebar 3.15.2 diff --git a/Dockerfile b/Dockerfile index 98ca2ce..a5e36b1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,44 +1,48 @@ -FROM debian:buster-slim +FROM debian:bullseye-slim SHELL ["/bin/bash", "-o", "pipefail", "-c"] COPY ./docker/apt/sources.list /etc/apt/ -RUN apt-get update && apt-get -t buster install -y -qq wget \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - - -RUN apt-get update && apt-get install -y -qq git \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -RUN apt-get update && apt-get install -y \ - build-essential=* \ - libncurses5-dev=* \ - automake=* \ - autoconf=* \ - curl=* \ - ca-certificates=* \ - libssl-dev=* \ - libreadline-dev=* \ - libdpkg-perl=* \ - liberror-perl=* \ - libc6=* \ +# Install all dependencies in a single layer to reduce image size +RUN apt-get update && apt-get install -y -qq \ + wget \ + git \ + build-essential \ + libncurses5-dev \ + automake \ + autoconf \ + curl \ + ca-certificates \ + libssl-dev \ + libreadline-dev \ + libdpkg-perl \ + liberror-perl \ + libc6 \ libc-dev \ - perl=* \ - procps=* \ - inotify-tools=* \ - libssl1.1=* \ - perl-base=* \ + perl \ + procps \ + inotify-tools \ + libssl1.1 \ + perl-base \ zlib1g-dev \ + # Additional dependencies for Erlang build + libncurses-dev \ + libsctp-dev \ + # Documentation tools to prevent build failures + xsltproc \ + libxml2-utils \ + # Dependencies for Ruby 3.2.2 + libffi-dev \ + libyaml-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* -# RUN (groupadd -g 999 asdf || true) -# RUN (adduser --shell /bin/bash --home /asdf --disabled-password -gid 999 -u 999 asdf || true) -# ENV PATH="${PATH}:/asdf/.asdf/shims:/asdf/.asdf/bin" -# USER asdf -# WORKDIR /asdf +# Set environment variables for Erlang build +ENV KERL_CONFIGURE_OPTIONS="--disable-debug --without-javac --without-wx --without-odbc --disable-hipe --without-jinterface --without-docs" +ENV KERL_BUILD_DOCS="no" +ENV KERL_DOC_TARGETS="" +ENV KERL_INSTALL_HTMLDOCS="no" +ENV KERL_INSTALL_MANPAGES="no" RUN git clone https://github.com/asdf-vm/asdf.git --branch v0.6.3 "$HOME"/.asdf && \ echo '. $HOME/.asdf/asdf.sh' >> "$HOME"/.bashrc && \ @@ -51,7 +55,7 @@ WORKDIR /opt/erlang/epp_proxy COPY .tool-versions ./ RUN asdf plugin-add erlang -RUN asdf install +RUN . $HOME/.asdf/asdf.sh && asdf install RUN asdf global erlang $(grep erlang .tool-versions | cut -d' ' -f2) RUN asdf plugin-add ruby RUN asdf plugin-add rebar diff --git a/Dockerfile.Erlang-ruby.base b/Dockerfile.Erlang-ruby.base.legacy similarity index 100% rename from Dockerfile.Erlang-ruby.base rename to Dockerfile.Erlang-ruby.base.legacy diff --git a/Dockerfile.amd64.legacy b/Dockerfile.amd64.legacy new file mode 100644 index 0000000..98ca2ce --- /dev/null +++ b/Dockerfile.amd64.legacy @@ -0,0 +1,58 @@ +FROM debian:buster-slim + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +COPY ./docker/apt/sources.list /etc/apt/ + +RUN apt-get update && apt-get -t buster install -y -qq wget \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + + +RUN apt-get update && apt-get install -y -qq git \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +RUN apt-get update && apt-get install -y \ + build-essential=* \ + libncurses5-dev=* \ + automake=* \ + autoconf=* \ + curl=* \ + ca-certificates=* \ + libssl-dev=* \ + libreadline-dev=* \ + libdpkg-perl=* \ + liberror-perl=* \ + libc6=* \ + libc-dev \ + perl=* \ + procps=* \ + inotify-tools=* \ + libssl1.1=* \ + perl-base=* \ + zlib1g-dev \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# RUN (groupadd -g 999 asdf || true) +# RUN (adduser --shell /bin/bash --home /asdf --disabled-password -gid 999 -u 999 asdf || true) +# ENV PATH="${PATH}:/asdf/.asdf/shims:/asdf/.asdf/bin" +# USER asdf +# WORKDIR /asdf + +RUN git clone https://github.com/asdf-vm/asdf.git --branch v0.6.3 "$HOME"/.asdf && \ + echo '. $HOME/.asdf/asdf.sh' >> "$HOME"/.bashrc && \ + echo '. $HOME/.asdf/asdf.sh' >> "$HOME"/.profile + +ENV PATH="${PATH}:/root/.asdf/shims:/root/.asdf/bin" + +RUN mkdir -p /opt/erlang/epp_proxy +WORKDIR /opt/erlang/epp_proxy + +COPY .tool-versions ./ +RUN asdf plugin-add erlang +RUN asdf install +RUN asdf global erlang $(grep erlang .tool-versions | cut -d' ' -f2) +RUN asdf plugin-add ruby +RUN asdf plugin-add rebar +RUN asdf install diff --git a/Dockerfile.k8s b/Dockerfile.k8s new file mode 100644 index 0000000..adc7df3 --- /dev/null +++ b/Dockerfile.k8s @@ -0,0 +1,105 @@ +FROM debian:bullseye-slim AS build + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +COPY ./docker/apt/sources.list /etc/apt/ + +# Install build dependencies +RUN apt-get update && apt-get install -y -qq \ + wget \ + git \ + build-essential \ + libncurses5-dev \ + automake \ + autoconf \ + curl \ + ca-certificates \ + libssl-dev \ + libreadline-dev \ + libdpkg-perl \ + liberror-perl \ + libc6 \ + libc-dev \ + perl \ + procps \ + inotify-tools \ + libssl1.1 \ + perl-base \ + zlib1g-dev \ + libncurses-dev \ + libsctp-dev \ + xsltproc \ + libxml2-utils \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Set environment variables for Erlang build +ENV KERL_CONFIGURE_OPTIONS="--disable-debug --without-javac --without-wx --without-odbc --disable-hipe --without-jinterface --without-docs" +ENV KERL_BUILD_DOCS="no" +ENV KERL_DOC_TARGETS="" +ENV KERL_INSTALL_HTMLDOCS="no" +ENV KERL_INSTALL_MANPAGES="no" + +RUN git clone https://github.com/asdf-vm/asdf.git --branch v0.6.3 "$HOME"/.asdf && \ + echo '. $HOME/.asdf/asdf.sh' >> "$HOME"/.bashrc && \ + echo '. $HOME/.asdf/asdf.sh' >> "$HOME"/.profile + +ENV PATH="${PATH}:/root/.asdf/shims:/root/.asdf/bin" + +RUN mkdir -p /opt/erlang/epp_proxy +WORKDIR /opt/erlang/epp_proxy + +COPY .tool-versions ./ +RUN asdf plugin-add erlang +RUN ERLANG_VERSION=$(grep erlang .tool-versions | cut -d' ' -f2) && \ + . $HOME/.asdf/asdf.sh && asdf install erlang $ERLANG_VERSION +RUN asdf global erlang $(grep erlang .tool-versions | cut -d' ' -f2) +RUN asdf plugin-add rebar +RUN REBAR_VERSION=$(grep rebar .tool-versions | cut -d' ' -f2) && \ + . $HOME/.asdf/asdf.sh && asdf install rebar $REBAR_VERSION +RUN asdf global rebar $(grep rebar .tool-versions | cut -d' ' -f2) + +# Copy application files +COPY rebar.config rebar.lock ./ +COPY config ./config +COPY apps ./apps + +# Build the release +RUN . $HOME/.asdf/asdf.sh && rebar3 as prod release + +# Second stage: runtime image +FROM debian:bullseye-slim + +# Install runtime dependencies only +RUN apt-get update && apt-get install -y -qq \ + libssl1.1 \ + libncurses6 \ + libsctp1 \ + procps \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Create app directory +RUN mkdir -p /opt/erlang/epp_proxy +WORKDIR /opt/erlang/epp_proxy + +# Copy the release from the build stage +COPY --from=build /opt/erlang/epp_proxy/_build/prod/rel/epp_proxy ./ + +# Create a non-root user to run the application +RUN groupadd -r epp && useradd -r -g epp epp +RUN chown -R epp:epp /opt/erlang/epp_proxy +USER epp + +# Expose the EPP port +EXPOSE 700 + +# Set environment variables +ENV RELX_REPLACE_OS_VARS=true +ENV NODE_NAME=epp_proxy@127.0.0.1 + +# Health check +# HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \ +# CMD ps aux | grep "beam" | grep -v grep || exit 1 + +# Command to run the application +CMD ["./bin/epp_proxy", "foreground"] diff --git a/Dockerfile.release b/Dockerfile.release.legacy similarity index 100% rename from Dockerfile.release rename to Dockerfile.release.legacy diff --git a/Dockerfile.test b/Dockerfile.test.legacy similarity index 60% rename from Dockerfile.test rename to Dockerfile.test.legacy index a64cc7f..ec9b48b 100644 --- a/Dockerfile.test +++ b/Dockerfile.test.legacy @@ -1,4 +1,4 @@ FROM internetee/erlang-ruby:21.3.8-2.6.3 COPY . . -CMD ["tail", "-f" , "/dev/null"] \ No newline at end of file +CMD ["tail", "-f" , "/dev/null"] diff --git a/README.md b/README.md index 65db7f1..0a55f2a 100644 --- a/README.md +++ b/README.md @@ -137,7 +137,7 @@ Testing ---- The application comes with test suite written with common_test. For integration tests, there is a small Roda application located in `apps/epp_proxy/priv/test_backend_app`. -It has been written with Ruby 2.6.3. +It has been written with Ruby 3.2.2. There is also a number of generated ssl certificates that are used only for testing. Those are valid until 2029 and they are located in `apps/epp_proxy/priv/test_ca`. The password for test CA @@ -151,6 +151,24 @@ $ /bin/bash -l -c "cd apps/epp_proxy/priv/test_backend_app && bundle install" $ /bin/bash -l -c "cd apps/epp_proxy/priv/test_backend_app && bundle exec rackup --pid pidfile -D" ``` +The easiest way to run tests is using Docker: + +```bash +# Run all tests +docker compose run --rm epp_proxy bash -c "cd /opt/erlang/epp_proxy && rebar3 ct" + +# Run a specific test suite +docker compose run --rm epp_proxy bash -c "cd /opt/erlang/epp_proxy && rebar3 ct --suite apps/epp_proxy/test/epp_http_client_SUITE" + +# Start a shell for debugging +docker compose run --rm epp_proxy bash -c "cd /opt/erlang/epp_proxy && rebar3 shell" + +# Then in the Erlang shell: +application:get_all_env(epp_proxy). +# To exit the shell: +halt(). +``` + After you finish testing, you can stop the process by reading the stored pid: $ kill `cat apps/epp_proxy/priv/test_backend_app/pidfile` diff --git a/apps/epp_proxy/priv/test_backend_app/Gemfile b/apps/epp_proxy/priv/test_backend_app/Gemfile index 8f5818a..c5918bb 100644 --- a/apps/epp_proxy/priv/test_backend_app/Gemfile +++ b/apps/epp_proxy/priv/test_backend_app/Gemfile @@ -6,3 +6,4 @@ gem "puma" gem "roda" gem "rack-unreloader" gem "tilt" +gem "rackup" diff --git a/apps/epp_proxy/priv/test_backend_app/Gemfile.lock b/apps/epp_proxy/priv/test_backend_app/Gemfile.lock index 9580f05..872b0f2 100644 --- a/apps/epp_proxy/priv/test_backend_app/Gemfile.lock +++ b/apps/epp_proxy/priv/test_backend_app/Gemfile.lock @@ -1,23 +1,26 @@ GEM remote: https://rubygems.org/ specs: - nio4r (2.5.2) - puma (4.3.5) + nio4r (2.7.4) + puma (6.6.0) nio4r (~> 2.0) - rack (2.2.3) - rack-unreloader (1.7.0) - roda (3.21.0) + rack (3.1.12) + rack-unreloader (2.1.0) + rackup (2.2.1) + rack (>= 3) + roda (3.90.0) rack - tilt (2.0.9) + tilt (2.6.0) PLATFORMS - ruby + aarch64-linux DEPENDENCIES puma rack-unreloader + rackup roda tilt BUNDLED WITH - 1.17.2 + 2.4.10 diff --git a/apps/epp_proxy/src/epp_tls_worker.erl b/apps/epp_proxy/src/epp_tls_worker.erl index 1941251..47aaf69 100644 --- a/apps/epp_proxy/src/epp_tls_worker.erl +++ b/apps/epp_proxy/src/epp_tls_worker.erl @@ -33,14 +33,31 @@ start_link(Socket) -> handle_cast(serve, State = #state{socket = Socket, session_id = _SessionId}) -> - {ok, {PeerIp, _PeerPort}} = ssl:peername(Socket), - log_opened_connection(PeerIp), - case ssl:handshake(Socket) of - {ok, SecureSocket} -> - NewState = state_from_socket(SecureSocket, State), - {noreply, NewState}; - {error, Error} -> - log_on_invalid_handshake(PeerIp, Error) + try + % Check if we have a valid socket + case ssl:peername(Socket) of + {ok, {PeerIp, _PeerPort}} -> + log_opened_connection(PeerIp), + % Try to perform the handshake + case ssl:handshake(Socket) of + {ok, SecureSocket} -> + NewState = state_from_socket(SecureSocket, State), + {noreply, NewState}; + {error, notsup_on_transport_accept_socket} -> + lager:error("Socket not supported for TLS handshake. This may indicate the socket is not an SSL socket or was improperly initialized."), + {stop, normal, State}; + {error, HandshakeError} -> + log_on_invalid_handshake(PeerIp, HandshakeError), + {stop, normal, State} + end; + {error, PeerError} -> + lager:error("Invalid socket: cannot get peer information: ~p", [PeerError]), + {stop, normal, State} + end + catch + error:CatchError:Stacktrace -> + lager:error("Exception during TLS handshake: ~p~nStacktrace: ~p", [CatchError, Stacktrace]), + {stop, normal, State} end; %% Step two: Using the state of the connection, get the hello route %% from http server. Send the response from HTTP server back to EPP @@ -171,14 +188,26 @@ log_opened_connection(Ip) -> %% Extract state info from socket. Fail if you must. state_from_socket(Socket, State) -> - {ok, PeerCert} = ssl:peercert(Socket), {ok, {PeerIp, _PeerPort}} = ssl:peername(Socket), - {SSL_CLIENT_S_DN_CN, SSL_CLIENT_CERT} = - epp_certs:headers_from_cert(PeerCert), - Headers = [{"SSL-CLIENT-CERT", SSL_CLIENT_CERT}, - {"SSL-CLIENT-S-DN-CN", SSL_CLIENT_S_DN_CN}, - {"User-Agent", <<"EPP proxy">>}, - {"X-Forwarded-for", epp_util:readable_ip(PeerIp)}], + Headers = case ssl:peercert(Socket) of + {ok, PeerCert} -> + try + {SSL_CLIENT_S_DN_CN, SSL_CLIENT_CERT} = epp_certs:headers_from_cert(PeerCert), + [{"SSL-CLIENT-CERT", SSL_CLIENT_CERT}, + {"SSL-CLIENT-S-DN-CN", SSL_CLIENT_S_DN_CN}, + {"User-Agent", <<"EPP proxy">>}, + {"X-Forwarded-for", epp_util:readable_ip(PeerIp)}] + catch + _:_ -> + lager:warning("Could not extract certificate information from client at IP: ~s", [epp_util:readable_ip(PeerIp)]), + [{"User-Agent", <<"EPP proxy">>}, + {"X-Forwarded-for", epp_util:readable_ip(PeerIp)}] + end; + {error, _} -> + lager:info("No client certificate provided from IP: ~s", [epp_util:readable_ip(PeerIp)]), + [{"User-Agent", <<"EPP proxy">>}, + {"X-Forwarded-for", epp_util:readable_ip(PeerIp)}] + end, NewState = State#state{socket = Socket, headers = Headers}, lager:info("Established connection with: [~p]~n", @@ -204,4 +233,4 @@ parse_frame(Frame) -> {error, _} -> #invalid_frame{code = ?XMLErrorCode, message = ?XMLErrorMessage, cl_trid = ClTRID} - end. + end. \ No newline at end of file diff --git a/apps/epp_proxy/test/tcp_client_SUITE.erl b/apps/epp_proxy/test/tcp_client_SUITE.erl index 2ee524b..3410933 100644 --- a/apps/epp_proxy/test/tcp_client_SUITE.erl +++ b/apps/epp_proxy/test/tcp_client_SUITE.erl @@ -215,15 +215,21 @@ send_data(Message, Socket) -> receive_data(Socket) -> case gen_tcp:recv(Socket, 0, 1200) of {error, Reason} -> {error, Reason}; - {ok, Data } -> + {ok, Data} -> EppEnvelope = binary:part(Data, {0, 4}), ReportedLength = binary:decode_unsigned(EppEnvelope, big), - binary:part(Data, {byte_size(Data), 4 - ReportedLength}) - end. + % Extract the actual data, skipping the 4-byte length header + binary:part(Data, {4, byte_size(Data) - 4}) + end. match_data(Data, Pattern) -> {ok, MatchPattern} = re:compile(Pattern), - {match, _Captured} = re:run(Data, MatchPattern). + case re:run(Data, MatchPattern) of + {match, _Captured} -> {match, _Captured}; + nomatch -> + ct:pal("Expected pattern '~s' not found in data:~n~p", [Pattern, Data]), + nomatch + end. hello_command() -> <<"", diff --git a/apps/epp_proxy/test/tls_client_SUITE.erl b/apps/epp_proxy/test/tls_client_SUITE.erl index dc6c13f..b198b43 100644 --- a/apps/epp_proxy/test/tls_client_SUITE.erl +++ b/apps/epp_proxy/test/tls_client_SUITE.erl @@ -222,15 +222,21 @@ send_data(Message, Socket) -> receive_data(Socket) -> case ssl:recv(Socket, 0, 1200) of {error, Reason} -> {error, Reason}; - {ok, Data } -> + {ok, Data} -> EppEnvelope = binary:part(Data, {0, 4}), ReportedLength = binary:decode_unsigned(EppEnvelope, big), - binary:part(Data, {byte_size(Data), 4 - ReportedLength}) - end. + % Extract the actual data, skipping the 4-byte length header + binary:part(Data, {4, byte_size(Data) - 4}) + end. match_data(Data, Pattern) -> {ok, MatchPattern} = re:compile(Pattern), - {match, _Captured} = re:run(Data, MatchPattern). + case re:run(Data, MatchPattern) of + {match, _Captured} -> {match, _Captured}; + nomatch -> + ct:pal("Expected pattern '~s' not found in data:~n~p", [Pattern, Data]), + nomatch + end. hello_command() -> <<"", diff --git a/config/sys.config b/config/sys.config index c2f3ae4..cba1307 100644 --- a/config/sys.config +++ b/config/sys.config @@ -7,26 +7,26 @@ {tcp_port, 1700}, %% TLS port, specified in RFC to 700, but can be set to anything else %% in case that is needed. - {tls_port, 700}, - %% When set to true, you can connect to EPP over HTTPS endpoints without + {tls_port, "${TLS_PORT}"}, + %% When set to true, you can connect to EPP over HTTPS endpoints without %% verifying their TLS certificates. {insecure, false}, %% URL of EPP endpoints. Can be pointed at a web server (Apache/NGINX) %% Can contain port (https://some-host:3000/epp/session) %% Honors the prepended protocol (http / https). - {epp_session_url, "https://registry.test/epp/session/"}, - {epp_command_url, "https://registry.test/epp/command/"}, - {epp_error_url, "https://registry.test/epp/error/"}, + {epp_session_url, "${EPP_SESSION_URL}"}, + {epp_command_url, "${EPP_COMMAND_URL}"}, + {epp_error_url, "${EPP_ERROR_URL}"}, %% Path to root CA that should check the client certificates. - {cacertfile_path, "/opt/shared/ca/certs/ca.crt.pem"}, + {cacertfile_path, "${CACERT_PATH}"}, %% Path to server's certficate file. - {certfile_path, "/opt/shared/ca/certs/cert.pem"}, + {certfile_path, "${CERT_PATH}"}, %% Path to server's key file. - {keyfile_path, "/opt/shared/ca/certs/key.pem"}, + {keyfile_path, "${KEY_PATH}"}, %% Path to CRL file. When this option is undefined, no CRL check is performed. - {crlfile_path, "/opt/shared/ca/certs/key.pem"}]}, + {crlfile_path, "${CRL_PATH}"}]}, {lager, [ {handlers, [ {lager_console_backend, [{level, debug}]}, diff --git a/config/test.config b/config/test.config index 61b7a2c..90cecb2 100644 --- a/config/test.config +++ b/config/test.config @@ -4,7 +4,6 @@ {tcp_port, 1180}, {tls_port, 1443}, {insecure, false}, - {epp_session_url, "http://localhost:9292/session/"}, {epp_command_url, "http://localhost:9292/command/"}, {epp_error_url, "http://localhost:9292/error/"}, @@ -12,9 +11,8 @@ {cacertfile_path, "test_ca/certs/ca.crt.pem"}, {certfile_path, "test_ca/certs/apache.crt"}, {keyfile_path, "test_ca/private/apache.key"}, - {crlfile_path, "test_ca/crl/crl.pem"}]}, - - + {crlfile_path, "test_ca/crl/crl.pem"} + ]}, {lager, [ {handlers, [ {lager_console_backend, [{level, warning}]} diff --git a/docker/apt/sources.list b/docker/apt/sources.list index ebc87de..4b137ea 100644 --- a/docker/apt/sources.list +++ b/docker/apt/sources.list @@ -1,2 +1,7 @@ -deb http://deb.debian.org/debian/ buster main contrib non-free -deb http://deb.debian.org/debian/ buster-backports main contrib non-free +deb http://deb.debian.org/debian/ bullseye main contrib non-free +deb http://deb.debian.org/debian-security/ bullseye-security main contrib non-free +deb http://deb.debian.org/debian/ bullseye-updates main contrib non-free + +# Legacy +# deb http://deb.debian.org/debian/ buster main contrib non-free +# deb http://deb.debian.org/debian/ buster-backports main contrib non-free diff --git a/rebar.config b/rebar.config index 3f6979f..aac0dea 100644 --- a/rebar.config +++ b/rebar.config @@ -3,9 +3,13 @@ {deps, [{hackney, "1.15.1"}, {syslog, {git, "https://github.com/Vagabond/erlang-syslog.git", {branch, "master"}}}, {lager, "3.7.0"}, - {lager_syslog, {git, "https://github.com/erlang-lager/lager_syslog.git"}}, + {lager_syslog, {git, "https://github.com/erlang-lager/lager_syslog.git", {branch, "master"}}}, {erlsom, "1.5.0"}]}. +{ct_opts, [ + {sys_config, "./config/test.config"} +]}. + {relx, [{release, {epp_proxy, "git"}, [epp_proxy, lager, @@ -56,5 +60,5 @@ }. {plugins, [rebar3_auto, - {erl_tidy_prv_fmt, ".*", {git, "git://github.com/tsloughter/erl_tidy.git", {branch, "master"}}}, + {erl_tidy_prv_fmt, ".*", {git, "https://github.com/tsloughter/erl_tidy.git", {branch, "master"}}}, rebar3_appup_plugin]}. diff --git a/rebar.lock b/rebar.lock index d34177f..c08bb4f 100644 --- a/rebar.lock +++ b/rebar.lock @@ -1,4 +1,4 @@ -{"1.1.0", +{"1.2.0", [{<<"certifi">>,{pkg,<<"certifi">>,<<"2.5.1">>},1}, {<<"erlsom">>,{pkg,<<"erlsom">>,<<"1.5.0">>},0}, {<<"goldrush">>,{pkg,<<"goldrush">>,<<"0.1.9">>},1}, @@ -10,12 +10,12 @@ {ref,"126dd0284fcac9b01613189a82facf8d803411a2"}}, 0}, {<<"metrics">>,{pkg,<<"metrics">>,<<"1.0.1">>},1}, - {<<"mimerl">>,{pkg,<<"mimerl">>,<<"1.2.0">>},1}, - {<<"parse_trans">>,{pkg,<<"parse_trans">>,<<"3.3.0">>},2}, + {<<"mimerl">>,{pkg,<<"mimerl">>,<<"1.3.0">>},1}, + {<<"parse_trans">>,{pkg,<<"parse_trans">>,<<"3.4.2">>},2}, {<<"ssl_verify_fun">>,{pkg,<<"ssl_verify_fun">>,<<"1.1.4">>},1}, {<<"syslog">>, {git,"https://github.com/Vagabond/erlang-syslog.git", - {ref,"4a6c6f2c996483e86c1320e9553f91d337bcb6aa"}}, + {ref,"2c38c70450f80b44711c7c1702171f32f881d4a6"}}, 0}, {<<"unicode_util_compat">>,{pkg,<<"unicode_util_compat">>,<<"0.4.1">>},2}]}. [ @@ -27,8 +27,20 @@ {<<"idna">>, <<"689C46CBCDF3524C44D5F3DDE8001F364CD7608A99556D8FBD8239A5798D4C10">>}, {<<"lager">>, <<"563AB17CD32134A3DD17EC3B3622E6D8F827506AA4F8C489158879BED87D980B">>}, {<<"metrics">>, <<"25F094DEA2CDA98213CECC3AEFF09E940299D950904393B2A29D191C346A8486">>}, - {<<"mimerl">>, <<"67E2D3F571088D5CFD3E550C383094B47159F3EEE8FFA08E64106CDF5E981BE3">>}, - {<<"parse_trans">>, <<"09765507A3C7590A784615CFD421D101AEC25098D50B89D7AA1D66646BC571C1">>}, + {<<"mimerl">>, <<"D0CD9FC04B9061F82490F6581E0128379830E78535E017F7780F37FEA7545726">>}, + {<<"parse_trans">>, <<"C352DDC1A0D5E54F9B1654D45F9C432EEF76F9CEA371C55DDFF769EF688FDB74">>}, {<<"ssl_verify_fun">>, <<"F0EAFFF810D2041E93F915EF59899C923F4568F4585904D010387ED74988E77B">>}, - {<<"unicode_util_compat">>, <<"D869E4C68901DD9531385BB0C8C40444EBF624E60B6962D95952775CAC5E90CD">>}]} + {<<"unicode_util_compat">>, <<"D869E4C68901DD9531385BB0C8C40444EBF624E60B6962D95952775CAC5E90CD">>}]}, +{pkg_hash_ext,[ + {<<"certifi">>, <<"805ABD97539CAF89EC6D4732C91E62BA9DA0CDA51AC462380BBD28EE697A8C42">>}, + {<<"erlsom">>, <<"55A9DBF9CFA77FCFC108BD8E2C4F9F784DEA228A8F4B06EA10B684944946955A">>}, + {<<"goldrush">>, <<"99CB4128CFFCB3227581E5D4D803D5413FA643F4EB96523F77D9E6937D994CEB">>}, + {<<"hackney">>, <<"C2790C9F0F7205F4A362512192DEE8179097394400E745E4D20BAB7226A8EAAD">>}, + {<<"idna">>, <<"4BDD305EB64E18B0273864920695CB18D7A2021F31A11B9C5FBCD9A253F936E2">>}, + {<<"lager">>, <<"97DC7E1C9E7289C3167F417E71FFE1DF28218537967E076800ECEDB1C28C9E48">>}, + {<<"metrics">>, <<"69B09ADDDC4F74A40716AE54D140F93BEB0FB8978D8636EADED0C31B6F099F16">>}, + {<<"mimerl">>, <<"A1E15A50D1887217DE95F0B9B0793E32853F7C258A5CD227650889B38839FE9D">>}, + {<<"parse_trans">>, <<"4C25347DE3B7C35732D32E69AB43D1CEEE0BEAE3F3B3ADE1B59CBD3DD224D9CA">>}, + {<<"ssl_verify_fun">>, <<"603561DC0FD62F4F2EA9B890F4E20E1A0D388746D6E20557CAFB1B16950DE88C">>}, + {<<"unicode_util_compat">>, <<"1D1848C40487CDB0B30E8ED975E34E025860C02E419CB615D255849F3427439D">>}]} ].