Преглед на файлове

[build] Improve Hue Makefiles and scripts to enable Python 3.8

Change-Id: Id8bc2b9e52b2e48e56ea2115f216e65791bb97bf
Prakash Ranade преди 3 години
родител
ревизия
6720597279

+ 9 - 5
Makefile

@@ -148,8 +148,13 @@ ifeq ($(PYTHON_VER),python2.7)
 	@$(ENV_PIP) install --upgrade pip
 	@$(ENV_PIP) install --upgrade --force-reinstall $(PIP_MODULES)
 	@echo "--- done installing PIP_MODULES in virtual-env"
-else
-	@echo "--- skip installing PIP_MODULES in virtual-env"
+else ifeq ($(PYTHON_VER),python3.8)
+	@echo '--- Installing $(REQUIREMENT_FILE) into virtual-env via $(ENV_PIP)'
+	@$(ENV_PIP) install -r $(REQUIREMENT_FILE)
+	@echo '--- Finished $(REQUIREMENT_FILE) into virtual-env'
+	@$(ENV_PIP) install $(NAVOPTAPI_WHL)
+	@echo '--- Finished $(NAVOPTAPI_WHL) into virtual-env'
+	@touch $(REQUIREMENT_DOT_FILE)
 endif
 
 ###################################
@@ -232,6 +237,7 @@ install-env:
 	cp $(ROOT)/babel.config.js $(INSTALL_DIR)
 	cp $(ROOT)/tsconfig.json $(INSTALL_DIR)
 	$(MAKE) -C $(INSTALL_DIR) npm-install
+	$(MAKE) -C $(INSTALL_DIR) create-static
 
 
 ###################################
@@ -247,9 +253,7 @@ npm-install:
 	npm run webpack-login
 	npm run webpack-workers
 	node_modules/.bin/removeNPMAbsolutePaths .
-	@if [ "$(MAKECMDGOALS)" = "install" ]; then \
-	  rm -rf node_modules; \
-	fi
+	rm -rf node_modules
 
 .PHONY: create-static
 create-static:

+ 2 - 9
Makefile.sdk

@@ -114,20 +114,13 @@ $(EXT_PY_ENV_INSTALL_TARGETS): CUR_EXT_PY=$(notdir $(@D))
 #   	Pip install any 3rd party package that are based on requirements.txt
 #
 .PHONY: ext-env-pip-install
-ext-env-pip-install:
+ext-env-pip-install: $(REQUIREMENT_DOT_FILE)
+$(REQUIREMENT_DOT_FILE):
 	@echo '--- Installing $(REQUIREMENT_FILE) into virtual-env via $(ENV_PIP)'
 	@$(ENV_PIP) install -r $(REQUIREMENT_FILE)
 	@echo '--- Finished $(REQUIREMENT_FILE) into virtual-env'
 	@$(ENV_PIP) install $(NAVOPTAPI_WHL)
 	@echo '--- Finished $(NAVOPTAPI_WHL) into virtual-env'
-	@echo '--- Installing ext-py3 into virtual-env via $(ENV_PIP)'
-	@$(ENV_PIP) install -e $(BOTO_PKG)
-	@$(ENV_PIP) install -e $(REQUEST_PKG)
-	@$(ENV_PIP) install -e $(PYSAML2_PKG)
-	@$(ENV_PIP) install -e $(DJANGOSAML2_PKG)
-	@$(ENV_PIP) install -e $(DJANGO_AXES_PKG)
-	@$(ENV_PIP) install -e $(PHOENIXDB_PKG)
-	@echo '--- Finished installing ext-py3 into virtual-env via $(ENV_PIP)'
 	@touch $@
 
 #

+ 3 - 0
Makefile.vars

@@ -99,6 +99,7 @@ ENV_PYTHON := $(BLD_DIR_ENV)/bin/$(notdir $(SYS_PYTHON))
 ENV_PYTHON_VERSION = $(shell $(ENV_PYTHON) -c 'import sys; print ("python%d.%d"% sys.version_info[:2])')
 
 $(info "ENV_PYTHON is $(ENV_PYTHON).")
+$(info "SYS_PIP is $(SYS_PIP).")
 
 
 ##############################
@@ -109,6 +110,7 @@ $(info "ENV_PYTHON is $(ENV_PYTHON).")
 ##############################
 ENV_EASY_INSTALL := $(ENV_PYTHON) $(BLD_DIR_BIN)/easy_install
 ENV_PIP := $(ENV_PYTHON) $(BLD_DIR_BIN)/pip
+$(info "ENV_PIP is $(ENV_PIP).")
 
 PIP_MODULES := \
 	cryptography==3.3.2 \
@@ -141,6 +143,7 @@ PYBABEL := $(ROOT)/build/env/bin/pybabel
 # Path to files for pip requirements
 ##############################
 REQUIREMENT_FILE := $(ROOT)/desktop/core/requirements.txt
+REQUIREMENT_DOT_FILE := $(ROOT)/desktop/core/.requirements
 NAVOPTAPI_WHL := $(ROOT)/desktop/core/wheels/navoptapi-1.0.0-py3-none-any.whl
 BOTO_PKG := $(ROOT)/desktop/core/ext-py3/boto-2.49.0
 REQUEST_PKG := $(ROOT)/desktop/core/ext-py3/requests-2.27.1

+ 1 - 1
apps/Makefile

@@ -112,4 +112,4 @@ I18N_APPS := about \
 COMPILE_LOCALE_TARGETS := $(I18N_APPS:%=.recursive-compile-locales/%)
 compile-locales: $(COMPILE_LOCALE_TARGETS)
 .recursive-compile-locales/%:
-	@$(MAKE) -C $* compile-locale
+	-@$(MAKE) -C $* compile-locale

+ 1 - 1
desktop/Makefile

@@ -183,5 +183,5 @@ install-source-parts:
 COMPILE_LOCALE_TARGETS := $(APPS:%=.recursive-compile-locales/%)
 compile-locales: $(COMPILE_LOCALE_TARGETS)
 .recursive-compile-locales/%:
-	@$(MAKE) -C $* compile-locale
+	-@$(MAKE) -C $* compile-locale
 # END DEV ONLY >>>>

+ 9 - 3
desktop/core/requirements.txt

@@ -1,9 +1,9 @@
 apache-ranger==0.0.3
+requests-gssapi==1.2.3
 asn1crypto==0.24.0
 avro-python3==1.8.2
-Babel==2.9.1
-boto==2.46.1
-# boto3==1.17.41  # Last Py2 is 1.17
+#@TODO@ We need to upgrade to Babel==2.9.1
+Babel==2.5.3
 celery[redis]==5.2.2
 cffi==1.15.0
 channels==3.0.3
@@ -73,3 +73,9 @@ git+https://github.com/gethue/django-mako.git
 werkzeug==2.0.1  # Should remove it here and from devtools.mk
 django-utils-six==2.0
 six==1.16.0
+-e file:///${ROOT}/desktop/core/ext-py3/requests-2.27.1
+-e file:///${ROOT}/desktop/core/ext-py3/boto-2.49.0
+-e file:///${ROOT}/desktop/core/ext-py3/django-axes-5.13.0
+-e file:///${ROOT}/desktop/core/ext-py3/djangosaml2-0.18.0
+-e file:///${ROOT}/desktop/core/ext-py3/pysaml2-5.0.0
+-e file:///${ROOT}/desktop/core/ext-py3/phoenixdb-1.1.0

+ 23 - 12
docs/Makefile

@@ -33,33 +33,44 @@ NO_TOC := --xsltproc-opts='--stringparam generate.toc ""'
 #
 DOC_FILES := $(shell find . -prune -o -name release-notes -o -path '*/gethue/*' -prune -o -print)
 $(BLD_DIR_DOC): release-notes $(DOC_FILES)
+# skip a2x generation if not found
+ifeq (0, $(shell which a2x 1>/dev/null 2>/dev/null; echo $$?))
 	@echo '--- Generating doc at $@'
 	@mkdir -p $@
 
-	@a2x $(NO_TOC) --icons --icons-dir=images --format=xhtml --stylesheet=css/docbook.css -D $@ index.txt
-	@rm -f index.xml
+	-@a2x $(NO_TOC) --icons --icons-dir=images --format=xhtml --stylesheet=css/docbook.css -D $@ index.txt
+	-@rm -f index.xml
 
-	@cp images/favicon.ico $@
-	@# Remove intermediate file
-	@rsync -a images $@/
-	@rsync -a js $@/
-	@rsync -a css $@/
-	@rsync -a fonts $@/
+	-@cp images/favicon.ico $@
+	-@# Remove intermediate file
+	-@rsync -a images $@/
+	-@rsync -a js $@/
+	-@rsync -a css $@/
+	-@rsync -a fonts $@/
+else
+	@echo "a2x is not found"
+endif
 
 
 .PHONY: release-notes
 release-notes: $(BLD_DIR_DOC)/release-notes
 $(BLD_DIR_DOC)/release-notes: $(wildcard release-notes/*.txt)
+# skip a2x generation if not found
+ifeq (0, $(shell which a2x 1>/dev/null 2>/dev/null; echo $$?))
 	@echo '--- Generating release notes at $@'
 	@mkdir -p $@
-	@cp css/docbook.css release-notes/
-	@for i in $? ; do \
+	-@cp css/docbook.css release-notes/
+	-@for i in $? ; do \
 	  a2x $(NO_TOC) --format=xhtml --stylesheet=docbook.css $$i ; \
 	  rm -f $$i.xml ; \
 	done;
-	@mv release-notes/docbook.css $@/
-	@mv release-notes/*.html $@/
+
+	-@mv release-notes/docbook.css $@/
+	-@mv release-notes/*.html $@/
 	@echo "--- Generated $@"
+else
+	@echo "a2x is not found"
+endif
 
 
 .PHONY: admin-manual

+ 7 - 3
tools/app_reg/pth.py

@@ -26,9 +26,11 @@ import sys
 
 import common
 
+py2or3 = "2"
 if sys.version_info[0] > 2:
   from builtins import object
   open_file = open
+  py2or3 = "3"
 else:
   open_file = file
 
@@ -53,7 +55,7 @@ class PthFile(object):
   def __init__(self):
     """May raise SystemError if the virtual env is absent"""
     self._path = _get_pth_filename()
-    self._entries = [ ]
+    self._entries = []
     self._read()
 
   def _relpath(self, path):
@@ -137,9 +139,11 @@ class PthFile(object):
     with open(self._path, 'w') as _file:
       # We want the Hue libraries to come before system libraries in
       # case there is a name collision.
-      _file.write("import sys; sys.__plen = len(sys.path)\n")
+      if py2or3 == "2":
+        _file.write("import sys; sys.__plen = len(sys.path)\n")
       _file.write('\n'.join(sorted(self._entries)))
-      _file.write("\nimport sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; sys.path[0:0]=new\n")
+      if py2or3 == "2":
+        _file.write("\nimport sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; sys.path[0:0]=new\n")
     LOG.info('=== Saved %s' % self._path)
 
   def sync(self, apps):

+ 89 - 0
tools/cloudera/build_hue_cloudera.sh

@@ -0,0 +1,89 @@
+#!/usr/bin/env bash
+
+set -ex
+
+# Time marker for both stderr and stdout
+date; date 1>&2
+
+FORCEINSTALL=1
+
+function find_os() {
+  unameOut="$(uname -s)"
+  case "${unameOut}" in
+    Linux*)     machine=Linux;;
+    Darwin*)    machine=Mac;;
+    CYGWIN*)    machine=Cygwin;;
+    MINGW*)     machine=MinGw;;
+    *)          machine="UNKNOWN:${unameOut}"
+  esac
+  echo ${machine}
+}
+
+function find_home() {
+  runningos=$(find_os)
+  WORK_DIR=""
+  if [[ ${runningos} == "Linux" ]]; then
+    WORK_DIR=$(dirname "$(readlink -f "$0" || echo "$argv0")")
+  elif [[ ${runningos} == "Mac" ]]; then
+    WORK_DIR="$( cd "$( dirname "$argv0" )" && pwd )"
+  else
+    echo "Not Supported " $runningos
+    exit 1
+  fi
+  echo ${WORK_DIR}
+}
+
+function install_prerequisite() {
+  export SQLITE3_PATH="$TOOLS_HOME/sqlite/sqlite3"
+  check_python_path
+  check_sqlite3
+  if [[ $1 == "centos7" ]]; then
+    export PYTHON38_PATH=/opt/cloudera/cm-agent
+    export pip38_bin="$PYTHON38_PATH/bin/pip3.8"
+    centos7_install
+    source /opt/rh/rh-nodejs14/enable
+  elif [[ $1 == "redhat8" ]]; then
+    redhat8_install
+  elif [[ $1 == "sles12" ]]; then
+    sles12_install
+    export PATH=/usr/lib/mit/bin:$PATH
+  elif [[ $1 == "ubuntu18" ]]; then
+    ubuntu18_install
+  elif [[ $1 == "ubuntu20" ]]; then
+    ubuntu20_install
+  fi
+  ls -lR /usr/local/lib
+
+}
+
+WORK_DIR=$(find_home)
+. ${WORK_DIR}/build_hue_common.sh
+
+BUILDTYPE=$1
+DOCKEROS=$2
+HUE_JAR_VERSION=$3
+
+big_console_header "Hue PreRequisite Start" "$@"
+install_prerequisite $DOCKEROS
+big_console_header "Hue PreRequisite End" "$@"
+
+export DESKTOP_VERSION=$2
+export HUE_WEBPACK_CONFIG='webpack.config.internal.js'
+export PYTHON_H=$PYTHON38_PATH/include/python3.8/Python.h
+export PYTHON_VER=python3.8
+export SYS_PYTHON=$PYTHON38_PATH/bin/python3.8
+export SQLITE3_PATH="${TOOLS_HOME}/sqlite/sqlite3"
+export ORACLE_INSTANTCLIENT19_PATH="/opt/toolchain/instantclient_19_15"
+export LD_LIBRARY_PATH=/usr/local/lib:$ORACLE_INSTANTCLIENT19_PATH:$LD_LIBRARY_PATH
+export LD_RUN_PATH=/usr/local/lib:$ORACLE_INSTANTCLIENT19_PATH:$LD_RUN_PATH
+export PATH=$PYTHON38_PATH/bin:${TOOLS_HOME}/sqlite:/usr/bin:$PATH
+
+HUE_SRC=$(realpath $WORK_DIR/../..)
+export ROOT=$HUE_SRC
+cd $HUE_SRC
+
+big_console_header "Hue Build Start" "$@"
+make apps docs
+bash -x ./tools/relocatable.sh
+make prod
+big_console_header "Hue Build End" "$@"

+ 217 - 0
tools/cloudera/build_hue_common.sh

@@ -0,0 +1,217 @@
+#!/usr/bin/env bash
+
+function big_console_header() {
+  set +x
+  local text="$*"
+  local spacing=$(( (75+${#text}) /2 ))
+  printf "\n\n"
+  echo "============================================================================"
+  echo "============================================================================"
+  printf "%*s\n"  ${spacing} "${text}"
+  echo "============================================================================"
+  echo "============================================================================"
+  printf "\n\n"
+  set -x
+}
+
+function check_python_path() {
+  export python38_bin="$PYTHON38_PATH/bin/python3.8"
+  if [ ! -e "$python38_bin" ]; then
+    echo "Python bin does not exists at " $python38_bin
+    exit 1
+  fi
+  export pip38_bin="$PYTHON38_PATH/bin/pip3.8"
+}
+
+function check_sqlite3() {
+  export sqlit3_bin="$SQLITE3_PATH"
+  if [ ! -e "$sqlit3_bin" ]; then
+    echo "sqlit3 bin does not exists at " $sqlit3_bin
+    exit 1
+  fi
+}
+
+function sles12_install() {
+  if [[ $FORCEINSTALL -eq 1 ]]; then
+    # pre-req install
+    sudo -- sh -c 'zypper install -y cyrus-sasl-gssapi \
+      cyrus-sasl-plain \
+      java-11-openjdk \
+      java-11-openjdk-devel \
+      java-11-openjdk-headless \
+      krb5-client pam_krb5 krb5-appl-clients krb5-plugin-kdb-ldap \
+      libpcap \
+      ncurses-devel \
+      nmap \
+      xmlsec1 xmlsec1-devel  xmlsec1-openssl-devel'
+    # MySQLdb install
+    sudo -- sh -c 'zypper install -y libmysqlclient-devel libmysqlclient18 libmysqld18 libmysqld-devel'
+    # NODEJS 14 install
+    sudo -- sh -c 'zypper install -y npm14 nodejs14'
+    # Pip modules install
+    sudo pip38_bin=${pip38_bin} -- sh -c '${pip38_bin} install virtualenv virtualenv-make-relocatable mysqlclient'
+    # sqlite3 install
+    sudo -- sh -c 'curl --insecure -o sqlite-autoconf-3350500.tar.gz https://www.sqlite.org/2021/sqlite-autoconf-3350500.tar.gz && \
+        tar zxvf sqlite-autoconf-3350500.tar.gz && \
+        cd sqlite-autoconf-3350500 && \
+        ./configure --prefix=/usr/local/ && make && make install'
+    export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
+  fi
+}
+
+function centos7_install() {
+  if [[ $FORCEINSTALL -eq 1 ]]; then
+    # pre-req install
+    sudo -- sh -c 'yum install -y cyrus-sasl-gssapi \
+      cyrus-sasl-plain \
+      java-11-openjdk \
+      java-11-openjdk-devel \
+      java-11-openjdk-headless \
+      krb5-workstation \
+      libpcap \
+      ncurses-devel \
+      nmap-ncat \
+      xmlsec1 \
+      xmlsec1-openssl \
+      unzip'
+    # MySQLdb install
+    sudo -- sh -c 'curl -sSLO https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm && \
+        rpm -ivh mysql80-community-release-el7-5.noarch.rpm && \
+        yum install -y mysql-community-libs mysql-community-client-plugins mysql-community-common'
+    # NODEJS 14 install
+    sudo -- sh -c 'yum install -y rh-nodejs14-nodejs'
+    # sqlite3 install
+    sudo -- sh -c 'curl -o sqlite-autoconf-3350500.tar.gz https://www.sqlite.org/2021/sqlite-autoconf-3350500.tar.gz && \
+        tar zxvf sqlite-autoconf-3350500.tar.gz && \
+        cd sqlite-autoconf-3350500 && \
+        ./configure --prefix=/usr/local/ && make && make install'
+    # python3.8 re install for sqlite3 3.35.5 or higher version
+    sudo LD_LIBRARY_PATH=/usr/local/lib:$ORACLE_INSTANTCLIENT19_PATH:$LD_LIBRARY_PATH \
+         LD_RUN_PATH=/usr/local/lib:$ORACLE_INSTANTCLIENT19_PATH:$LD_RUN_PATH \
+         -- sh -c 'curl -o Python-3.8.13.tgz https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tgz && \
+      tar zxvf Python-3.8.13.tgz && \
+      cd Python-3.8.13 && \
+      ./configure --enable-shared --prefix=/opt/cloudera/cm-agent && \
+      make install'
+    # Pip modules install
+    sudo pip38_bin=${pip38_bin} -- sh -c '${pip38_bin} install virtualenv virtualenv-make-relocatable mysqlclient'
+  fi
+}
+
+function redhat8_install() {
+  if [[ $FORCEINSTALL -eq 1 ]]; then
+    # pre-req install
+    sudo -- sh -c 'yum install -y \
+      java-11-openjdk \
+      java-11-openjdk-devel \
+      java-11-openjdk-headless \
+      krb5-workstation \
+      ncurses-devel \
+      nmap-ncat \
+      xmlsec1 \
+      xmlsec1-openssl \
+      libss \
+      ncurses-c++-libs'
+    # MySQLdb install
+    sudo -- sh -c 'yum install -y python3-mysqlclient'
+    # NODEJS 14 install
+    sudo -- sh -c 'curl -sL https://rpm.nodesource.com/setup_14.x | bash - && yum install -y nodejs'
+    # Pip modules install
+    sudo pip38_bin=${pip38_bin} -- sh -c '${pip38_bin} install virtualenv virtualenv-make-relocatable mysqlclient'
+    # sqlite3 install
+    sudo -- sh -c 'curl -o sqlite-autoconf-3350500.tar.gz https://www.sqlite.org/2021/sqlite-autoconf-3350500.tar.gz && \
+      tar zxvf sqlite-autoconf-3350500.tar.gz && \
+      cd sqlite-autoconf-3350500 && \
+      ./configure --prefix=/usr/local/ && make && make install'
+    export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
+  fi
+}
+
+function ubuntu18_install() {
+    if [[ $FORCEINSTALL -eq 1 ]]; then
+    # pre-req install
+    sudo -- sh -c 'DEBIAN_FRONTEND=noninteractive apt -qq -y install  \
+        krb5-user \
+        krb5-kdc \
+        krb5-config \
+        libkrb5-dev'
+    sudo -- sh -c 'apt -y install \
+        ldap-utils \
+        libpython3.8-dev \
+        libpython3.8-minimal \
+        libpython3.8-stdlib \
+        libxmlsec1 \
+        libxmlsec1-openssl \
+        netcat \
+        nmap \
+        python3-asn1crypto \
+        python3-cffi-backend \
+        python3-crypto \
+        python3-cryptography \
+        python3-keyring \
+        python3-psycopg2 \
+        python3-setuptools \
+        python3-wheel \
+        python3.8-venv \
+        zlibc'
+    # MySQLdb install
+    # It is pre-installed
+    # NODEJS 14 install
+    sudo -- sh -c 'curl -sL https://deb.nodesource.com/setup_14.x | sudo bash - && \
+      apt -y install nodejs'
+    # Pip modules install
+    sudo pip38_bin=${pip38_bin} -- sh -c '${pip38_bin} install virtualenv virtualenv-make-relocatable mysqlclient'
+    # sqlite3 install
+    sudo -- sh -c 'curl -o sqlite-autoconf-3350500.tar.gz https://www.sqlite.org/2021/sqlite-autoconf-3350500.tar.gz && \
+        tar zxvf sqlite-autoconf-3350500.tar.gz && \
+        cd sqlite-autoconf-3350500 && \
+        ./configure --prefix=/usr/local/ && make && make install'
+    export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
+  fi
+}
+
+function ubuntu20_install() {
+    if [[ $FORCEINSTALL -eq 1 ]]; then
+    # pre-req install
+    sudo -- sh -c 'DEBIAN_FRONTEND=noninteractive apt -qq -y install  \
+        krb5-user \
+        krb5-kdc \
+        krb5-config \
+        libkrb5-dev'
+    sudo -- sh -c 'apt -y install \
+        ldap-utils \
+        libpython3.8-dev \
+        libpython3.8-minimal \
+        libpython3.8-stdlib \
+        libxmlsec1 \
+        libxmlsec1-openssl \
+        netcat \
+        nmap \
+        python-asn1crypto \
+        python3-crypto \
+        python3-cryptography \
+        python3-keyring \
+        python3-psycopg2 \
+        python3-setuptools \
+        python3-wheel \
+        python3.8-venv \
+        zlibc \
+        openssl \
+        sudo \
+        tar \
+        util-linux'
+    # MySQLdb install
+    # It is pre-installed
+    # NODEJS 14 install
+    sudo -- sh -c 'curl -sL https://deb.nodesource.com/setup_14.x | sudo bash - && \
+      apt -y install nodejs'
+    # Pip modules install
+    sudo pip38_bin=${pip38_bin} -- sh -c '${pip38_bin} install virtualenv virtualenv-make-relocatable mysqlclient'
+    # sqlite3 install
+    sudo -- sh -c 'curl -o sqlite-autoconf-3350500.tar.gz https://www.sqlite.org/2021/sqlite-autoconf-3350500.tar.gz && \
+        tar zxvf sqlite-autoconf-3350500.tar.gz && \
+        cd sqlite-autoconf-3350500 && \
+        ./configure --prefix=/usr/local/ && make && make install'
+    export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
+  fi
+}

+ 1 - 0
tools/container/build.sh

@@ -27,6 +27,7 @@ CONTAINER_HUE_OPT=/opt
 # This step is performed inside the docker(compile step)
 compile_py3hue() {
   export HUE_HOME="/opt/${HUEUSER}"
+  export ROOT="/opt/${HUEUSER}"
   mkdir -p $CONTAINER_HUE_OPT
   cd $CONTAINER_HUE_SRC
   INSTALL_DIR=${HUE_HOME} make install

+ 60 - 4
tools/relocatable.sh

@@ -31,17 +31,73 @@ if [ $# != 0 ] ; then
   usage
 fi
 
+find_os() {
+  unameOut="$(uname -s)"
+  case "${unameOut}" in
+    Linux*)     machine=Linux;;
+    Darwin*)    machine=Mac;;
+    CYGWIN*)    machine=Cygwin;;
+    MINGW*)     machine=MinGw;;
+    *)          machine="UNKNOWN:${unameOut}"
+  esac
+  echo ${machine}
+}
+
+find_home() {
+  runningos=$(find_os)
+  WORK_DIR=""
+  if [[ ${runningos} == "Linux" ]]; then
+    WORK_DIR=$(dirname "$(readlink -f "$0" || echo "$argv0")")
+  elif [[ ${runningos} == "Mac" ]]; then
+    WORK_DIR="$( cd "$( dirname "$argv0" )" && pwd )"
+  else
+    echo "Not Supported " $runningos
+    exit 1
+  fi
+  echo ${WORK_DIR}
+}
+
 # We're in <hue_root>/tools
-CURR_DIR="$(dirname $0)"
-HUE_ROOT="$CURR_DIR/.."
+CURR_DIR=$(find_home)
+
+if [[ $CURR_DIR == */hue ]]; then
+  HUE_ROOT=$CURR_DIR
+elif [[ $CURR_DIR == */tools ]]; then
+  HUE_ROOT=$(dirname $CURR_DIR)
+fi
+
 ENV_PYTHON="$HUE_ROOT/build/env/bin/python"
 VIRTUAL_BOOTSTRAP="$CURR_DIR/virtual-bootstrap/virtual-bootstrap.py"
 
-source $HUE_ROOT/tools/enable-python27.sh
+if [[ ! -e $ENV_PYTHON ]]; then
+  echo "Is $ENV_PYTHON available?"
+  echo "Failing to perform relocataion"
+  exit 127
+fi
+
+if [[ ! -e $VIRTUAL_BOOTSTRAP ]]; then
+  echo "Is $VIRTUAL_BOOTSTRAP available?"
+  echo "Failing to perform relocataion"
+  exit 127
+fi
 
 export PATH=$(dirname $ENV_PYTHON):$PATH
+
+PYVER=$($ENV_PYTHON -V 2>&1|head -c 10)
 # Step 1. Fix virtualenv
-$ENV_PYTHON $VIRTUAL_BOOTSTRAP --relocatable "$HUE_ROOT/build/env"
+if [[ $PYVER == "Python 3.8" ]]; then
+  pushd .
+  cd $HUE_ROOT
+  virtualenv-make-relocatable "build/env"
+  $ENV_PYTHON $VIRTUAL_BOOTSTRAP --relocatable_pth "build/env"
+  popd
+elif [[ $PYVER == "Python 2.7" ]]; then
+  if [ -e "$HUE_ROOT/tools/enable-python27.sh" ]; then
+    source $HUE_ROOT/tools/enable-python27.sh
+  fi
+
+  $ENV_PYTHON $VIRTUAL_BOOTSTRAP --relocatable "$HUE_ROOT/build/env"
+fi
 
 # Step 1b. Fix any broken lib64 directory
 LIB64="$HUE_ROOT/build/env/lib64"

Файловите разлики са ограничени, защото са твърде много
+ 744 - 715
tools/virtual-bootstrap/virtual-bootstrap.py


Някои файлове не бяха показани, защото твърде много файлове са промени