diff --git a/build.gradle b/build.gradle index dccd40edd70..abf185284d0 100644 --- a/build.gradle +++ b/build.gradle @@ -641,11 +641,15 @@ artifactoryPublish { dependsOn distZip } +// pass -PgithubToken=username: to gradle to specify a github token: +def githubToken = project.hasProperty('githubToken') ? project.property('githubToken') : "${rootProject.githubToken}" + def dockerBuildVersion = project.hasProperty('release.releaseVersion') ? project.property('release.releaseVersion') : "${rootProject.version}" def dockerOrgName = project.hasProperty('dockerOrgName') ? project.getProperty("dockerOrgName") : "hyperledger" def dockerArtifactName = project.hasProperty("dockerArtifactName") ? project.getProperty("dockerArtifactName") : "besu" def dockerImageName = "${dockerOrgName}/${dockerArtifactName}" def dockerVariants = project.hasProperty("dockerVariants") ? project.getProperty("dockerVariants").split(",") : [ + "linea-state-management", //TODO: do not merge linea docker container "openjdk-17", "openjdk-17-debug", "openj9-jdk-17", @@ -693,7 +697,7 @@ task distDocker { } executable "sh" workingDir dockerBuildDir - args "-c", "docker build ${dockerPlatform} --build-arg BUILD_DATE=${buildTime()} --build-arg VERSION=${dockerBuildVersion} --build-arg VCS_REF=${getCheckedOutGitCommitHash()} -t ${image} ." + args "-c", "docker build ${dockerPlatform} --build-arg GITHUB_TOKEN=${githubToken} --build-arg BUILD_DATE=${buildTime()} --build-arg VERSION=${dockerBuildVersion} --build-arg VCS_REF=${getCheckedOutGitCommitHash()} -t ${image} ." } } diff --git a/docker/linea-state-management/Dockerfile b/docker/linea-state-management/Dockerfile new file mode 100644 index 00000000000..472f2bf227b --- /dev/null +++ b/docker/linea-state-management/Dockerfile @@ -0,0 +1,88 @@ +FROM ubuntu:22.04 +################################################################## +# TODO: Do not merge this docker file, it is a convenience for +# building linea and will not work without github auth +################################################################## +ARG VERSION="dev" +ARG TARGETPLATFORM + +# Accept the token as a build argument and set it as an environment variable +ARG GITHUB_TOKEN +ENV GITHUB_TOKEN=$GITHUB_TOKEN + +RUN apt-get update && \ + apt-get install --no-install-recommends -q --assume-yes curl=7* libjemalloc-dev=5.* git ca-certificates && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +RUN ARCH=$(uname -m) && \ + if [ "$ARCH" = "aarch64" ]; then \ + curl -kL -o jdk-17.tar.gz https://github.com/ibmruntimes/semeru17-binaries/releases/download/jdk-17.0.5%2B8_openj9-0.35.0/ibm-semeru-open-jdk_aarch64_linux_17.0.5_8_openj9-0.35.0.tar.gz ; \ + elif [ "$(uname -s)" = "Darwin" ] && [ "$(uname -m)" = "arm64" ]; then \ + curl -kL -o jdk-17.tar.gz https://github.com/ibmruntimes/semeru17-binaries/releases/download/jdk-17.0.5%2B8_openj9-0.35.0/ibm-semeru-open-jdk_aarch64_linux_17.0.5_8_openj9-0.35.0.tar.gz ; \ + elif [ "$ARCH" = "x86_64" ]; then \ + curl -kL -o jdk-17.tar.gz https://github.com/ibmruntimes/semeru17-binaries/releases/download/jdk-17.0.5%2B8_openj9-0.35.0/ibm-semeru-open-jdk_x64_linux_17.0.5_8_openj9-0.35.0.tar.gz ; \ + else \ + echo "Unsupported platform: $ARCH"; exit 1; \ + fi + +RUN tar -xzf jdk-17.tar.gz && \ + rm jdk-17.tar.gz && \ + mv jdk-17.0.5+8 /usr/bin/ && \ + update-alternatives --install "/usr/bin/java" "java" "/usr/bin/jdk-17.0.5+8/bin/java" 1 && \ + adduser --disabled-password --gecos "" --home /opt/besu besu && \ + chown besu:besu /opt/besu && \ + chmod 0755 /opt/besu + +ENV JAVA_HOME /usr/bin/jdk-17.0.5+8/ +RUN export JAVA_HOME + +USER besu +WORKDIR /opt/besu + +COPY --chown=besu:besu besu /opt/besu/ + +# build besu-shomei plugin : +RUN mkdir /opt/besu/plugins && \ + mkdir /opt/besu/build-plugin && cd /opt/besu/build-plugin && \ + git clone https://${GITHUB_TOKEN}@github.com/ConsenSys/besu-shomei-plugin.git && \ + cd besu-shomei-plugin && \ + ./gradlew plugin && \ + cp build/libs/besu-shomei-plugin-*.jar /opt/besu/plugins && \ + cd .. && rm -rf build-plugin + +# Expose services ports +# 8545 HTTP JSON-RPC +# 8546 WS JSON-RPC +# 8547 HTTP GraphQL +# 8550 HTTP ENGINE JSON-RPC +# 8551 WS ENGINE JSON-RPC +# 30303 P2P +EXPOSE 8545 8546 8547 8550 8551 30303 + +# defaults for host interfaces +ENV BESU_RPC_HTTP_HOST 0.0.0.0 +ENV BESU_RPC_WS_HOST 0.0.0.0 +ENV BESU_GRAPHQL_HTTP_HOST 0.0.0.0 +ENV BESU_PID_PATH "/tmp/pid" + +ENV OTEL_RESOURCE_ATTRIBUTES="service.name=besu,service.version=$VERSION" + +ENV OLDPATH="${PATH}" +ENV PATH="/opt/besu/bin:${OLDPATH}" + +ENTRYPOINT ["besu"] +HEALTHCHECK --start-period=5s --interval=5s --timeout=1s --retries=10 CMD bash -c "[ -f /tmp/pid ]" + +# Build-time metadata as defined at http://label-schema.org +ARG BUILD_DATE +ARG VCS_REF +LABEL org.label-schema.build-date=$BUILD_DATE \ + org.label-schema.name="Besu" \ + org.label-schema.description="Enterprise Ethereum client" \ + org.label-schema.url="https://besu.hyperledger.org/" \ + org.label-schema.vcs-ref=$VCS_REF \ + org.label-schema.vcs-url="https://github.com/hyperledger/besu.git" \ + org.label-schema.vendor="Hyperledger" \ + org.label-schema.version=$VERSION \ + org.label-schema.schema-version="1.0"