mycelium / scripts /build_blank_bootstrap.sh
alm108's picture
Add verified blank-instance schema bootstrap
2a2189c
Raw History Blame Contribute Delete
1.5 kB
#!/bin/sh
set -eu
EXPECTED_SOURCE_SHA256='4b207d8cb071a136c10cd779fab9ffcf846a1618a87d076bdfd7dc5dfa14438c'
if [ "$#" -ne 2 ]; then
echo "usage: $0 SOURCE_DUMP OUTPUT_SQL" >&2
exit 64
fi
source_dump=$1
output_sql=$2
script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
if [ ! -f "$source_dump" ]; then
echo "source dump does not exist: $source_dump" >&2
exit 66
fi
actual_source_sha256=$(shasum -a 256 "$source_dump" | awk '{print $1}')
if [ "$actual_source_sha256" != "$EXPECTED_SOURCE_SHA256" ]; then
echo "source dump SHA-256 mismatch" >&2
echo "expected: $EXPECTED_SOURCE_SHA256" >&2
echo "actual: $actual_source_sha256" >&2
exit 65
fi
output_dir=$(dirname -- "$output_sql")
mkdir -p "$output_dir"
temporary_output=$(mktemp "${output_sql}.tmp.XXXXXX")
trap 'rm -f "$temporary_output"' EXIT HUP INT TERM
awk -f "$script_dir/sanitize_blank_bootstrap.awk" "$source_dump" > "$temporary_output"
if grep -Eq '^(COPY |INSERT INTO |SELECT pg_catalog\.setval\(|ALTER .* OWNER TO |GRANT |REVOKE |\\(un)?restrict )' "$temporary_output"; then
echo "sanitized bootstrap still contains a forbidden data/environment statement" >&2
exit 65
fi
if ! grep -q '^CREATE TABLE public\.nodes ' "$temporary_output"; then
echo "sanitized bootstrap is missing the required nodes table" >&2
exit 65
fi
mv "$temporary_output" "$output_sql"
trap - EXIT HUP INT TERM
echo "source_sha256=$actual_source_sha256"
echo "bootstrap_sha256=$(shasum -a 256 "$output_sql" | awk '{print $1}')"