build_hue_common.sh 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791
  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|redhat9-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} PG_CONFIG=${PG_CONFIG} -- sh -c 'export PG_CONFIG="$PG_CONFIG"; ${pip_bin} install psycopg2==2.9.6'
  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} PG_CONFIG=${PG_CONFIG} -- sh -c 'export PG_CONFIG="$PG_CONFIG"; ${pip_bin} install psycopg2==2.9.6'
  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} PG_CONFIG=${PG_CONFIG} -- sh -c 'export PG_CONFIG="$PG_CONFIG"; ${pip_bin} install psycopg2==2.9.6'
  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 redhat9_arm64_install() {
  398. local os=${1:-"redhat9-arm64"}
  399. if [[ $FORCEINSTALL -eq 1 ]]; then
  400. # pre-req install
  401. sudo -- sh -c 'yum install -y \
  402. java-11-openjdk \
  403. java-11-openjdk-devel \
  404. java-11-openjdk-headless \
  405. krb5-workstation \
  406. ncurses-devel \
  407. nmap-ncat \
  408. xmlsec1 \
  409. xmlsec1-openssl \
  410. libss \
  411. ncurses-c++-libs \
  412. postgresql-devel'
  413. # Ensure pg_config is available
  414. export PG_CONFIG=$(which pg_config)
  415. if [ -z "$PG_CONFIG" ]; then
  416. echo "Error: pg_config not found. Ensure PostgreSQL development libraries are installed."
  417. exit 1
  418. fi
  419. echo "PG_CONFIG is set to $PG_CONFIG"
  420. # MySQLdb install
  421. sudo -- sh -c 'yum install -y python3-mysqlclient mariadb-devel'
  422. # NODEJS 20 install
  423. sudo -- sh -c 'cd /tmp && curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash - && \
  424. yum install -y nodejs'
  425. unset PYTHON311_PATH
  426. if [[ -z ${PYTHON311_PATH+x} ]]; then
  427. install_sqlite_python "$os" "$REQ_PYTHON311"
  428. fi
  429. unset PYTHON39_PATH
  430. if [[ -z ${PYTHON39_PATH+x} ]]; then
  431. install_sqlite_python "$os" "$REQ_PYTHON39"
  432. fi
  433. fi
  434. }
  435. function sles12_install() {
  436. local os=${1:-"sles12"}
  437. if [[ $FORCEINSTALL -eq 1 ]]; then
  438. # pre-req install
  439. sudo -- sh -c 'zypper refresh'
  440. sudo -- sh -c 'zypper install -y cyrus-sasl-gssapi \
  441. cyrus-sasl-plain \
  442. java-11-openjdk \
  443. java-11-openjdk-devel \
  444. java-11-openjdk-headless \
  445. krb5-client pam_krb5 krb5-appl-clients krb5-plugin-kdb-ldap \
  446. libpcap \
  447. ncurses-devel \
  448. nmap \
  449. python3-devel \
  450. postgresql-server-devel \
  451. xmlsec1 xmlsec1-devel xmlsec1-openssl-devel'
  452. # Ensure pg_config is available
  453. export PG_CONFIG=$(which pg_config)
  454. if [ -z "$PG_CONFIG" ]; then
  455. echo "Error: pg_config not found. Ensure PostgreSQL development libraries are installed."
  456. exit 1
  457. fi
  458. echo "PG_CONFIG is set to $PG_CONFIG"
  459. # MySQLdb install
  460. sudo -- sh -c 'zypper install -y libmysqlclient-devel libmysqlclient18 libmysqld18 libmysqld-devel'
  461. # NODEJS 16 install
  462. # 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"
  463. # Node-v20-LTS is not supported by old OS'es - Redhat7_ppc, Centos7, Ubuntu18, Sles12. So upgrading to node-v16
  464. sudo -- sh -c 'zypper install -y npm14 nodejs14'
  465. unset PYTHON38_PATH
  466. if [[ -z ${PYTHON38_PATH+x} ]]; then
  467. install_sqlite_python "$os" "$REQ_PYTHON38"
  468. fi
  469. fi
  470. }
  471. function sles15_install() {
  472. local os=${1:-"sles15"}
  473. if [[ $FORCEINSTALL -eq 1 ]]; then
  474. # pre-req install
  475. sudo -- sh -c 'zypper refresh'
  476. sudo -- sh -c 'zypper install -y cyrus-sasl-gssapi \
  477. cyrus-sasl-plain \
  478. java-11-openjdk \
  479. java-11-openjdk-devel \
  480. java-11-openjdk-headless \
  481. krb5-client pam_krb5 krb5-plugin-kdb-ldap \
  482. libpcap1 \
  483. ncurses-devel \
  484. nmap \
  485. postgresql-server-devel \
  486. xmlsec1 xmlsec1-devel xmlsec1-openssl-devel'
  487. # Ensure pg_config is available
  488. export PG_CONFIG=$(which pg_config)
  489. if [ -z "$PG_CONFIG" ]; then
  490. echo "Error: pg_config not found. Ensure PostgreSQL development libraries are installed."
  491. exit 1
  492. fi
  493. echo "PG_CONFIG is set to $PG_CONFIG"
  494. # MySQLdb install
  495. sudo -- sh -c 'zypper install -y libmariadb-devel mariadb-client python3-mysqlclient'
  496. # NODEJS 18 install
  497. sudo -- sh -c 'zypper install -y nodejs18 npm20'
  498. sudo -- sh -c 'rm -f /usr/local/bin/node && ln -s /usr/bin/node18 /usr/local/bin/node'
  499. sudo -- sh -c 'rm -f /usr/local/bin/npm && ln -s /usr/bin/npm20 /usr/local/bin/npm'
  500. if [[ -z ${PYTHON311_PATH+x} ]]; then
  501. install_sqlite_python "$os" "$REQ_PYTHON311"
  502. fi
  503. if [[ -z ${PYTHON39_PATH+x} ]]; then
  504. install_sqlite_python "$os" "$REQ_PYTHON39"
  505. fi
  506. if [[ -z ${PYTHON38_PATH+x} ]]; then
  507. install_sqlite_python "$os" "$REQ_PYTHON38"
  508. fi
  509. fi
  510. }
  511. function ubuntu18_install() {
  512. local os=${1:-"ubuntu18"}
  513. if [[ $FORCEINSTALL -eq 1 ]]; then
  514. # pre-req install
  515. sudo -- sh -c 'apt-get update'
  516. sudo -- sh -c 'DEBIAN_FRONTEND=noninteractive apt -qq -y install \
  517. krb5-user \
  518. krb5-kdc \
  519. krb5-config \
  520. libkrb5-dev'
  521. sudo -- sh -c 'apt -y install \
  522. ldap-utils \
  523. libpython3.8-dev \
  524. libpython3.8-minimal \
  525. libpython3.8-stdlib \
  526. libxmlsec1 \
  527. libxmlsec1-openssl \
  528. netcat \
  529. nmap \
  530. python3-asn1crypto \
  531. python3-cffi-backend \
  532. python3-crypto \
  533. python3-cryptography \
  534. python3-keyring \
  535. python3-psycopg2 \
  536. python3-setuptools \
  537. python3-wheel \
  538. python3.8-venv \
  539. python3-dev \
  540. libpq-dev \
  541. zlibc'
  542. # Ensure pg_config is available
  543. export PG_CONFIG=$(which pg_config)
  544. if [ -z "$PG_CONFIG" ]; then
  545. echo "Error: pg_config not found. Ensure PostgreSQL development libraries are installed."
  546. exit 1
  547. fi
  548. echo "PG_CONFIG is set to $PG_CONFIG"
  549. # MySQLdb install
  550. # It is pre-installed
  551. # NODEJS 16 install
  552. # 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"
  553. # Node-v20-LTS is not supported by old OS'es - Redhat7_ppc, Centos7, Ubuntu18, Sles12. So upgrading to node-v16
  554. sudo -- sh -c 'cd /tmp && curl -sL https://deb.nodesource.com/setup_16.x | sudo bash - && \
  555. apt -y install nodejs'
  556. if [[ -z ${PYTHON311_PATH+x} ]]; then
  557. install_sqlite_python "$os" "$REQ_PYTHON311"
  558. fi
  559. if [[ -z ${PYTHON39_PATH+x} ]]; then
  560. install_sqlite_python "$os" "$REQ_PYTHON39"
  561. fi
  562. if [[ -z ${PYTHON38_PATH+x} ]]; then
  563. install_sqlite_python "$os" "$REQ_PYTHON38"
  564. fi
  565. fi
  566. }
  567. function ubuntu20_install() {
  568. local os=${1:-"ubuntu20"}
  569. if [[ $FORCEINSTALL -eq 1 ]]; then
  570. # pre-req install
  571. sudo -- sh -c 'DEBIAN_FRONTEND=noninteractive apt -qq -y install \
  572. krb5-user \
  573. krb5-kdc \
  574. krb5-config \
  575. libkrb5-dev'
  576. sudo -- sh -c 'apt -y install \
  577. ldap-utils \
  578. libpython3.8-dev \
  579. libpython3.8-minimal \
  580. libpython3.8-stdlib \
  581. libxmlsec1 \
  582. libxmlsec1-openssl \
  583. libpq-dev \
  584. netcat \
  585. nmap \
  586. python-asn1crypto \
  587. python3-crypto \
  588. python3-cryptography \
  589. python3-keyring \
  590. python3-psycopg2 \
  591. python3-setuptools \
  592. python3-wheel \
  593. python3.8-venv \
  594. zlibc \
  595. openssl \
  596. sudo \
  597. tar \
  598. util-linux'
  599. # Ensure pg_config is available
  600. export PG_CONFIG=$(which pg_config)
  601. if [ -z "$PG_CONFIG" ]; then
  602. echo "Error: pg_config not found. Ensure PostgreSQL development libraries are installed."
  603. exit 1
  604. fi
  605. echo "PG_CONFIG is set to $PG_CONFIG"
  606. # MySQLdb install
  607. # It is pre-installed
  608. # NODEJS 20 install
  609. sudo -- sh -c 'apt-get install -y curl && \
  610. cd /tmp && curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - && \
  611. apt-get install -y nodejs'
  612. unset PYTHON38_PATH
  613. if [[ -z ${PYTHON38_PATH+x} ]]; then
  614. install_sqlite_python "$os" "$REQ_PYTHON38"
  615. fi
  616. fi
  617. }
  618. function ubuntu22_install() {
  619. local os=${1:-"ubuntu22"}
  620. if [[ $FORCEINSTALL -eq 1 ]]; then
  621. sudo -- sh -c 'apt update'
  622. # Add deadsnakes PPA for Python 3.8
  623. sudo -- sh -c 'add-apt-repository ppa:deadsnakes/ppa -y'
  624. sudo -- sh -c 'apt update'
  625. # pre-req install
  626. sudo -- sh -c 'DEBIAN_FRONTEND=noninteractive apt -qq -y install \
  627. krb5-user \
  628. krb5-kdc \
  629. krb5-config \
  630. libkrb5-dev'
  631. sudo -- sh -c "apt -y install \
  632. ldap-utils \
  633. libxmlsec1 \
  634. libxmlsec1-openssl \
  635. libpq-dev \
  636. netcat \
  637. nmap \
  638. openssl \
  639. sudo \
  640. tar \
  641. util-linux"
  642. # Ensure pg_config is available
  643. export PG_CONFIG=$(which pg_config)
  644. if [ -z "$PG_CONFIG" ]; then
  645. echo "Error: pg_config not found. Ensure PostgreSQL development libraries are installed."
  646. exit 1
  647. fi
  648. echo "PG_CONFIG is set to $PG_CONFIG"
  649. # MySQLdb install
  650. # It is pre-installed
  651. # NODEJS 20 install
  652. sudo -- sh -c 'apt-get install -y curl && \
  653. cd /tmp && curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - && \
  654. apt-get install -y nodejs'
  655. unset PYTHON311_PATH
  656. if [[ -z ${PYTHON311_PATH+x} ]]; then
  657. install_sqlite_python "$os" "$REQ_PYTHON311"
  658. fi
  659. if [[ -z ${PYTHON39_PATH+x} ]]; then
  660. install_sqlite_python "$os" "$REQ_PYTHON39"
  661. fi
  662. unset PYTHON38_PATH
  663. if [[ -z ${PYTHON38_PATH+x} ]]; then
  664. install_sqlite_python "$os" "$REQ_PYTHON38"
  665. fi
  666. fi
  667. }
  668. function ubuntu24_install() {
  669. local os=${1:-"ubuntu24"}
  670. if [[ $FORCEINSTALL -eq 1 ]]; then
  671. sudo -- sh -c 'apt update'
  672. # pre-req install
  673. sudo -- sh -c 'DEBIAN_FRONTEND=noninteractive apt -qq -y install \
  674. krb5-user \
  675. krb5-kdc \
  676. krb5-config \
  677. libkrb5-dev'
  678. sudo -- sh -c "apt -y install \
  679. ldap-utils \
  680. libxmlsec1 \
  681. libxmlsec1-openssl \
  682. libpq-dev \
  683. netcat-openbsd \
  684. nmap \
  685. openssl \
  686. sudo \
  687. tar \
  688. util-linux"
  689. # Ensure pg_config is available
  690. export PG_CONFIG=$(which pg_config)
  691. if [ -z "$PG_CONFIG" ]; then
  692. echo "Error: pg_config not found. Ensure PostgreSQL development libraries are installed."
  693. exit 1
  694. fi
  695. echo "PG_CONFIG is set to $PG_CONFIG"
  696. # MySQLdb install
  697. # It is pre-installed
  698. # NODEJS 20 install
  699. # Force curl to use system libraries to avoid conflicts from /usr/local/lib
  700. sudo -- sh -c 'export LD_LIBRARY_PATH="/usr/lib/$(uname -m)-linux-gnu:/usr/lib64:/usr/lib:$LD_LIBRARY_PATH"; \
  701. apt-get install -y curl && \
  702. cd /tmp && curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \
  703. apt-get install -y nodejs'
  704. unset PYTHON311_PATH
  705. if [[ -z ${PYTHON311_PATH+x} ]]; then
  706. install_sqlite_python "$os" "$REQ_PYTHON311"
  707. fi
  708. fi
  709. }