diff --git a/CHANGELOG.md b/CHANGELOG.md index 55a5f901..8a33f476 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,13 @@ In Development * Made nightly re-provisioning of TLS certificates less noisy. * Fixed bugs in rsync backup method. +v0.21c (February 1, 2017) +------------------------- + +Installations and upgrades started failing about 10 days ago with the error "ImportError: No module named 'packaging'" after an upstream package (Python's setuptools) was updated by its maintainers. The updated package conflicted with Ubuntu 14.04's version of another package (Python's pip). This update upgrades both packages to remove the conflict. + +If you already encountered the error during installation or upgrade of Mail-in-a-Box, this update may not correct the problem on your existing system. See https://discourse.mailinabox.email/t/v0-21c-release-fixes-python-package-installation-issue/1881 for help if the problem persists after upgrading to this version of Mail-in-a-Box. + v0.21b (December 4, 2016) ------------------------- diff --git a/README.md b/README.md index 173a159f..81d8952d 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ by me: $ curl -s https://keybase.io/joshdata/key.asc | gpg --import gpg: key C10BDD81: public key "Joshua Tauberer " imported - $ git verify-tag v0.21b + $ git verify-tag v0.21c gpg: Signature made ..... using RSA key ID C10BDD81 gpg: Good signature from "Joshua Tauberer " gpg: WARNING: This key is not certified with a trusted signature! @@ -72,7 +72,7 @@ and on my [personal homepage](https://razor.occams.info/). (Of course, if this r Checkout the tag corresponding to the most recent release: - $ git checkout v0.21b + $ git checkout v0.21c Begin the installation. diff --git a/setup/bootstrap.sh b/setup/bootstrap.sh index 51aa7af0..25d59f53 100644 --- a/setup/bootstrap.sh +++ b/setup/bootstrap.sh @@ -7,7 +7,7 @@ ######################################################### if [ -z "$TAG" ]; then - TAG=v0.21b + TAG=v0.21c fi # Are we running as root? diff --git a/setup/management.sh b/setup/management.sh index 7299ec50..a521dd85 100755 --- a/setup/management.sh +++ b/setup/management.sh @@ -4,7 +4,10 @@ source setup/functions.sh echo "Installing Mail-in-a-Box system management daemon..." -# Install packages. +# DEPENDENCIES + +# Install Python packages that are available from the Ubuntu +# apt repository: # flask, yaml, dnspython, and dateutil are all for our Python 3 management daemon itself. # duplicity does backups. python-pip is so we can 'pip install boto' for Python 2, for duplicity, so it can do backups to AWS S3. apt_install python3-flask links duplicity libyaml-dev python3-dnspython python3-dateutil python-pip @@ -12,18 +15,46 @@ apt_install python3-flask links duplicity libyaml-dev python3-dnspython python3- # These are required to pip install cryptography. apt_install build-essential libssl-dev libffi-dev python3-dev +# pip<6.1 + setuptools>=34 have a problem with packages that +# try to update setuptools during installation, like cryptography. +# See https://github.com/pypa/pip/issues/4253. The Ubuntu 14.04 +# package versions are pip 1.5.4 and setuptools 3.3. When we +# install cryptography under those versions, it tries to update +# setuptools to version 34, which now creates the conflict, and +# then pip gets permanently broken with errors like +# "ImportError: No module named 'packaging'". +# +# Let's test for the error: +if ! python3 -c "from pkg_resources import load_entry_point" 2&> /dev/null; then + # This system seems to be broken already. + echo "Fixing broken pip and setuptools..." + rm -rf /usr/local/lib/python3.4/dist-packages/{pkg_resources,setuptools}* + apt-get install --reinstall python3-setuptools python3-pip python3-pkg-resources +fi +# +# The easiest work-around on systems that aren't already broken is +# to upgrade pip (to >=9.0.1) and setuptools (to >=34.1) individually +# before we install any package that tries to update setuptools. +hide_output pip3 install --upgrade pip +hide_output pip3 install --upgrade setuptools + # Install other Python 3 packages used by the management daemon. # The first line is the packages that Josh maintains himself! # NOTE: email_validator is repeated in setup/questions.sh, so please keep the versions synced. +# Force acme to be updated because it seems to need it after the +# pip/setuptools breakage (see above) and the ACME protocol may +# have changed (I got an error on one of my systems). hide_output pip3 install --upgrade \ rtyaml "email_validator>=1.0.0" "free_tls_certificates>=0.1.3" "exclusiveprocess" \ - "idna>=2.0.0" "cryptography>=1.0.2" boto psutil + "idna>=2.0.0" "cryptography>=1.0.2" acme boto psutil # duplicity uses python 2 so we need to get the python 2 package of boto to have backups to S3. # boto from the Ubuntu package manager is too out-of-date -- it doesn't support the newer # S3 api used in some regions, which breaks backups to those regions. See #627, #653. hide_output pip install --upgrade boto +# CONFIGURATION + # Create a backup directory and a random key for encrypting backups. mkdir -p $STORAGE_ROOT/backup if [ ! -f $STORAGE_ROOT/backup/secret_key.txt ]; then