Skip to content

Commit

Permalink
Fixing amd64 static docker image and min glibc to 2.15 (#494)
Browse files Browse the repository at this point in the history
* [Gradle Release Plugin] - new version commit:  '3.21.2-snapshot'.

* Fixing amd64 static docker image

* setup image test

* fixing tmp dir

* fixing tmp dir

* setup debian 10 slim again for amd64

* creating hidden command to create tmp dir

* creating tmp dir at static docker image

* release notes

* update source list

* downgrading image builder

* simplify

* fixing unmet dep

* fixing unmet dep

* fixing unmet dep

* configuring aarch builder with debian stretch 9

* reconfigure cd

* change create-tmp-dir impl

* cd

* fixing test - port conflicting happening

* cd
  • Loading branch information
mageddo committed Jun 25, 2024
1 parent 7147f5e commit cb77651
Show file tree
Hide file tree
Showing 14 changed files with 125 additions and 7 deletions.
1 change: 0 additions & 1 deletion .github/workflows/actions-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ on:
branches:
- master


permissions:
contents: write

Expand Down
2 changes: 1 addition & 1 deletion Dockerfile.amd64-static
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ LABEL dps.container=true
ENV DPS_CONTAINER=1
VOLUME ["/var/run/docker.sock", "/var/run/docker.sock"]
ENTRYPOINT ["/app/dns-proxy-server"]
CMD ["-D", "java.io.tmpdir=/app"]
CMD ["--create-tmp-dir"]
17 changes: 16 additions & 1 deletion Dockerfile.builder.linux-aarch64
Original file line number Diff line number Diff line change
@@ -1,4 +1,19 @@
FROM ghcr.io/graalvm/graalvm-community:22.0.1@sha256:fa702fdbfcf865a2a20bc48d933f877f75e9c1ff4d91bf68ad23e5b8dd39c2d5
FROM arm64v8/debian:9-slim

COPY ./src/main/docker/builder/sources.list /etc/apt/sources.list

RUN apt-get update -y &&\
apt-get install --force-yes -y zlib1g-dev=1:1.2.8.dfsg-5 zlib1g=1:1.2.8.dfsg-5 &&\
apt-get install --force-yes -y build-essential libz-dev curl

ENV GRAALVM_URL='https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-21.0.2/graalvm-community-jdk-21.0.2_linux-aarch64_bin.tar.gz'
RUN mkdir /graalvm &&\
curl -L $GRAALVM_URL > /tmp/graalvm.tgz &&\
tar --strip 1 -zxvf /tmp/graalvm.tgz -C /graalvm

ENV JAVA_HOME=/graalvm
ENV PATH="${PATH}:$JAVA_HOME/bin"
RUN uname -a && whoami && $JAVA_HOME/bin/java -version

WORKDIR /app/build
COPY ./build/artifacts/native-image-source/ /app/build
Expand Down
17 changes: 16 additions & 1 deletion Dockerfile.builder.linux-amd64
Original file line number Diff line number Diff line change
@@ -1,4 +1,19 @@
FROM ghcr.io/graalvm/graalvm-community:21.0.2-ol9-20240116 AS BUILDER
FROM debian:9-slim

COPY ./src/main/docker/builder/sources.list /etc/apt/sources.list

RUN apt-get update -y &&\
apt-get install --force-yes -y zlib1g-dev=1:1.2.8.dfsg-5 zlib1g=1:1.2.8.dfsg-5 &&\
apt-get install --force-yes -y build-essential libz-dev curl

ENV GRAALVM_URL='https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-21.0.2/graalvm-community-jdk-21.0.2_linux-x64_bin.tar.gz'
RUN mkdir /graalvm &&\
curl -L $GRAALVM_URL > /tmp/graalvm.tgz &&\
tar --strip 1 -zxvf /tmp/graalvm.tgz -C /graalvm

ENV JAVA_HOME=/graalvm
ENV PATH="${PATH}:$JAVA_HOME/bin"
RUN uname -a && whoami && $JAVA_HOME/bin/java -version

COPY ./ /app
WORKDIR /app
Expand Down
4 changes: 4 additions & 0 deletions RELEASE-NOTES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 3.21.2
* #285, #494: Fixing amd64 static docker image.
* #435: Make DPS dynamic linked binary compatible with libgc 2.15 again

## 3.21.1
* #435: Upgrading docker run images due glibc
* #285: Linux AMD64 static binary
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
version=3.21.1-snapshot
version=3.21.2-snapshot
2 changes: 2 additions & 0 deletions src/main/docker/builder/sources.list
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
deb http://archive.debian.org/debian/ stretch main contrib non-free
deb-src http://archive.debian.org/debian/ stretch main contrib non-free
22 changes: 21 additions & 1 deletion src/main/java/com/mageddo/dnsproxyserver/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,16 @@
import com.mageddo.dnsproxyserver.config.dataprovider.ConfigDAOCmdArgs;
import com.mageddo.dnsproxyserver.config.dataprovider.vo.ConfigFlag;
import com.mageddo.dnsproxyserver.di.Context;
import lombok.SneakyThrows;

import java.nio.file.Files;
import java.nio.file.Paths;

public class App {

private final String[] args;
private Config config;
private ConfigFlag flags;

public App(String[] args) {
this.args = args;
Expand All @@ -22,6 +27,10 @@ public static void main(String[] args) {

void start() {

this.flags = ConfigFlag.parse(this.args);

this.checkHiddenCommands();

this.checkExitCommands();

this.config = this.findConfig(args);
Expand All @@ -33,6 +42,12 @@ void start() {
// todo install as service
}

void checkHiddenCommands() {
if (this.flags.isCreateTmpDir()) {
this.createTmpDirIfNotExists();
}
}

Config findConfig(String[] args) {
ConfigDAOCmdArgs.setArgs(args);
return Configs.getInstance();
Expand All @@ -51,7 +66,6 @@ void startContext() {
}

void checkExitCommands() {
final var flags = ConfigFlag.parse(this.args);
if (flags.isHelp() || flags.isVersion()) {
exitGracefully();
}
Expand All @@ -60,4 +74,10 @@ void checkExitCommands() {
void exitGracefully() {
System.exit(0);
}

@SneakyThrows
void createTmpDirIfNotExists() {
final var tmpDir = Paths.get(System.getProperty("java.io.tmpdir"));
Files.createDirectories(tmpDir);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,13 @@ this way you will probably not have resolution issues by acl (implies dps-networ
)
private Boolean dockerSolverHostMachineFallbackActive;

@Option(
hidden = true,
names = {"-create-tmp-dir", "--create-tmp-dir"}, defaultValue = "false",
description = "Create the dir set as tmp in the jvm if it doesn't exists yet."
)
private boolean createTmpDir;

@JsonIgnore
private String[] args;

Expand Down
16 changes: 16 additions & 0 deletions src/main/java/com/mageddo/net/SocketUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.mageddo.net;

import lombok.SneakyThrows;

import java.net.ServerSocket;

public class SocketUtils {

@SneakyThrows
public static int findRandomFreePort() {
final var server = new ServerSocket(0);
try (server) {
return server.getLocalPort();
}
}
}
16 changes: 16 additions & 0 deletions src/test/java/com/mageddo/dnsproxyserver/AppCompTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,22 @@ void mustExitWhenVersionCmd() {
verify(this.app, never()).setupLogs();
}

@Test
void mustCreateTmpDirIfNotExists() {
// arrange
final var args = new String[]{"--create-tmp-dir"};
this.app = spy(new App(args));

// act
this.app.start();

// assert
verify(this.app).createTmpDirIfNotExists();
verify(this.app, never()).exitGracefully();

}


RuntimeException mockExitMethod() {
final var expectedException = new RuntimeException("must exit");
doThrow(expectedException)
Expand Down
19 changes: 19 additions & 0 deletions src/test/java/com/mageddo/net/SocketUtilsTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.mageddo.net;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class SocketUtilsTest {

@Test
void mustFindRandomFreePort(){
// arrange

// act
final var port = SocketUtils.findRandomFreePort();

// assert
assertTrue(port > 0);
}
}
4 changes: 4 additions & 0 deletions src/test/java/testing/ContextSupplier.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
package testing;

import com.mageddo.dnsproxyserver.config.application.Configs;
import com.mageddo.dnsproxyserver.config.dataprovider.ConfigDAOCmdArgs;
import com.mageddo.dnsproxyserver.di.Context;
import com.mageddo.net.SocketUtils;

import java.util.function.Supplier;

public class ContextSupplier implements Supplier<Context> {
@Override
public Context get() {
final var port = SocketUtils.findRandomFreePort();
Configs.clear();
ConfigDAOCmdArgs.setArgs(new String[]{"--web-server-port=" + port});
Configs.getInstance();
return Context.create();
}
Expand Down
3 changes: 2 additions & 1 deletion src/test/resources/flags-test/001.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,6 @@
"dpsNetwork" : false,
"dpsNetworkAutoConnect" : false,
"help" : false,
"resolvConfOverrideNameServers" : true
"resolvConfOverrideNameServers" : true,
"createTmpDir" : false
}

0 comments on commit cb77651

Please sign in to comment.