| #!/usr/bin/env bash |
| |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| # This shell script installs all OS package dependencies for Apache |
| # CouchDB 2.x for deb-based systems. |
| # |
| # While these scripts are primarily written to support building CI |
| # Docker images, they can be used on any workstation to install a |
| # suitable build environment. |
| |
| # stop on error |
| set -e |
| |
| # TODO: support Mint, Devuan, etc. |
| |
| # Check if running as root |
| if [[ ${EUID} -ne 0 ]]; then |
| echo "Sorry, this script must be run as root." |
| echo "Try: sudo $0 $*" |
| exit 1 |
| fi |
| |
| # install lsb-release |
| apt-get update && apt-get install -y lsb-release |
| |
| SCRIPTPATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" |
| . ${SCRIPTPATH}/detect-arch.sh >/dev/null |
| . ${SCRIPTPATH}/detect-os.sh >/dev/null |
| debians='(wheezy|jessie|stretch|buster)' |
| ubuntus='(precise|trusty|xenial|artful|bionic)' |
| echo "Detected Ubuntu/Debian version: ${VERSION_CODENAME} arch: ${ARCH}" |
| |
| # bionic Docker image seems to be missing /etc/timezone... |
| if [[ ! -f /etc/timezone ]]; then |
| rm -f /etc/localtime |
| ln -snf /usr/share/zoneinfo/Etc/UTC /etc/localtime |
| echo "Etc/UTC" > /etc/timezone |
| chmod 0644 /etc/timezone |
| apt-get install -y tzdata |
| export TZ=Etc/UTC |
| fi |
| |
| # Upgrade all packages |
| apt-get -y dist-upgrade |
| |
| # install build-time dependencies |
| if [[ ${VERSION_CODENAME} == "trusty" ]]; then |
| VENV=python3.4-venv |
| else |
| VENV=python3-venv |
| fi |
| |
| # build deps, doc build deps, pkg building, then userland helper stuff |
| apt-get install -y apt-transport-https curl git pkg-config \ |
| python3 libpython3-dev python3-setuptools python3-pip ${VENV} \ |
| sudo wget zip unzip \ |
| build-essential ca-certificates libcurl4-openssl-dev \ |
| libicu-dev libnspr4-dev \ |
| help2man python3-sphinx \ |
| curl debhelper devscripts dh-exec dh-python equivs \ |
| dialog equivs lintian libwww-perl quilt \ |
| reprepro createrepo rsync \ |
| vim-tiny screen \ |
| |
| if [[ ${VERSION_CODENAME} == "xenial" ]]; then |
| apt remove -y ${VENV} |
| apt install -y software-properties-common |
| add-apt-repository ppa:deadsnakes/ppa |
| apt-get update |
| apt install -y python3.7 python3.7-dev python3.7-venv |
| rm /usr/bin/python3 |
| ln -s /usr/bin/python3.7 /usr/bin/python3 |
| pip3 install --upgrade pip |
| pip3 install setuptools |
| fi |
| |
| # Node.js |
| if [ "${ARCH}" == "ppc64le" ]; then |
| apt-get install -y nodejs npm |
| else |
| wget https://deb.nodesource.com/setup_${NODEVERSION}.x |
| /bin/bash setup_${NODEVERSION}.x |
| apt-get install -y nodejs |
| rm setup_${NODEVERSION}.x |
| fi |
| # maybe install node from scratch if pkg install failed... |
| if [ -z "$(which node)" ]; then |
| apt-get purge -y nodejs || true |
| # extracting the right version to dl is a pain :( |
| node_filename="$(curl -s https://nodejs.org/dist/latest-v${NODEVERSION}.x/SHASUMS256.txt | grep linux-${ARCH}.tar.gz | cut -d ' ' -f 3)" |
| wget https://nodejs.org/dist/latest-v${NODEVERSION}.x/${node_filename} |
| tar --directory=/usr --strip-components=1 -xzf ${node_filename} |
| rm ${node_filename} |
| # fake a package install |
| cat << EOF > nodejs-control |
| Section: misc |
| Priority: optional |
| Standards-Version: 3.9.2 |
| Package: nodejs |
| Provides: nodejs |
| Version: ${NODEVERSION}.99.99 |
| Description: Fake nodejs package to appease package builder |
| EOF |
| equivs-build nodejs-control |
| apt-get install -y ./nodejs*.deb |
| rm nodejs-control nodejs*deb |
| fi |
| # update to latest npm |
| npm install npm@latest -g --unsafe-perm |
| |
| # rest of python dependencies |
| pip3 --default-timeout=10000 install --upgrade sphinx_rtd_theme nose requests hypothesis==3.79.0 |
| |
| # install dh-systemd if available |
| if [[ ${VERSION_CODENAME} != "precise" ]]; then |
| apt-get install -y dh-systemd |
| fi |
| |
| # relaxed lintian rules for CouchDB |
| mkdir -p /usr/share/lintian/profiles/couchdb |
| chmod 0755 /usr/share/lintian/profiles/couchdb |
| if [[ ${VERSION_CODENAME} =~ ${debians} ]]; then |
| cp ${SCRIPTPATH}/../files/debian.profile /usr/share/lintian/profiles/couchdb/main.profile |
| if [[ ${VERSION_CODENAME} == "jessie" ]]; then |
| # remove unknown lintian rule privacy-breach-uses-embedded-file |
| sed -i -e 's/, privacy-breach-uses-embedded-file//' /usr/share/lintian/profiles/couchdb/main.profile |
| # add rule to suppress python-script-but-no-python-dep |
| sed -i -e 's/Disable-Tags: /Disable-Tags: python-script-but-no-python-dep, /' /usr/share/lintian/profiles/couchdb/main.profile |
| fi |
| elif [[ ${VERSION_CODENAME} =~ ${ubuntus} ]]; then |
| cp ${SCRIPTPATH}/../files/ubuntu.profile /usr/share/lintian/profiles/couchdb/main.profile |
| if [[ ${VERSION_CODENAME} == "xenial" ]]; then |
| # add rule to suppress python-script-but-no-python-dep |
| sed -i -e 's/Disable-Tags: /Disable-Tags: python-script-but-no-python-dep, /' /usr/share/lintian/profiles/couchdb/main.profile |
| fi |
| else |
| echo "Unrecognized Debian-like release: ${VERSION_CODENAME}! Skipping lintian work." |
| fi |
| |
| MAINPROFILE=/usr/share/lintian/profiles/couchdb/main.profile |
| if [[ -e ${MAINPROFILE} ]]; then |
| chmod 0644 ${MAINPROFILE} |
| fi |
| |
| # js packages, as long as we're not told to skip them |
| if [[ $1 != "nojs" ]]; then |
| # config the CouchDB repo & install the JS packages |
| echo "deb https://apache.bintray.com/couchdb-deb ${VERSION_CODENAME} main" | \ |
| sudo tee /etc/apt/sources.list.d/couchdb.list |
| apt-key adv --keyserver keyserver.ubuntu.com --recv-keys \ |
| 8756C4F765C9AC3CB6B85D62379CE192D401AB61 |
| apt-get update && apt-get install -y couch-libmozjs185-dev |
| if [ "${VERSION_CODENAME}" == "buster" ]; then |
| apt-get install -y libmozjs-60-dev |
| fi |
| else |
| # install js build-time dependencies only |
| # we can't add the CouchDB repo here because the plat may not exist yet |
| apt-get install -y libffi-dev pkg-kde-tools autotools-dev |
| fi |
| |
| # Erlang is installed by apt-erlang.sh |
| |
| # clean up |
| apt-get clean |