X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/df591042778408d03d410d5c22a669d85652d1ea..0ddb70d7350801a56c1754f02975c95ee2687c1a:/build/run-build-packages.sh diff --git a/build/run-build-packages.sh b/build/run-build-packages.sh index 497545dfac..efc20b234d 100755 --- a/build/run-build-packages.sh +++ b/build/run-build-packages.sh @@ -104,22 +104,13 @@ PYTHON3_INSTALL_LIB=lib/python$PYTHON3_VERSION/dist-packages ## End Debian Python defaults. case "$TARGET" in - debian8) + debian*) FORMAT=deb ;; - debian9) + ubuntu*) FORMAT=deb ;; - ubuntu1204) - FORMAT=deb - ;; - ubuntu1404) - FORMAT=deb - ;; - ubuntu1604) - FORMAT=deb - ;; - centos7) + centos*) FORMAT=rpm PYTHON2_PACKAGE=$(rpm -qf "$(which python$PYTHON2_VERSION)" --queryformat '%{NAME}\n') PYTHON2_PKG_PREFIX=$PYTHON2_PACKAGE @@ -156,8 +147,13 @@ if [[ "$?" != 0 ]]; then exit 1 fi -EASY_INSTALL2=$(find_easy_install -$PYTHON2_VERSION "") -EASY_INSTALL3=$(find_easy_install -$PYTHON3_VERSION 3) +PYTHON2_FPM_INSTALLER=(--python-easyinstall "$(find_python_program easy_install-$PYTHON2_VERSION easy_install)") +install3=$(find_python_program easy_install-$PYTHON3_VERSION easy_install3 pip-$PYTHON3_VERSION pip3) +if [[ $install3 =~ easy_ ]]; then + PYTHON3_FPM_INSTALLER=(--python-easyinstall "$install3") +else + PYTHON3_FPM_INSTALLER=(--python-pip "$install3") +fi RUN_BUILD_PACKAGES_PATH="`dirname \"$0\"`" RUN_BUILD_PACKAGES_PATH="`( cd \"$RUN_BUILD_PACKAGES_PATH\" && pwd )`" # absolutized and normalized @@ -288,61 +284,16 @@ handle_python_package fi ) -# On older platforms we need to publish a backport of libfuse >=2.9.2, -# and we need to build and install it here in order to even build an -# llfuse package. -cd $WORKSPACE/packages/$TARGET -if [[ $TARGET =~ ubuntu1204 ]]; then - # port libfuse 2.9.2 to Ubuntu 12.04 - LIBFUSE_DIR=$(mktemp -d) - ( - cd $LIBFUSE_DIR - # download fuse 2.9.2 ubuntu 14.04 source package - file="fuse_2.9.2.orig.tar.xz" && curl -L -o "${file}" "http://archive.ubuntu.com/ubuntu/pool/main/f/fuse/${file}" - file="fuse_2.9.2-4ubuntu4.14.04.1.debian.tar.xz" && curl -L -o "${file}" "http://archive.ubuntu.com/ubuntu/pool/main/f/fuse/${file}" - file="fuse_2.9.2-4ubuntu4.14.04.1.dsc" && curl -L -o "${file}" "http://archive.ubuntu.com/ubuntu/pool/main/f/fuse/${file}" - - # install dpkg-source and dpkg-buildpackage commands - apt-get install -y --no-install-recommends dpkg-dev - - # extract source and apply patches - dpkg-source -x fuse_2.9.2-4ubuntu4.14.04.1.dsc - rm -f fuse_2.9.2.orig.tar.xz fuse_2.9.2-4ubuntu4.14.04.1.debian.tar.xz fuse_2.9.2-4ubuntu4.14.04.1.dsc - - # add new version to changelog - cd fuse-2.9.2 - ( - echo "fuse (2.9.2-5) precise; urgency=low" - echo - echo " * Backported from trusty-security to precise" - echo - echo " -- Joshua Randall Thu, 4 Feb 2016 11:31:00 -0000" - echo - cat debian/changelog - ) > debian/changelog.new - mv debian/changelog.new debian/changelog - - # install build-deps and build - apt-get install -y --no-install-recommends debhelper dh-autoreconf libselinux-dev - dpkg-buildpackage -rfakeroot -b - ) - fpm_build "$LIBFUSE_DIR/fuse_2.9.2-5_amd64.deb" fuse "Ubuntu Developers" deb "2.9.2" --iteration 5 - fpm_build "$LIBFUSE_DIR/libfuse2_2.9.2-5_amd64.deb" libfuse2 "Ubuntu Developers" deb "2.9.2" --iteration 5 - fpm_build "$LIBFUSE_DIR/libfuse-dev_2.9.2-5_amd64.deb" libfuse-dev "Ubuntu Developers" deb "2.9.2" --iteration 5 - dpkg -i \ - "$WORKSPACE/packages/$TARGET/fuse_2.9.2-5_amd64.deb" \ - "$WORKSPACE/packages/$TARGET/libfuse2_2.9.2-5_amd64.deb" \ - "$WORKSPACE/packages/$TARGET/libfuse-dev_2.9.2-5_amd64.deb" - apt-get -y --no-install-recommends -f install - rm -rf $LIBFUSE_DIR -fi - # Go binaries cd $WORKSPACE/packages/$TARGET export GOPATH=$(mktemp -d) go get github.com/kardianos/govendor package_go_binary cmd/arvados-client arvados-client \ "Arvados command line tool (beta)" +package_go_binary cmd/arvados-server arvados-server \ + "Arvados server daemons" +package_go_binary cmd/arvados-server arvados-controller \ + "Arvados cluster controller daemon" package_go_binary sdk/go/crunchrunner crunchrunner \ "Crunchrunner executes a command inside a container and uploads the output" package_go_binary services/arv-git-httpd arvados-git-httpd \ @@ -376,36 +327,33 @@ package_go_binary tools/keep-rsync keep-rsync \ package_go_binary tools/keep-exercise keep-exercise \ "Performance testing tool for Arvados Keep" + +# we need explicit debian_revision values in the dependencies for ruamel.yaml, because we have a package iteration +# greater than zero. So we parse setup.py, get the ruamel.yaml dependencies, tell fpm not to automatically include +# them in the package being built, and re-add them manually with an appropriate debian_revision value. +# See #14552 for the reason for this (nasty) workaround. We use ${ruamel_depends[@]} in a few places further down +# in this script. +# Ward, 2018-11-28 +IFS=', ' read -r -a deps <<< `grep ruamel.yaml $WORKSPACE/sdk/python/setup.py |cut -f 3 -dl |sed -e "s/'//g"` +declare -a ruamel_depends=() +for i in ${deps[@]}; do + i=`echo "$i" | sed -e 's!\([0-9]\)! \1!'` + if [[ $i =~ .*\>.* ]]; then + ruamel_depends+=(--depends "python-ruamel.yaml $i-1") + elif [[ $i =~ .*\<.* ]]; then + ruamel_depends+=(--depends "python-ruamel.yaml $i-9") + else + echo "Encountered ruamel dependency that I can't parse. Aborting..." + exit 1 + fi +done + # The Python SDK -# Please resist the temptation to add --no-python-fix-name to the fpm call here -# (which would remove the python- prefix from the package name), because this -# package is a dependency of arvados-fuse, and fpm can not omit the python- -# prefix from only one of the dependencies of a package... Maybe I could -# whip up a patch and send it upstream, but that will be for another day. Ward, -# 2014-05-15 -cd $WORKSPACE/packages/$TARGET -rm -rf "$WORKSPACE/sdk/python/build" -arvados_python_client_version=${ARVADOS_BUILDING_VERSION:-$(awk '($1 == "Version:"){print $2}' $WORKSPACE/sdk/python/arvados_python_client.egg-info/PKG-INFO)} -test_package_presence ${PYTHON2_PKG_PREFIX}-arvados-python-client "$arvados_python_client_version" python -if [[ "$?" == "0" ]]; then - fpm_build $WORKSPACE/sdk/python "${PYTHON2_PKG_PREFIX}-arvados-python-client" 'Curoverse, Inc.' 'python' "$arvados_python_client_version" "--url=https://arvados.org" "--description=The Arvados Python SDK" --depends "${PYTHON2_PKG_PREFIX}-setuptools" --deb-recommends=git -fi +fpm_build_virtualenv "arvados-python-client" "sdk/python" +fpm_build_virtualenv "arvados-python-client" "sdk/python" "python3" -# cwl-runner -cd $WORKSPACE/packages/$TARGET -rm -rf "$WORKSPACE/sdk/cwl/build" -arvados_cwl_runner_version=${ARVADOS_BUILDING_VERSION:-$(awk '($1 == "Version:"){print $2}' $WORKSPACE/sdk/cwl/arvados_cwl_runner.egg-info/PKG-INFO)} -declare -a iterargs=() -if [[ -z "$ARVADOS_BUILDING_VERSION" ]]; then - arvados_cwl_runner_iteration=3 - iterargs+=(--iteration $arvados_cwl_runner_iteration) -else - arvados_cwl_runner_iteration= -fi -test_package_presence ${PYTHON2_PKG_PREFIX}-arvados-cwl-runner "$arvados_cwl_runner_version" python "$arvados_cwl_runner_iteration" -if [[ "$?" == "0" ]]; then - fpm_build $WORKSPACE/sdk/cwl "${PYTHON2_PKG_PREFIX}-arvados-cwl-runner" 'Curoverse, Inc.' 'python' "$arvados_cwl_runner_version" "--url=https://arvados.org" "--description=The Arvados CWL runner" --depends "${PYTHON2_PKG_PREFIX}-setuptools" "${iterargs[@]}" -fi +# Arvadow cwl runner +fpm_build_virtualenv "arvados-cwl-runner" "sdk/cwl" # schema_salad. This is a python dependency of arvados-cwl-runner, # but we can't use the usual PYTHONPACKAGES way to build this package due to the @@ -430,9 +378,9 @@ fi # And for cwltool we have the same problem as for schema_salad. Ward, 2016-03-17 cwltoolversion=$(cat "$WORKSPACE/sdk/cwl/setup.py" | grep cwltool== | sed "s/.*==\(.*\)'.*/\1/") -test_package_presence python-cwltool "$cwltoolversion" python 2 +test_package_presence python-cwltool "$cwltoolversion" python 3 if [[ "$?" == "0" ]]; then - fpm_build cwltool "" "" python $cwltoolversion --iteration 2 + fpm_build cwltool "" "" python $cwltoolversion --iteration 3 --python-disable-dependency ruamel.yaml "${ruamel_depends[@]}" fi # The PAM module @@ -447,30 +395,23 @@ if [[ $TARGET =~ debian|ubuntu ]]; then fi # The FUSE driver -# Please see comment about --no-python-fix-name above; we stay consistent and do -# not omit the python- prefix first. -cd $WORKSPACE/packages/$TARGET -rm -rf "$WORKSPACE/services/fuse/build" -arvados_fuse_version=${ARVADOS_BUILDING_VERSION:-$(awk '($1 == "Version:"){print $2}' $WORKSPACE/services/fuse/arvados_fuse.egg-info/PKG-INFO)} -test_package_presence "${PYTHON2_PKG_PREFIX}-arvados-fuse" "$arvados_fuse_version" python -if [[ "$?" == "0" ]]; then - fpm_build $WORKSPACE/services/fuse "${PYTHON2_PKG_PREFIX}-arvados-fuse" 'Curoverse, Inc.' 'python' "$arvados_fuse_version" "--url=https://arvados.org" "--description=The Keep FUSE driver" --depends "${PYTHON2_PKG_PREFIX}-setuptools" -fi +fpm_build_virtualenv "arvados-fuse" "services/fuse" # The node manager cd $WORKSPACE/packages/$TARGET rm -rf "$WORKSPACE/services/nodemanager/build" nodemanager_version=${ARVADOS_BUILDING_VERSION:-$(awk '($1 == "Version:"){print $2}' $WORKSPACE/services/nodemanager/arvados_node_manager.egg-info/PKG-INFO)} -test_package_presence arvados-node-manager "$nodemanager_version" python +iteration="${ARVADOS_BUILDING_ITERATION:-1}" +test_package_presence arvados-node-manager "$nodemanager_version" python "$iteration" if [[ "$?" == "0" ]]; then - fpm_build $WORKSPACE/services/nodemanager arvados-node-manager 'Curoverse, Inc.' 'python' "$nodemanager_version" "--url=https://arvados.org" "--description=The Arvados node manager" --depends "${PYTHON2_PKG_PREFIX}-setuptools" + fpm_build $WORKSPACE/services/nodemanager arvados-node-manager 'Curoverse, Inc.' 'python' "$nodemanager_version" "--url=https://arvados.org" "--description=The Arvados node manager" --depends "${PYTHON2_PKG_PREFIX}-setuptools" --iteration "$iteration" fi # The Docker image cleaner cd $WORKSPACE/packages/$TARGET rm -rf "$WORKSPACE/services/dockercleaner/build" dockercleaner_version=${ARVADOS_BUILDING_VERSION:-$(awk '($1 == "Version:"){print $2}' $WORKSPACE/services/dockercleaner/arvados_docker_cleaner.egg-info/PKG-INFO)} -iteration="${ARVADOS_BUILDING_ITERATION:-3}" +iteration="${ARVADOS_BUILDING_ITERATION:-4}" test_package_presence arvados-docker-cleaner "$dockercleaner_version" python "$iteration" if [[ "$?" == "0" ]]; then fpm_build $WORKSPACE/services/dockercleaner arvados-docker-cleaner 'Curoverse, Inc.' 'python3' "$dockercleaner_version" "--url=https://arvados.org" "--description=The Arvados Docker image cleaner" --depends "${PYTHON3_PKG_PREFIX}-websocket-client = 0.37.0" --iteration "$iteration" @@ -486,17 +427,40 @@ if [[ "$?" == "0" ]]; then fpm_build $WORKSPACE/tools/crunchstat-summary ${PYTHON2_PKG_PREFIX}-crunchstat-summary 'Curoverse, Inc.' 'python' "$crunchstat_summary_version" "--url=https://arvados.org" "--description=Crunchstat-summary reads Arvados Crunch log files and summarize resource usage" --iteration "$iteration" fi -## if libcloud becomes our own fork see -## https://dev.arvados.org/issues/12268#note-27 +# Forked libcloud +if test_package_presence "$PYTHON2_PKG_PREFIX"-apache-libcloud "$LIBCLOUD_PIN" python 2 +then + LIBCLOUD_DIR=$(mktemp -d) + ( + cd $LIBCLOUD_DIR + git clone $DASHQ_UNLESS_DEBUG https://github.com/curoverse/libcloud.git . + git checkout $DASHQ_UNLESS_DEBUG apache-libcloud-$LIBCLOUD_PIN + # libcloud is absurdly noisy without -q, so force -q here + OLD_DASHQ_UNLESS_DEBUG=$DASHQ_UNLESS_DEBUG + DASHQ_UNLESS_DEBUG=-q + handle_python_package + DASHQ_UNLESS_DEBUG=$OLD_DASHQ_UNLESS_DEBUG + ) + + # libcloud >= 2.3.0 now requires python-requests 2.4.3 or higher, otherwise + # it throws + # ImportError: No module named packages.urllib3.poolmanager + # when loaded. We only see this problem on ubuntu1404, because that is our + # only supported distribution that ships with a python-requests older than + # 2.4.3. + fpm_build $LIBCLOUD_DIR "$PYTHON2_PKG_PREFIX"-apache-libcloud "" python "" --iteration 2 --depends 'python-requests >= 2.4.3' + rm -rf $LIBCLOUD_DIR +fi # Python 2 dependencies declare -a PIP_DOWNLOAD_SWITCHES=(--no-deps) # Add --no-use-wheel if this pip knows it. -pip wheel --help >/dev/null 2>&1 +pip install --no-use-wheel >/dev/null 2>&1 case "$?" in 0) PIP_DOWNLOAD_SWITCHES+=(--no-use-wheel) ;; + 1) ;; 2) ;; - *) echo "WARNING: `pip wheel` test returned unknown exit code $?" ;; + *) echo "WARNING: 'pip install --no-use-wheel' test returned unknown exit code $?" ;; esac while read -r line || [[ -n "$line" ]]; do @@ -556,7 +520,12 @@ while read -r line || [[ -n "$line" ]]; do pyfpm_workdir=$(mktemp --tmpdir -d pyfpm-XXXXXX) && ( set -e cd "$pyfpm_workdir" - pip install "${PIP_DOWNLOAD_SWITCHES[@]}" --download . "$name==$version" + PIP_VERSION=`python$PYTHON2_VERSION -c "import pip; print(pip.__version__)" |cut -f1 -d.` + if (( $PIP_VERSION < 8 )); then + pip install "${PIP_DOWNLOAD_SWITCHES[@]}" --download . "$name==$version" + else + pip download --no-deps --no-binary :all: "$name==$version" + fi # Sometimes pip gives us a tarball, sometimes a zip file... DOWNLOADED=`ls $name-*` [[ "$DOWNLOADED" =~ ".tar" ]] && tar -xf $DOWNLOADED