mirror of
https://github.com/processone/ejabberd
synced 2025-10-04 18:29:20 +02:00
Container: Use again direct METHOD, qemu got fixed (3983)(4280)
Partially revert d15cf99
:
Container: Add METHOD to build container using packages (3983)
This commit is contained in:
parent
105a0c2029
commit
8070a656fe
2 changed files with 14 additions and 91 deletions
56
.github/container/Dockerfile
vendored
56
.github/container/Dockerfile
vendored
|
@ -1,20 +1,22 @@
|
||||||
#' Define default build variables
|
#' Define default build variables
|
||||||
## specifc ARGs for METHOD='direct'
|
|
||||||
ARG OTP_VSN='27.2'
|
ARG OTP_VSN='27.2'
|
||||||
ARG ELIXIR_VSN='1.18.1'
|
ARG ELIXIR_VSN='1.18.1'
|
||||||
## specifc ARGs for METHOD='package'
|
|
||||||
ARG ALPINE_VSN='3.19'
|
|
||||||
## general ARGs
|
|
||||||
ARG UID='9000'
|
ARG UID='9000'
|
||||||
ARG USER='ejabberd'
|
ARG USER='ejabberd'
|
||||||
ARG HOME="opt/$USER"
|
ARG HOME="opt/$USER"
|
||||||
ARG METHOD='direct'
|
|
||||||
ARG BUILD_DIR="/$USER"
|
ARG BUILD_DIR="/$USER"
|
||||||
ARG VERSION='master'
|
ARG VERSION='master'
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
#' METHOD='direct' - build and install ejabberd directly from source
|
#' Compile ejabberdapi
|
||||||
FROM docker.io/erlang:${OTP_VSN}-alpine AS direct
|
FROM docker.io/golang:1.23-alpine AS api
|
||||||
|
RUN go install -v \
|
||||||
|
github.com/processone/ejabberd-api/cmd/ejabberd@master \
|
||||||
|
&& mv bin/ejabberd bin/ejabberdapi
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#' build and install ejabberd directly from source
|
||||||
|
FROM docker.io/erlang:${OTP_VSN}-alpine AS ejabberd
|
||||||
|
|
||||||
RUN apk -U add --no-cache \
|
RUN apk -U add --no-cache \
|
||||||
autoconf \
|
autoconf \
|
||||||
|
@ -70,37 +72,16 @@ RUN find "$HOME-$VERSION/bin" -name 'ejabberd' -delete \
|
||||||
|
|
||||||
RUN wget -O "$HOME/conf/cacert.pem" 'https://curl.se/ca/cacert.pem'
|
RUN wget -O "$HOME/conf/cacert.pem" 'https://curl.se/ca/cacert.pem'
|
||||||
|
|
||||||
################################################################################
|
|
||||||
#' METHOD='package' - install ejabberd from binary tarball package
|
|
||||||
FROM docker.io/alpine:${ALPINE_VSN} AS package
|
|
||||||
COPY tarballs/ejabberd-*-linux-musl-*.tar.gz /tmp/
|
|
||||||
WORKDIR /rootfs
|
|
||||||
ARG HOME
|
|
||||||
RUN home_root_dir=$(echo $HOME | sed 's|\(.*\)/.*|\1 |') \
|
|
||||||
&& mkdir -p $home_root_dir \
|
|
||||||
&& ARCH=$(uname -m | sed -e 's/x86_64/x64/;s/aarch64/arm64/') \
|
|
||||||
&& tar -xzf /tmp/ejabberd-*-linux-musl-$ARCH.tar.gz -C $home_root_dir
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
#' Compile ejabberdapi
|
|
||||||
FROM docker.io/golang:1.23-alpine AS api
|
|
||||||
RUN go install -v \
|
|
||||||
github.com/processone/ejabberd-api/cmd/ejabberd@master \
|
|
||||||
&& mv bin/ejabberd bin/ejabberdapi
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
#' Prepare ejabberd for runtime
|
#' Prepare ejabberd for runtime
|
||||||
FROM ${METHOD} AS ejabberd
|
|
||||||
RUN apk -U add --no-cache \
|
RUN apk -U add --no-cache \
|
||||||
git \
|
git \
|
||||||
libcap \
|
libcap \
|
||||||
openssl
|
openssl
|
||||||
|
|
||||||
WORKDIR /rootfs
|
|
||||||
ARG HOME
|
|
||||||
RUN mkdir -p usr/local/bin $HOME/conf $HOME/database $HOME/logs $HOME/upload
|
RUN mkdir -p usr/local/bin $HOME/conf $HOME/database $HOME/logs $HOME/upload
|
||||||
|
|
||||||
ARG BUILD_DIR
|
COPY --from=api /go/bin/ejabberdapi usr/local/bin/
|
||||||
|
|
||||||
RUN if [ ! -d $HOME/.ejabberd-modules ]; \
|
RUN if [ ! -d $HOME/.ejabberd-modules ]; \
|
||||||
then \
|
then \
|
||||||
if [ -d $BUILD_DIR/.ejabberd-modules ]; \
|
if [ -d $BUILD_DIR/.ejabberd-modules ]; \
|
||||||
|
@ -162,31 +143,22 @@ RUN home_root_dir=$(echo $HOME | sed 's|\(.*\)/.*|\1 |') \
|
||||||
| sed -e "s|so:libc.so|so:libc.musl-$(uname -m).so.1|" \
|
| sed -e "s|so:libc.so|so:libc.musl-$(uname -m).so.1|" \
|
||||||
> /tmp/runDeps
|
> /tmp/runDeps
|
||||||
|
|
||||||
COPY --from=api /go/bin/ejabberdapi usr/local/bin/
|
|
||||||
|
|
||||||
ARG UID
|
ARG UID
|
||||||
RUN chown -R $UID:$UID $HOME
|
RUN chown -R $UID:$UID $HOME
|
||||||
|
|
||||||
ARG VERSION
|
|
||||||
RUN cp /rootfs/$HOME-$VERSION/lib/captcha*.sh usr/local/bin/
|
RUN cp /rootfs/$HOME-$VERSION/lib/captcha*.sh usr/local/bin/
|
||||||
RUN mkdir $HOME/sql \
|
RUN mkdir $HOME/sql \
|
||||||
&& find /rootfs/$HOME-$VERSION/lib/ -name *.sql -exec cp {} $HOME/sql \; -exec cp {} $HOME/database \;
|
&& find /rootfs/$HOME-$VERSION/lib/ -name *.sql -exec cp {} $HOME/sql \; -exec cp {} $HOME/database \;
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
#' METHOD='direct' - Remove erlang/OTP & rebar3
|
#' Remove erlang/OTP & rebar3
|
||||||
FROM docker.io/erlang:${OTP_VSN}-alpine AS runtime-direct
|
FROM docker.io/erlang:${OTP_VSN}-alpine AS runtime
|
||||||
RUN apk del .erlang-rundeps \
|
RUN apk del .erlang-rundeps \
|
||||||
&& rm -f $(which rebar3) \
|
&& rm -f $(which rebar3) \
|
||||||
&& find /usr -type d -name 'erlang' -exec rm -rf {} + \
|
&& find /usr -type d -name 'erlang' -exec rm -rf {} + \
|
||||||
&& find /usr -type l -exec test ! -e {} \; -delete
|
&& find /usr -type l -exec test ! -e {} \; -delete
|
||||||
|
|
||||||
################################################################################
|
|
||||||
#' METHOD='package' - define runtime base image
|
|
||||||
FROM docker.io/alpine:${ALPINE_VSN} AS runtime-package
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
#' Update alpine, finalize runtime environment
|
#' Update alpine, finalize runtime environment
|
||||||
FROM runtime-${METHOD} AS runtime
|
|
||||||
COPY --from=ejabberd /tmp/runDeps /tmp/runDeps
|
COPY --from=ejabberd /tmp/runDeps /tmp/runDeps
|
||||||
RUN apk -U upgrade --available --no-cache \
|
RUN apk -U upgrade --available --no-cache \
|
||||||
&& apk add --no-cache \
|
&& apk add --no-cache \
|
||||||
|
@ -210,7 +182,7 @@ RUN rm -rf /home \
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
#' Build together production image
|
#' Build together production image
|
||||||
FROM scratch AS prod
|
FROM scratch
|
||||||
ARG USER
|
ARG USER
|
||||||
ARG HOME
|
ARG HOME
|
||||||
|
|
||||||
|
|
49
.github/workflows/container.yml
vendored
49
.github/workflows/container.yml
vendored
|
@ -1,8 +1,6 @@
|
||||||
name: Container
|
name: Container
|
||||||
|
|
||||||
on:
|
on:
|
||||||
schedule:
|
|
||||||
- cron: '22 2 */6 * *' # every 6 days to avoid gha cache being evicted
|
|
||||||
push:
|
push:
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- '.devcontainer/**'
|
- '.devcontainer/**'
|
||||||
|
@ -28,52 +26,6 @@ jobs:
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Cache build directory
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: ~/build/
|
|
||||||
key: ${{runner.os}}-ctr-ct-ng-1.27.0
|
|
||||||
|
|
||||||
- name: Get erlang/OTP version for bootstrapping
|
|
||||||
run: |
|
|
||||||
echo "OTP_VSN=$(awk '/^otp_vsn=/ {{gsub(/[^0-9.rc-]/, ""); print}}' tools/make-binaries)" >> $GITHUB_ENV
|
|
||||||
echo "ELIXIR_VSN=$(awk '/^elixir_vsn=/ {{gsub(/[^0-9.]/, ""); print}}' tools/make-binaries)" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Install prerequisites
|
|
||||||
run: |
|
|
||||||
sudo apt-get -qq update
|
|
||||||
sudo apt-get -qq install makeself
|
|
||||||
# https://github.com/crosstool-ng/crosstool-ng/blob/master/testing/docker/ubuntu21.10/Dockerfile
|
|
||||||
sudo apt-get -qq install build-essential autoconf bison flex gawk
|
|
||||||
sudo apt-get -qq install help2man libncurses5-dev libtool libtool-bin
|
|
||||||
sudo apt-get -qq install python3-dev texinfo unzip
|
|
||||||
|
|
||||||
- name: Install erlang/OTP
|
|
||||||
uses: erlef/setup-beam@v1
|
|
||||||
with:
|
|
||||||
otp-version: ${{ env.OTP_VSN }}
|
|
||||||
elixir-version: ${{ env.ELIXIR_VSN }}
|
|
||||||
version-type: strict
|
|
||||||
|
|
||||||
- name: Remove Elixir Matchers
|
|
||||||
run: |
|
|
||||||
echo "::remove-matcher owner=elixir-mixCompileWarning::"
|
|
||||||
echo "::remove-matcher owner=elixir-credoOutputDefault::"
|
|
||||||
echo "::remove-matcher owner=elixir-mixCompileError::"
|
|
||||||
echo "::remove-matcher owner=elixir-mixTestFailure::"
|
|
||||||
echo "::remove-matcher owner=elixir-dialyzerOutputDefault::"
|
|
||||||
|
|
||||||
- name: Build musl-libc based binary archives
|
|
||||||
run: |
|
|
||||||
sed -i "s|targets='.*'|targets='x86_64-linux-musl aarch64-linux-musl'|" tools/make-binaries
|
|
||||||
mv .github/container/ejabberdctl.template .
|
|
||||||
CHECK_DEPS=false tools/make-binaries
|
|
||||||
|
|
||||||
- name: Collect packages
|
|
||||||
run: |
|
|
||||||
mkdir tarballs
|
|
||||||
mv ejabberd-*.tar.gz tarballs
|
|
||||||
|
|
||||||
- name: Checkout ejabberd-contrib
|
- name: Checkout ejabberd-contrib
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
|
@ -111,7 +63,6 @@ jobs:
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
build-args: |
|
build-args: |
|
||||||
METHOD=package
|
|
||||||
VERSION=${{ steps.gitdescribe.outputs.ver }}
|
VERSION=${{ steps.gitdescribe.outputs.ver }}
|
||||||
cache-from: type=gha
|
cache-from: type=gha
|
||||||
cache-to: type=gha,mode=max
|
cache-to: type=gha,mode=max
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue