]> arthur.barton.de Git - netdata.git/commitdiff
python modules installer updated
authorCosta Tsaousis <costa@tsaousis.gr>
Wed, 22 Jun 2016 09:35:48 +0000 (12:35 +0300)
committerCosta Tsaousis <costa@tsaousis.gr>
Wed, 22 Jun 2016 09:35:48 +0000 (12:35 +0300)
build/subst.inc
python.d/Makefile.am
python.d/pip_install.sh [deleted file]
python.d/python-modules-installer.sh.in [new file with mode: 0755]

index 99cac7f4f56b4c96dcc8d91be7aac9046e3bfe71..9682cf882f6f8380abc74f5a7c5ba7ab1cfd6cf9 100644 (file)
@@ -3,6 +3,7 @@
                -e 's#[@]localstatedir_POST@#$(localstatedir)#g' \
                -e 's#[@]sbindir_POST@#$(sbindir)#g' \
                -e 's#[@]sysconfdir_POST@#$(sysconfdir)#g' \
+               -e 's#[@]pythondir_POST@#$(pythondir)#g' \
                $< > $@.tmp; then \
                mv "$@.tmp" "$@"; \
        else \
index 955e2176ae357a01efe9cc33e0ac69ffb9385b23..eef6594bb2d056f27a758647dd9305678f24ac7f 100644 (file)
@@ -1,8 +1,13 @@
 MAINTAINERCLEANFILES= $(srcdir)/Makefile.in
 
+include $(top_srcdir)/build/subst.inc
+
+SUFFIXES = .in
+
 dist_python_SCRIPTS = \
        example.chart.py \
        mysql.chart.py \
+       python-modules-installer.sh \
        $(NULL)
 
 dist_python_DATA = \
diff --git a/python.d/pip_install.sh b/python.d/pip_install.sh
deleted file mode 100755 (executable)
index 76b1d2a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-
-# FIXME
-# 1. make sure you are in the proper directory
-# 2. In fedora 24, the python modules names are not known
-
-PIP=`which pip`
-
-${PIP} install --target="python_modules" yaml
-
-${PIP} install --target="python_modules" MySQL-python || echo "You need to install libmysqlclient-dev and python-dev"
diff --git a/python.d/python-modules-installer.sh.in b/python.d/python-modules-installer.sh.in
new file mode 100755 (executable)
index 0000000..955762d
--- /dev/null
@@ -0,0 +1,138 @@
+#!/bin/bash
+
+umask 022
+
+dir="@pythondir_POST@"
+target="${dir}/python_modules"
+pv="$(python -V 2>&1)"
+
+# parse parameters
+while [ ! -z "${1}" ]
+do
+    case "${1}" in
+    -p|--python)
+        pv="Python ${2}"
+        shift 2
+        ;;
+
+    -d|--dir)
+        dir="${2}"
+        target="${dir}/python_modules"
+        echo >&2 "Will install python modules in: '${target}'"
+        shift 2
+        ;;
+
+    -s|--system)
+        target=
+        echo >&2 "Will install python modules system-wide"
+        shift
+        ;;
+
+    -h|--help)
+        echo "${0} [--dir netdata-python.d-path] [--system]"
+        exit 0
+        ;;
+
+    *)
+        echo >&2 "Cannot understand parameter: ${1}"
+        exit 1
+        ;;
+    esac
+done
+
+
+if [ ! -z "${target}" -a ! -d "${target}" ]
+then
+    echo >&2 "Cannot find directory: '${target}'"
+    exit 1
+fi
+
+if [[ "${pv}" =~ ^Python\ 2.* ]]
+then
+    pv=2
+    pip="$(which pip2 2>/dev/null)"
+elif [[ "${pv}" =~ ^Python\ 3.* ]]
+then
+    pv=3
+    pip="$(which pip3 2>/dev/null)"
+else
+    echo >&2 "Cannot detect python version"
+    exit 1
+fi
+
+[ -z "${pip}" ] && pip="$(which pip 2>/dev/null)"
+if [ -z "${pip}" ]
+then
+    echo >& "pip command is required to install python v${pv} modules"
+    exit 1
+fi
+
+echo >&2 "Working for python version ${pv} (pip command: '${pip}')"
+echo >&2 "Installing netdata python modules in: '${target}'"
+
+run() {
+    printf "Running command:\n# "
+    printf "%q " "${@}"
+    printf "\n"
+    "${@}"
+}
+
+# try to install all the python modules given as parameters
+# until the first that succeeds
+failed=""
+installed=""
+errors=0
+pip_install() {
+    local ret x
+
+    echo >&2
+    echo >&2
+    echo >&2 "Installing one of: ${*}"
+
+    for x in "${@}"
+    do
+        echo >&2
+        echo >&2 "attempting to install: ${x}"
+        if [ ! -z "${target}" ]
+        then
+            run "${pip}" install --target "${target}" "${x}"
+            ret=$?
+        else
+            run "${pip}" install "${x}"
+            ret=$?
+        fi
+        [ ${ret} -eq 0 ] && break
+        echo >&2 "failed to install: ${x}"
+    done
+
+    if [ ${ret} -ne 0 ]
+    then
+        echo >&2 "ERROR: could not install any of: ${*}"
+        errors=$(( errors + 1 ))
+        failed="${failed}|${*}"
+    else
+        echo >&2 "SUCCESS: we have: ${x}"
+        installed="${installed} ${x}"
+    fi
+    return ${ret}
+}
+
+if [ "${pv}" = "2" ]
+then
+    pip_install pyyaml yaml
+    pip_install mysqlclient mysql-python pymysql
+else
+    pip_install yaml pyyaml
+    pip_install mysql-python mysqlclient pymysql
+fi
+
+echo >&2
+echo >&2
+if [ ${errors} -ne 0 ]
+then
+    echo >&2 "Failed to install ${errors} modules: ${failed}"
+    exit 1
+else
+    echo >&2 "All done. We have: ${installed}"
+    exit 0
+fi