build_hue_common.sh 25 KB

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