build_hue_common.sh 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749
  1. #!/usr/bin/env bash
  2. big_console_header() {
  3. set +x
  4. local text="$*"
  5. local spacing=$(( (75+${#text}) /2 ))
  6. printf "\n\n============================================================================\n"
  7. printf "%*s\n" ${spacing} "${text}"
  8. printf "============================================================================\n\n\n"
  9. set -x
  10. }
  11. is_supported_os() {
  12. local _arrayname=$1
  13. local _os=$2
  14. local _array=()
  15. eval "_array=(\"\${${_arrayname}[@]}\")"
  16. for item in "${_array[@]}"; do
  17. if [[ "$item" == "$_os" ]]; then
  18. return 0
  19. fi
  20. done
  21. return 1
  22. }
  23. is_supported_python_version() {
  24. local PYBIN="$1"
  25. local version="$2"
  26. IFS='.' read -r major minor patch <<< "$version"
  27. "$PYBIN" -c "import sys; exit(0) if sys.version_info >= ($major, $minor, $patch) else exit(1)"
  28. return $?
  29. }
  30. function install_build_dependencies() {
  31. local DOCKEROS=${1:-"ubuntu22"}
  32. echo "Installing build dependencies..."
  33. case "${DOCKEROS}" in
  34. ubuntu24|ubuntu22|ubuntu20|ubuntu18)
  35. sudo -- sh -c 'apt update && \
  36. apt install -y \
  37. build-essential \
  38. libbz2-dev libncurses5-dev libgdbm-dev libreadline-dev libkrb5-dev \
  39. liblzma-dev uuid-dev libldap2-dev libffi-dev zlib1g-dev libssl-dev wget curl'
  40. ;;
  41. redhat9|redhat8|centos7)
  42. sudo -- sh -c 'yum groupinstall -y "Development Tools" && \
  43. yum install -y \
  44. bzip2-devel ncurses-devel gdbm-devel readline-devel krb5-devel \
  45. xz-devel libuuid-devel openldap-devel libffi-devel zlib-devel openssl-devel wget curl'
  46. ;;
  47. redhat8-arm64)
  48. sudo -- sh -c 'yum groupinstall -y "Development Tools" --nobest && \
  49. yum install -y \
  50. bzip2-devel ncurses-devel gdbm-devel readline-devel krb5-devel \
  51. xz-devel libuuid-devel openldap-devel libffi-devel zlib-devel openssl-devel wget curl'
  52. ;;
  53. sles12|sles15)
  54. sudo -- sh -c 'zypper refresh'
  55. sudo -- sh -c 'zypper install -y \
  56. gcc gcc-c++ make \
  57. ncurses-devel gdbm-devel readline-devel krb5-devel \
  58. xz-devel libuuid-devel openldap2-devel libffi-devel zlib-devel libopenssl-devel wget curl'
  59. ;;
  60. *)
  61. echo "Unsupported OS: ${DOCKEROS}. Exiting."
  62. exit 1
  63. ;;
  64. esac
  65. }
  66. function install_sqlite3() {
  67. local install_prefix="$1"
  68. local version="3.35.5"
  69. sqlite_installed=0
  70. if [[ -e "${install_prefix}/bin/sqlite3" ]]; then
  71. local installed_version=$(${install_prefix}/bin/sqlite3 --version 2>&1 | awk '{print $1}')
  72. if [[ "$installed_version" == "$version" ]]; then
  73. if [[ -e "${install_prefix}/lib/libsqlite3.so" ]]; then
  74. echo "sqlite3 already installed"
  75. sqlite_installed=1
  76. fi
  77. fi
  78. fi
  79. if [[ $sqlite_installed -eq 0 ]]; then
  80. echo "Installing sqlite3..."
  81. # Fix curl library conflicts by prioritizing system libraries
  82. # Detect system library path based on architecture and OS
  83. local SYSTEM_LIB_PATH=""
  84. if [[ -d "/usr/lib/$(uname -m)-linux-gnu" ]]; then
  85. SYSTEM_LIB_PATH="/usr/lib/$(uname -m)-linux-gnu"
  86. elif [[ -d "/usr/lib64" ]]; then
  87. SYSTEM_LIB_PATH="/usr/lib64"
  88. else
  89. SYSTEM_LIB_PATH="/usr/lib"
  90. fi
  91. sudo LD_LIBRARY_PATH="${SYSTEM_LIB_PATH}:${LD_LIBRARY_PATH}" PATH=${PATH} install_prefix=${install_prefix} \
  92. -- sh -c 'cd /tmp && \
  93. mkdir -p ${install_prefix} && \
  94. curl -o sqlite-autoconf-3350500.tar.gz https://www.sqlite.org/2021/sqlite-autoconf-3350500.tar.gz && \
  95. tar zxvf sqlite-autoconf-3350500.tar.gz && \
  96. cd sqlite-autoconf-3350500 && \
  97. ./configure --prefix=${install_prefix} && make && make install && \
  98. libtool --finish ${install_prefix}/lib'
  99. fi
  100. }
  101. function install_python311() {
  102. local PYTHON_VERSION=${1:-"3.11.12"}
  103. local INSTALL_PREFIX=$2
  104. local LD_LIBRARY_PATH=$3
  105. local CPPFLAGS=$4
  106. local LDFLAGS=$5
  107. pushd . > /dev/null
  108. cd $HOME
  109. local PYTHON_TGZ="Python-${PYTHON_VERSION}.tgz"
  110. local PYTHON_SRC_DIR="Python-${PYTHON_VERSION}"
  111. export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/mit/bin:$PATH
  112. echo "Installing Python ${PYTHON_VERSION}..."
  113. sudo PYTHON_VERSION=${PYTHON_VERSION} INSTALL_PREFIX=${INSTALL_PREFIX} \
  114. PYTHON_TGZ=${PYTHON_TGZ} PYTHON_SRC_DIR=${PYTHON_SRC_DIR} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} \
  115. CPPFLAGS=${CPPFLAGS} LDFLAGS=${LDFLAGS} PATH=${PATH} \
  116. -- sh -c 'cd /tmp && mkdir -p "${INSTALL_PREFIX}" && \
  117. curl -o "${PYTHON_TGZ}" "https://www.python.org/ftp/python/${PYTHON_VERSION}/${PYTHON_TGZ}" && \
  118. tar zxf "${PYTHON_TGZ}" && \
  119. cd "${PYTHON_SRC_DIR}" && \
  120. ./configure --prefix="${INSTALL_PREFIX}" --enable-shared --enable-optimizations --with-lto && \
  121. make altinstall'
  122. # echo "Stripping debug symbols to reduce size..."
  123. # sudo -- sh -c '/usr/bin/strip "${INSTALL_PREFIX}/bin/python3.11" && \
  124. # /usr/bin/strip "${INSTALL_PREFIX}/lib/libpython3.11.so.1.0"'
  125. # Install pip
  126. sudo PYTHON_VERSION=${PYTHON_VERSION} INSTALL_PREFIX=${INSTALL_PREFIX} \
  127. PYTHON_TGZ=${PYTHON_TGZ} PYTHON_SRC_DIR=${PYTHON_SRC_DIR} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} \
  128. CPPFLAGS=${CPPFLAGS} LDFLAGS=${LDFLAGS} PATH=${PATH} \
  129. -- sh -c 'cd /tmp && curl -sS https://bootstrap.pypa.io/get-pip.py | "${INSTALL_PREFIX}/bin/python3.11"'
  130. export PYTHON311_PATH="${INSTALL_PREFIX}"
  131. export pip_bin=${PYTHON311_PATH}/bin/pip3.11
  132. export VIRTUAL_ENV_VERSION="20.24.4"
  133. # Pip modules install
  134. sudo pip_bin=${pip_bin} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} -- sh -c '${pip_bin} install virtualenv=='${VIRTUAL_ENV_VERSION}' virtualenv-make-relocatable==0.0.1 mysqlclient==2.1.1'
  135. sudo pip_bin=${pip_bin} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} -- sh -c '${pip_bin} install psycopg2==2.9.6 --global-option=build_ext --global-option="--pg-config=$PG_CONFIG"'
  136. sudo pip_bin=${pip_bin} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} -- sh -c 'ln -fs ${pip_bin} $(dirname ${pip_bin})/pip'
  137. popd > /dev/null
  138. }
  139. function install_python39() {
  140. local PYTHON_VERSION=${1:-"3.9.16"}
  141. local INSTALL_PREFIX=$2
  142. local LD_LIBRARY_PATH=$3
  143. local CPPFLAGS=$4
  144. local LDFLAGS=$5
  145. pushd . > /dev/null
  146. cd $HOME
  147. local PYTHON_TGZ="Python-${PYTHON_VERSION}.tgz"
  148. local PYTHON_SRC_DIR="Python-${PYTHON_VERSION}"
  149. export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/mit/bin:$PATH
  150. echo "Installing Python ${PYTHON_VERSION}..."
  151. sudo PYTHON_VERSION=${PYTHON_VERSION} INSTALL_PREFIX=${INSTALL_PREFIX} \
  152. PYTHON_TGZ=${PYTHON_TGZ} PYTHON_SRC_DIR=${PYTHON_SRC_DIR} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} \
  153. CPPFLAGS=${CPPFLAGS} LDFLAGS=${LDFLAGS} PATH=${PATH} \
  154. -- sh -c 'cd /tmp && mkdir -p "${INSTALL_PREFIX}" && \
  155. curl -o "${PYTHON_TGZ}" "https://www.python.org/ftp/python/${PYTHON_VERSION}/${PYTHON_TGZ}" && \
  156. tar zxf "${PYTHON_TGZ}" && \
  157. cd "${PYTHON_SRC_DIR}" && \
  158. ./configure --prefix="${INSTALL_PREFIX}" --enable-shared --enable-optimizations --with-lto && \
  159. make altinstall'
  160. # echo "Stripping debug symbols to reduce size..."
  161. # sudo -- sh -c '/usr/bin/strip "${INSTALL_PREFIX}/bin/python3.9" && \
  162. # /usr/bin/strip "${INSTALL_PREFIX}/lib/libpython3.9.so.1.0"'
  163. # Install pip
  164. sudo PYTHON_VERSION=${PYTHON_VERSION} INSTALL_PREFIX=${INSTALL_PREFIX} \
  165. PYTHON_TGZ=${PYTHON_TGZ} PYTHON_SRC_DIR=${PYTHON_SRC_DIR} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} \
  166. CPPFLAGS=${CPPFLAGS} LDFLAGS=${LDFLAGS} PATH=${PATH} \
  167. -- sh -c 'cd /tmp && curl -sS https://bootstrap.pypa.io/get-pip.py | "${INSTALL_PREFIX}/bin/python3.9"'
  168. export PYTHON39_PATH="${INSTALL_PREFIX}"
  169. export pip_bin=${PYTHON39_PATH}/bin/pip3.9
  170. export VIRTUAL_ENV_VERSION="20.19.0"
  171. # Pip modules install
  172. sudo pip_bin=${pip_bin} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} -- sh -c '${pip_bin} install virtualenv=='${VIRTUAL_ENV_VERSION}' virtualenv-make-relocatable==0.0.1 mysqlclient==2.1.1'
  173. sudo pip_bin=${pip_bin} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} -- sh -c '${pip_bin} install psycopg2==2.9.6 --global-option=build_ext --global-option="--pg-config=$PG_CONFIG"'
  174. sudo pip_bin=${pip_bin} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} -- sh -c 'ln -fs ${pip_bin} $(dirname ${pip_bin})/pip'
  175. popd > /dev/null
  176. }
  177. function install_python38() {
  178. local PYTHON_VERSION=${1:-"3.8.12"}
  179. local INSTALL_PREFIX=$2
  180. local LD_LIBRARY_PATH=$3
  181. local CPPFLAGS=$4
  182. local LDFLAGS=$5
  183. pushd . > /dev/null
  184. cd $HOME
  185. local PYTHON_TGZ="Python-${PYTHON_VERSION}.tgz"
  186. local PYTHON_SRC_DIR="Python-${PYTHON_VERSION}"
  187. export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/mit/bin:$PATH
  188. echo "Installing Python ${PYTHON_VERSION}..."
  189. sudo PYTHON_VERSION=${PYTHON_VERSION} INSTALL_PREFIX=${INSTALL_PREFIX} \
  190. PYTHON_TGZ=${PYTHON_TGZ} PYTHON_SRC_DIR=${PYTHON_SRC_DIR} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} \
  191. CPPFLAGS=${CPPFLAGS} LDFLAGS=${LDFLAGS} PATH=${PATH} \
  192. -- sh -c 'cd /tmp && mkdir -p "${INSTALL_PREFIX}" && \
  193. curl -o "${PYTHON_TGZ}" "https://www.python.org/ftp/python/${PYTHON_VERSION}/${PYTHON_TGZ}" && \
  194. tar zxf "${PYTHON_TGZ}" && \
  195. cd "${PYTHON_SRC_DIR}" && \
  196. ./configure --prefix="${INSTALL_PREFIX}" --enable-shared --enable-optimizations --with-lto && \
  197. make altinstall'
  198. # echo "Stripping debug symbols to reduce size..."
  199. # sudo -- sh -c '/usr/bin/strip "${INSTALL_PREFIX}/bin/python3.8" && \
  200. # /usr/bin/strip "${INSTALL_PREFIX}/lib/libpython3.8.so.1.0"'
  201. export PYTHON38_PATH="${INSTALL_PREFIX}"
  202. export pip_bin=${PYTHON38_PATH}/bin/pip3.8
  203. export VIRTUAL_ENV_VERSION="20.24.4"
  204. # Pip modules install
  205. sudo pip_bin=${pip_bin} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} -- sh -c '${pip_bin} install virtualenv=='${VIRTUAL_ENV_VERSION}' virtualenv-make-relocatable==0.0.1 mysqlclient==2.1.1'
  206. sudo pip_bin=${pip_bin} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} -- sh -c '${pip_bin} install psycopg2==2.9.6 --global-option=build_ext --global-option="--pg-config=$PG_CONFIG"'
  207. sudo pip_bin=${pip_bin} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} -- sh -c 'ln -fs ${pip_bin} $(dirname ${pip_bin})/pip'
  208. popd > /dev/null
  209. }
  210. function install_sqlite_python() {
  211. local DOCKEROS="${1:-ubuntu22}"
  212. local PYTHON_VERSION="${2:-3.11.12}"
  213. local INSTALL_PREFIX="/opt/python/${PYTHON_VERSION}"
  214. local SQLITE3_PATH="/opt/sqlite3"
  215. pushd . > /dev/null
  216. if [[ "$PYTHON_VERSION" == "$REQ_PYTHON311" ]]; then
  217. if [[ -z ${PYTHON311_PATH+x} ]]; then
  218. install_build_dependencies "$DOCKEROS"
  219. install_sqlite3 "$SQLITE3_PATH"
  220. export LD_LIBRARY_PATH="${INSTALL_PREFIX}/lib:${SQLITE3_PATH}/lib:${LD_LIBRARY_PATH}"
  221. export CPPFLAGS="-I${SQLITE3_PATH}/include"
  222. export LDFLAGS="-L${SQLITE3_PATH}/lib"
  223. install_python311 "$PYTHON_VERSION" "$INSTALL_PREFIX" "$LD_LIBRARY_PATH" "$CPPFLAGS" "$LDFLAGS"
  224. fi
  225. elif [[ "$PYTHON_VERSION" == "$REQ_PYTHON39" ]]; then
  226. if [[ -z ${PYTHON39_PATH+x} ]]; then
  227. install_build_dependencies "$DOCKEROS"
  228. install_sqlite3 "$SQLITE3_PATH"
  229. export LD_LIBRARY_PATH="${INSTALL_PREFIX}/lib:${SQLITE3_PATH}/lib:${LD_LIBRARY_PATH}"
  230. export CPPFLAGS="-I${SQLITE3_PATH}/include"
  231. export LDFLAGS="-L${SQLITE3_PATH}/lib"
  232. install_python39 "$PYTHON_VERSION" "$INSTALL_PREFIX" "$LD_LIBRARY_PATH" "$CPPFLAGS" "$LDFLAGS"
  233. fi
  234. elif [[ "$PYTHON_VERSION" == "$REQ_PYTHON38" ]]; then
  235. if [[ -z ${PYTHON38_PATH+x} ]]; then
  236. install_build_dependencies "$DOCKEROS"
  237. install_sqlite3 "$SQLITE3_PATH"
  238. export LD_LIBRARY_PATH="${INSTALL_PREFIX}/lib:${SQLITE3_PATH}/lib:${LD_LIBRARY_PATH}"
  239. export CPPFLAGS="-I${SQLITE3_PATH}/include"
  240. export LDFLAGS="-L${SQLITE3_PATH}/lib"
  241. install_python38 "$PYTHON_VERSION" "$INSTALL_PREFIX" "$LD_LIBRARY_PATH" "$CPPFLAGS" "$LDFLAGS"
  242. fi
  243. fi
  244. popd > /dev/null
  245. }
  246. function centos7_install() {
  247. local os=${1:-"centos7"}
  248. if [[ $FORCEINSTALL -eq 1 ]]; then
  249. # pre-req install
  250. sudo -- sh -c 'yum install -y cyrus-sasl-gssapi \
  251. cyrus-sasl-plain \
  252. java-11-openjdk \
  253. java-11-openjdk-devel \
  254. java-11-openjdk-headless \
  255. krb5-workstation \
  256. libpcap \
  257. ncurses-devel \
  258. nmap-ncat \
  259. xmlsec1 \
  260. xmlsec1-openssl \
  261. unzip \
  262. python3-devel \
  263. postgresql-devel'
  264. # Ensure pg_config is available
  265. export PG_CONFIG=$(which pg_config)
  266. if [ -z "$PG_CONFIG" ]; then
  267. echo "Error: pg_config not found. Ensure PostgreSQL development libraries are installed."
  268. exit 1
  269. fi
  270. echo "PG_CONFIG is set to $PG_CONFIG"
  271. # MySQLdb install
  272. sudo -- sh -c 'cd /tmp && curl -sSLO https://cloudera-build-us-west-1.vpc.cloudera.com/s3/ARTIFACTS/mysql80-community-release-el7-11.noarch.rpm && \
  273. rpm -ivh mysql80-community-release-el7-11.noarch.rpm && \
  274. yum install -y mysql-community-libs mysql-community-client-plugins mysql-community-common'
  275. # NODEJS 16 install
  276. # Upgrading to node-v16 because of the following CVE's in node-v14 "CVE-2021-3450, CVE-2021-44531, CVE-2023-32004, CVE-2023-32006"
  277. # Node-v20-LTS is not supported by old OS'es - Redhat7_ppc, Centos7, Ubuntu18, Sles12. So upgrading to node-v16
  278. sudo -- sh -c 'cd /tmp && curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash - && \
  279. yum install -y nodejs npm'
  280. unset PYTHON38_PATH
  281. if [[ -z ${PYTHON38_PATH+x} ]]; then
  282. install_sqlite_python "$os" "$REQ_PYTHON38"
  283. fi
  284. fi
  285. }
  286. function redhat8_install() {
  287. local os=${1:-"redhat8"}
  288. if [[ $FORCEINSTALL -eq 1 ]]; then
  289. # pre-req install
  290. sudo -- sh -c 'yum install -y \
  291. java-11-openjdk \
  292. java-11-openjdk-devel \
  293. java-11-openjdk-headless \
  294. krb5-workstation \
  295. ncurses-devel \
  296. nmap-ncat \
  297. xmlsec1 \
  298. xmlsec1-openssl \
  299. libss \
  300. ncurses-c++-libs \
  301. python3-devel \
  302. postgresql-devel'
  303. # Ensure pg_config is available
  304. export PG_CONFIG=$(which pg_config)
  305. if [ -z "$PG_CONFIG" ]; then
  306. echo "Error: pg_config not found. Ensure PostgreSQL development libraries are installed."
  307. exit 1
  308. fi
  309. echo "PG_CONFIG is set to $PG_CONFIG"
  310. # MySQLdb install
  311. sudo -- sh -c 'yum install -y python3-mysqlclient'
  312. # NODEJS 20 install
  313. sudo -- sh -c 'cd /tmp && curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash - && \
  314. yum install -y nodejs'
  315. if [[ -z ${PYTHON311_PATH+x} ]]; then
  316. install_sqlite_python "$os" "$REQ_PYTHON311"
  317. fi
  318. if [[ -z ${PYTHON39_PATH+x} ]]; then
  319. install_sqlite_python "$os" "$REQ_PYTHON39"
  320. fi
  321. if [[ -z ${PYTHON38_PATH+x} ]]; then
  322. install_sqlite_python "$os" "$REQ_PYTHON38"
  323. fi
  324. fi
  325. }
  326. function redhat8_arm64_install() {
  327. local os=${1:-"redhat8-arm64"}
  328. if [[ $FORCEINSTALL -eq 1 ]]; then
  329. # pre-req install
  330. sudo -- sh -c 'yum install -y \
  331. java-11-openjdk \
  332. java-11-openjdk-devel \
  333. java-11-openjdk-headless \
  334. krb5-workstation \
  335. ncurses-devel \
  336. nmap-ncat \
  337. xmlsec1 \
  338. xmlsec1-openssl \
  339. libss \
  340. ncurses-c++-libs'
  341. # MySQLdb install
  342. sudo -- sh -c 'yum install -y python3-mysqlclient'
  343. # NODEJS 20 install
  344. sudo -- sh -c 'cd /tmp && curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash - && \
  345. yum install -y nodejs'
  346. # Pip modules install
  347. if [[ -z ${PYTHON311_PATH+x} ]]; then
  348. install_sqlite_python "$os" "$REQ_PYTHON311"
  349. fi
  350. if [[ -z ${PYTHON39_PATH+x} ]]; then
  351. install_sqlite_python "$os" "$REQ_PYTHON39"
  352. fi
  353. if [[ -z ${PYTHON38_PATH+x} ]]; then
  354. install_sqlite_python "$os" "$REQ_PYTHON38"
  355. fi
  356. fi
  357. }
  358. function redhat9_install() {
  359. local os=${1:-"redhat9"}
  360. if [[ $FORCEINSTALL -eq 1 ]]; then
  361. # pre-req install
  362. sudo -- sh -c 'yum install -y \
  363. java-11-openjdk \
  364. java-11-openjdk-devel \
  365. java-11-openjdk-headless \
  366. krb5-workstation \
  367. ncurses-devel \
  368. nmap-ncat \
  369. xmlsec1 \
  370. xmlsec1-openssl \
  371. libss \
  372. ncurses-c++-libs \
  373. postgresql-devel'
  374. # Ensure pg_config is available
  375. export PG_CONFIG=$(which pg_config)
  376. if [ -z "$PG_CONFIG" ]; then
  377. echo "Error: pg_config not found. Ensure PostgreSQL development libraries are installed."
  378. exit 1
  379. fi
  380. echo "PG_CONFIG is set to $PG_CONFIG"
  381. # MySQLdb install
  382. sudo -- sh -c 'yum install -y python3-mysqlclient'
  383. # NODEJS 20 install
  384. sudo -- sh -c 'cd /tmp && curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash - && \
  385. yum install -y nodejs'
  386. if [[ -z ${PYTHON311_PATH+x} ]]; then
  387. install_sqlite_python "$os" "$REQ_PYTHON311"
  388. fi
  389. if [[ -z ${PYTHON39_PATH+x} ]]; then
  390. install_sqlite_python "$os" "$REQ_PYTHON39"
  391. fi
  392. if [[ -z ${PYTHON38_PATH+x} ]]; then
  393. install_sqlite_python "$os" "$REQ_PYTHON38"
  394. fi
  395. fi
  396. }
  397. function sles12_install() {
  398. local os=${1:-"sles12"}
  399. if [[ $FORCEINSTALL -eq 1 ]]; then
  400. # pre-req install
  401. sudo -- sh -c 'zypper refresh'
  402. sudo -- sh -c 'zypper install -y cyrus-sasl-gssapi \
  403. cyrus-sasl-plain \
  404. java-11-openjdk \
  405. java-11-openjdk-devel \
  406. java-11-openjdk-headless \
  407. krb5-client pam_krb5 krb5-appl-clients krb5-plugin-kdb-ldap \
  408. libpcap \
  409. ncurses-devel \
  410. nmap \
  411. python3-devel \
  412. postgresql-server-devel \
  413. xmlsec1 xmlsec1-devel xmlsec1-openssl-devel'
  414. # Ensure pg_config is available
  415. export PG_CONFIG=$(which pg_config)
  416. if [ -z "$PG_CONFIG" ]; then
  417. echo "Error: pg_config not found. Ensure PostgreSQL development libraries are installed."
  418. exit 1
  419. fi
  420. echo "PG_CONFIG is set to $PG_CONFIG"
  421. # MySQLdb install
  422. sudo -- sh -c 'zypper install -y libmysqlclient-devel libmysqlclient18 libmysqld18 libmysqld-devel'
  423. # NODEJS 16 install
  424. # Upgrading to node-v16 because of the following CVE's in node-v14 "CVE-2021-3450, CVE-2021-44531, CVE-2023-32004, CVE-2023-32006"
  425. # Node-v20-LTS is not supported by old OS'es - Redhat7_ppc, Centos7, Ubuntu18, Sles12. So upgrading to node-v16
  426. sudo -- sh -c 'zypper install -y npm14 nodejs14'
  427. unset PYTHON38_PATH
  428. if [[ -z ${PYTHON38_PATH+x} ]]; then
  429. install_sqlite_python "$os" "$REQ_PYTHON38"
  430. fi
  431. fi
  432. }
  433. function sles15_install() {
  434. local os=${1:-"sles15"}
  435. if [[ $FORCEINSTALL -eq 1 ]]; then
  436. # pre-req install
  437. sudo -- sh -c 'zypper refresh'
  438. sudo -- sh -c 'zypper install -y cyrus-sasl-gssapi \
  439. cyrus-sasl-plain \
  440. java-11-openjdk \
  441. java-11-openjdk-devel \
  442. java-11-openjdk-headless \
  443. krb5-client pam_krb5 krb5-plugin-kdb-ldap \
  444. libpcap1 \
  445. ncurses-devel \
  446. nmap \
  447. postgresql-server-devel \
  448. xmlsec1 xmlsec1-devel xmlsec1-openssl-devel'
  449. # Ensure pg_config is available
  450. export PG_CONFIG=$(which pg_config)
  451. if [ -z "$PG_CONFIG" ]; then
  452. echo "Error: pg_config not found. Ensure PostgreSQL development libraries are installed."
  453. exit 1
  454. fi
  455. echo "PG_CONFIG is set to $PG_CONFIG"
  456. # MySQLdb install
  457. sudo -- sh -c 'zypper install -y libmariadb-devel mariadb-client python3-mysqlclient'
  458. # NODEJS 18 install
  459. sudo -- sh -c 'zypper install -y nodejs18 npm20'
  460. sudo -- sh -c 'rm -f /usr/local/bin/node && ln -s /usr/bin/node18 /usr/local/bin/node'
  461. sudo -- sh -c 'rm -f /usr/local/bin/npm && ln -s /usr/bin/npm20 /usr/local/bin/npm'
  462. if [[ -z ${PYTHON311_PATH+x} ]]; then
  463. install_sqlite_python "$os" "$REQ_PYTHON311"
  464. fi
  465. if [[ -z ${PYTHON39_PATH+x} ]]; then
  466. install_sqlite_python "$os" "$REQ_PYTHON39"
  467. fi
  468. if [[ -z ${PYTHON38_PATH+x} ]]; then
  469. install_sqlite_python "$os" "$REQ_PYTHON38"
  470. fi
  471. fi
  472. }
  473. function ubuntu18_install() {
  474. local os=${1:-"ubuntu18"}
  475. if [[ $FORCEINSTALL -eq 1 ]]; then
  476. # pre-req install
  477. sudo -- sh -c 'apt-get update'
  478. sudo -- sh -c 'DEBIAN_FRONTEND=noninteractive apt -qq -y install \
  479. krb5-user \
  480. krb5-kdc \
  481. krb5-config \
  482. libkrb5-dev'
  483. sudo -- sh -c 'apt -y install \
  484. ldap-utils \
  485. libpython3.8-dev \
  486. libpython3.8-minimal \
  487. libpython3.8-stdlib \
  488. libxmlsec1 \
  489. libxmlsec1-openssl \
  490. netcat \
  491. nmap \
  492. python3-asn1crypto \
  493. python3-cffi-backend \
  494. python3-crypto \
  495. python3-cryptography \
  496. python3-keyring \
  497. python3-psycopg2 \
  498. python3-setuptools \
  499. python3-wheel \
  500. python3.8-venv \
  501. python3-dev \
  502. libpq-dev \
  503. zlibc'
  504. # Ensure pg_config is available
  505. export PG_CONFIG=$(which pg_config)
  506. if [ -z "$PG_CONFIG" ]; then
  507. echo "Error: pg_config not found. Ensure PostgreSQL development libraries are installed."
  508. exit 1
  509. fi
  510. echo "PG_CONFIG is set to $PG_CONFIG"
  511. # MySQLdb install
  512. # It is pre-installed
  513. # NODEJS 16 install
  514. # Upgrading to node-v16 because of the following CVE's in node-v14 "CVE-2021-3450, CVE-2021-44531, CVE-2023-32004, CVE-2023-32006"
  515. # Node-v20-LTS is not supported by old OS'es - Redhat7_ppc, Centos7, Ubuntu18, Sles12. So upgrading to node-v16
  516. sudo -- sh -c 'cd /tmp && curl -sL https://deb.nodesource.com/setup_16.x | sudo bash - && \
  517. apt -y install nodejs'
  518. if [[ -z ${PYTHON311_PATH+x} ]]; then
  519. install_sqlite_python "$os" "$REQ_PYTHON311"
  520. fi
  521. if [[ -z ${PYTHON39_PATH+x} ]]; then
  522. install_sqlite_python "$os" "$REQ_PYTHON39"
  523. fi
  524. if [[ -z ${PYTHON38_PATH+x} ]]; then
  525. install_sqlite_python "$os" "$REQ_PYTHON38"
  526. fi
  527. fi
  528. }
  529. function ubuntu20_install() {
  530. local os=${1:-"ubuntu20"}
  531. if [[ $FORCEINSTALL -eq 1 ]]; then
  532. # pre-req install
  533. sudo -- sh -c 'DEBIAN_FRONTEND=noninteractive apt -qq -y install \
  534. krb5-user \
  535. krb5-kdc \
  536. krb5-config \
  537. libkrb5-dev'
  538. sudo -- sh -c 'apt -y install \
  539. ldap-utils \
  540. libpython3.8-dev \
  541. libpython3.8-minimal \
  542. libpython3.8-stdlib \
  543. libxmlsec1 \
  544. libxmlsec1-openssl \
  545. libpq-dev \
  546. netcat \
  547. nmap \
  548. python-asn1crypto \
  549. python3-crypto \
  550. python3-cryptography \
  551. python3-keyring \
  552. python3-psycopg2 \
  553. python3-setuptools \
  554. python3-wheel \
  555. python3.8-venv \
  556. zlibc \
  557. openssl \
  558. sudo \
  559. tar \
  560. util-linux'
  561. # Ensure pg_config is available
  562. export PG_CONFIG=$(which pg_config)
  563. if [ -z "$PG_CONFIG" ]; then
  564. echo "Error: pg_config not found. Ensure PostgreSQL development libraries are installed."
  565. exit 1
  566. fi
  567. echo "PG_CONFIG is set to $PG_CONFIG"
  568. # MySQLdb install
  569. # It is pre-installed
  570. # NODEJS 20 install
  571. sudo -- sh -c 'apt-get install -y curl && \
  572. cd /tmp && curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - && \
  573. apt-get install -y nodejs'
  574. unset PYTHON38_PATH
  575. if [[ -z ${PYTHON38_PATH+x} ]]; then
  576. install_sqlite_python "$os" "$REQ_PYTHON38"
  577. fi
  578. fi
  579. }
  580. function ubuntu22_install() {
  581. local os=${1:-"ubuntu22"}
  582. if [[ $FORCEINSTALL -eq 1 ]]; then
  583. sudo -- sh -c 'apt update'
  584. # Add deadsnakes PPA for Python 3.8
  585. sudo -- sh -c 'add-apt-repository ppa:deadsnakes/ppa -y'
  586. sudo -- sh -c 'apt update'
  587. # pre-req install
  588. sudo -- sh -c 'DEBIAN_FRONTEND=noninteractive apt -qq -y install \
  589. krb5-user \
  590. krb5-kdc \
  591. krb5-config \
  592. libkrb5-dev'
  593. sudo -- sh -c "apt -y install \
  594. ldap-utils \
  595. libxmlsec1 \
  596. libxmlsec1-openssl \
  597. libpq-dev \
  598. netcat \
  599. nmap \
  600. openssl \
  601. sudo \
  602. tar \
  603. util-linux"
  604. # Ensure pg_config is available
  605. export PG_CONFIG=$(which pg_config)
  606. if [ -z "$PG_CONFIG" ]; then
  607. echo "Error: pg_config not found. Ensure PostgreSQL development libraries are installed."
  608. exit 1
  609. fi
  610. echo "PG_CONFIG is set to $PG_CONFIG"
  611. # MySQLdb install
  612. # It is pre-installed
  613. # NODEJS 20 install
  614. sudo -- sh -c 'apt-get install -y curl && \
  615. cd /tmp && curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - && \
  616. apt-get install -y nodejs'
  617. unset PYTHON311_PATH
  618. if [[ -z ${PYTHON311_PATH+x} ]]; then
  619. install_sqlite_python "$os" "$REQ_PYTHON311"
  620. fi
  621. if [[ -z ${PYTHON39_PATH+x} ]]; then
  622. install_sqlite_python "$os" "$REQ_PYTHON39"
  623. fi
  624. unset PYTHON38_PATH
  625. if [[ -z ${PYTHON38_PATH+x} ]]; then
  626. install_sqlite_python "$os" "$REQ_PYTHON38"
  627. fi
  628. fi
  629. }
  630. function ubuntu24_install() {
  631. local os=${1:-"ubuntu24"}
  632. if [[ $FORCEINSTALL -eq 1 ]]; then
  633. sudo -- sh -c 'apt update'
  634. # pre-req install
  635. sudo -- sh -c 'DEBIAN_FRONTEND=noninteractive apt -qq -y install \
  636. krb5-user \
  637. krb5-kdc \
  638. krb5-config \
  639. libkrb5-dev'
  640. sudo -- sh -c "apt -y install \
  641. ldap-utils \
  642. libxmlsec1 \
  643. libxmlsec1-openssl \
  644. libpq-dev \
  645. netcat-openbsd \
  646. nmap \
  647. openssl \
  648. sudo \
  649. tar \
  650. util-linux"
  651. # Ensure pg_config is available
  652. export PG_CONFIG=$(which pg_config)
  653. if [ -z "$PG_CONFIG" ]; then
  654. echo "Error: pg_config not found. Ensure PostgreSQL development libraries are installed."
  655. exit 1
  656. fi
  657. echo "PG_CONFIG is set to $PG_CONFIG"
  658. # MySQLdb install
  659. # It is pre-installed
  660. # NODEJS 20 install
  661. # Force curl to use system libraries to avoid conflicts from /usr/local/lib
  662. sudo -- sh -c 'export LD_LIBRARY_PATH="/usr/lib/$(uname -m)-linux-gnu:/usr/lib64:/usr/lib:$LD_LIBRARY_PATH"; \
  663. apt-get install -y curl && \
  664. cd /tmp && curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \
  665. apt-get install -y nodejs'
  666. unset PYTHON311_PATH
  667. if [[ -z ${PYTHON311_PATH+x} ]]; then
  668. install_sqlite_python "$os" "$REQ_PYTHON311"
  669. fi
  670. fi
  671. }