|
|
@@ -1,42 +1,61 @@
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
+# Install the Snowflake ODBC driver on a Debian-based system.
|
|
|
+# https://developers.snowflake.com/odbc/
|
|
|
+
|
|
|
set -xeuo pipefail
|
|
|
|
|
|
-## Specify your organization - account name as the account identifier
|
|
|
-SFACCOUNT=${SFACCOUNT:-myorganization-myaccount}
|
|
|
-VERSION="3.3.2"
|
|
|
-FILE="snowflake-odbc-${VERSION}.x86_64.deb"
|
|
|
-URL="https://sfc-repo.snowflakecomputing.com/odbc/linux/${VERSION}/${FILE}"
|
|
|
-SHA256="fdcf83aadaf92ec135bed0699936fa4ef2cf2d88aef5a4657a96877ae2ba232d"
|
|
|
+if [ ! -f /etc/debian_version ]; then
|
|
|
+ echo "This script is only intended for Debian-based systems"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
|
|
|
-if [[ -f "${FILE}" && $(sha256sum "${FILE}" | cut -f1 -d' ') == "${SHA256}" ]]; then
|
|
|
- echo "snowflake package already downloaded"
|
|
|
-else
|
|
|
- echo "downloading snowflake package"
|
|
|
- wget -nc "$URL"
|
|
|
+if dpkg -l snowflake-odbc 1>/dev/null 2>/dev/null ; then
|
|
|
+ echo "Snowflake ODBC driver is already installed"
|
|
|
+ exit 0
|
|
|
fi
|
|
|
|
|
|
-function configure() {
|
|
|
- ODBC_INST_LIB=/usr/lib/x86_64-linux-gnu/libodbcinst.so
|
|
|
+VERSION="3.4.1"
|
|
|
+BASE_URL="https://sfc-repo.snowflakecomputing.com/odbc"
|
|
|
+ARCH="$(uname -m)"
|
|
|
+FILE="snowflake-odbc-${VERSION}.${ARCH}.deb"
|
|
|
+if [ "${ARCH}" == x86_64 ]; then
|
|
|
+ URL="${BASE_URL}/linux/${VERSION}/${FILE}"
|
|
|
+ SHA256="a96fcc89a3d3f2d16fc492976a01fefae57029bcd2e238ff4eff5a6693fa4f74"
|
|
|
+elif [ "${ARCH}" == aarch64 ]; then
|
|
|
+ URL="${BASE_URL}/linux${ARCH}/${VERSION}/${FILE}"
|
|
|
+ SHA256="c9f5c60ace416640683693037d5949aefea9555b9aa62501b6b6c692d140989c"
|
|
|
+else
|
|
|
+ echo "Unsupported architecture: ${ARCH}"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
|
|
|
- sed -i -e "s#^ODBCInstLib=.*#ODBCInstLib=$ODBC_INST_LIB#" /usr/lib/snowflake/odbc/lib/simba.snowflake.ini
|
|
|
+if [[ -f "${FILE}" && $(echo "$SHA256 *$FILE" | sha256sum -c) ]]; then
|
|
|
+ echo "Snowflake ODBC driver package is already downloaded"
|
|
|
+else
|
|
|
+ apt-get -qq update && apt-get install -yqq curl
|
|
|
+ curl -fsSL -O --retry 5 "$URL"
|
|
|
+ echo "$SHA256 *$FILE" | sha256sum -c
|
|
|
+fi
|
|
|
|
|
|
- sed -i -e "s#SF_ACCOUNT#${SFACCOUNT}#" /etc/odbc.ini
|
|
|
+apt-get -qq update
|
|
|
+apt-get install -yqq unixodbc-dev unixodbc odbcinst curl libreadline8
|
|
|
+apt-get install -yqq "./${FILE}"
|
|
|
|
|
|
- cat >>/etc/odbc.ini <<EOF
|
|
|
-[ODBC Data Sources]
|
|
|
-snowflake = SnowflakeDSIIDriver
|
|
|
-EOF
|
|
|
-}
|
|
|
+# Fix the path to the libodbcinst.so library in the simba.snowflake.ini file.
|
|
|
+ODBC_INST_LIB="/usr/lib/${ARCH}-linux-gnu/libodbcinst.so"
|
|
|
+sed -i -e "s#^ODBCInstLib=.*#ODBCInstLib=$ODBC_INST_LIB#" /usr/lib/snowflake/odbc/lib/simba.snowflake.ini
|
|
|
|
|
|
-if ! dpkg -l snowflake-odbc 1>/dev/null 2>/dev/null ; then
|
|
|
- apt update && apt install -yyq unixodbc-dev odbcinst
|
|
|
- dpkg -i "${FILE}"
|
|
|
- apt install -f
|
|
|
+# Remove references to SF_ACCOUNT from the odbc.ini file.
|
|
|
+# It will be configured dynamically.
|
|
|
+sed -i '/^SERVER/d' /etc/odbc.ini
|
|
|
+sed -i '/^ACCOUNT/d' /etc/odbc.ini
|
|
|
|
|
|
- configure
|
|
|
+ODBC_INI_CONTENT="[ODBC Data Sources]
|
|
|
+snowflake = SnowflakeDSIIDriver"
|
|
|
|
|
|
- echo "installed and configured snowflake"
|
|
|
-else
|
|
|
- echo "snowflake odbc already installed; not attempting to configure it"
|
|
|
+if ! grep -Fxq "$ODBC_INI_CONTENT" /etc/odbc.ini; then
|
|
|
+ cat >>/etc/odbc.ini <<EOF
|
|
|
+$ODBC_INI_CONTENT
|
|
|
+EOF
|
|
|
fi
|