From 3ac9fba17516851dd4f884b83b7e48ea789bedd7 Mon Sep 17 00:00:00 2001 From: Colin Lyons Date: Tue, 17 Jan 2023 01:06:00 +0000 Subject: [PATCH] refactoring btcd --- cmd/docker/release/main.go | 45 ++++++++++++++++++-------- docker/btcd/base.Dockerfile | 61 +++++++++++++++++++++++++++++++++++ docker/btcd/btcctl.Dockerfile | 24 ++++++++++++-- docker/btcd/btcd.Dockerfile | 28 ++++------------ 4 files changed, 121 insertions(+), 37 deletions(-) create mode 100644 docker/btcd/base.Dockerfile diff --git a/cmd/docker/release/main.go b/cmd/docker/release/main.go index f11f7482..4551b817 100644 --- a/cmd/docker/release/main.go +++ b/cmd/docker/release/main.go @@ -34,27 +34,45 @@ var ( func strPtr(str string) *string { return &str } var buildConfigurations = []docker.BuildConfiguration{ + //docker.BuildConfiguration{ + // Name: defaultRepositoryName + "/" + "btcd-base", + // ContextFilePath: "/tmp/btcd-base.tar", + // BuildOpts: types.ImageBuildOptions{ + // Dockerfile: "docker/btcd/base.Dockerfile", + // Tags: []string{ + // "v0.23.3", + // "latest", + // }, + // BuildArgs: map[string]*string{ + // "builder_image": strPtr(defaultBuildContainer), + // "source_release_url_prefix": strPtr("https://github.com/btcsuite/btcd"), + // "target_os": strPtr("linux"), + // "target_platform": strPtr("amd64"), + // "target_version": strPtr("v0.23.3"), + // }, + // SuppressOutput: false, + // Remove: false, + // ForceRemove: false, + // PullParent: false, + // }, + //}, docker.BuildConfiguration{ Name: defaultRepositoryName + "/" + "btcd", ContextFilePath: "/tmp/btcd.tar", BuildOpts: types.ImageBuildOptions{ Dockerfile: "docker/btcd/btcd.Dockerfile", Tags: []string{ - "v0.23.4", + "v0.23.3", "latest", }, BuildArgs: map[string]*string{ - "base_image": strPtr(defaultBuildContainer), - "target_image": strPtr("indralabs/scratch:latest"), - // This argument is the tag fetched by git - // It MUST be updated alongside the tag above - "git_repository": strPtr("github.com/btcsuite/btcd"), - "git_tag": strPtr("v0.23.4"), + "btcd_version": strPtr("v0.23.3"), + "scratch_version": strPtr("latest"), }, SuppressOutput: false, - Remove: true, - ForceRemove: true, - PullParent: true, + Remove: false, + ForceRemove: false, + PullParent: false, }, }, docker.BuildConfiguration{ @@ -67,11 +85,12 @@ var buildConfigurations = []docker.BuildConfiguration{ "latest", }, BuildArgs: map[string]*string{ - "semver": strPtr("v0.23.4"), + "btcd_version": strPtr("v0.23.3"), + "scratch_version": strPtr("latest"), }, SuppressOutput: false, - Remove: true, - ForceRemove: true, + Remove: false, + ForceRemove: false, PullParent: false, }, }, diff --git a/docker/btcd/base.Dockerfile b/docker/btcd/base.Dockerfile new file mode 100644 index 00000000..33c216cf --- /dev/null +++ b/docker/btcd/base.Dockerfile @@ -0,0 +1,61 @@ + +# --- +# Build Process +# --- + +ARG builder_image="golang" + +FROM indralabs/scratch:latest as config + +FROM ${builder_image} AS builder + +ARG source_release_url_prefix="https://github.com/btcsuite/btcd" + +ARG target_os="linux" +ARG target_platform="amd64" +ARG target_version="v0.23.3" + +WORKDIR /tmp + +RUN set -ex echo "downloading source and binaries with manifest and signature." \ + && wget ${source_release_url_prefix}/releases/download/${target_version}/manifest-${target_version}.txt \ + && wget ${source_release_url_prefix}/releases/download/${target_version}/manifest-guggero-${target_version}.sig \ + && wget ${source_release_url_prefix}/releases/download/${target_version}/btcd-${target_os}-${target_platform}-${target_version}.tar.gz \ + && wget ${source_release_url_prefix}/releases/download/${target_version}/btcd-source-${target_version}.tar.gz + +# Importing keys from scratch +COPY --from=config /etc/btcd/keys/guggero.asc /tmp/guggero.asc + +RUN set -ex echo "importing keys" \ + && cat guggero.asc | gpg --import + +RUN set -ex echo "running signature verification on manifest" \ + && gpg --verify manifest-guggero-${target_version}.sig manifest-${target_version}.txt + +RUN set -ex echo "verifying checksum on btcd-${target_os}-${target_platform}-${target_version}.tar.gz" \ + && cat manifest-${target_version}.txt | grep btcd-${target_os}-${target_platform}-${target_version}.tar.gz | shasum -a 256 -c + +#RUN set -ex echo "DEBUG: verifying a checksum failure stops the build" \ +# && mv btcd-${target_os}-${target_platform}-${target_version}.tar.gz btcd-source-${target_version}.tar.gz + +RUN set -ex echo "verifying checksum on btcd-source-${target_version}.tar.gz" \ + && cat manifest-${target_version}.txt | grep btcd-source-${target_version}.tar.gz | shasum -a 256 -c + +RUN set -ex echo "untarring binaries and source code" \ + && mkdir -pv /tmp/btcd-${target_os}-${target_platform}-${target_version} \ + && tar -xzvf btcd-${target_os}-${target_platform}-${target_version}.tar.gz --directory /tmp/btcd-${target_os}-${target_platform}-${target_version} \ + && mkdir -pv /tmp/btcd-source-${target_version} \ + && tar -xzvf btcd-source-${target_version}.tar.gz --directory /tmp/btcd-source-${target_version} + +WORKDIR /tmp/btcd-source-${target_version} + +RUN set -ex ls -hal /tmp + +RUN set -ex echo "building binaries for ${GOOS}/${GOARCH}" \ + && mkdir -pv /tmp/bin \ + && GO111MODULE=on GOOS=${target_os} CGO_ENABLED=0 go build --ldflags '-w -s' -o /tmp/bin/btcd . \ + && GO111MODULE=on GOOS=${target_os} CGO_ENABLED=0 go build --ldflags '-w -s' -o /tmp/bin/ ./cmd/... + +#RUN set -ex echo "moving btcd binary to /tmp/bin" \ +# && mkdir -pv /tmp/bin \ +# && cp /tmp/btcd-${target_os}-${target_platform}-${target_version}/btcd /tmp/bin diff --git a/docker/btcd/btcctl.Dockerfile b/docker/btcd/btcctl.Dockerfile index c64f769f..b5e654b7 100644 --- a/docker/btcd/btcctl.Dockerfile +++ b/docker/btcd/btcctl.Dockerfile @@ -1,6 +1,26 @@ -ARG semver=master +# --- +# Build Process +# --- -FROM indralabs/btcd:${semver} +ARG btcd_version="latest" +ARG scratch_version="latest" + +FROM indralabs/btcd-base:${btcd_version} as base + +# --- +# Target Configuration +# --- + +FROM indralabs/scratch:${scratch_version} + +## Migrate the binaries and storage folder +COPY --from=base /tmp/bin/btcctl /bin + +# Enable the btcd user +USER btcd:btcd + +# Set the data volumes. Should be read-only. +#VOLUME ["/etc/btcd"] ENTRYPOINT ["/bin/btcctl", "--configfile=/etc/btcd/btcd.conf"] diff --git a/docker/btcd/btcd.Dockerfile b/docker/btcd/btcd.Dockerfile index 41c0c3a7..6391e264 100644 --- a/docker/btcd/btcd.Dockerfile +++ b/docker/btcd/btcd.Dockerfile @@ -1,38 +1,22 @@ -ARG base_image="golang" -ARG target_image="indralabs/scratch" - # --- # Build Process # --- -FROM ${base_image} AS builder +ARG btcd_version="latest" +ARG scratch_version="latest" -# Get the repo and build -ARG git_repository="github.com/indra-labs/btcd" -ARG git_tag="master" - -# Install dependencies and build the binaries. -RUN git clone "https://"${git_repository} /go/src/${git_repository} - -WORKDIR $GOPATH/src/${git_repository} - -RUN git checkout ${git_tag} - -ARG ARCH=amd64 -ARG GOARCH=amd64 -RUN set -ex \ - && GO111MODULE=on GOOS=linux CGO_ENABLED=0 go build --ldflags '-w -s' -o /tmp/bin/btcd . \ - && GO111MODULE=on GOOS=linux CGO_ENABLED=0 go build --ldflags '-w -s' -o /tmp/bin/ ./cmd/... +FROM indralabs/btcd-base:${btcd_version} as base # --- # Target Configuration # --- -FROM indralabs/scratch:latest +FROM indralabs/scratch:${scratch_version} ## Migrate the binaries and storage folder -COPY --from=builder /tmp/bin /bin +COPY --from=base /tmp/bin/btcd /bin +COPY --from=base /tmp/bin/gencerts /bin # Enable the btcd user USER btcd:btcd