mirror of
https://github.com/lingble/talos.git
synced 2026-03-20 04:03:37 +00:00
Signed-off-by: Steve Francis <steve.francis@talos-systems.com> Replaced multiple curl examples to get the correct talosctl with a curl that executes the install script.
143 lines
3.2 KiB
Bash
Executable File
143 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
|
|
set -eu
|
|
|
|
INSTALLPATH=${INSTALLPATH:-/usr/local/bin}
|
|
|
|
happyexit() {
|
|
echo "Installed version:"
|
|
echo "$(talosctl version 2>/dev/null )"
|
|
echo ""
|
|
echo "Now run:"
|
|
echo ""
|
|
echo " talosctl cluster create # install a local test cluster"
|
|
echo " talosctl dashboard # If you have created a cluster, launch the dashboard"
|
|
echo ""
|
|
echo "Looking for more? Visit https://talos.dev/latest"
|
|
echo ""
|
|
exit 0
|
|
}
|
|
|
|
validate_checksum() {
|
|
filename=$1
|
|
url="https://github.com/siderolabs/talos/releases/latest/download/sha256sum.txt"
|
|
SHA=$(curl --proto '=https' --tlsv1.2 -sSfL "${url}" | grep "${filename}" | awk '{print $1 }')
|
|
echo ""
|
|
echo "Validating checksum..."
|
|
|
|
case $checksumbin in
|
|
*openssl)
|
|
checksum=$($checksumbin dgst -sha256 "${filename}" | sed -e 's/^.* //')
|
|
;;
|
|
*shasum)
|
|
checksum=$($checksumbin -a256 "${filename}" | sed -e 's/ .*$//')
|
|
;;
|
|
esac
|
|
|
|
if [ "$checksum" != "$SHA" ]; then
|
|
echo "Checksum validation failed." >&2
|
|
return 1
|
|
fi
|
|
echo "Checksum valid."
|
|
return 0
|
|
}
|
|
|
|
OS=$(uname -s)
|
|
arch=$(uname -m)
|
|
cli_arch=""
|
|
case $OS in
|
|
CYGWIN* | MINGW64*)
|
|
OS=windows-amd64.exe
|
|
;;
|
|
Darwin | Linux | FreeBSD)
|
|
case $arch in
|
|
x86_64)
|
|
cli_arch=amd64
|
|
;;
|
|
armv8*)
|
|
cli_arch=arm64
|
|
;;
|
|
aarch64*)
|
|
cli_arch=arm64
|
|
;;
|
|
amd64|arm64)
|
|
cli_arch=$arch
|
|
;;
|
|
*)
|
|
echo "There is no talosctl $OS support for $arch. Please open an issue with your platform details."
|
|
exit 1
|
|
;;
|
|
esac
|
|
;;
|
|
*)
|
|
echo "There is no talosctl support for $OS/$arch. Please open an issue with your platform details."
|
|
exit 1
|
|
;;
|
|
esac
|
|
OS=$(echo $OS | tr '[:upper:]' '[:lower:]')
|
|
|
|
dstfile="${INSTALLPATH}/talosctl"
|
|
|
|
checksumbin=$(command -v openssl) || checksumbin=$(command -v shasum) || {
|
|
echo "Failed to find checksum binary. Please install openssl or shasum."
|
|
echo ""
|
|
echo "You can also elect to just download/install https://github.com/siderolabs/talos/releases/latest/download/${srcfile}"
|
|
echo "into ${dstfile}"
|
|
exit 1
|
|
}
|
|
|
|
if [ -e "${dstfile}" ]; then
|
|
echo ""
|
|
echo "talosctl was already downloaded; 🎉"
|
|
echo ""
|
|
echo "To force re-downloading, delete '${dstfile}' then run me again."
|
|
happyexit
|
|
fi
|
|
|
|
tmpdir=$(mktemp -d /tmp/talosctl.XXXXXX)
|
|
srcfile="talosctl-${OS}"
|
|
if [ -n "${cli_arch}" ]; then
|
|
srcfile="${srcfile}-${cli_arch}"
|
|
fi
|
|
|
|
url="https://github.com/siderolabs/talos/releases/latest/download/${srcfile}"
|
|
|
|
(
|
|
cd "$tmpdir"
|
|
|
|
echo "Downloading ${srcfile}..."
|
|
curl --proto '=https' --tlsv1.2 -fLO "${url}"
|
|
echo "Download complete!"
|
|
|
|
if ! validate_checksum "${srcfile}"; then
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
exit
|
|
)
|
|
|
|
(
|
|
super=''
|
|
if [ ! -w "${INSTALLPATH}" ]; then
|
|
if $(command -v sudo > /dev/null 2>&1); then
|
|
super='sudo -E sh -c'
|
|
elif $(command -v su > /dev/null 2>&1); then
|
|
super='su -c'
|
|
fi
|
|
fi
|
|
|
|
if [ -z "${super}" ]; then
|
|
mv "${tmpdir}"/"${srcfile}" "${dstfile}"
|
|
chmod +x "${dstfile}"
|
|
else
|
|
${super} 'mv "'${tmpdir}/${srcfile}'" "'${dstfile}'"'
|
|
${super} 'chmod +x "'${dstfile}'"'
|
|
fi
|
|
)
|
|
|
|
rm -r "$tmpdir"
|
|
|
|
echo "talosctl was successfully installed 🎉"
|
|
echo ""
|
|
happyexit
|