-
Notifications
You must be signed in to change notification settings - Fork 44
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Co-authored-by: Dmitry Holodov <[email protected]>
- Loading branch information
Showing
11 changed files
with
198 additions
and
41 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
FROM golang:1.20 as builder | ||
|
||
# Download monero-wallet-rpc. We need bzip2 to unpack the tar file. | ||
RUN apt update && apt install -y bzip2 | ||
RUN arch=$(uname -m | sed 's/x86_64/linux64/; s/aarch64/linuxarm8/') && \ | ||
curl -sSL "https://downloads.getmonero.org/cli/${arch}" -o monero.tar.bz2 | ||
RUN tar xvjf monero.tar.bz2 --no-anchored monero-wallet-rpc --strip-components=1 | ||
|
||
# Build the swapd and swapcli binaries. The BRANCH argument can be set to a | ||
# branch, release tag, "latest", or a commit hash. | ||
ARG VERSION=master | ||
RUN go install -tags=prod \ | ||
github.com/athanorlabs/atomic-swap/cmd/swapd@"${VERSION}" \ | ||
github.com/athanorlabs/atomic-swap/cmd/swapcli@"${VERSION}" | ||
RUN /go/bin/swapd --version | ||
|
||
FROM debian:bullseye-slim | ||
RUN apt-get update && apt-get install -y ca-certificates gosu | ||
|
||
# /usr/local/bin has swapd, swapcli, monero-wallet-rpc and | ||
# docker-entrypoint.sh. | ||
COPY --from=builder /go/monero-wallet-rpc /usr/local/bin/ | ||
COPY --from=builder /go/bin/ /usr/local/bin/ | ||
COPY ./docker-entrypoint.sh /usr/local/bin/ | ||
|
||
VOLUME /data | ||
|
||
# USER_UID and USER_GID are defined as ARGs so that, if desired, you can | ||
# build the container with a UID equal to some user outside the container | ||
# that will own the files in /data. | ||
ARG USER_UID=1000 | ||
ARG USER_GID=$USER_UID | ||
RUN groupadd --gid "${USER_GID}" atomic && \ | ||
useradd --no-log-init --home-dir /atomic-swap \ | ||
--uid "${USER_UID}" --gid "${USER_GID}" -m atomic && \ | ||
ln -s /data /atomic-swap/.atomicswap | ||
|
||
# 9900 the default p2p port. swapd also listens to swapcli on 127.0.0.1:5000, | ||
# which is not accessible outside the container by default. You have 2 options | ||
# to interact with this RPC port: | ||
# (1) Use swapcli inside the container:: | ||
# $ docker exec CONTAINER_NAME_OR_ID swapcli SUBCOMMAND ... | ||
# (2) Run the container with --network=host so 127.0.0.1:5000 is the same | ||
# port inside and outside of the container. | ||
EXPOSE 9900/udp | ||
EXPOSE 9900/tcp | ||
|
||
# The swapd environment (dev, stagenet, mainnet) can be convigured via the | ||
# SWAPD_ENV environment variable or using swapd's --env flag (which takes | ||
# precidence). In docker, we use the environment variable to configure file | ||
# permissions of the correct directory in the data volume. The suggested | ||
# ways of working with this are: | ||
# (1) Set SWAPD_ENV variable and don't use the CLI flag | ||
# (2) Use swapd's --env=ENVIRONMENT CLI flag, but set SWAPD_ENV to the | ||
# identical environment or the empty string. | ||
ENV SWAPD_ENV=stagenet | ||
ENV SWAPD_ETH_ENDPOINT=https://rpc.sepolia.org/ | ||
ENV SWAPD_LOG_LEVEL=info | ||
|
||
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] | ||
CMD ["swapd"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
#!/usr/bin/env bash | ||
set -e | ||
|
||
IMAGE_NAME=atomic-swap | ||
|
||
# VERSION can be "latest", a release tag, a hash or a branch name that does not contain slashes. | ||
# It must exist on github, local changes are not visible inside the container. | ||
VERSION=master | ||
|
||
# Run docker build from the directory of this script | ||
cd "$(dirname "$0")" | ||
|
||
docker build \ | ||
--build-arg "VERSION=${VERSION}" \ | ||
--build-arg "USER_UID=$(id -u)" \ | ||
--build-arg "USER_GID=$(id -g)" \ | ||
. -t "${IMAGE_NAME}:${VERSION}" | ||
|
||
echo "built ${IMAGE_NAME}:${VERSION}" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
#!/bin/bash | ||
|
||
set -e | ||
|
||
cmd="$(basename "${1}")" | ||
|
||
# | ||
# If we are running swapd and SWAPD_ENV is set, so this script | ||
# knows where swapd will be writing data, we ensure that the | ||
# atomic user that runs swapd has access the directories where | ||
# the data is written. | ||
# | ||
if [[ "${cmd}" == 'swapd' ]] && [[ -n "${SWAPD_ENV}" ]]; then | ||
|
||
if ! [[ "${SWAPD_ENV}" =~ ^dev|stagenet|mainnet$ ]]; then | ||
echo "invalid SWAPD_ENV value" | ||
exit 1 | ||
fi | ||
|
||
if [[ "${*}:1}" =~ '--data-dir' ]]; then | ||
echo "Setting --data-dir is not recommended for dockerized swapd." | ||
echo "If required, unset SWAPD_ENV or override the entrypoint." | ||
exit 1 | ||
fi | ||
|
||
data_dir="/data/${SWAPD_ENV}" | ||
|
||
# create the directory if it does not exist | ||
if [[ ! -d "${data_dir}" ]]; then | ||
mkdir --mode=700 "${data_dir}" | ||
fi | ||
|
||
# ensure the files are owned by the atomic user | ||
chown -R atomic.atomic "${data_dir}" | ||
fi | ||
|
||
# Run swapd and swapcli commands as the atomic user for reduced | ||
# privileges. | ||
if [[ "${cmd}" == 'swapd' || "${cmd}" == 'swacli' ]]; then | ||
exec gosu atomic "$@" | ||
fi | ||
|
||
exec "$@" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
#!/usr/bin/env bash | ||
set -ex | ||
|
||
CONTAINER_NAME=atomic-stagenet | ||
IMAGE_NAME=atomic-swap | ||
TAG=master | ||
|
||
# Setting NETWORK to "host" allows you to run swapcli commands on the local | ||
# host. You can also use "bridge", which requires all swapcli commands to | ||
# be run from inside the container. | ||
NETWORK=host | ||
|
||
# Note: We mount one directory above what swapd considers its "data-dir". | ||
DATA_MOUNT_DIR="${HOME}/.atomicswap/docker" | ||
|
||
# Pre-create the mounted directory, or docker will create it with root | ||
# as the owner. | ||
mkdir -p "${DATA_MOUNT_DIR}" | ||
|
||
docker run --rm -v "${DATA_MOUNT_DIR}:/data" \ | ||
--env SWAPD_ENV=stagenet \ | ||
--env SWAPD_ETH_ENDPOINT="https://rpc.sepolia.org/" \ | ||
--env SWAPD_LOG_LEVEL=debug \ | ||
--network="${NETWORK}" \ | ||
--name="${CONTAINER_NAME}" \ | ||
"${IMAGE_NAME}:${TAG}" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters