From d82122de24ed0673d57db581d45913b0422947f0 Mon Sep 17 00:00:00 2001 From: Marcin Grzybowski <96848691+GrzybowskiBYD@users.noreply.github.com> Date: Mon, 6 Oct 2025 15:11:59 +0200 Subject: [PATCH 1/3] Update couchdb-init.sh Fixed the {"error":"nodedown","reason":"nonode@nohost is down"} issue --- utils/couchdb/couchdb-init.sh | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/utils/couchdb/couchdb-init.sh b/utils/couchdb/couchdb-init.sh index a18fa03..0f6e3e9 100755 --- a/utils/couchdb/couchdb-init.sh +++ b/utils/couchdb/couchdb-init.sh @@ -12,18 +12,22 @@ if [[ -z "$password" ]]; then echo "ERROR: Password missing" exit 1 fi +if [[ -z "$node" ]]; then + echo "ERROR: Node missing (default should be located in /opt/couchdb/etc/vm.args under -name)" + exit 1 +fi echo "-- Configuring CouchDB by REST APIs... -->" until (curl -X POST "${hostname}/_cluster_setup" -H "Content-Type: application/json" -d "{\"action\":\"enable_single_node\",\"username\":\"${username}\",\"password\":\"${password}\",\"bind_address\":\"0.0.0.0\",\"port\":5984,\"singlenode\":true}" --user "${username}:${password}"); do sleep 5; done -until (curl -X PUT "${hostname}/_node/nonode@nohost/_config/chttpd/require_valid_user" -H "Content-Type: application/json" -d '"true"' --user "${username}:${password}"); do sleep 5; done -until (curl -X PUT "${hostname}/_node/nonode@nohost/_config/chttpd_auth/require_valid_user" -H "Content-Type: application/json" -d '"true"' --user "${username}:${password}"); do sleep 5; done -until (curl -X PUT "${hostname}/_node/nonode@nohost/_config/httpd/WWW-Authenticate" -H "Content-Type: application/json" -d '"Basic realm=\"couchdb\""' --user "${username}:${password}"); do sleep 5; done -until (curl -X PUT "${hostname}/_node/nonode@nohost/_config/httpd/enable_cors" -H "Content-Type: application/json" -d '"true"' --user "${username}:${password}"); do sleep 5; done -until (curl -X PUT "${hostname}/_node/nonode@nohost/_config/chttpd/enable_cors" -H "Content-Type: application/json" -d '"true"' --user "${username}:${password}"); do sleep 5; done -until (curl -X PUT "${hostname}/_node/nonode@nohost/_config/chttpd/max_http_request_size" -H "Content-Type: application/json" -d '"4294967296"' --user "${username}:${password}"); do sleep 5; done -until (curl -X PUT "${hostname}/_node/nonode@nohost/_config/couchdb/max_document_size" -H "Content-Type: application/json" -d '"50000000"' --user "${username}:${password}"); do sleep 5; done -until (curl -X PUT "${hostname}/_node/nonode@nohost/_config/cors/credentials" -H "Content-Type: application/json" -d '"true"' --user "${username}:${password}"); do sleep 5; done -until (curl -X PUT "${hostname}/_node/nonode@nohost/_config/cors/origins" -H "Content-Type: application/json" -d '"app://obsidian.md,capacitor://localhost,http://localhost"' --user "${username}:${password}"); do sleep 5; done +until (curl -X PUT "${hostname}/_node/${node}/_config/chttpd/require_valid_user" -H "Content-Type: application/json" -d '"true"' --user "${username}:${password}"); do sleep 5; done +until (curl -X PUT "${hostname}/_node/${node}/_config/chttpd_auth/require_valid_user" -H "Content-Type: application/json" -d '"true"' --user "${username}:${password}"); do sleep 5; done +until (curl -X PUT "${hostname}/_node/${node}/_config/httpd/WWW-Authenticate" -H "Content-Type: application/json" -d '"Basic realm=\"couchdb\""' --user "${username}:${password}"); do sleep 5; done +until (curl -X PUT "${hostname}/_node/${node}/_config/httpd/enable_cors" -H "Content-Type: application/json" -d '"true"' --user "${username}:${password}"); do sleep 5; done +until (curl -X PUT "${hostname}/_node/${node}/_config/chttpd/enable_cors" -H "Content-Type: application/json" -d '"true"' --user "${username}:${password}"); do sleep 5; done +until (curl -X PUT "${hostname}/_node/${node}/_config/chttpd/max_http_request_size" -H "Content-Type: application/json" -d '"4294967296"' --user "${username}:${password}"); do sleep 5; done +until (curl -X PUT "${hostname}/_node/${node}/_config/couchdb/max_document_size" -H "Content-Type: application/json" -d '"50000000"' --user "${username}:${password}"); do sleep 5; done +until (curl -X PUT "${hostname}/_node/${node}/_config/cors/credentials" -H "Content-Type: application/json" -d '"true"' --user "${username}:${password}"); do sleep 5; done +until (curl -X PUT "${hostname}/_node/${node}/_config/cors/origins" -H "Content-Type: application/json" -d '"app://obsidian.md,capacitor://localhost,http://localhost"' --user "${username}:${password}"); do sleep 5; done -echo "<-- Configuring CouchDB by REST APIs Done!" \ No newline at end of file +echo "<-- Configuring CouchDB by REST APIs Done!" From 294ebf0c31769efa7818372adf9f61b7a7f354bd Mon Sep 17 00:00:00 2001 From: vorotamoroz Date: Thu, 30 Oct 2025 13:24:01 +0900 Subject: [PATCH 2/3] Add automatic node detection --- utils/couchdb/couchdb-init.sh | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/utils/couchdb/couchdb-init.sh b/utils/couchdb/couchdb-init.sh index 0f6e3e9..92f5b1d 100755 --- a/utils/couchdb/couchdb-init.sh +++ b/utils/couchdb/couchdb-init.sh @@ -13,8 +13,23 @@ if [[ -z "$password" ]]; then exit 1 fi if [[ -z "$node" ]]; then - echo "ERROR: Node missing (default should be located in /opt/couchdb/etc/vm.args under -name)" - exit 1 + echo "INFO: Node missing, trying to detect..." + node=$(curl -X GET "${hostname}/_membership" --user "${username}:${password}" | jq -r '.cluster_nodes[0] // .all_nodes[0]') + if [[ -n "$node" ]]; then + echo "INFO: Detected node: $node" + # confirm + while true; do + read -p "May we use this node? (defaultly, it may be 'node@nohost') " yn + case $yn in + [Yy]* ) break;; + [Nn]* ) exit 1;; + * ) echo "Please answer yes or no.";; + esac + done + else + echo "ERROR: Node missing (default should be located in /opt/couchdb/etc/vm.args under -name)" + exit 1 + fi fi echo "-- Configuring CouchDB by REST APIs... -->" From 41a112cd8a97362ed8840de98b15d232adf2dd26 Mon Sep 17 00:00:00 2001 From: shyelc Date: Thu, 30 Oct 2025 07:27:52 +0000 Subject: [PATCH 3/3] Default to _local when node not supplied --- utils/couchdb/couchdb-init.sh | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/utils/couchdb/couchdb-init.sh b/utils/couchdb/couchdb-init.sh index 92f5b1d..323c13f 100755 --- a/utils/couchdb/couchdb-init.sh +++ b/utils/couchdb/couchdb-init.sh @@ -13,23 +13,8 @@ if [[ -z "$password" ]]; then exit 1 fi if [[ -z "$node" ]]; then - echo "INFO: Node missing, trying to detect..." - node=$(curl -X GET "${hostname}/_membership" --user "${username}:${password}" | jq -r '.cluster_nodes[0] // .all_nodes[0]') - if [[ -n "$node" ]]; then - echo "INFO: Detected node: $node" - # confirm - while true; do - read -p "May we use this node? (defaultly, it may be 'node@nohost') " yn - case $yn in - [Yy]* ) break;; - [Nn]* ) exit 1;; - * ) echo "Please answer yes or no.";; - esac - done - else - echo "ERROR: Node missing (default should be located in /opt/couchdb/etc/vm.args under -name)" - exit 1 - fi + echo "INFO: defaulting to _local" + node=_local fi echo "-- Configuring CouchDB by REST APIs... -->"