Skip to content

Commit

Permalink
build agoric from source (#130)
Browse files Browse the repository at this point in the history
  • Loading branch information
agouin committed Jun 12, 2023
1 parent 4b93571 commit 3564b45
Show file tree
Hide file tree
Showing 5 changed files with 141 additions and 2 deletions.
4 changes: 4 additions & 0 deletions builder/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,8 @@ func (h *HeighlinerBuilder) buildChainNodeDockerImage(

targetLibraries := strings.Join(chainConfig.Build.TargetLibraries, " ")

directories := strings.Join(chainConfig.Build.Directories, " ")

repoHost := chainConfig.Build.RepoHost
if repoHost == "" {
repoHost = "github.com"
Expand Down Expand Up @@ -357,7 +359,9 @@ func (h *HeighlinerBuilder) buildChainNodeDockerImage(
"BINARIES": binaries,
"LIBRARIES": libraries,
"TARGET_LIBRARIES": targetLibraries,
"DIRECTORIES": directories,
"PRE_BUILD": chainConfig.Build.PreBuild,
"FINAL_IMAGE": chainConfig.Build.FinalImage,
"BUILD_ENV": buildEnv,
"BUILD_TAGS": buildTagsEnvVar,
"BUILD_DIR": chainConfig.Build.BuildDir,
Expand Down
2 changes: 2 additions & 0 deletions builder/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,12 @@ type ChainNodeConfig struct {
Language DockerfileType `yaml:"language"` // DEPRECATED, use "dockerfile" instead
Dockerfile DockerfileType `yaml:"dockerfile"`
BuildTarget string `yaml:"build-target"`
FinalImage string `yaml:"final-image"`
BuildDir string `yaml:"build-dir"`
Binaries []string `yaml:"binaries"`
Libraries []string `yaml:"libraries"`
TargetLibraries []string `yaml:"target-libraries"`
Directories []string `yaml:"directories"`
PreBuild string `yaml:"pre-build"`
Platforms []string `yaml:"platforms"`
BuildEnv []string `yaml:"build-env"`
Expand Down
75 changes: 73 additions & 2 deletions chains.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,79 @@

# Agoric-sdk
- name: agoric
dockerfile: imported
base-image: ghcr.io/agoric/agoric-sdk
dockerfile: cargo
github-organization: Agoric
github-repo: agoric-sdk
build-env:
- LEDGER_ENABLED=false
- BUILD_TAGS=muslc
pre-build: |
apt update && apt install -y python3 g++
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
nvm install 18
npm i -g yarn
set -eux
cd golang/cosmos
export GOOS=linux GOARCH=${TARGETARCH}
npm install node-addon-api --legacy-peer-deps
# make -j$(nproc)
COMMIT=$(git log -1 --format='%H')
COMMON_LDFLAGS="-X github.com/cosmos/cosmos-sdk/version.Name=agoric \
-X github.com/cosmos/cosmos-sdk/version.AppName=agd \
-X github.com/cosmos/cosmos-sdk/version.Version=$VERSION \
-X "github.com/cosmos/cosmos-sdk/version.BuildTags=$BUILD_TAGS" \
-X github.com/cosmos/cosmos-sdk/version.Commit=$COMMIT"
# Build daemon lib
go build -v -mod=readonly -tags "$BUILD_TAGS" -ldflags "$COMMON_LDFLAGS" -buildmode=c-shared -o build/libagcosmosdaemon.so ./cmd/libdaemon/main.go
# Build helper
LDFLAGS_HELPER="$COMMON_LDFLAGS -X github.com/cosmos/cosmos-sdk/version.AppName=ag-cosmos-helper"
go build -v -mod=readonly -tags "$BUILD_TAGS" -ldflags "$LDFLAGS_HELPER" -o ../../bin/ag-cosmos-helper ./cmd/helper
# Build agd
go build -v -mod=readonly -tags "$BUILD_TAGS" -ldflags "$COMMON_LDFLAGS" -o ../../bin/agd ./cmd/agd
# Build node deps
make node-compile-gyp
cd ../../packages
rm -rf ui-components web-components wallet-connection wallet web-components
cd ..
npm i -g yarn
yarn
yarn build
# Move to final location
mkdir /agoric-sdk
mv packages node_modules bin golang /agoric-sdk
directories:
- /agoric-sdk
- /root/.nvm/versions/node
libraries:
- /agoric-sdk/golang/cosmos/build/libagcosmosdaemon.so
target-libraries:
- /lib/${ARCH}-linux-gnu/libdl.so.2
- /lib/${ARCH}-linux-gnu/libm.so.6
- /usr/lib/${ARCH}-linux-gnu/libstdc++.so.6
- /usr/lib/gcc/${ARCH}-linux-gnu/10/libgcc_s.so
- /lib/${ARCH}-linux-gnu/libgcc_s.so.1
final-image: |
set -eux
ln -s /agoric-sdk/bin/agd /bin/agd
ln -s /agoric-sdk/bin/ag-cosmos-helper /bin/ag-cosmos-helper
ln -s /agoric-sdk/packages/cosmic-swingset/bin/ag-chain-cosmos /bin/ag-chain-cosmos
ln -s /agoric-sdk/packages/cosmic-swingset/bin/ag-nchainz /bin/ag-nchainz
mkdir -p /go/src/github.com/strangelove-ventures/agoric-sdk/golang/cosmos/build /build/agoric-sdk/golang/cosmos/build
mv /agoric-sdk/golang/cosmos/build/libagcosmosdaemon.so /go/src/github.com/strangelove-ventures/agoric-sdk/golang/cosmos/build/
ln -s /go/src/github.com/strangelove-ventures/agoric-sdk/golang/cosmos/build/libagcosmosdaemon.so /build/agoric-sdk/golang/cosmos/build/libagcosmosdaemon.so
ln -s /root/.nvm/versions/node/*/bin/node /bin/node
# Akash
- name: akash
Expand Down
31 changes: 31 additions & 0 deletions dockerfile/cargo/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,19 @@ RUN bash -c 'set -eux;\
fi;\
done'

# Copy over directories
RUN mkdir -p /root/dir_abs && touch /root/dir_abs.list
ARG DIRECTORIES
ENV DIRECTORIES_ENV ${DIRECTORIES}
RUN bash -c 'set -eux;\
DIRECTORIES_ARR=($DIRECTORIES_ENV);\
i=0;\
for DIRECTORY in "${DIRECTORIES_ARR[@]}"; do \
cp -R $DIRECTORY /root/dir_abs/$i;\
echo $DIRECTORY >> /root/dir_abs.list;\
((i = i + 1));\
done'

# Build final image from scratch
FROM scratch

Expand Down Expand Up @@ -266,6 +279,24 @@ RUN sh -c 'i=0; while read FILE; do\
i=$((i+1));\
done < /root/lib_abs.list'

# Copy over absolute path directories
COPY --from=build-env /root/dir_abs /root/dir_abs
COPY --from=build-env /root/dir_abs.list /root/dir_abs.list

# Move absolute path directories to their absolute locations.
RUN sh -c 'i=0; while read DIR; do\
echo "$i: $DIR";\
PLACEDIR="$(dirname "$DIR")";\
mkdir -p "$PLACEDIR";\
mv /root/dir_abs/$i $DIR;\
i=$((i+1));\
done < /root/dir_abs.list'

RUN mkdir -p /usr/bin && ln -s /bin/env /usr/bin/env

ARG FINAL_IMAGE
RUN if [ ! -z "$FINAL_IMAGE" ]; then sh -c "$FINAL_IMAGE"; fi

# Remove write utils used to construct image and tmp dir/file for lib copy.
RUN rm -rf ln rm mv mkdir dirname /root/lib_abs /root/lib_abs.list

Expand Down
31 changes: 31 additions & 0 deletions dockerfile/cargo/native.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,19 @@ RUN bash -c 'set -eux;\
fi;\
done'

# Copy over directories
RUN mkdir -p /root/dir_abs && touch /root/dir_abs.list
ARG DIRECTORIES
ENV DIRECTORIES_ENV ${DIRECTORIES}
RUN bash -c 'set -eux;\
DIRECTORIES_ARR=($DIRECTORIES_ENV);\
i=0;\
for DIRECTORY in "${DIRECTORIES_ARR[@]}"; do \
cp -R $DIRECTORY /root/dir_abs/$i;\
echo $DIRECTORY >> /root/dir_abs.list;\
((i = i + 1));\
done'

# Use minimal busybox from infra-toolkit image for final scratch image
FROM ghcr.io/strangelove-ventures/infra-toolkit:v0.0.7 AS infra-toolkit
RUN addgroup --gid 1025 -S heighliner && adduser --uid 1025 -S heighliner -G heighliner
Expand Down Expand Up @@ -216,6 +229,24 @@ RUN sh -c 'i=0; while read FILE; do\
i=$((i+1));\
done < /root/lib_abs.list'

# Copy over absolute path directories
COPY --from=build-env /root/dir_abs /root/dir_abs
COPY --from=build-env /root/dir_abs.list /root/dir_abs.list

# Move absolute path directories to their absolute locations.
RUN sh -c 'i=0; while read DIR; do\
echo "$i: $DIR";\
PLACEDIR="$(dirname "$DIR")";\
mkdir -p "$PLACEDIR";\
mv /root/dir_abs/$i $DIR;\
i=$((i+1));\
done < /root/dir_abs.list'

RUN mkdir -p /usr/bin && ln -s /bin/env /usr/bin/env

ARG FINAL_IMAGE
RUN if [ ! -z "$FINAL_IMAGE" ]; then sh -c "$FINAL_IMAGE"; fi

# Remove write utils used to construct image and tmp dir/file for lib copy.
RUN rm -rf ln rm mv mkdir dirname /root/lib_abs /root/lib_abs.list

Expand Down

0 comments on commit 3564b45

Please sign in to comment.