Skip to content

Commit 0c76d2f

Browse files
committed
chore: preserve inodes in docker-entrypoint to support direct file mounts
1 parent d096ac1 commit 0c76d2f

1 file changed

Lines changed: 16 additions & 6 deletions

File tree

couchdb/docker-entrypoint.sh

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ setSecret() {
4040
fi
4141

4242
if ! sed -n '/^\s*\[\s*couch_httpd_auth\s*\]\s*$/,/^\s*\[/p' "$CLUSTER_CREDENTIALS" | grep -q '^\s*secret\s*='; then
43-
sed -i "/^\s*\[\s*couch_httpd_auth\s*\]\s*$/a secret = $COUCHDB_SECRET" "$CLUSTER_CREDENTIALS"
43+
sed "/^\s*\[\s*couch_httpd_auth\s*\]\s*$/a secret = $COUCHDB_SECRET" "$CLUSTER_CREDENTIALS" > "${CLUSTER_CREDENTIALS}.tmp"
44+
cp "${CLUSTER_CREDENTIALS}.tmp" "$CLUSTER_CREDENTIALS"
45+
rm "${CLUSTER_CREDENTIALS}.tmp"
4446
fi
4547
}
4648

@@ -54,7 +56,9 @@ setUuid() {
5456
fi
5557

5658
if ! sed -n '/^\s*\[\s*couchdb\s*\]\s*$/,/^\s*\[/p' "$CLUSTER_CREDENTIALS" | grep -q '^\s*uuid\s*='; then
57-
sed -i "/^\s*\[\s*couchdb\s*\]\s*$/a uuid = $COUCHDB_UUID" "$CLUSTER_CREDENTIALS"
59+
sed "/^\s*\[\s*couchdb\s*\]\s*$/a uuid = $COUCHDB_UUID" "$CLUSTER_CREDENTIALS" > "${CLUSTER_CREDENTIALS}.tmp"
60+
cp "${CLUSTER_CREDENTIALS}.tmp" "$CLUSTER_CREDENTIALS"
61+
rm "${CLUSTER_CREDENTIALS}.tmp"
5862
fi
5963
}
6064

@@ -98,15 +102,18 @@ if [ "$1" = '/opt/couchdb/bin/couchdb' ]; then
98102
export ADMIN_CREDS_LINE
99103
awk '/^\s*\[\s*admins\s*\]\s*$/{print; print ENVIRON["ADMIN_CREDS_LINE"]; next}1' \
100104
"$CLUSTER_CREDENTIALS" > "${CLUSTER_CREDENTIALS}.tmp" \
101-
&& mv "${CLUSTER_CREDENTIALS}.tmp" "$CLUSTER_CREDENTIALS"
105+
&& cp "${CLUSTER_CREDENTIALS}.tmp" "$CLUSTER_CREDENTIALS" \
106+
&& rm "${CLUSTER_CREDENTIALS}.tmp"
102107
fi
103108
fi
104109

105110
if [ "$SVC_NAME" ] && [ "$IS_CLUSTER" = true ]; then
106111
# Since changing this name after it has been set can mess up clustering, this can only run once so a new service name can not be set on subsequent runs
107112
# Should only run when creating a cluster
108113
if grep "127.0.0.1" /opt/couchdb/etc/vm.args; then
109-
sed -i "s/127.0.0.1/$SVC_NAME/" "/opt/couchdb/etc/vm.args"
114+
sed "s/127.0.0.1/$SVC_NAME/" "/opt/couchdb/etc/vm.args" > "/opt/couchdb/etc/vm.args.tmp"
115+
cp "/opt/couchdb/etc/vm.args.tmp" "/opt/couchdb/etc/vm.args"
116+
rm "/opt/couchdb/etc/vm.args.tmp"
110117
fi
111118
fi
112119

@@ -117,7 +124,9 @@ if [ "$1" = '/opt/couchdb/bin/couchdb' ]; then
117124
fi
118125

119126
# Always set the log level (remove old value first, then insert)
120-
sed -i -e '/^\s*level\s*=.*/d' -e "/^\s*\[\s*log\s*\]\s*$/a level = $COUCHDB_LOG_LEVEL" "$CLUSTER_CREDENTIALS"
127+
sed -e '/^\s*level\s*=.*/d' -e "/^\s*\[\s*log\s*\]\s*$/a level = $COUCHDB_LOG_LEVEL" "$CLUSTER_CREDENTIALS" > "${CLUSTER_CREDENTIALS}.tmp"
128+
cp "${CLUSTER_CREDENTIALS}.tmp" "$CLUSTER_CREDENTIALS"
129+
rm "${CLUSTER_CREDENTIALS}.tmp"
121130
fi
122131

123132
if [ "$CLUSTER_PEER_IPS" ] || [ "$IS_CLUSTER" = false ]; then
@@ -145,7 +154,8 @@ if [ "$1" = '/opt/couchdb/bin/couchdb' ]; then
145154
in_admins && $0 ~ "^\\s*" user "\\s*=" { next }
146155
1
147156
' "$CLUSTER_CREDENTIALS" > "${CLUSTER_CREDENTIALS}.tmp" \
148-
&& mv "${CLUSTER_CREDENTIALS}.tmp" "$CLUSTER_CREDENTIALS"
157+
&& cp "${CLUSTER_CREDENTIALS}.tmp" "$CLUSTER_CREDENTIALS" \
158+
&& rm "${CLUSTER_CREDENTIALS}.tmp"
149159

150160
COUCHDB_SECRET=$(curl -u "$COUCHDB_USER:$COUCHDB_PASSWORD" "http://$COUCHDB_SYNC_ADMINS_NODE:5984/_node/couchdb@$COUCHDB_SYNC_ADMINS_NODE/_config/couch_httpd_auth/secret" | sed "s/^\([\"]\)\(.*\)\1\$/\2/g")
151161
setSecret

0 commit comments

Comments
 (0)