57 lines
2.4 KiB
Bash
57 lines
2.4 KiB
Bash
#!/bin/sh
|
|
# Run by the owner-facing release installer after hash verification. Scope is
|
|
# this product's packages and its dedicated cluster; never remove another DB.
|
|
set -eu
|
|
test "$(id -u)" = 0
|
|
mc_release_dir=$1
|
|
cd "$mc_release_dir"
|
|
sha256sum --check SHA256SUMS
|
|
mc_pg_guard=/etc/postgresql-common/createcluster.d/60-mission-core-install.conf
|
|
mc_created_guard=0
|
|
cleanup() {
|
|
if [ "$mc_created_guard" = 1 ]; then
|
|
if [ "$(cat "$mc_pg_guard")" = 'create_main_cluster = false' ]; then
|
|
rm "$mc_pg_guard"
|
|
fi
|
|
fi
|
|
}
|
|
trap cleanup EXIT
|
|
trap 'exit 130' INT
|
|
trap 'exit 143' HUP TERM
|
|
if ! dpkg-query -W -f='${Status}' postgresql-16 2>/dev/null | grep -qx 'install ok installed'; then
|
|
# postgresql-common explicitly supports this drop-in. Suppress only automatic
|
|
# creation of the unrelated default main cluster during the first install.
|
|
test ! -e "$mc_pg_guard"
|
|
install -d -m 0755 /etc/postgresql-common/createcluster.d
|
|
printf '%s\n' 'create_main_cluster = false' > "$mc_pg_guard"
|
|
chmod 0644 "$mc_pg_guard"
|
|
mc_created_guard=1
|
|
fi
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-remove \
|
|
"$mc_release_dir/timescaledb-2-loader-postgresql-16_2.29.2~ubuntu24.04-1615_amd64.deb" \
|
|
"$mc_release_dir/timescaledb-2-oss-postgresql-16_2.29.2~ubuntu24.04-1615_amd64.deb" \
|
|
"$mc_release_dir/mission-core-node_0.8.15_amd64.deb" \
|
|
"$mc_release_dir/mission-core-xgrids-k1_0.1.14_amd64.deb"
|
|
systemctl is-active --quiet mission-core-node.service
|
|
systemctl is-active --quiet mission-core-k1.service
|
|
systemctl is-active --quiet postgresql@16-ndc-monitor.service
|
|
systemctl is-active --quiet mission-core-node-monitor.service
|
|
runuser -u mission-core-monitor -- /usr/bin/python3 - <<'PY'
|
|
import http.client,json,socket,time
|
|
deadline=time.monotonic()+20
|
|
while True:
|
|
c=http.client.HTTPConnection('monitor',timeout=3)
|
|
c.sock=socket.socket(socket.AF_UNIX);c.sock.settimeout(3)
|
|
try:
|
|
c.sock.connect('/run/mission-core-monitor/monitor.sock')
|
|
c.request('GET','/status');r=c.getresponse();v=json.load(r)
|
|
if r.status==200 and v['storage']=='ready' and v['latest']['seq']>0:break
|
|
except (OSError, ValueError, KeyError, TypeError, http.client.HTTPException):
|
|
pass
|
|
finally:c.close()
|
|
if time.monotonic()>deadline:raise SystemExit('Local telemetry did not become ready')
|
|
time.sleep(1)
|
|
print('Local telemetry: ready')
|
|
PY
|
|
printf '%s\n' 'Mission Core Node R18: package and local archive checks passed.'
|