From 3deec73c9762cac62e2d7b3f4d7972c819f736cc Mon Sep 17 00:00:00 2001 From: "Wonyong Kim(Ryan Kim)" Date: Tue, 11 Apr 2023 20:44:09 +0900 Subject: [PATCH] chore: support debugging by attaching devnet process This commit helps user to debug a process which is run by docker compose. Currently, this only works on Linux. There should be another way for macOS users. Resolves: #11 --- .vscode/launch.json | 22 ++++++++++++++++++++++ Dockerfile | 31 +++++++++++++++++++++++++++---- ops-devnet/docker-compose.yml | 7 +++++++ specs/assets/vscode_debug.png | Bin 0 -> 51305 bytes specs/meta/devnet.md | 15 +++++++++++++++ 5 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 specs/assets/vscode_debug.png diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000000..de314f0c84 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,22 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Attach to devnet process", + "type": "go", + "request": "attach", + "mode": "local", + "processId": "${command:pickGoProcess}", + "substitutePath": [ + { + "from":"${workspaceFolder}", + "to": "/app" + }, + { + "from": "${env:GOPATH}", + "to": "/go" + } + ] + }, + ] +} diff --git a/Dockerfile b/Dockerfile index 7ba1524e1d..d521e0435e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,22 +13,45 @@ COPY ./.git /app/.git WORKDIR /app RUN make build +FROM alpine:3.17 as runner + +RUN addgroup user && \ + adduser -G user -s /bin/sh -h /home/user -D user + +USER user +WORKDIR /home/user/ + +FROM alpine:3.17 as runner-with-kanvas-log + +RUN addgroup user && \ + adduser -G user -s /bin/sh -h /home/user -D user + +RUN mkdir /kanvas_log/ && \ + chown user:user /kanvas_log + +USER user +WORKDIR /home/user/ + # Node -FROM alpine:3.17 as kanvas-node +FROM runner-with-kanvas-log as kanvas-node COPY --from=builder /app/bin/kanvas-node /usr/local/bin + ENTRYPOINT ["kanvas-node"] # Stateviz -FROM alpine:3.17 as kanvas-stateviz +FROM runner-with-kanvas-log as kanvas-stateviz COPY --from=builder /app/bin/kanvas-stateviz /usr/local/bin + CMD ["kanvas-stateviz"] # Batcher -FROM alpine:3.17 as kanvas-batcher +FROM runner as kanvas-batcher COPY --from=builder /app/bin/kanvas-batcher /usr/local/bin + ENTRYPOINT ["kanvas-batcher"] # Validator -FROM alpine:3.17 as kanvas-validator +FROM runner as kanvas-validator COPY --from=builder /app/bin/kanvas-validator /usr/local/bin + ENTRYPOINT ["kanvas-validator"] diff --git a/ops-devnet/docker-compose.yml b/ops-devnet/docker-compose.yml index 7ac09cdbd8..ec3242efe8 100644 --- a/ops-devnet/docker-compose.yml +++ b/ops-devnet/docker-compose.yml @@ -12,6 +12,7 @@ volumes: services: l1: + pid: host # allow debugging image: ethereum/client-go:v1.10.22 ports: - "8545:8545" @@ -28,6 +29,7 @@ services: - "/entrypoint.sh" l2: + pid: host # allow debugging image: wemixkanvas/geth:dev-6ec404a78abc ports: - "9545:8545" @@ -45,6 +47,7 @@ services: - "--authrpc.jwtsecret=/config/test-jwt-secret.txt" kanvas-node: + pid: host # allow debugging depends_on: - l1 - l2 @@ -86,6 +89,7 @@ services: - kanvas_log:/kanvas_log kanvas-validator: + pid: host # allow debugging depends_on: - l1 - l2 @@ -115,6 +119,7 @@ services: VALIDATOR_CHALLENGER_DISABLED: "true" kanvas-challenger: + pid: host # allow debugging depends_on: - l1 - l2 @@ -138,6 +143,7 @@ services: VALIDATOR_OUTPUT_SUBMITTER_DISABLED: "true" kanvas-batcher: + pid: host # allow debugging depends_on: - l1 - l2 @@ -169,6 +175,7 @@ services: BATCHER_METRICS_ENABLED: "true" stateviz: + pid: host # allow debugging build: context: .. target: "kanvas-stateviz" diff --git a/specs/assets/vscode_debug.png b/specs/assets/vscode_debug.png new file mode 100644 index 0000000000000000000000000000000000000000..38b3c1daffbe6f5dfa4b3c7d613ce1ab32c37eac GIT binary patch literal 51305 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 @@ -51,3 +52,17 @@ The batch submitter uses the account below to submit batches to L1: - Address: `0xde3829a23df1479438622a08a116e8eb3f620bb5` - Private key: `bf7604d9d3a1c7748642b1b7b05c2bd219c9faa91458b370f85e5a40f3b03af7` + +## Debugging VS Code + +We added a debugging configuration called 'Attach to devnet process' to .vscode/launch.json. Therefore, on Linux, you +can use VS Code to attach to the devnet process and perform debugging as shown in the figure below. + +![vscode_debug](../asset/../assets/vscode_debug.png) + +You might need to disable linux ptrace protection. + +```shell +> sudo su +> echo 0 > /proc/sys/kernel/yama/ptrace_scope +```