diff --git a/Dockerfile b/Dockerfile index 96e845b..8c6b802 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,8 +3,7 @@ ARG LIBSIGNAL_CLIENT_VERSION=0.87.0 ARG SIGNAL_CLI_NATIVE_PACKAGE_VERSION=0.13.24+morph027+2 ARG SWAG_VERSION=1.16.4 -ARG GRAALVM_VERSION=21.0.0 -#ARG GRAALVM_VERSION=25.0.2 +ARG GRAALVM_VERSION=25.0.2 ARG BUILD_VERSION_ARG=unset @@ -74,18 +73,20 @@ RUN if [ "$(uname -m)" = "x86_64" ]; then \ cd /tmp \ && git clone https://github.com/AsamK/signal-cli.git signal-cli-${SIGNAL_CLI_VERSION}-source \ && cd signal-cli-${SIGNAL_CLI_VERSION}-source \ - && git checkout -q v${SIGNAL_CLI_VERSION} \ && cd /tmp && mkdir -p /tmp/graalvm && tar xf gvm.tar.gz -C /tmp/graalvm --strip-components=1 \ && export GRAALVM_HOME=/tmp/graalvm \ && export PATH=/tmp/graalvm/bin:$PATH \ && cd /tmp/signal-cli-${SIGNAL_CLI_VERSION}-source \ - && sed -i 's/Signal-Android\/5.22.3/Signal-Android\/5.51.7/g' src/main/java/org/asamk/signal/BaseConfig.java \ && ./gradlew build \ && ./gradlew installDist \ - && ls build/install/signal-cli/lib/libsignal-client-${LIBSIGNAL_CLIENT_VERSION}.jar || (echo "\n\nsignal-client jar file with version ${LIBSIGNAL_CLIENT_VERSION} not found. Maybe the version needs to be bumped in the signal-cli-rest-api Dockerfile?\n\n" && echo "Available version: \n" && ls build/install/signal-cli/lib/libsignal-client-* && echo "\n\n" && exit 1) \ + && BUILT_LIBSIGNAL_JAR=$(ls build/install/signal-cli/lib/ | grep 'libsignal-client-.*\.jar' | head -1) \ + && echo "Built libsignal-client jar: ${BUILT_LIBSIGNAL_JAR}" \ + && rm -rf /tmp/signal-cli-${SIGNAL_CLI_VERSION} \ + && cp -a build/install/signal-cli /tmp/signal-cli-${SIGNAL_CLI_VERSION} \ && cd /tmp \ - && cp signal-cli-${SIGNAL_CLI_VERSION}-source/build/install/signal-cli/lib/libsignal-client-${LIBSIGNAL_CLIENT_VERSION}.jar libsignal-client.jar \ + && cp /tmp/signal-cli-${SIGNAL_CLI_VERSION}/lib/${BUILT_LIBSIGNAL_JAR} libsignal-client.jar \ && zip -qu libsignal-client.jar libsignal_jni.so \ + && cp libsignal-client.jar /tmp/signal-cli-${SIGNAL_CLI_VERSION}/lib/${BUILT_LIBSIGNAL_JAR} \ && cd /tmp/signal-cli-${SIGNAL_CLI_VERSION}-source \ && git apply /tmp/signal-cli-native.patch \ && ./gradlew -q nativeCompile; \ @@ -113,20 +114,27 @@ RUN if [ "$(uname -m)" = "x86_64" ]; then \ echo "Unknown architecture"; \ fi; -# replace libsignal-client +# Post-processing: inject native libsignal_jni.so and apply BaseConfig workaround. +# On x86_64 the source build (above) already produced a patched installDist with +# the native lib injected, so we only need to package it. On other architectures +# the release tarball is still used — apply the BaseConfig sed workaround and +# inject the native lib there. -RUN ls /tmp/signal-cli-${SIGNAL_CLI_VERSION}/lib/libsignal-client-${LIBSIGNAL_CLIENT_VERSION}.jar || (echo "\n\nsignal-client jar file with version ${LIBSIGNAL_CLIENT_VERSION} not found. Maybe the version needs to be bumped in the signal-cli-rest-api Dockerfile?\n\n" && echo "Available version: \n" && ls /tmp/signal-cli-${SIGNAL_CLI_VERSION}/lib/libsignal-client-* && echo "\n\n" && exit 1) - -# workaround until upstream is fixed -RUN cd /tmp/signal-cli-${SIGNAL_CLI_VERSION}/lib \ - && unzip signal-cli-${SIGNAL_CLI_VERSION}.jar \ - && sed -i 's/Signal-Android\/5.22.3/Signal-Android\/5.51.7/g' org/asamk/signal/BaseConfig.class \ - && zip -r signal-cli-${SIGNAL_CLI_VERSION}.jar org/ META-INF/ \ - && rm -rf META-INF \ - && rm -rf org +RUN if [ "$(uname -m)" != "x86_64" ]; then \ + ls /tmp/signal-cli-${SIGNAL_CLI_VERSION}/lib/libsignal-client-${LIBSIGNAL_CLIENT_VERSION}.jar \ + || (echo "\n\nsignal-client jar file with version ${LIBSIGNAL_CLIENT_VERSION} not found.\n\n" \ + && ls /tmp/signal-cli-${SIGNAL_CLI_VERSION}/lib/libsignal-client-* && exit 1) \ + && cd /tmp/signal-cli-${SIGNAL_CLI_VERSION}/lib \ + && unzip signal-cli-${SIGNAL_CLI_VERSION}.jar \ + && sed -i 's/Signal-Android\/5.22.3/Signal-Android\/5.51.7/g' org/asamk/signal/BaseConfig.class \ + && zip -r signal-cli-${SIGNAL_CLI_VERSION}.jar org/ META-INF/ \ + && rm -rf META-INF \ + && rm -rf org \ + && cd /tmp/ \ + && zip -qu /tmp/signal-cli-${SIGNAL_CLI_VERSION}/lib/libsignal-client-${LIBSIGNAL_CLIENT_VERSION}.jar libsignal_jni.so; \ + fi RUN cd /tmp/ \ - && zip -qu /tmp/signal-cli-${SIGNAL_CLI_VERSION}/lib/libsignal-client-${LIBSIGNAL_CLIENT_VERSION}.jar libsignal_jni.so \ && zip -qr signal-cli-${SIGNAL_CLI_VERSION}.zip signal-cli-${SIGNAL_CLI_VERSION}/* \ && unzip -q /tmp/signal-cli-${SIGNAL_CLI_VERSION}.zip -d /opt \ && rm -f /tmp/signal-cli-${SIGNAL_CLI_VERSION}.zip @@ -159,7 +167,7 @@ RUN cd /tmp/signal-cli-rest-api-src && go build -buildmode=plugin -o signal-cli- # is fixed we use the standard ubuntu image #FROM eclipse-temurin:21-jre-jammy -FROM ubuntu:jammy +FROM ubuntu:noble ENV GIN_MODE=release @@ -173,7 +181,7 @@ ENV SIGNAL_CLI_REST_API_PLUGIN_SHARED_OBJ_DIR=/usr/bin/ RUN dpkg-reconfigure debconf --frontend=noninteractive \ && apt-get update \ - && apt-get install -y --no-install-recommends util-linux supervisor netcat openjdk-21-jre curl locales \ + && apt-get install -y --no-install-recommends util-linux supervisor netcat-openbsd openjdk-25-jre curl locales \ && rm -rf /var/lib/apt/lists/* COPY --from=buildcontainer /tmp/signal-cli-rest-api-src/signal-cli-rest-api /usr/bin/signal-cli-rest-api @@ -184,7 +192,8 @@ COPY --from=buildcontainer /tmp/signal-cli-rest-api-src/signal-cli-rest-api_plug COPY entrypoint.sh /entrypoint.sh -RUN groupadd -g 1000 signal-api \ +RUN userdel -r ubuntu 2>/dev/null || true \ + && groupadd -f -g 1000 signal-api \ && useradd --no-log-init -M -d /home -s /bin/bash -u 1000 -g 1000 signal-api \ && ln -s /opt/signal-cli-${SIGNAL_CLI_VERSION}/bin/signal-cli /usr/bin/signal-cli \ && ln -s /opt/signal-cli-${SIGNAL_CLI_VERSION}/bin/signal-cli-native /usr/bin/signal-cli-native \ diff --git a/ext/libraries/libsignal-client/signal-cli-native.patch b/ext/libraries/libsignal-client/signal-cli-native.patch index cf506f0..a14f065 100644 --- a/ext/libraries/libsignal-client/signal-cli-native.patch +++ b/ext/libraries/libsignal-client/signal-cli-native.patch @@ -1,23 +1,22 @@ diff --git a/build.gradle.kts b/build.gradle.kts -index f51d9f1c..6357f590 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -55,6 +55,7 @@ dependencies { +@@ -89,6 +89,7 @@ dependencies { implementation(libs.slf4j.jul) implementation(libs.logback) + implementation(libs.zxing) implementation(project(":libsignal-cli")) + implementation(files("/tmp/libsignal-client.jar")) } - - configurations { -@@ -63,6 +64,10 @@ configurations { + +@@ -97,6 +98,10 @@ configurations { } } - + +configurations.all { + exclude(group = "org.signal", module = "libsignal-client") +} + - + tasks.withType().configureEach { isPreserveFileTimestamps = false