From 76a8dbf46cfa99d0ee7be4c34dba6733638354d4 Mon Sep 17 00:00:00 2001
From: Hugo Trentesaux <hugo.trentesaux@lilo.org>
Date: Wed, 15 Jan 2025 15:55:18 +0100
Subject: [PATCH] Resolve "Generate key command is missing chain argument"
 (nodes/rust/duniter-v2s!309)

* uppercase

* add chain arg to generate key command
---
 docker/Dockerfile        |  4 ++--
 docker/docker-entrypoint | 35 ++++++++++++++++++++++++-----------
 2 files changed, 26 insertions(+), 13 deletions(-)

diff --git a/docker/Dockerfile b/docker/Dockerfile
index de4215ee0..f0336f5f1 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -1,5 +1,5 @@
 # Workaround for https://github.com/containers/buildah/issues/4742
-FROM debian:bullseye-slim as target
+FROM debian:bullseye-slim AS target
 
 # ------------------------------------------------------------------------------
 # Build Stage
@@ -7,7 +7,7 @@ FROM debian:bullseye-slim as target
 
 # When building for a foreign arch, use cross-compilation
 # https://www.docker.com/blog/faster-multi-platform-builds-dockerfile-cross-compilation-guide/
-FROM --platform=$BUILDPLATFORM rust:1-bullseye as build
+FROM --platform=$BUILDPLATFORM rust:1-bullseye AS build
 ARG BUILDPLATFORM
 ARG TARGETPLATFORM
 
diff --git a/docker/docker-entrypoint b/docker/docker-entrypoint
index 16b0952aa..3666aad0e 100755
--- a/docker/docker-entrypoint
+++ b/docker/docker-entrypoint
@@ -21,27 +21,45 @@ function ternary () {
   fi
 }
 
+# Define chain name at the beginning
+# with #274 we could have default given in network branch
+DUNITER_CHAIN_NAME="${DUNITER_CHAIN_NAME:-dev}"
+case "$DUNITER_CHAIN_NAME" in
+  dev)
+    chain=(--dev)
+    ;;
+  *)
+    chain=(--chain "$DUNITER_CHAIN_NAME")
+    ;;
+esac
+
+# Node name will appear on network
 DUNITER_NODE_NAME="${DUNITER_NODE_NAME:-$DUNITER_INSTANCE_NAME}"
 if [ -n "$DUNITER_NODE_NAME" ]; then
   set -- "$@" --name "$DUNITER_NODE_NAME"
 fi
 
+# Path of key file. Should be generated below if not present before starting Duniter
 _DUNITER_KEY_FILE=/var/lib/duniter/node.key
 set -- "$@" --node-key-file "$_DUNITER_KEY_FILE"
 
+# Generate node.key if not existing (chain name is required)
 if [ ! -f "$_DUNITER_KEY_FILE" ]; then
   echo "Generating node key file '$_DUNITER_KEY_FILE'..."
-  duniter key generate-node-key --file "$_DUNITER_KEY_FILE"
+  duniter key generate-node-key --file "$_DUNITER_KEY_FILE" "${chain[@]}"
 else
   echo "Node key file '$_DUNITER_KEY_FILE' exists."
 fi
+# Log peer ID
 _DUNITER_PEER_ID="$(duniter key inspect-node-key --file "$_DUNITER_KEY_FILE")"
 echo "Node peer ID is '$_DUNITER_PEER_ID'."
 
+# Define public address (with dns, correct port and protocol for instance)
 if [ -n "$DUNITER_PUBLIC_ADDR" ]; then
   set -- "$@" --public-addr "$DUNITER_PUBLIC_ADDR"
 fi
 
+# Define listen address (inside docker)
 if [ -n "$DUNITER_LISTEN_ADDR" ]; then
   set -- "$@" --listen-addr "$DUNITER_LISTEN_ADDR"
 fi
@@ -49,6 +67,7 @@ fi
 DUNITER_RPC_CORS="${DUNITER_RPC_CORS:-all}"
 set -- "$@" --rpc-cors "$DUNITER_RPC_CORS"
 
+# In case of validator, unsafe rpc methods are needed (like rotate_key) and should not be exposed publicly
 DUNITER_VALIDATOR=$(boolean "${DUNITER_VALIDATOR:-false}")
 if [ "$DUNITER_VALIDATOR" = true ]; then
   set -- "$@" --rpc-methods Unsafe --validator
@@ -64,6 +83,7 @@ if [ "$DUNITER_DISABLE_TELEMETRY" = true ]; then
   set -- "$@" --no-telemetry
 fi
 
+# Set pruning profile
 DUNITER_PRUNING_PROFILE="${DUNITER_PRUNING_PROFILE:-default}"
 case "$DUNITER_PRUNING_PROFILE" in
   default)
@@ -79,16 +99,9 @@ case "$DUNITER_PRUNING_PROFILE" in
     ;;
 esac
 
-DUNITER_CHAIN_NAME="${DUNITER_CHAIN_NAME:-dev}"
-case "$DUNITER_CHAIN_NAME" in
-  dev)
-    chain=(--dev)
-    ;;
-  *)
-    chain=(--chain "$DUNITER_CHAIN_NAME")
-    ;;
-esac
-
+# Set main command
+# Since we are inside docker, we can bind to all interfaces.
+# User will bind port to host interface or set reverse proxy when needed.
 set -- "$@" \
   "${chain[@]}" \
   -d /var/lib/duniter --unsafe-rpc-external
-- 
GitLab