#!/bin/sh
# Private AI のインストーラー(cuon-install)を取り、公開するときに埋めたSHA-256と照らしてから動かす(ADR-0035)。
#
#   curl -fsSL https://get.privateaiap.ai | sudo sh
#   curl -fsSL https://get.privateaiap.ai | sudo sh -s -- --yes --claim-code-file <ファイル>
#
# 引数はインストーラーへ渡す。@…@は公開するときに埋める(SHA-256の無いCPUは断る)。取り元はPRIVATEAI_GET_URLで
# 替えられる(ラボはfile://)。全体を関数にして最後に呼ぶので、途中で切れたダウンロードは動かない。
set -eu

main() {
	version='0.2.0'
	base=${PRIVATEAI_GET_URL:-https://get.privateaiap.ai}
	if [ "$(id -u)" != 0 ]; then
		echo "rootで動かす: curl -fsSL https://get.privateaiap.ai | sudo sh" >&2
		exit 1
	fi
	sum=''
	case $(uname -s)/$(uname -m) in
	Linux/x86_64) arch=amd64 sum='f92dc7419ff509907f33136e39cd16a22df4b05d04192643be1fa8272e9bc55b' ;;
	Linux/aarch64) arch=arm64 sum='@SHA256_LINUX_ARM64@' ;;
	esac
	if ! printf '%s' "$sum" | grep -Eq '^[0-9a-f]{64}$'; then
		echo "この機械($(uname -s) $(uname -m))向けのインストーラーは無い。x86_64のLinuxで動かす" >&2
		exit 1
	fi
	# /tmpはnoexecのことがあるので、インストーラーの状態の置き場(rootだけ)の下に取る
	install -d -m 0700 /var/lib/cuon-install
	dir=$(mktemp -d /var/lib/cuon-install/get.XXXXXX)
	trap 'rm -rf "$dir"' EXIT
	curl -fsSL --proto '=https,file' -o "$dir/cuon-install" "$base/cuon-install-$version-linux-$arch"
	if ! printf '%s  %s\n' "$sum" "$dir/cuon-install" | sha256sum -c --status; then
		echo "取ったインストーラーのSHA-256が合わないので動かさない" >&2
		exit 1
	fi
	chmod 0700 "$dir/cuon-install"
	# パイプで受けたスクリプトの続きを読ませないよう、標準入力は端末か/dev/nullにする
	rc=0
	if (: </dev/tty) 2>/dev/null; then
		"$dir/cuon-install" "$@" </dev/tty || rc=$?
	else
		"$dir/cuon-install" "$@" </dev/null || rc=$?
	fi
	exit "$rc"
}

main "$@"
