module/apache: enable python env to run in a container
diff --git a/module/apache/module.sh b/module/apache/module.sh
index 7a96d05..3d30407 100644
--- a/module/apache/module.sh
+++ b/module/apache/module.sh
@@ -60,6 +60,7 @@
declare -r frontend_d="$mod_staging_d/pelican-subtle-giggi.git"
declare -r content_d="$mod_staging_d/mdcon.git"
declare -r pythonenv_d="$mod_staging_d/pelican-venv"
+declare -r pythonenv_con_d="$mod_staging_d/pelican-venv-con"
declare -r pelican_version="4.0.1"
declare -r markdown_version="3.1.1"
@@ -246,69 +247,92 @@
popd &>/dev/null
}
+function __apache_do_global_packages
+{
+ local -r venv_dir=$1; shift
+ # Append flags
+ local install="pip3 install ${@}"
+ local -a global_packages=( "virtualenv" "pip" "wheel" )
+
+ $install --user ${global_packages[@]} 2>&1 | lets -l -x "pip3"
+
+ python3 -m venv "$venv_dir" 2>&1 | lets -l -x "python"
+ [ "${PIPESTATUS[0]}" -eq 0 ] || {
+ lets -l -e "virtual environment: create failed"
+ return $s_err
+ }
+}
+
+function __apache_do_local_packages
+{
+ local -r venv_dir=$1; shift
+ local -r requirements=$1; shift
+ # Append flags
+ local install="pip3 install ${@}"
+ local -a local_packages=(
+ "wheel"
+ "setuptools==$setuptools_version"
+ "pelican==$pelican_version"
+ "markdown==$markdown_version"
+ )
+
+ source "$venv_dir/bin/activate" || return $s_err
+ (
+ $install ${local_packages[@]} 2>&1 | lets -l -x "pip3"
+ [ "${PIPESTATUS[0]}" -eq 0 ] || {
+ deactivate
+ return $s_err2
+ }
+
+ if [ -f "$requirements" ]; then
+ while read -r pkg; do
+ $install $pkg 2>&1 | lets -l -x "pip3"
+ [ "${PIPESTATUS[0]}" -eq 0 ] || {
+ deactivate
+ return $s_err3
+ }
+ done < "$requirements"
+ else
+ lets -l -w "no requirments file"
+ fi
+
+ deactivate
+ )
+ case "$?" in
+ $s_err2) lets -l -e "install local packages"; return $s_err ;;
+ $s_err3) lets -l -e "install $requirements"; return $s_err ;;
+ esac
+}
+
# @1 : absolute path to the target directory
# @2 : (optional) requirements txt file
function __apache_do_venv
{
local -ar deps=( python3-dev python3-pip python3-venv python3-wheel )
- if [ -z "$1" ] || [ ! -f "$2" ]; then
+ if [ -z "$1" ]; then
lets -l -e "virtual environment: invalid params"
return $s_err
fi
if [ ! -e "$1/bin/activate" ]; then
- local install="python3 -m pip install --no-cache-dir --upgrade"
- local -a global_packages=( "virtualenv" "pip" )
- local -a local_packages=(
- "wheel"
- "setuptools==$setuptools_version"
- "pelican==$pelican_version"
- "markdown==$markdown_version"
- )
-
- util_install_dependency ${deps[@]} || {
- lets -l -e "install python dependencies"
- return $s_err
- }
+ if which apt-get &>/dev/null; then
+ util_install_dependency ${deps[@]} || {
+ lets -l -e "install python dependencies"
+ return $s_err
+ }
+ fi
mkdir -p "$1" || {
lets -l -e "virtual envirnment: mkdir failed"
return $s_err
}
- $install --user ${global_packages[@]} 2>&1 | lets -l -x "pip3"
-
- python3 -m venv "$1" 2>&1 | lets -l -x "python"
- [ "${PIPESTATUS[0]}" -eq 0 ] || {
- lets -l -e "virtual environment: create failed"
- return $s_err
- }
-
- source "$1/bin/activate" || return $s_err
- (
- $install ${local_packages[@]} 2>&1 | lets -l -x "pip3"
- [ "${PIPESTATUS[0]}" -eq 0 ] || {
- deactivate
- return $s_err2
- }
-
- while read -r pkg; do
- $install $pkg 2>&1 | lets -l -x "pip3"
- [ "${PIPESTATUS[0]}" -eq 0 ] || {
- deactivate
- return $s_err3
- }
- done < "$2"
-
- deactivate
- )
- case "$?" in
- $s_err2) lets -l -e "install local packages"; return $s_err ;;
- $s_err3) lets -l -e "install $(basename $2)"; return $s_err ;;
- esac
+ __apache_do_global_packages $1 "--no-cache-dir --upgrade" && \
+ __apache_do_local_packages $1 $2 "--no-cache-dir --upgrade" || return $s_err
else
lets -l -w "virtual environment: exists already"
+ __apache_do_local_packages $1 $2 || return $s_err
fi
return $s_ok
@@ -472,7 +496,7 @@
lets -l -d "virtual environment: complete"
pushd $frontend_d &>/dev/null
- __create_apache_frontend $pythonenv_d 2>&1 | lets -l -x "make"
+ __create_apache_frontend $venv_d 2>&1 | lets -l -x "make"
case "${PIPESTATUS[0]}" in
$s_ok ) popd &>/dev/null; return $s_ok ;;
$s_err3 ) lets -l -e "failed to activate python" ;;