build_hue_common.sh 23 KB

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