refactoring btcd

This commit is contained in:
Colin Lyons
2023-01-17 01:06:00 +00:00
parent 9f1090b760
commit 3ac9fba175
4 changed files with 121 additions and 37 deletions

View File

@@ -34,27 +34,45 @@ var (
func strPtr(str string) *string { return &str } func strPtr(str string) *string { return &str }
var buildConfigurations = []docker.BuildConfiguration{ 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{ docker.BuildConfiguration{
Name: defaultRepositoryName + "/" + "btcd", Name: defaultRepositoryName + "/" + "btcd",
ContextFilePath: "/tmp/btcd.tar", ContextFilePath: "/tmp/btcd.tar",
BuildOpts: types.ImageBuildOptions{ BuildOpts: types.ImageBuildOptions{
Dockerfile: "docker/btcd/btcd.Dockerfile", Dockerfile: "docker/btcd/btcd.Dockerfile",
Tags: []string{ Tags: []string{
"v0.23.4", "v0.23.3",
"latest", "latest",
}, },
BuildArgs: map[string]*string{ BuildArgs: map[string]*string{
"base_image": strPtr(defaultBuildContainer), "btcd_version": strPtr("v0.23.3"),
"target_image": strPtr("indralabs/scratch:latest"), "scratch_version": strPtr("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"),
}, },
SuppressOutput: false, SuppressOutput: false,
Remove: true, Remove: false,
ForceRemove: true, ForceRemove: false,
PullParent: true, PullParent: false,
}, },
}, },
docker.BuildConfiguration{ docker.BuildConfiguration{
@@ -67,11 +85,12 @@ var buildConfigurations = []docker.BuildConfiguration{
"latest", "latest",
}, },
BuildArgs: map[string]*string{ BuildArgs: map[string]*string{
"semver": strPtr("v0.23.4"), "btcd_version": strPtr("v0.23.3"),
"scratch_version": strPtr("latest"),
}, },
SuppressOutput: false, SuppressOutput: false,
Remove: true, Remove: false,
ForceRemove: true, ForceRemove: false,
PullParent: false, PullParent: false,
}, },
}, },

View File

@@ -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

View File

@@ -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"] ENTRYPOINT ["/bin/btcctl", "--configfile=/etc/btcd/btcd.conf"]

View File

@@ -1,38 +1,22 @@
ARG base_image="golang"
ARG target_image="indralabs/scratch"
# --- # ---
# Build Process # Build Process
# --- # ---
FROM ${base_image} AS builder ARG btcd_version="latest"
ARG scratch_version="latest"
# Get the repo and build FROM indralabs/btcd-base:${btcd_version} as base
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/...
# --- # ---
# Target Configuration # Target Configuration
# --- # ---
FROM indralabs/scratch:latest FROM indralabs/scratch:${scratch_version}
## Migrate the binaries and storage folder ## 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 # Enable the btcd user
USER btcd:btcd USER btcd:btcd