Certbot Requires Python 2.7

Contents

This article describes how to use certbot with Python 2.7.  The assumption is that you have already installed certbot.

At the bottom of this article, is a related post on how to install Python 2.7.  After installing Python, install/run certbot.

A shortcut,

run a command within a temporary environment, like this functional example below.

scl enable python27 '/opt/certbot-auto help'

To run certbot, enable python 2.7 first, then run the certbot commands.

scl enable python27 bash

If, however, you are still getting errors about Python 2.6.  A likely cause is that certbot was run prior to installing Python 2.7. Since certbot created a virtual environment with symbolic links to the incorrect version of Python, I exited certbot and deleted the virtual environment.  Do this with caution as I don’t know what this may have effected, it didn’t seem to negatively impact anything I was working on.

Anyway, while still using python 2.7, attempt to run certbot again.  A new virtual environment is created and it works.

[root@python opt]# ./certbot-auto help

-------------------------------------------------------------------------------

certbot-auto [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...

Certbot can obtain and install HTTPS/TLS/SSL certificates.  By default,
it will attempt to use a webserver both for obtaining and installing the
certificate. The most common SUBCOMMANDS and flags are:

obtain, install, and renew certificates:
(default) run   Obtain & install a certificate in your current webserver
certonly        Obtain or renew a certificate, but do not install it
renew           Renew all previously obtained certificates that are near expiry
-d DOMAINS       Comma-separated list of domains to obtain a certificate for

--apache          Use the Apache plugin for authentication & installation
--standalone      Run a standalone webserver for authentication
--nginx           Use the Nginx plugin for authentication & installation
--webroot         Place files in a server's webroot folder for authentication
--manual          Obtain certificates interactively, or using shell script hooks

-n               Run non-interactively
--test-cert       Obtain a test certificate from a staging server
--dry-run         Test "renew" or "certonly" without saving any certificates to disk

manage certificates:
certificates    Display information about certificates you have from Certbot
revoke          Revoke a certificate (supply --cert-path)
delete          Delete a certificate

manage your account with Let's Encrypt:
register        Create a Let's Encrypt ACME account
--agree-tos       Agree to the ACME server's Subscriber Agreement
-m EMAIL         Email address for important account notifications

More detailed help:

-h, --help [TOPIC]    print this message, or detailed help on a topic;
the available TOPICS are:

all, automation, commands, paths, security, testing, or any of the
subcommands or plugins (certonly, renew, install, register, nginx,
apache, standalone, webroot, etc.)
-------------------------------------------------------------------------------

An alternate untested approach is to hack out the depreciation warning for Python 2.6.

wget -nv -O /usr/local/bin/certbot-auto https://dl.eff.org/certbot-auto
chmod +x /usr/local/bin/certbot-auto
/usr/local/bin/certbot-auto --non-interactive
sed -i 's/python2$/python2 -W ignore::DeprecationWarning/' ~/.local/share/letsencrypt/bin/letsencrypt
/usr/local/bin/certbot-auto certonly --standalone --preferred-challenges tls-sni-01 -d "$HOSTNAME"

Source(s)

  • http://blog.leifmadsen.com/blog/2017/01/03/installing-python-2.7-on-centos-6.x/
  • https://access.redhat.com/documentation/en-us/red_hat_software_collections/1/html/packaging_guide/sect-testing_the_h2m144_software_collection
  • http://mirror.centos.org/centos/6/sclo/x86_64/rh/
  • http://mirror.centos.org/centos/7/sclo/x86_64/rh/