Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/certbot/certbot.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErica Portnoy <ebportnoy@gmail.com>2019-11-05 23:52:26 +0300
committerErica Portnoy <ebportnoy@gmail.com>2019-11-05 23:52:26 +0300
commit73cd5aa81c56a1dfc87f27dd9124dab525c1e9df (patch)
treee43240da284563bf7cbc40627148432921982bae
parent3d9d2120402894233e99813a8767839c5d95c153 (diff)
Release 0.40.0v0.40.0
-rw-r--r--acme/setup.py2
-rw-r--r--certbot-apache/setup.py2
-rwxr-xr-xcertbot-auto238
-rw-r--r--certbot-compatibility-test/setup.py2
-rw-r--r--certbot-dns-cloudflare/setup.py2
-rw-r--r--certbot-dns-cloudxns/setup.py2
-rw-r--r--certbot-dns-digitalocean/setup.py2
-rw-r--r--certbot-dns-dnsimple/setup.py2
-rw-r--r--certbot-dns-dnsmadeeasy/setup.py2
-rw-r--r--certbot-dns-gehirn/setup.py2
-rw-r--r--certbot-dns-google/setup.py2
-rw-r--r--certbot-dns-linode/setup.py2
-rw-r--r--certbot-dns-luadns/setup.py2
-rw-r--r--certbot-dns-nsone/setup.py2
-rw-r--r--certbot-dns-ovh/setup.py2
-rw-r--r--certbot-dns-rfc2136/setup.py2
-rw-r--r--certbot-dns-route53/setup.py2
-rw-r--r--certbot-dns-sakuracloud/setup.py2
-rw-r--r--certbot-nginx/setup.py2
-rw-r--r--certbot/__init__.py2
-rw-r--r--docs/cli-help.txt2
-rwxr-xr-xletsencrypt-auto238
-rw-r--r--letsencrypt-auto-source/certbot-auto.asc16
-rwxr-xr-xletsencrypt-auto-source/letsencrypt-auto26
-rw-r--r--letsencrypt-auto-source/letsencrypt-auto.sigbin256 -> 256 bytes
-rw-r--r--letsencrypt-auto-source/pieces/certbot-requirements.txt24
-rw-r--r--local-oldest-requirements.txt2
-rw-r--r--setup.py2
28 files changed, 387 insertions, 199 deletions
diff --git a/acme/setup.py b/acme/setup.py
index f9306e350..ee2d225e8 100644
--- a/acme/setup.py
+++ b/acme/setup.py
@@ -3,7 +3,7 @@ from setuptools import find_packages
from setuptools.command.test import test as TestCommand
import sys
-version = '0.40.0.dev0'
+version = '0.40.0'
# Please update tox.ini when modifying dependency version requirements
install_requires = [
diff --git a/certbot-apache/setup.py b/certbot-apache/setup.py
index ad7b99862..9d22bacff 100644
--- a/certbot-apache/setup.py
+++ b/certbot-apache/setup.py
@@ -4,7 +4,7 @@ from setuptools.command.test import test as TestCommand
import sys
-version = '0.40.0.dev0'
+version = '0.40.0'
# Remember to update local-oldest-requirements.txt when changing the minimum
# acme/certbot version.
diff --git a/certbot-auto b/certbot-auto
index 68ced3260..5df7f5f30 100755
--- a/certbot-auto
+++ b/certbot-auto
@@ -31,7 +31,7 @@ if [ -z "$VENV_PATH" ]; then
fi
VENV_BIN="$VENV_PATH/bin"
BOOTSTRAP_VERSION_PATH="$VENV_PATH/certbot-auto-bootstrap-version.txt"
-LE_AUTO_VERSION="0.39.0"
+LE_AUTO_VERSION="0.40.0"
BASENAME=$(basename $0)
USAGE="Usage: $BASENAME [OPTIONS]
A self-updating wrapper script for the Certbot ACME client. When run, updates
@@ -256,20 +256,28 @@ DeprecationBootstrap() {
fi
}
-MIN_PYTHON_VERSION="2.7"
-MIN_PYVER=$(echo "$MIN_PYTHON_VERSION" | sed 's/\.//')
+MIN_PYTHON_2_VERSION="2.7"
+MIN_PYVER2=$(echo "$MIN_PYTHON_2_VERSION" | sed 's/\.//')
+MIN_PYTHON_3_VERSION="3.5"
+MIN_PYVER3=$(echo "$MIN_PYTHON_3_VERSION" | sed 's/\.//')
# Sets LE_PYTHON to Python version string and PYVER to the first two
-# digits of the python version
+# digits of the python version.
+# MIN_PYVER and MIN_PYTHON_VERSION are also set by this function, and their
+# values depend on if we try to use Python 3 or Python 2.
DeterminePythonVersion() {
# Arguments: "NOCRASH" if we shouldn't crash if we don't find a good python
#
# If no Python is found, PYVER is set to 0.
if [ "$USE_PYTHON_3" = 1 ]; then
+ MIN_PYVER=$MIN_PYVER3
+ MIN_PYTHON_VERSION=$MIN_PYTHON_3_VERSION
for LE_PYTHON in "$LE_PYTHON" python3; do
# Break (while keeping the LE_PYTHON value) if found.
$EXISTS "$LE_PYTHON" > /dev/null && break
done
else
+ MIN_PYVER=$MIN_PYVER2
+ MIN_PYTHON_VERSION=$MIN_PYTHON_2_VERSION
for LE_PYTHON in "$LE_PYTHON" python2.7 python27 python2 python; do
# Break (while keeping the LE_PYTHON value) if found.
$EXISTS "$LE_PYTHON" > /dev/null && break
@@ -285,7 +293,7 @@ DeterminePythonVersion() {
fi
fi
- PYVER=`"$LE_PYTHON" -V 2>&1 | cut -d" " -f 2 | cut -d. -f1,2 | sed 's/\.//'`
+ PYVER=$("$LE_PYTHON" -V 2>&1 | cut -d" " -f 2 | cut -d. -f1,2 | sed 's/\.//')
if [ "$PYVER" -lt "$MIN_PYVER" ]; then
if [ "$1" != "NOCRASH" ]; then
error "You have an ancient version of Python entombed in your operating system..."
@@ -368,7 +376,9 @@ BootstrapDebCommon() {
# Sets TOOL to the name of the package manager
# Sets appropriate values for YES_FLAG and QUIET_FLAG based on $ASSUME_YES and $QUIET_FLAG.
-# Enables EPEL if applicable and possible.
+# Note: this function is called both while selecting the bootstrap scripts and
+# during the actual bootstrap. Some things like prompting to user can be done in the latter
+# case, but not in the former one.
InitializeRPMCommonBase() {
if type dnf 2>/dev/null
then
@@ -388,26 +398,6 @@ InitializeRPMCommonBase() {
if [ "$QUIET" = 1 ]; then
QUIET_FLAG='--quiet'
fi
-
- if ! $TOOL list *virtualenv >/dev/null 2>&1; then
- echo "To use Certbot, packages from the EPEL repository need to be installed."
- if ! $TOOL list epel-release >/dev/null 2>&1; then
- error "Enable the EPEL repository and try running Certbot again."
- exit 1
- fi
- if [ "$ASSUME_YES" = 1 ]; then
- /bin/echo -n "Enabling the EPEL repository in 3 seconds..."
- sleep 1s
- /bin/echo -ne "\e[0K\rEnabling the EPEL repository in 2 seconds..."
- sleep 1s
- /bin/echo -e "\e[0K\rEnabling the EPEL repository in 1 second..."
- sleep 1s
- fi
- if ! $TOOL install $YES_FLAG $QUIET_FLAG epel-release; then
- error "Could not enable EPEL. Aborting bootstrap!"
- exit 1
- fi
- fi
}
BootstrapRpmCommonBase() {
@@ -490,11 +480,86 @@ BootstrapRpmCommon() {
# If new packages are installed by BootstrapRpmPython3 below, this version
# number must be increased.
+BOOTSTRAP_RPM_PYTHON3_LEGACY_VERSION=1
+
+# Checks if rh-python36 can be installed.
+Python36SclIsAvailable() {
+ InitializeRPMCommonBase >/dev/null 2>&1;
+
+ if "${TOOL}" list rh-python36 >/dev/null 2>&1; then
+ return 0
+ fi
+ if "${TOOL}" list centos-release-scl >/dev/null 2>&1; then
+ return 0
+ fi
+ return 1
+}
+
+# Try to enable rh-python36 from SCL if it is necessary and possible.
+EnablePython36SCL() {
+ if "$EXISTS" python3.6 > /dev/null 2> /dev/null; then
+ return 0
+ fi
+ if ! scl --list 2>/dev/null | grep -q rh-python36; then
+ return 0
+ fi
+ set +e
+ . scl_source enable rh-python36
+ set -e
+}
+
+# This bootstrap concerns old RedHat-based distributions that do not ship by default
+# with Python 2.7, but only Python 2.6. We bootstrap them by enabling SCL and installing
+# Python 3.6. Some of these distributions are: CentOS/RHEL/OL/SL 6.
+BootstrapRpmPython3Legacy() {
+ # Tested with:
+ # - CentOS 6
+
+ InitializeRPMCommonBase
+
+ if ! "${TOOL}" list rh-python36 >/dev/null 2>&1; then
+ echo "To use Certbot on this operating system, packages from the SCL repository need to be installed."
+ if ! "${TOOL}" list centos-release-scl >/dev/null 2>&1; then
+ error "Enable the SCL repository and try running Certbot again."
+ exit 1
+ fi
+ if [ "${ASSUME_YES}" = 1 ]; then
+ /bin/echo -n "Enabling the SCL repository in 3 seconds... (Press Ctrl-C to cancel)"
+ sleep 1s
+ /bin/echo -ne "\e[0K\rEnabling the SCL repository in 2 seconds... (Press Ctrl-C to cancel)"
+ sleep 1s
+ /bin/echo -e "\e[0K\rEnabling the SCL repository in 1 second... (Press Ctrl-C to cancel)"
+ sleep 1s
+ fi
+ if ! "${TOOL}" install "${YES_FLAG}" "${QUIET_FLAG}" centos-release-scl; then
+ error "Could not enable SCL. Aborting bootstrap!"
+ exit 1
+ fi
+ fi
+
+ # CentOS 6 must use rh-python36 from SCL
+ if "${TOOL}" list rh-python36 >/dev/null 2>&1; then
+ python_pkgs="rh-python36-python
+ rh-python36-python-virtualenv
+ rh-python36-python-devel
+ "
+ else
+ error "No supported Python package available to install. Aborting bootstrap!"
+ exit 1
+ fi
+
+ BootstrapRpmCommonBase "${python_pkgs}"
+
+ # Enable SCL rh-python36 after bootstrapping.
+ EnablePython36SCL
+}
+
+# If new packages are installed by BootstrapRpmPython3 below, this version
+# number must be increased.
BOOTSTRAP_RPM_PYTHON3_VERSION=1
BootstrapRpmPython3() {
# Tested with:
- # - CentOS 6
# - Fedora 29
InitializeRPMCommonBase
@@ -505,12 +570,6 @@ BootstrapRpmPython3() {
python3-virtualenv
python3-devel
"
- # EPEL uses python34
- elif $TOOL list python34 >/dev/null 2>&1; then
- python_pkgs="python34
- python34-devel
- python34-tools
- "
else
error "No supported Python package available to install. Aborting bootstrap!"
exit 1
@@ -769,31 +828,50 @@ elif [ -f /etc/redhat-release ]; then
RPM_DIST_VERSION=0
fi
- # Starting to Fedora 29, python2 is on a deprecation path. Let's move to python3 then.
- # RHEL 8 also uses python3 by default.
- if [ "$RPM_DIST_NAME" = "fedora" -a "$RPM_DIST_VERSION" -ge 29 -o "$PYVER" -eq 26 ]; then
- RPM_USE_PYTHON_3=1
- elif [ "$RPM_DIST_NAME" = "rhel" -a "$RPM_DIST_VERSION" -ge 8 ]; then
- RPM_USE_PYTHON_3=1
- elif [ "$RPM_DIST_NAME" = "centos" -a "$RPM_DIST_VERSION" -ge 8 ]; then
- RPM_USE_PYTHON_3=1
- else
- RPM_USE_PYTHON_3=0
- fi
+ # Handle legacy RPM distributions
+ if [ "$PYVER" -eq 26 ]; then
+ # Check if an automated bootstrap can be achieved on this system.
+ if ! Python36SclIsAvailable; then
+ INTERACTIVE_BOOTSTRAP=1
+ fi
- if [ "$RPM_USE_PYTHON_3" = 1 ]; then
Bootstrap() {
- BootstrapMessage "RedHat-based OSes that will use Python3"
- BootstrapRpmPython3
+ BootstrapMessage "Legacy RedHat-based OSes that will use Python3"
+ BootstrapRpmPython3Legacy
}
USE_PYTHON_3=1
- BOOTSTRAP_VERSION="BootstrapRpmPython3 $BOOTSTRAP_RPM_PYTHON3_VERSION"
+ BOOTSTRAP_VERSION="BootstrapRpmPython3Legacy $BOOTSTRAP_RPM_PYTHON3_LEGACY_VERSION"
+
+ # Try now to enable SCL rh-python36 for systems already bootstrapped
+ # NB: EnablePython36SCL has been defined along with BootstrapRpmPython3Legacy in certbot-auto
+ EnablePython36SCL
else
- Bootstrap() {
- BootstrapMessage "RedHat-based OSes"
- BootstrapRpmCommon
- }
- BOOTSTRAP_VERSION="BootstrapRpmCommon $BOOTSTRAP_RPM_COMMON_VERSION"
+ # Starting to Fedora 29, python2 is on a deprecation path. Let's move to python3 then.
+ # RHEL 8 also uses python3 by default.
+ if [ "$RPM_DIST_NAME" = "fedora" -a "$RPM_DIST_VERSION" -ge 29 ]; then
+ RPM_USE_PYTHON_3=1
+ elif [ "$RPM_DIST_NAME" = "rhel" -a "$RPM_DIST_VERSION" -ge 8 ]; then
+ RPM_USE_PYTHON_3=1
+ elif [ "$RPM_DIST_NAME" = "centos" -a "$RPM_DIST_VERSION" -ge 8 ]; then
+ RPM_USE_PYTHON_3=1
+ else
+ RPM_USE_PYTHON_3=0
+ fi
+
+ if [ "$RPM_USE_PYTHON_3" = 1 ]; then
+ Bootstrap() {
+ BootstrapMessage "RedHat-based OSes that will use Python3"
+ BootstrapRpmPython3
+ }
+ USE_PYTHON_3=1
+ BOOTSTRAP_VERSION="BootstrapRpmPython3 $BOOTSTRAP_RPM_PYTHON3_VERSION"
+ else
+ Bootstrap() {
+ BootstrapMessage "RedHat-based OSes"
+ BootstrapRpmCommon
+ }
+ BOOTSTRAP_VERSION="BootstrapRpmCommon $BOOTSTRAP_RPM_COMMON_VERSION"
+ fi
fi
LE_PYTHON="$prev_le_python"
@@ -1078,8 +1156,15 @@ if [ "$1" = "--le-auto-phase2" ]; then
# If the selected Bootstrap function isn't a noop and it differs from the
# previously used version
if [ -n "$BOOTSTRAP_VERSION" -a "$BOOTSTRAP_VERSION" != "$PREV_BOOTSTRAP_VERSION" ]; then
- # if non-interactive mode or stdin and stdout are connected to a terminal
- if [ \( "$NONINTERACTIVE" = 1 \) -o \( \( -t 0 \) -a \( -t 1 \) \) ]; then
+ # Check if we can rebootstrap without manual user intervention: this requires that
+ # certbot-auto is in non-interactive mode AND selected bootstrap does not claim to
+ # require a manual user intervention.
+ if [ "$NONINTERACTIVE" = 1 -a "$INTERACTIVE_BOOTSTRAP" != 1 ]; then
+ CAN_REBOOTSTRAP=1
+ fi
+ # Check if rebootstrap can be done non-interactively and current shell is non-interactive
+ # (true if stdin and stdout are not attached to a terminal).
+ if [ \( "$CAN_REBOOTSTRAP" = 1 \) -o \( \( -t 0 \) -a \( -t 1 \) \) ]; then
if [ -d "$VENV_PATH" ]; then
rm -rf "$VENV_PATH"
fi
@@ -1090,12 +1175,21 @@ if [ "$1" = "--le-auto-phase2" ]; then
ln -s "$VENV_PATH" "$OLD_VENV_PATH"
fi
RerunWithArgs "$@"
+ # Otherwise bootstrap needs to be done manually by the user.
else
- error "Skipping upgrade because new OS dependencies may need to be installed."
- error
- error "To upgrade to a newer version, please run this script again manually so you can"
- error "approve changes or with --non-interactive on the command line to automatically"
- error "install any required packages."
+ # If it is because bootstrapping is interactive, --non-interactive will be of no use.
+ if [ "$INTERACTIVE_BOOTSTRAP" = 1 ]; then
+ error "Skipping upgrade because new OS dependencies may need to be installed."
+ error "This requires manual user intervention: please run this script again manually."
+ # If this is because of the environment (eg. non interactive shell without
+ # --non-interactive flag set), help the user in that direction.
+ else
+ error "Skipping upgrade because new OS dependencies may need to be installed."
+ error
+ error "To upgrade to a newer version, please run this script again manually so you can"
+ error "approve changes or with --non-interactive on the command line to automatically"
+ error "install any required packages."
+ fi
# Set INSTALLED_VERSION to be the same so we don't update the venv
INSTALLED_VERSION="$LE_AUTO_VERSION"
# Continue to use OLD_VENV_PATH if the new venv doesn't exist
@@ -1338,18 +1432,18 @@ letsencrypt==0.7.0 \
--hash=sha256:105a5fb107e45bcd0722eb89696986dcf5f08a86a321d6aef25a0c7c63375ade \
--hash=sha256:c36e532c486a7e92155ee09da54b436a3c420813ec1c590b98f635d924720de9
-certbot==0.39.0 \
- --hash=sha256:f1a70651a6c5137a448f4a8db17b09af619f80a077326caae6b74278bf1db488 \
- --hash=sha256:885cee1c4d05888af86b626cbbfc29d3c6c842ef4fe8f4a486994cef9daddfe0
-acme==0.39.0 \
- --hash=sha256:4f8be913df289b981852042719469cc367a7e436256f232c799d0bd1521db710 \
- --hash=sha256:a2fcb75d16de6804f4b4d773a457ee2f6434ebaf8fd1aa60862a91d4e8f73608
-certbot-apache==0.39.0 \
- --hash=sha256:c7a8630a85b753a52ca0b8c19e24b8f85ac4ba028292a95745e250c2e72faab9 \
- --hash=sha256:4651a0212c9ebc3087281dad92ad3cb355bb2730f432d0180a8d23325d11825a
-certbot-nginx==0.39.0 \
- --hash=sha256:76e5862ad5cc0fbc099df3502987c101c60dee1c188a579eac990edee7a910df \
- --hash=sha256:ceac88df52d3b27d14c3052b9e90ada327d7e14ecd6e4af7519918182d6138b4
+certbot==0.40.0 \
+ --hash=sha256:b9ff74c4f3d3e06d9c467465f97bcbb07b0f4d778d3c4232ab91583d933dba61 \
+ --hash=sha256:cff166597b3c714c3e7e60b2bcd6089135b375cadca04cf36abd15bfdb22be40
+acme==0.40.0 \
+ --hash=sha256:1b026b07a2099e50dac11cbdb834925f1d9b5691e349b52e9d397a12f3dc4eac \
+ --hash=sha256:f29c1185d1e33919bad6c1f3fece168ee191d96d47f5997117561dc74a454221
+certbot-apache==0.40.0 \
+ --hash=sha256:f1c034a05fbd6cc6fde9494f493a8a6ed0e02e7652e51af16342082bc17387e4 \
+ --hash=sha256:43c3d7628ca6630467c4f57dd30423f031c1c7cbca46f7500293172d0fe3581e
+certbot-nginx==0.40.0 \
+ --hash=sha256:55cd3c90e2851069b536859050374fe2fcfa22c3e862cc0e1811fbce9e52dccc \
+ --hash=sha256:3df8cec22910f2d41ccb4494661ff65f98c52dd441864a53a318b32979256881
UNLIKELY_EOF
# -------------------------------------------------------------------------
diff --git a/certbot-compatibility-test/setup.py b/certbot-compatibility-test/setup.py
index 1d648db17..e7f4880f1 100644
--- a/certbot-compatibility-test/setup.py
+++ b/certbot-compatibility-test/setup.py
@@ -4,7 +4,7 @@ from setuptools import setup
from setuptools import find_packages
-version = '0.40.0.dev0'
+version = '0.40.0'
install_requires = [
'certbot',
diff --git a/certbot-dns-cloudflare/setup.py b/certbot-dns-cloudflare/setup.py
index 5ad8f1568..1855428d2 100644
--- a/certbot-dns-cloudflare/setup.py
+++ b/certbot-dns-cloudflare/setup.py
@@ -2,7 +2,7 @@ from setuptools import setup
from setuptools import find_packages
-version = '0.40.0.dev0'
+version = '0.40.0'
# Remember to update local-oldest-requirements.txt when changing the minimum
# acme/certbot version.
diff --git a/certbot-dns-cloudxns/setup.py b/certbot-dns-cloudxns/setup.py
index 0dd5bc397..e642d406a 100644
--- a/certbot-dns-cloudxns/setup.py
+++ b/certbot-dns-cloudxns/setup.py
@@ -2,7 +2,7 @@ from setuptools import setup
from setuptools import find_packages
-version = '0.40.0.dev0'
+version = '0.40.0'
# Remember to update local-oldest-requirements.txt when changing the minimum
# acme/certbot version.
diff --git a/certbot-dns-digitalocean/setup.py b/certbot-dns-digitalocean/setup.py
index 2d3139a2f..c6fbc9a0c 100644
--- a/certbot-dns-digitalocean/setup.py
+++ b/certbot-dns-digitalocean/setup.py
@@ -2,7 +2,7 @@ from setuptools import setup
from setuptools import find_packages
-version = '0.40.0.dev0'
+version = '0.40.0'
# Remember to update local-oldest-requirements.txt when changing the minimum
# acme/certbot version.
diff --git a/certbot-dns-dnsimple/setup.py b/certbot-dns-dnsimple/setup.py
index 6925946ec..a62afa912 100644
--- a/certbot-dns-dnsimple/setup.py
+++ b/certbot-dns-dnsimple/setup.py
@@ -3,7 +3,7 @@ from setuptools import setup
from setuptools import find_packages
-version = '0.40.0.dev0'
+version = '0.40.0'
# Remember to update local-oldest-requirements.txt when changing the minimum
# acme/certbot version.
diff --git a/certbot-dns-dnsmadeeasy/setup.py b/certbot-dns-dnsmadeeasy/setup.py
index d31e52686..cf35a0427 100644
--- a/certbot-dns-dnsmadeeasy/setup.py
+++ b/certbot-dns-dnsmadeeasy/setup.py
@@ -2,7 +2,7 @@ from setuptools import setup
from setuptools import find_packages
-version = '0.40.0.dev0'
+version = '0.40.0'
# Remember to update local-oldest-requirements.txt when changing the minimum
# acme/certbot version.
diff --git a/certbot-dns-gehirn/setup.py b/certbot-dns-gehirn/setup.py
index f6b944625..06399cace 100644
--- a/certbot-dns-gehirn/setup.py
+++ b/certbot-dns-gehirn/setup.py
@@ -2,7 +2,7 @@ from setuptools import setup
from setuptools import find_packages
-version = '0.40.0.dev0'
+version = '0.40.0'
# Please update tox.ini when modifying dependency version requirements
install_requires = [
diff --git a/certbot-dns-google/setup.py b/certbot-dns-google/setup.py
index 6bf12ddbf..37903034d 100644
--- a/certbot-dns-google/setup.py
+++ b/certbot-dns-google/setup.py
@@ -2,7 +2,7 @@ from setuptools import setup
from setuptools import find_packages
-version = '0.40.0.dev0'
+version = '0.40.0'
# Remember to update local-oldest-requirements.txt when changing the minimum
# acme/certbot version.
diff --git a/certbot-dns-linode/setup.py b/certbot-dns-linode/setup.py
index ce4647514..11c0d577f 100644
--- a/certbot-dns-linode/setup.py
+++ b/certbot-dns-linode/setup.py
@@ -1,7 +1,7 @@
from setuptools import setup
from setuptools import find_packages
-version = '0.40.0.dev0'
+version = '0.40.0'
# Please update tox.ini when modifying dependency version requirements
install_requires = [
diff --git a/certbot-dns-luadns/setup.py b/certbot-dns-luadns/setup.py
index f260c68db..2bf62d4a0 100644
--- a/certbot-dns-luadns/setup.py
+++ b/certbot-dns-luadns/setup.py
@@ -2,7 +2,7 @@ from setuptools import setup
from setuptools import find_packages
-version = '0.40.0.dev0'
+version = '0.40.0'
# Remember to update local-oldest-requirements.txt when changing the minimum
# acme/certbot version.
diff --git a/certbot-dns-nsone/setup.py b/certbot-dns-nsone/setup.py
index c6a5ca443..7ed20ad8a 100644
--- a/certbot-dns-nsone/setup.py
+++ b/certbot-dns-nsone/setup.py
@@ -2,7 +2,7 @@ from setuptools import setup
from setuptools import find_packages
-version = '0.40.0.dev0'
+version = '0.40.0'
# Remember to update local-oldest-requirements.txt when changing the minimum
# acme/certbot version.
diff --git a/certbot-dns-ovh/setup.py b/certbot-dns-ovh/setup.py
index 48b8cee4e..849cbc548 100644
--- a/certbot-dns-ovh/setup.py
+++ b/certbot-dns-ovh/setup.py
@@ -2,7 +2,7 @@ from setuptools import setup
from setuptools import find_packages
-version = '0.40.0.dev0'
+version = '0.40.0'
# Remember to update local-oldest-requirements.txt when changing the minimum
# acme/certbot version.
diff --git a/certbot-dns-rfc2136/setup.py b/certbot-dns-rfc2136/setup.py
index 6fc69ebc0..d03c7cc0c 100644
--- a/certbot-dns-rfc2136/setup.py
+++ b/certbot-dns-rfc2136/setup.py
@@ -2,7 +2,7 @@ from setuptools import setup
from setuptools import find_packages
-version = '0.40.0.dev0'
+version = '0.40.0'
# Remember to update local-oldest-requirements.txt when changing the minimum
# acme/certbot version.
diff --git a/certbot-dns-route53/setup.py b/certbot-dns-route53/setup.py
index 857e07965..0f097f977 100644
--- a/certbot-dns-route53/setup.py
+++ b/certbot-dns-route53/setup.py
@@ -1,7 +1,7 @@
from setuptools import setup
from setuptools import find_packages
-version = '0.40.0.dev0'
+version = '0.40.0'
# Remember to update local-oldest-requirements.txt when changing the minimum
# acme/certbot version.
diff --git a/certbot-dns-sakuracloud/setup.py b/certbot-dns-sakuracloud/setup.py
index c153c681f..9d2b0f901 100644
--- a/certbot-dns-sakuracloud/setup.py
+++ b/certbot-dns-sakuracloud/setup.py
@@ -2,7 +2,7 @@ from setuptools import setup
from setuptools import find_packages
-version = '0.40.0.dev0'
+version = '0.40.0'
# Please update tox.ini when modifying dependency version requirements
install_requires = [
diff --git a/certbot-nginx/setup.py b/certbot-nginx/setup.py
index 8fe300193..b53e16659 100644
--- a/certbot-nginx/setup.py
+++ b/certbot-nginx/setup.py
@@ -4,7 +4,7 @@ from setuptools.command.test import test as TestCommand
import sys
-version = '0.40.0.dev0'
+version = '0.40.0'
# Remember to update local-oldest-requirements.txt when changing the minimum
# acme/certbot version.
diff --git a/certbot/__init__.py b/certbot/__init__.py
index 27b8684e1..ca79e552f 100644
--- a/certbot/__init__.py
+++ b/certbot/__init__.py
@@ -1,4 +1,4 @@
"""Certbot client."""
# version number like 1.2.3a0, must have at least 2 parts, like 1.2
-__version__ = '0.40.0.dev0'
+__version__ = '0.40.0'
diff --git a/docs/cli-help.txt b/docs/cli-help.txt
index 134a6879a..37539a24b 100644
--- a/docs/cli-help.txt
+++ b/docs/cli-help.txt
@@ -113,7 +113,7 @@ optional arguments:
case, and to know when to deprecate support for past
Python versions and flags. If you wish to hide this
information from the Let's Encrypt server, set this to
- "". (default: CertbotACMEClient/0.39.0
+ "". (default: CertbotACMEClient/0.40.0
(certbot(-auto); OS_NAME OS_VERSION) Authenticator/XXX
Installer/YYY (SUBCOMMAND; flags: FLAGS)
Py/major.minor.patchlevel). The flags encoded in the
diff --git a/letsencrypt-auto b/letsencrypt-auto
index 68ced3260..5df7f5f30 100755
--- a/letsencrypt-auto
+++ b/letsencrypt-auto
@@ -31,7 +31,7 @@ if [ -z "$VENV_PATH" ]; then
fi
VENV_BIN="$VENV_PATH/bin"
BOOTSTRAP_VERSION_PATH="$VENV_PATH/certbot-auto-bootstrap-version.txt"
-LE_AUTO_VERSION="0.39.0"
+LE_AUTO_VERSION="0.40.0"
BASENAME=$(basename $0)
USAGE="Usage: $BASENAME [OPTIONS]
A self-updating wrapper script for the Certbot ACME client. When run, updates
@@ -256,20 +256,28 @@ DeprecationBootstrap() {
fi
}
-MIN_PYTHON_VERSION="2.7"
-MIN_PYVER=$(echo "$MIN_PYTHON_VERSION" | sed 's/\.//')
+MIN_PYTHON_2_VERSION="2.7"
+MIN_PYVER2=$(echo "$MIN_PYTHON_2_VERSION" | sed 's/\.//')
+MIN_PYTHON_3_VERSION="3.5"
+MIN_PYVER3=$(echo "$MIN_PYTHON_3_VERSION" | sed 's/\.//')
# Sets LE_PYTHON to Python version string and PYVER to the first two
-# digits of the python version
+# digits of the python version.
+# MIN_PYVER and MIN_PYTHON_VERSION are also set by this function, and their
+# values depend on if we try to use Python 3 or Python 2.
DeterminePythonVersion() {
# Arguments: "NOCRASH" if we shouldn't crash if we don't find a good python
#
# If no Python is found, PYVER is set to 0.
if [ "$USE_PYTHON_3" = 1 ]; then
+ MIN_PYVER=$MIN_PYVER3
+ MIN_PYTHON_VERSION=$MIN_PYTHON_3_VERSION
for LE_PYTHON in "$LE_PYTHON" python3; do
# Break (while keeping the LE_PYTHON value) if found.
$EXISTS "$LE_PYTHON" > /dev/null && break
done
else
+ MIN_PYVER=$MIN_PYVER2
+ MIN_PYTHON_VERSION=$MIN_PYTHON_2_VERSION
for LE_PYTHON in "$LE_PYTHON" python2.7 python27 python2 python; do
# Break (while keeping the LE_PYTHON value) if found.
$EXISTS "$LE_PYTHON" > /dev/null && break
@@ -285,7 +293,7 @@ DeterminePythonVersion() {
fi
fi
- PYVER=`"$LE_PYTHON" -V 2>&1 | cut -d" " -f 2 | cut -d. -f1,2 | sed 's/\.//'`
+ PYVER=$("$LE_PYTHON" -V 2>&1 | cut -d" " -f 2 | cut -d. -f1,2 | sed 's/\.//')
if [ "$PYVER" -lt "$MIN_PYVER" ]; then
if [ "$1" != "NOCRASH" ]; then
error "You have an ancient version of Python entombed in your operating system..."
@@ -368,7 +376,9 @@ BootstrapDebCommon() {
# Sets TOOL to the name of the package manager
# Sets appropriate values for YES_FLAG and QUIET_FLAG based on $ASSUME_YES and $QUIET_FLAG.
-# Enables EPEL if applicable and possible.
+# Note: this function is called both while selecting the bootstrap scripts and
+# during the actual bootstrap. Some things like prompting to user can be done in the latter
+# case, but not in the former one.
InitializeRPMCommonBase() {
if type dnf 2>/dev/null
then
@@ -388,26 +398,6 @@ InitializeRPMCommonBase() {
if [ "$QUIET" = 1 ]; then
QUIET_FLAG='--quiet'
fi
-
- if ! $TOOL list *virtualenv >/dev/null 2>&1; then
- echo "To use Certbot, packages from the EPEL repository need to be installed."
- if ! $TOOL list epel-release >/dev/null 2>&1; then
- error "Enable the EPEL repository and try running Certbot again."
- exit 1
- fi
- if [ "$ASSUME_YES" = 1 ]; then
- /bin/echo -n "Enabling the EPEL repository in 3 seconds..."
- sleep 1s
- /bin/echo -ne "\e[0K\rEnabling the EPEL repository in 2 seconds..."
- sleep 1s
- /bin/echo -e "\e[0K\rEnabling the EPEL repository in 1 second..."
- sleep 1s
- fi
- if ! $TOOL install $YES_FLAG $QUIET_FLAG epel-release; then
- error "Could not enable EPEL. Aborting bootstrap!"
- exit 1
- fi
- fi
}
BootstrapRpmCommonBase() {
@@ -490,11 +480,86 @@ BootstrapRpmCommon() {
# If new packages are installed by BootstrapRpmPython3 below, this version
# number must be increased.
+BOOTSTRAP_RPM_PYTHON3_LEGACY_VERSION=1
+
+# Checks if rh-python36 can be installed.
+Python36SclIsAvailable() {
+ InitializeRPMCommonBase >/dev/null 2>&1;
+
+ if "${TOOL}" list rh-python36 >/dev/null 2>&1; then
+ return 0
+ fi
+ if "${TOOL}" list centos-release-scl >/dev/null 2>&1; then
+ return 0
+ fi
+ return 1
+}
+
+# Try to enable rh-python36 from SCL if it is necessary and possible.
+EnablePython36SCL() {
+ if "$EXISTS" python3.6 > /dev/null 2> /dev/null; then
+ return 0
+ fi
+ if ! scl --list 2>/dev/null | grep -q rh-python36; then
+ return 0
+ fi
+ set +e
+ . scl_source enable rh-python36
+ set -e
+}
+
+# This bootstrap concerns old RedHat-based distributions that do not ship by default
+# with Python 2.7, but only Python 2.6. We bootstrap them by enabling SCL and installing
+# Python 3.6. Some of these distributions are: CentOS/RHEL/OL/SL 6.
+BootstrapRpmPython3Legacy() {
+ # Tested with:
+ # - CentOS 6
+
+ InitializeRPMCommonBase
+
+ if ! "${TOOL}" list rh-python36 >/dev/null 2>&1; then
+ echo "To use Certbot on this operating system, packages from the SCL repository need to be installed."
+ if ! "${TOOL}" list centos-release-scl >/dev/null 2>&1; then
+ error "Enable the SCL repository and try running Certbot again."
+ exit 1
+ fi
+ if [ "${ASSUME_YES}" = 1 ]; then
+ /bin/echo -n "Enabling the SCL repository in 3 seconds... (Press Ctrl-C to cancel)"
+ sleep 1s
+ /bin/echo -ne "\e[0K\rEnabling the SCL repository in 2 seconds... (Press Ctrl-C to cancel)"
+ sleep 1s
+ /bin/echo -e "\e[0K\rEnabling the SCL repository in 1 second... (Press Ctrl-C to cancel)"
+ sleep 1s
+ fi
+ if ! "${TOOL}" install "${YES_FLAG}" "${QUIET_FLAG}" centos-release-scl; then
+ error "Could not enable SCL. Aborting bootstrap!"
+ exit 1
+ fi
+ fi
+
+ # CentOS 6 must use rh-python36 from SCL
+ if "${TOOL}" list rh-python36 >/dev/null 2>&1; then
+ python_pkgs="rh-python36-python
+ rh-python36-python-virtualenv
+ rh-python36-python-devel
+ "
+ else
+ error "No supported Python package available to install. Aborting bootstrap!"
+ exit 1
+ fi
+
+ BootstrapRpmCommonBase "${python_pkgs}"
+
+ # Enable SCL rh-python36 after bootstrapping.
+ EnablePython36SCL
+}
+
+# If new packages are installed by BootstrapRpmPython3 below, this version
+# number must be increased.
BOOTSTRAP_RPM_PYTHON3_VERSION=1
BootstrapRpmPython3() {
# Tested with:
- # - CentOS 6
# - Fedora 29
InitializeRPMCommonBase
@@ -505,12 +570,6 @@ BootstrapRpmPython3() {
python3-virtualenv
python3-devel
"
- # EPEL uses python34
- elif $TOOL list python34 >/dev/null 2>&1; then
- python_pkgs="python34
- python34-devel
- python34-tools
- "
else
error "No supported Python package available to install. Aborting bootstrap!"
exit 1
@@ -769,31 +828,50 @@ elif [ -f /etc/redhat-release ]; then
RPM_DIST_VERSION=0
fi
- # Starting to Fedora 29, python2 is on a deprecation path. Let's move to python3 then.
- # RHEL 8 also uses python3 by default.
- if [ "$RPM_DIST_NAME" = "fedora" -a "$RPM_DIST_VERSION" -ge 29 -o "$PYVER" -eq 26 ]; then
- RPM_USE_PYTHON_3=1
- elif [ "$RPM_DIST_NAME" = "rhel" -a "$RPM_DIST_VERSION" -ge 8 ]; then
- RPM_USE_PYTHON_3=1
- elif [ "$RPM_DIST_NAME" = "centos" -a "$RPM_DIST_VERSION" -ge 8 ]; then
- RPM_USE_PYTHON_3=1
- else
- RPM_USE_PYTHON_3=0
- fi
+ # Handle legacy RPM distributions
+ if [ "$PYVER" -eq 26 ]; then
+ # Check if an automated bootstrap can be achieved on this system.
+ if ! Python36SclIsAvailable; then
+ INTERACTIVE_BOOTSTRAP=1
+ fi
- if [ "$RPM_USE_PYTHON_3" = 1 ]; then
Bootstrap() {
- BootstrapMessage "RedHat-based OSes that will use Python3"
- BootstrapRpmPython3
+ BootstrapMessage "Legacy RedHat-based OSes that will use Python3"
+ BootstrapRpmPython3Legacy
}
USE_PYTHON_3=1
- BOOTSTRAP_VERSION="BootstrapRpmPython3 $BOOTSTRAP_RPM_PYTHON3_VERSION"
+ BOOTSTRAP_VERSION="BootstrapRpmPython3Legacy $BOOTSTRAP_RPM_PYTHON3_LEGACY_VERSION"
+
+ # Try now to enable SCL rh-python36 for systems already bootstrapped
+ # NB: EnablePython36SCL has been defined along with BootstrapRpmPython3Legacy in certbot-auto
+ EnablePython36SCL
else
- Bootstrap() {
- BootstrapMessage "RedHat-based OSes"
- BootstrapRpmCommon
- }
- BOOTSTRAP_VERSION="BootstrapRpmCommon $BOOTSTRAP_RPM_COMMON_VERSION"
+ # Starting to Fedora 29, python2 is on a deprecation path. Let's move to python3 then.
+ # RHEL 8 also uses python3 by default.
+ if [ "$RPM_DIST_NAME" = "fedora" -a "$RPM_DIST_VERSION" -ge 29 ]; then
+ RPM_USE_PYTHON_3=1
+ elif [ "$RPM_DIST_NAME" = "rhel" -a "$RPM_DIST_VERSION" -ge 8 ]; then
+ RPM_USE_PYTHON_3=1
+ elif [ "$RPM_DIST_NAME" = "centos" -a "$RPM_DIST_VERSION" -ge 8 ]; then
+ RPM_USE_PYTHON_3=1
+ else
+ RPM_USE_PYTHON_3=0
+ fi
+
+ if [ "$RPM_USE_PYTHON_3" = 1 ]; then
+ Bootstrap() {
+ BootstrapMessage "RedHat-based OSes that will use Python3"
+ BootstrapRpmPython3
+ }
+ USE_PYTHON_3=1
+ BOOTSTRAP_VERSION="BootstrapRpmPython3 $BOOTSTRAP_RPM_PYTHON3_VERSION"
+ else
+ Bootstrap() {
+ BootstrapMessage "RedHat-based OSes"
+ BootstrapRpmCommon
+ }
+ BOOTSTRAP_VERSION="BootstrapRpmCommon $BOOTSTRAP_RPM_COMMON_VERSION"
+ fi
fi
LE_PYTHON="$prev_le_python"
@@ -1078,8 +1156,15 @@ if [ "$1" = "--le-auto-phase2" ]; then
# If the selected Bootstrap function isn't a noop and it differs from the
# previously used version
if [ -n "$BOOTSTRAP_VERSION" -a "$BOOTSTRAP_VERSION" != "$PREV_BOOTSTRAP_VERSION" ]; then
- # if non-interactive mode or stdin and stdout are connected to a terminal
- if [ \( "$NONINTERACTIVE" = 1 \) -o \( \( -t 0 \) -a \( -t 1 \) \) ]; then
+ # Check if we can rebootstrap without manual user intervention: this requires that
+ # certbot-auto is in non-interactive mode AND selected bootstrap does not claim to
+ # require a manual user intervention.
+ if [ "$NONINTERACTIVE" = 1 -a "$INTERACTIVE_BOOTSTRAP" != 1 ]; then
+ CAN_REBOOTSTRAP=1
+ fi
+ # Check if rebootstrap can be done non-interactively and current shell is non-interactive
+ # (true if stdin and stdout are not attached to a terminal).
+ if [ \( "$CAN_REBOOTSTRAP" = 1 \) -o \( \( -t 0 \) -a \( -t 1 \) \) ]; then
if [ -d "$VENV_PATH" ]; then
rm -rf "$VENV_PATH"
fi
@@ -1090,12 +1175,21 @@ if [ "$1" = "--le-auto-phase2" ]; then
ln -s "$VENV_PATH" "$OLD_VENV_PATH"
fi
RerunWithArgs "$@"
+ # Otherwise bootstrap needs to be done manually by the user.
else
- error "Skipping upgrade because new OS dependencies may need to be installed."
- error
- error "To upgrade to a newer version, please run this script again manually so you can"
- error "approve changes or with --non-interactive on the command line to automatically"
- error "install any required packages."
+ # If it is because bootstrapping is interactive, --non-interactive will be of no use.
+ if [ "$INTERACTIVE_BOOTSTRAP" = 1 ]; then
+ error "Skipping upgrade because new OS dependencies may need to be installed."
+ error "This requires manual user intervention: please run this script again manually."
+ # If this is because of the environment (eg. non interactive shell without
+ # --non-interactive flag set), help the user in that direction.
+ else
+ error "Skipping upgrade because new OS dependencies may need to be installed."
+ error
+ error "To upgrade to a newer version, please run this script again manually so you can"
+ error "approve changes or with --non-interactive on the command line to automatically"
+ error "install any required packages."
+ fi
# Set INSTALLED_VERSION to be the same so we don't update the venv
INSTALLED_VERSION="$LE_AUTO_VERSION"
# Continue to use OLD_VENV_PATH if the new venv doesn't exist
@@ -1338,18 +1432,18 @@ letsencrypt==0.7.0 \
--hash=sha256:105a5fb107e45bcd0722eb89696986dcf5f08a86a321d6aef25a0c7c63375ade \
--hash=sha256:c36e532c486a7e92155ee09da54b436a3c420813ec1c590b98f635d924720de9
-certbot==0.39.0 \
- --hash=sha256:f1a70651a6c5137a448f4a8db17b09af619f80a077326caae6b74278bf1db488 \
- --hash=sha256:885cee1c4d05888af86b626cbbfc29d3c6c842ef4fe8f4a486994cef9daddfe0
-acme==0.39.0 \
- --hash=sha256:4f8be913df289b981852042719469cc367a7e436256f232c799d0bd1521db710 \
- --hash=sha256:a2fcb75d16de6804f4b4d773a457ee2f6434ebaf8fd1aa60862a91d4e8f73608
-certbot-apache==0.39.0 \
- --hash=sha256:c7a8630a85b753a52ca0b8c19e24b8f85ac4ba028292a95745e250c2e72faab9 \
- --hash=sha256:4651a0212c9ebc3087281dad92ad3cb355bb2730f432d0180a8d23325d11825a
-certbot-nginx==0.39.0 \
- --hash=sha256:76e5862ad5cc0fbc099df3502987c101c60dee1c188a579eac990edee7a910df \
- --hash=sha256:ceac88df52d3b27d14c3052b9e90ada327d7e14ecd6e4af7519918182d6138b4
+certbot==0.40.0 \
+ --hash=sha256:b9ff74c4f3d3e06d9c467465f97bcbb07b0f4d778d3c4232ab91583d933dba61 \
+ --hash=sha256:cff166597b3c714c3e7e60b2bcd6089135b375cadca04cf36abd15bfdb22be40
+acme==0.40.0 \
+ --hash=sha256:1b026b07a2099e50dac11cbdb834925f1d9b5691e349b52e9d397a12f3dc4eac \
+ --hash=sha256:f29c1185d1e33919bad6c1f3fece168ee191d96d47f5997117561dc74a454221
+certbot-apache==0.40.0 \
+ --hash=sha256:f1c034a05fbd6cc6fde9494f493a8a6ed0e02e7652e51af16342082bc17387e4 \
+ --hash=sha256:43c3d7628ca6630467c4f57dd30423f031c1c7cbca46f7500293172d0fe3581e
+certbot-nginx==0.40.0 \
+ --hash=sha256:55cd3c90e2851069b536859050374fe2fcfa22c3e862cc0e1811fbce9e52dccc \
+ --hash=sha256:3df8cec22910f2d41ccb4494661ff65f98c52dd441864a53a318b32979256881
UNLIKELY_EOF
# -------------------------------------------------------------------------
diff --git a/letsencrypt-auto-source/certbot-auto.asc b/letsencrypt-auto-source/certbot-auto.asc
index f25f27cdf..3bdb8a93c 100644
--- a/letsencrypt-auto-source/certbot-auto.asc
+++ b/letsencrypt-auto-source/certbot-auto.asc
@@ -1,11 +1,11 @@
-----BEGIN PGP SIGNATURE-----
-iQEzBAABCAAdFiEEos+1H6J1pyhiNOeyTRfJlc2XdfIFAl2TsPMACgkQTRfJlc2X
-dfJHUAf+NcnvHzowhLr1rkR11CSKMCMgwUee7Nm0QHnVPf09+Dd9mvuaRptuua1D
-Qvtcb3F4OQ6/3khy3fzGXIcEe9kuI2+boe+ZA0dfmmzo4ELzpWUadXkuonYybZFE
-JAaICgLLHOkiRL8J8ZTmXZI4tbFSsxTLMNOwoMZ6oGgp2plj2rm85L4Z+vUlfaTf
-wcs/glbBtbYfW3WWapMsMWwgrE62Q/OOhBjbkPCywFRQDwwaXz6QPrvi+k6gLCqs
-Okvg5bY2hP70tU1i9wxp2DAfF/P/5i2hVSWktRdMolUTTTeczLW81allmmDRJcAi
-4xrj6wYhN7olMZrTpakXb7zRR9/MGQ==
-=Ag2y
+iQEzBAABCAAdFiEEos+1H6J1pyhiNOeyTRfJlc2XdfIFAl3B4KcACgkQTRfJlc2X
+dfJKHAf+PUViUdwbaXUMNfDRo7g6v44RA0RIj+SG3cjLsX2E/A2G70KndfUC/9KS
+cgYpFZ3h/2y3fLLsYgDIOPRhAKLgrk+LFKrtDsUbOLF7K3eS70KQmDxYFXNzw0jc
+34zhc9BKsKrqX6a80LprkVtbEuRlE58JaXyqjMW8NvGvLXNV8qCZK8xG8SrCkVnU
+KFlXgHAl3UFibm3yJOlIjHikuOaU0jlDbO/S2WfkkgV3BWQkngUKu+9gr+ItV3We
+GMidJljIoho8CqYQnLWtsjhOmjLQogsUKZJSg/riAxrDW3cCEmF4EaV/S8lNnSiL
+f49WauHsGdfIaFabl8HVG7h+R3Uh8Q==
+=JXq9
-----END PGP SIGNATURE-----
diff --git a/letsencrypt-auto-source/letsencrypt-auto b/letsencrypt-auto-source/letsencrypt-auto
index c0f7466ae..5df7f5f30 100755
--- a/letsencrypt-auto-source/letsencrypt-auto
+++ b/letsencrypt-auto-source/letsencrypt-auto
@@ -31,7 +31,7 @@ if [ -z "$VENV_PATH" ]; then
fi
VENV_BIN="$VENV_PATH/bin"
BOOTSTRAP_VERSION_PATH="$VENV_PATH/certbot-auto-bootstrap-version.txt"
-LE_AUTO_VERSION="0.40.0.dev0"
+LE_AUTO_VERSION="0.40.0"
BASENAME=$(basename $0)
USAGE="Usage: $BASENAME [OPTIONS]
A self-updating wrapper script for the Certbot ACME client. When run, updates
@@ -1432,18 +1432,18 @@ letsencrypt==0.7.0 \
--hash=sha256:105a5fb107e45bcd0722eb89696986dcf5f08a86a321d6aef25a0c7c63375ade \
--hash=sha256:c36e532c486a7e92155ee09da54b436a3c420813ec1c590b98f635d924720de9
-certbot==0.39.0 \
- --hash=sha256:f1a70651a6c5137a448f4a8db17b09af619f80a077326caae6b74278bf1db488 \
- --hash=sha256:885cee1c4d05888af86b626cbbfc29d3c6c842ef4fe8f4a486994cef9daddfe0
-acme==0.39.0 \
- --hash=sha256:4f8be913df289b981852042719469cc367a7e436256f232c799d0bd1521db710 \
- --hash=sha256:a2fcb75d16de6804f4b4d773a457ee2f6434ebaf8fd1aa60862a91d4e8f73608
-certbot-apache==0.39.0 \
- --hash=sha256:c7a8630a85b753a52ca0b8c19e24b8f85ac4ba028292a95745e250c2e72faab9 \
- --hash=sha256:4651a0212c9ebc3087281dad92ad3cb355bb2730f432d0180a8d23325d11825a
-certbot-nginx==0.39.0 \
- --hash=sha256:76e5862ad5cc0fbc099df3502987c101c60dee1c188a579eac990edee7a910df \
- --hash=sha256:ceac88df52d3b27d14c3052b9e90ada327d7e14ecd6e4af7519918182d6138b4
+certbot==0.40.0 \
+ --hash=sha256:b9ff74c4f3d3e06d9c467465f97bcbb07b0f4d778d3c4232ab91583d933dba61 \
+ --hash=sha256:cff166597b3c714c3e7e60b2bcd6089135b375cadca04cf36abd15bfdb22be40
+acme==0.40.0 \
+ --hash=sha256:1b026b07a2099e50dac11cbdb834925f1d9b5691e349b52e9d397a12f3dc4eac \
+ --hash=sha256:f29c1185d1e33919bad6c1f3fece168ee191d96d47f5997117561dc74a454221
+certbot-apache==0.40.0 \
+ --hash=sha256:f1c034a05fbd6cc6fde9494f493a8a6ed0e02e7652e51af16342082bc17387e4 \
+ --hash=sha256:43c3d7628ca6630467c4f57dd30423f031c1c7cbca46f7500293172d0fe3581e
+certbot-nginx==0.40.0 \
+ --hash=sha256:55cd3c90e2851069b536859050374fe2fcfa22c3e862cc0e1811fbce9e52dccc \
+ --hash=sha256:3df8cec22910f2d41ccb4494661ff65f98c52dd441864a53a318b32979256881
UNLIKELY_EOF
# -------------------------------------------------------------------------
diff --git a/letsencrypt-auto-source/letsencrypt-auto.sig b/letsencrypt-auto-source/letsencrypt-auto.sig
index d9147680b..b961bbc91 100644
--- a/letsencrypt-auto-source/letsencrypt-auto.sig
+++ b/letsencrypt-auto-source/letsencrypt-auto.sig
Binary files differ
diff --git a/letsencrypt-auto-source/pieces/certbot-requirements.txt b/letsencrypt-auto-source/pieces/certbot-requirements.txt
index 7d1c09069..415663f96 100644
--- a/letsencrypt-auto-source/pieces/certbot-requirements.txt
+++ b/letsencrypt-auto-source/pieces/certbot-requirements.txt
@@ -1,12 +1,12 @@
-certbot==0.39.0 \
- --hash=sha256:f1a70651a6c5137a448f4a8db17b09af619f80a077326caae6b74278bf1db488 \
- --hash=sha256:885cee1c4d05888af86b626cbbfc29d3c6c842ef4fe8f4a486994cef9daddfe0
-acme==0.39.0 \
- --hash=sha256:4f8be913df289b981852042719469cc367a7e436256f232c799d0bd1521db710 \
- --hash=sha256:a2fcb75d16de6804f4b4d773a457ee2f6434ebaf8fd1aa60862a91d4e8f73608
-certbot-apache==0.39.0 \
- --hash=sha256:c7a8630a85b753a52ca0b8c19e24b8f85ac4ba028292a95745e250c2e72faab9 \
- --hash=sha256:4651a0212c9ebc3087281dad92ad3cb355bb2730f432d0180a8d23325d11825a
-certbot-nginx==0.39.0 \
- --hash=sha256:76e5862ad5cc0fbc099df3502987c101c60dee1c188a579eac990edee7a910df \
- --hash=sha256:ceac88df52d3b27d14c3052b9e90ada327d7e14ecd6e4af7519918182d6138b4
+certbot==0.40.0 \
+ --hash=sha256:b9ff74c4f3d3e06d9c467465f97bcbb07b0f4d778d3c4232ab91583d933dba61 \
+ --hash=sha256:cff166597b3c714c3e7e60b2bcd6089135b375cadca04cf36abd15bfdb22be40
+acme==0.40.0 \
+ --hash=sha256:1b026b07a2099e50dac11cbdb834925f1d9b5691e349b52e9d397a12f3dc4eac \
+ --hash=sha256:f29c1185d1e33919bad6c1f3fece168ee191d96d47f5997117561dc74a454221
+certbot-apache==0.40.0 \
+ --hash=sha256:f1c034a05fbd6cc6fde9494f493a8a6ed0e02e7652e51af16342082bc17387e4 \
+ --hash=sha256:43c3d7628ca6630467c4f57dd30423f031c1c7cbca46f7500293172d0fe3581e
+certbot-nginx==0.40.0 \
+ --hash=sha256:55cd3c90e2851069b536859050374fe2fcfa22c3e862cc0e1811fbce9e52dccc \
+ --hash=sha256:3df8cec22910f2d41ccb4494661ff65f98c52dd441864a53a318b32979256881
diff --git a/local-oldest-requirements.txt b/local-oldest-requirements.txt
index 0acc68652..f6d158890 100644
--- a/local-oldest-requirements.txt
+++ b/local-oldest-requirements.txt
@@ -1,2 +1,2 @@
# Remember to update setup.py to match the package versions below.
--e acme[dev]
+acme[dev]==0.40.0
diff --git a/setup.py b/setup.py
index 160726f72..8b45fd80c 100644
--- a/setup.py
+++ b/setup.py
@@ -34,7 +34,7 @@ version = meta['version']
# specified here to avoid masking the more specific request requirements in
# acme. See https://github.com/pypa/pip/issues/988 for more info.
install_requires = [
- 'acme>=0.40.0.dev0',
+ 'acme>=0.40.0',
# We technically need ConfigArgParse 0.10.0 for Python 2.6 support, but
# saying so here causes a runtime error against our temporary fork of 0.9.3
# in which we added 2.6 support (see #2243), so we relax the requirement.