3 days agoRemove final jessie references outside of cb-auto. (#8194) master
Brad Warren [Fri, 7 Aug 2020 20:35:21 +0000 (13:35 -0700)]
Remove final jessie references outside of cb-auto. (#8194)

3 days agoDelete or update references to Debian 8 Jessie (#8065)
kden [Fri, 7 Aug 2020 19:21:52 +0000 (14:21 -0500)]
Delete or update references to Debian 8 Jessie (#8065)

* Delete or update references to Debian 8 Jessie

* Don't delete oldest constraints from Jessie, but document in comments.

* Update tools/oldest_constraints.txt

Co-authored-by: ohemorange <ebportnoy@gmail.com>
Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
Co-authored-by: ohemorange <ebportnoy@gmail.com>
4 days agoMerge pull request #8192 from certbot/docker-base
ohemorange [Thu, 6 Aug 2020 23:46:17 +0000 (16:46 -0700)]
Merge pull request #8192 from certbot/docker-base

Add certbot-docker files to this repository preserving history

4 days agoImprove github release creation process (#8189)
ohemorange [Thu, 6 Aug 2020 23:32:57 +0000 (16:32 -0700)]
Improve github release creation process (#8189)

* Improve github release creation process

* Comment file

* Update tools/create_github_release.py

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
* run chmod +x on tools/create_github_release.py

* Add description of create github release method

* remove references to unnecessary azure credential

* remove unnecessary import

* Add reminders to update other file to definitions in .azure-pipelines

* Raise an error if we fail to fetch the artifact from azure

* Create github release as a draft, upload artifacts, then un-draft, for hooks to be run at the right point

* get the version number from the release

* add new packages to dev3_extras so they're installed by tools/venv3.py

* remove unnecessary import

* fun fact: tempdirs behave differently when used as a context manager

* Move comment to construct.py

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
4 days ago[Docs] Remove obsolete Gentoo installation instructions and add packages. (#8184)
osirisinferi [Thu, 6 Aug 2020 21:13:53 +0000 (23:13 +0200)]
[Docs] Remove obsolete Gentoo installation instructions and add packages. (#8184)

It seems my old instruction isn't required any longer for Gentoo. To be honest, I don't have a clue since when, but my own Gentoo server isn't even using the workaround mentioned currently in the documentation at the moment. So it seems the Apache plugin works just fine without this workaround :facepalm:

Also, the Gentoo repository obviously also includes the nginx since a long time. I guess my original text is ancient.. It also includes *one* of the many DNS plugins, with a different maintainer than the other "main" packages. It currently only has version 0.39.0, so I don't have a clue if it's being maintained officially.

* Remove obsolete Gentoo instructions and add packages.

* Capitalize note

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
5 days agoCorrect a typo in acme/tests/client_test.py (#8186)
Felix Yan [Wed, 5 Aug 2020 18:44:23 +0000 (02:44 +0800)]
Correct a typo in acme/tests/client_test.py (#8186)

6 days agoMerge /Users/bmw/Development/github.com/certbot-docker/certbot-docker into master docker-base 8192/head
Brad Warren [Tue, 4 Aug 2020 22:14:06 +0000 (15:14 -0700)]
Merge /Users/bmw/Development/github.com/certbot-docker/certbot-docker into master

6 days agoMerge pull request #8188 from certbot/candidate-1.7.0
ohemorange [Tue, 4 Aug 2020 20:09:34 +0000 (13:09 -0700)]
Merge pull request #8188 from certbot/candidate-1.7.0

Release 1.7.0

6 days agoRelease version v1.7.0
Erica Portnoy [Tue, 4 Aug 2020 19:33:20 +0000 (12:33 -0700)]
Release version v1.7.0

6 days agoBump version to 1.8.0 8188/head
Erica Portnoy [Tue, 4 Aug 2020 18:33:04 +0000 (11:33 -0700)]
Bump version to 1.8.0

6 days agoAdd contents to certbot/CHANGELOG.md for next version
Erica Portnoy [Tue, 4 Aug 2020 18:33:04 +0000 (11:33 -0700)]
Add contents to certbot/CHANGELOG.md for next version

6 days agoRelease 1.7.0 1.7.x v1.7.0
Erica Portnoy [Tue, 4 Aug 2020 18:33:03 +0000 (11:33 -0700)]
Release 1.7.0

6 days agoUpdate changelog for 1.7.0 release
Erica Portnoy [Tue, 4 Aug 2020 18:20:15 +0000 (11:20 -0700)]
Update changelog for 1.7.0 release

7 days agoDocument how to revoke snapcraft credentials. (#8187)
Brad Warren [Mon, 3 Aug 2020 18:42:42 +0000 (11:42 -0700)]
Document how to revoke snapcraft credentials. (#8187)

10 days agoAutomatically publish snaps to the beta channel (#8183)
Brad Warren [Fri, 31 Jul 2020 20:17:07 +0000 (13:17 -0700)]
Automatically publish snaps to the beta channel (#8183)

* Expand documentation of snapcraft.cfg.

* Push to the beta channel on releases.

* fix template expansion

* update comment

10 days agoDo not run tests on pushes to *.x for performance. (#8185)
Brad Warren [Fri, 31 Jul 2020 19:47:47 +0000 (12:47 -0700)]
Do not run tests on pushes to *.x for performance. (#8185)

12 days agoRemove text about snap beta status. (#8178)
Brad Warren [Wed, 29 Jul 2020 20:18:45 +0000 (13:18 -0700)]
Remove text about snap beta status. (#8178)

Part of #8140.

2 weeks agoMention the availability of DNS plugin snaps in our docs under certbot/docs. (#8176)
ohemorange [Mon, 27 Jul 2020 20:21:31 +0000 (13:21 -0700)]
Mention the availability of DNS plugin snaps in our docs under certbot/docs. (#8176)

Part of #8142.

* Mention that DNS plugins are available as snaps

* Mention snaps in guide to writing third-party plugins

2 weeks agonginx: add --nginx-sleep-seconds (#8163)
alexzorin [Mon, 27 Jul 2020 19:52:12 +0000 (05:52 +1000)]
nginx: add --nginx-sleep-seconds (#8163)

* nginx: add --nginx-sleep-seconds

As described in #7422, reloading nginx is an asynchronous process and
Certbot does not know when it is complete. In an environment where this
reload takes a long time, the nginx plugin suffers from an issue where
it responds to and fails the ACME challenge before the nginx server is
ready to serve it.

Following the discussion in a previous PR #7740, this commit introduces
a new flag, --nginx-sleep-seconds, which may be used to increase the
duration that Certbot will wait for nginx to reload, from its previously
hard-coded value of 1s.

Fixes #7422

* update CHANGELOG

* nginx: update docstring for nginx_restart

2 weeks agoImprove log dump in snaps remote builds when an unexpected behavior is detected....
Adrien Ferrand [Mon, 27 Jul 2020 19:01:51 +0000 (21:01 +0200)]
Improve log dump in snaps remote builds when an unexpected behavior is detected. (#8173)

Fixes #8169

This PR improves snaps remote builds script by dumping the output of `snapcraft remote-build` when unexpected behavior is detected:
* when all builds for a project finish with a zero status code, and none of them are marked as failed, we expect to have all the associated snap files available locally.
* when some builds are marked as failed, we expect to have a build output for each of them available locally.

In these two situations, if the expectation are not matched, then the script will display the output of `snapcraft remote-build` itself. I added also a control error to handle nicely the absence of an expected build output on the local machine.

* Improve log dump in snaps remote builds when an unexpected behavior is detected

* Use the manager

* Update tools/snap/build_remote.py

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
2 weeks agoDocument that snaps are available for 3 architectures (#8174)
Adrien Ferrand [Mon, 27 Jul 2020 16:56:55 +0000 (18:56 +0200)]
Document that snaps are available for 3 architectures (#8174)

Part of #8051

2 weeks agoremove old snapcraft files (#8167)
Brad Warren [Thu, 23 Jul 2020 00:29:32 +0000 (17:29 -0700)]
remove old snapcraft files (#8167)

2 weeks agoMake externally snapped plugin updates more stable (#8145)
ohemorange [Thu, 23 Jul 2020 00:07:07 +0000 (17:07 -0700)]
Make externally snapped plugin updates more stable (#8145)

Fixes #7863.

Connect command is `sudo snap connect certbot-dns-dnsimple:certbot-metadata certbot:certbot-metadata`
Logs are `cat /var/snap/certbot-dns-dnsimple/current/debuglog`
Echos in hook are only printed to terminal when it exits 0; otherwise, check logs in `debuglog` mentioned above.

Manual tests include all iterations of connected, unconnected, installed for the first, second time, etc, with passing and failing version checks.

* Make dnsimple not update if certbot is too old

* create an interface to read cb version

* add missing newline

* fix syntax

* trying to figure out the consumer syntax

* trying to figure out the consumer syntax, again

* only check post first install

* valid setting name

* test for first install differently

* snapctl doesn't error if it fails I guess

* time to do some print debugging

* continue playing with syntax

* once again, fooled by bash int vs string comparisons!

* debugging

* if we use post and pre together we can do this

* is this how content interface syntax works

* it's a directory?

* more debug

* what's that error message again?

* try other syntax

* if it's not documented just guess at syntax

* actually, I think this is the syntax

* oops didn't set for new hook

* test passing information along connection

* interface attributes can only be set during the execution of prepare hooks

* just do it with main connection

* undo last few test changes

* Add some printing to make sure we understand what's going on

* create empty directory to bind to

* put mkdir in the correct part

* let's inspect the environment

* it can't run bash directly.

* perhaps only directories can be shared via the contente interface

* update name of folder

* echo to debug log to understand what's going on exactly. we have file access though!

* update grep for new file

* more printing

* echo to the debug log

* ok NOW all print statements are going to the log

* why does echo need two >s

* remove unnecessary extra check, just check if the init file is available

* check if certbot version will be available post-refresh after all

* pre-refresh hook is not necessary to get certbot version

* update mkdir so we don't have to clean each time

* try comparing version numbers in python

* it's python3

* we need different prints for if we succeed or if we fail.

* improve bash syntax

* remove some debugging code

* Remove debug script

* remove spaces for clarity

* consolidate parts and remove more test code

* s/certbot-version/certbot-metadata/g

* use sys.exit instead of exit

* find and save certbot version on the certbot side

* change presence test to new file

* switch to using packaging.version.parse instead of LooseVersion

* switch to requiring certbot version >= plugin version

* add plugin snap changes to generate script

* Add comment to generation file saying not to edit generated files manually

* Create post-refresh hook for all plugins with script

* generate files using new script

* update snapcraft.yaml files for plugins

* bin/sh comes first

* Add packaging to install_requires

* Check that refresh is allowed in integration test

* switch plug and slot names in integration test

* Update tools/generate_dnsplugins_postrefreshhook.sh

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
* small bash fixes

* Update snap readme with new instructions

* Run tools/generate_dnsplugins_postrefreshhook.sh

* Update tools/snap/generate_dnsplugins_postrefreshhook.sh

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
2 weeks agoBuild snaps using the remote-build feature (#8153)
Adrien Ferrand [Wed, 22 Jul 2020 23:05:20 +0000 (01:05 +0200)]
Build snaps using the remote-build feature (#8153)

Snapcraft has a feature name `remote-build`. It allows to compile snaps using the Canonical dedicated build architecture for several architectures. Compared to the QEMU-enabled Docker approach used currently, the remote build has several advantages:
* the builds are done on the native architecture, making them basically faster than what can be achieved on QEMU
* it avoids to depend on `adferrand/snapcraft` (which could be otherwise be fixed with the merge of https://github.com/snapcore/snapcraft/pull/3144, but this will not happen in the short term)
* when everything is good, all snaps build can be run in parallel and then can be orchestrated by one single Azure Pipeline job, since the heavy tasks are done remotely.

This PR makes the necessary ajustements to use the remote build feature instead of the QEMU-enabled docker approach.

One complex task was to be able to compile the `certbot` snap on `arm64` and `armhf`. Indeed on these architectures the pre-compiled wheel for `cffi` is not available. So it needs to be compiled during the snap build. Sadly, the current version of the python plugin in snapcraft is limited by the fact that `wheels` is not installed in the virtual environment set up to build the python packages, and there is no easy way to change that except by overridding the whole build process.

In the long term, I think I will open a PR on `snapcraft` Git repository to provide a consistent solution. But for the short term, I used the possibility to provide arguments to the `venv` module, to add the flag `--system-site-packages`. With it, the virtual environment can use the system site package, where `wheel` is available.

The other significant additions are in `tools/snap/build_remote.py` script. If invoking the remote build on a local machine is quite straight-forward, it is another story on the CI because we need build auditability and resiliency during these non-interactive actions. In particular we should avoid as possible inconsistent results on the nightly pipeline and the release pipeline.

So this script wraps the `snapcraft` call into a retry logic, and improves its logs in the context of parallel builds.

For the minor modifications, it is mainly about ensuring that plugins can be built (some of them also need `cffi` for instance), and simplify the Azure Pipeline since all snaps are retrieved in one go.

Please note that the `test-` branches still run only the `amd64` architecture. Indeed I noticed that builds on `arm64` and `armhf` are tending to be very slow to start (up to 40 min) while the `amd64` ones wait at max 10 mins, and usually 30 seconds only when the overall load on Canonical side is low.

To work on `certbot/certbot` repository, one secured file needs to be added, because `snapcraft` needs to be authenticated against Launchpad with credentials allowing remote builds. To do so, from a local machine that have this capability, one can extract the existing file at `$HOME/.local/share/snapcraft/provider/launchpad/credentials`, and register it as a secured file in Azure Pipeline with the name `snapcraftRemoteBuildCredentials`.

* Define scripts

* Setup pipeline to use remote builds

* Focus on packaging builds

* Set credentials

* Setup git

* Launch all builds in parallel

* Add dev dependencies to build cffi and cryptography

* Convert to a python logic

* Reorganize the pipeline

* Handle the fact that snap builds may be taken from cache

* Generate constraints

* Exit code

* Check existence

* Try to handle better non zero exit code

* Add --system-site-packages to get wheel in the venv

* Add executable permissions

* Troubleshoot

* Dynamic display, take the maximum timeout for snap build job

* Allow retries if the remote build does not start

* Trigger only amd64 builds for test branches

* Exit properly

* Update snapcraft.yaml

* Fix snap run

* Set secured file name

* Update .azure-pipelines/templates/jobs/packaging-jobs.yml

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
* Update .azure-pipelines/templates/jobs/packaging-jobs.yml

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
* Update .azure-pipelines/templates/jobs/packaging-jobs.yml

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
* Move order in deps

* Reactivate all builds

* Use Manager() as a context manager

* Use Pool as a context manager

* Some nice refactorings

* Check snapcraft execution interruption with exit codes

* Use f-string and format expressions

* Start log

* Consistent use of single/double quotes

* Better loop to extract lines

* Retry on build failures

* Few optimizations

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
2 weeks agoAdd warnings about Python 3.5 deprecation in Certbot (#8154)
Adrien Ferrand [Tue, 21 Jul 2020 00:46:38 +0000 (02:46 +0200)]
Add warnings about Python 3.5 deprecation in Certbot (#8154)

Fixes #8149

This PR adds warnings to warn about the incoming deprecation of Python 3.5 in Certbot.

* Add warnings about Python 3.5 deprecation in Certbot

* Update certbot/certbot/__init__.py

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
2 weeks agoUse a specific tag of adferrand/snapcraft to build QEMU snaps and avoid failures...
Adrien Ferrand [Tue, 21 Jul 2020 00:17:10 +0000 (02:17 +0200)]
Use a specific tag of adferrand/snapcraft to build QEMU snaps and avoid failures (#8158)

The latest builds of snapcraft introduced somehow several failures when snaps are built on QEMU for armhf. See https://dev.azure.com/certbot/certbot/_build/results?buildId=2326&view=logs&j=7c548e18-6053-5a42-b366-e6480da09a69&t=a7c7ca26-ae0c-54e6-0355-3bfcd7bab03c for instance.

This PR uses a specific tags from `adferrand/snapcraft`, extracted from the last known working `nightly` pipeline, to avoid these failures until a more permanent fix is done. Very likely the fix will be the move to snapcraft remote builds.

* Use a specific tag of adferrand/snapcraft to build snaps and avoid an error on QEMU for armhf.

* Update tools/snap/build.sh

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
* Update tools/snap/build_dns.sh

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
3 weeks agoDo not create the symlink for test assets on Windows if the asset path is already...
Adrien Ferrand [Mon, 20 Jul 2020 23:01:09 +0000 (01:01 +0200)]
Do not create the symlink for test assets on Windows if the asset path is already a symlink (#8159)

3 weeks agoMerge pull request #8157 from stefantalpalaru/linodedns
schoen [Mon, 20 Jul 2020 20:22:18 +0000 (13:22 -0700)]
Merge pull request #8157 from stefantalpalaru/linodedns

certbot_dns_linode: decrease the default propagation interval

3 weeks agocertbot_dns_linode: decrease the default propagation interval 8157/head
Ștefan Talpalaru [Sun, 19 Jul 2020 14:32:30 +0000 (16:32 +0200)]
certbot_dns_linode: decrease the default propagation interval

«When you add or change DNS zones or records, your changes will now be
reflected at our authoritative nameservers in under 60 seconds. This is
down from the previous “every quarter hour” approach that we had for so
long.» - https://www.linode.com/blog/linode/linode-turns-17/

3 weeks agoUpdate to IPython with Python 3.8 support. (#8152)
Brad Warren [Fri, 17 Jul 2020 20:01:04 +0000 (13:01 -0700)]
Update to IPython with Python 3.8 support. (#8152)

3 weeks agoSpecify the Certbot snap grade. (#8147)
Brad Warren [Fri, 17 Jul 2020 19:47:11 +0000 (12:47 -0700)]
Specify the Certbot snap grade. (#8147)

3 weeks agoadded inwx plugin (#8115)
Thomas [Wed, 15 Jul 2020 20:41:15 +0000 (22:41 +0200)]
added inwx plugin (#8115)

* added inwx plugin

* Update using.rst

fixed convention naming

3 weeks agoRelease version v1.6.0
Brad Warren [Wed, 15 Jul 2020 00:17:36 +0000 (17:17 -0700)]
Release version v1.6.0

4 weeks agoUse 3rd party plugins without prefix + set a deprecation path for the prefixed versio...
Adrien Ferrand [Fri, 10 Jul 2020 16:16:21 +0000 (18:16 +0200)]
Use 3rd party plugins without prefix + set a deprecation path for the prefixed version (#8131)

Fixes #4351

This PR proposes a solution to use the third party plugins with the prefix `pip_package_name:` in the plugin name, plugin specific flags and keys in dns plugin credential files.

A first solution has been proposed in #6372, and a more advanced one in #7026. In #7026 was also added a deprecation warning when the old plugin name `pip_package_name:plugin_name` was used.

However there were some limitations with #7026, in particular the fact that existing flags of type `pip_package_name:dns_plugin_option` or keys like `pip_package_name:key` in dns plugin credential files were not read anymore. This would have led to silent failures during renewals if the configuration was not explicitly updated by the user.

I tried to fix that based on #7026, but the changes needed are complex, and create new problems on their own, like unexpected erasure of values in the renewal configurations.

Instead I try in this PR a new approach: the `PluginsRegistry` in `certbot._internal.plugins.disco` module register two plugins for a given entrypoint refering to a third party plugin when `find_all()` is called:
* one plugin with the name `plugin_name`
* one plugin with the name `pip_package_name:plugin_name` (like before)

This way, every existing configuration continues to work without any change (credentials, renewal configuration, CLI flags). And new configurations can refer to the new plugin name without prefix, and use the approriate CLI flags, credentials without this prefix.

On top of it I added the deprecation path given in #7026 (thanks @coldfix!):
* the plugin named `pip_package_name:plugin_name` is hidden from `certbot plugins` output
* the help for this plugin is still displayed, and a deprecation warning is displayed in the description
* when invoked, the same deprecation warning is displayed in the terminal

* Support both prefixed and not prefix third party plugins

* Adapt tests

* Add deprecation path

* Named parameters

* Add deprecation warning in CLI

* Add a changelog

4 weeks agoBuild the DNS plugins snaps (#8129)
Adrien Ferrand [Thu, 9 Jul 2020 18:33:25 +0000 (20:33 +0200)]
Build the DNS plugins snaps (#8129)

Fixes #8041

This PR makes Azure Pipeline build the DNS plugins snaps for the 3 architectures during the CI.

It leverages the existing logic for building the Certbot snap in order to deploy a QEMU environment with Docker, and leverages the local PyPI index to speed up the build when installing `cffi` and `cryptography`.

All DNS plugins snaps are constructed in one unique docker container, in order to save the time required to install the system dependencies upon first start of `snapcraft`, and so speed up significantly the build.

Finally, all `amd64` DNS plugins snaps are built within 6 minutes. For `arm64` and `armhf`, it is around 40 mins: this is quite fast in fact, considering that 14 DNS plugins snaps are built.

However, this is still an extremely heavy task to make the full 3 architectures builds, even for Azure Pipelines and its 10 parallel jobs capability. That is why I make the `arm64` and `armhf` builds be skipped for the `full-test-suite`, and let them run only for `nightly` and `release`. This means however that these builds will not be done for the release branches. If this is a problem, I can put a more elaborate suspend condition to triggers the builds in this case.

All snaps are stored in the pipeline artifacts storage, making them available for publication during a `release` pipeline.

The PR is set as Draft for now, because I use temporarily `pr_test-suite` to validate the packaging jobs when commits are pushed. Once the PR is ready, I will revert it back to the normal configuration (run the standard tests).

* Configure a script to build DNS snaps

* Focus on packaging

* Trigger all architectures

* Add extra index

* Prepare conditional suspend

* Set final suspend logic

* Set final suspend value

* Loop for publication

* Use python3

* Clean before build

* Add a test

* Add test job in Azure

* Preserve env

* Apply normal config for pipelines

* Skip QEMU jobs only for test branches

* Makes snap run tests depends also on the Certbot snap build

* Update .azure-pipelines/templates/jobs/packaging-jobs.yml

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
* Update .azure-pipelines/templates/stages/deploy-stage.yml

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
* More accurate way to get the plugin snap name

* Integrate DNS snap tests into certbot-ci

* Fixes

* Update certbot-ci/snap_integration_tests/conftest.py

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
* Update certbot-ci/snap_integration_tests/conftest.py

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
* Clean an _init_.py file

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
4 weeks agoBe more informative about reasons for using Docker (#28)
bdeweygit [Thu, 9 Jul 2020 16:47:38 +0000 (12:47 -0400)]
Be more informative about reasons for using Docker (#28)

People who are considering running Certbot with Docker are probably doing so because their webserver is to be run with Docker. These changes to the README should help them to understand that doing so will require knowledge of Docker volumes and that the architectural justification for running Certbot in a separate container is the "one service per container" best practice.

4 weeks agoUpgrade to Alpine 3.12 (#27)
J0WI [Wed, 8 Jul 2020 16:32:32 +0000 (16:32 +0000)]
Upgrade to Alpine 3.12 (#27)

4 weeks agos/snapcraft push/snapcraft upload/g (#8137)
Brad Warren [Wed, 8 Jul 2020 06:05:33 +0000 (23:05 -0700)]
s/snapcraft push/snapcraft upload/g (#8137)

4 weeks agoMerge pull request #8136 from certbot/candidate-1.6.0
Brad Warren [Tue, 7 Jul 2020 18:45:39 +0000 (11:45 -0700)]
Merge pull request #8136 from certbot/candidate-1.6.0

Update files from 1.6.0 release

4 weeks agoFix typo (#26)
Brad Warren [Tue, 7 Jul 2020 18:18:06 +0000 (11:18 -0700)]
Fix typo (#26)

4 weeks agoRelease version 1.6.0
Brad Warren [Tue, 7 Jul 2020 18:04:52 +0000 (11:04 -0700)]
Release version 1.6.0

4 weeks agoBump version to 1.7.0 candidate-1.6.0 8136/head
Brad Warren [Tue, 7 Jul 2020 17:33:16 +0000 (10:33 -0700)]
Bump version to 1.7.0

4 weeks agoAdd contents to certbot/CHANGELOG.md for next version
Brad Warren [Tue, 7 Jul 2020 17:33:15 +0000 (10:33 -0700)]
Add contents to certbot/CHANGELOG.md for next version

4 weeks agoRelease 1.6.0 1.6.x v1.6.0
Brad Warren [Tue, 7 Jul 2020 17:33:13 +0000 (10:33 -0700)]
Release 1.6.0

4 weeks agoUpdate changelog for 1.6.0 release
Brad Warren [Tue, 7 Jul 2020 17:13:21 +0000 (10:13 -0700)]
Update changelog for 1.6.0 release

5 weeks agoSome improvements (#8132)
Adrien Ferrand [Mon, 6 Jul 2020 23:04:59 +0000 (01:04 +0200)]
Some improvements (#8132)

Short PR to improve some things during snap builds:
* cleanup snapcraft assets before a build, in order to avoid some weird errors when two builds are executed consecutively without cleanup
* use python3 explicitly in `tools/simple_http_server.py` because on several recent distributions, `python` binary is not exposed anymore, only `python2` or `python3`.

5 weeks agoRemove unnecessary symlink (#8135)
Brad Warren [Mon, 6 Jul 2020 22:31:24 +0000 (15:31 -0700)]
Remove unnecessary symlink (#8135)

This isn't needed anymore thanks to the line:
AWS_EC2_PEM_FILE: $(testFarmPem.secureFilePath)

5 weeks agoRemove grade devel from Certbot snap. (#8128)
Brad Warren [Mon, 6 Jul 2020 19:31:55 +0000 (12:31 -0700)]
Remove grade devel from Certbot snap. (#8128)

If you go to a URL like https://snapcraft.io/certbot/releases and try to move the Certbot snap into the candidate or stable channels, you cannot do so. There is a tooltip which says that revisions with the grade devel cannot be promoted to candidate or stable channels.

The documentation for `grade` can be found at https://snapcraft.io/docs/snapcraft-yaml-reference where it says the value is optional and

> Defines the quality grade of the snap.
Type: enum
Can be either devel (i.e. a development version of the snap, so not to be published to the stable or candidate channels) or stable (i.e. a stable release or release candidate, which can be released to all channels)
Example: [stable or devel]

I'm working on a proposal for our next steps for snaps which involves moving the Certbot snap to the stable channel. I of course won't make those changes without giving others a chance to share their opinion, but I'd like to avoid the situation where we're technically unable to move the Certbot 1.6.0 snap to the stable channel despite wanting to do so.

I started to make the same changes to the DNS plugins, but I personally think it's too soon to propose stable versions of those yet and `grade` is a simple way to ensure we don't accidentally promote something there.

You can see the snap being built and run successfully with this change at https://dev.azure.com/certbot/certbot/_build/results?buildId=2246&view=results.

5 weeks agoRun at 4:30 UTC to have Azure reparse YAML file. (#8133)
Brad Warren [Mon, 6 Jul 2020 18:41:26 +0000 (11:41 -0700)]
Run at 4:30 UTC to have Azure reparse YAML file. (#8133)

5 weeks agoSwitch build status to nightly pipeline. (#8127)
Brad Warren [Thu, 2 Jul 2020 23:05:28 +0000 (16:05 -0700)]
Switch build status to nightly pipeline. (#8127)

The advanced pipeline no longer exists.

5 weeks agoDo not build pushes to master. (#8126)
Brad Warren [Thu, 2 Jul 2020 23:00:35 +0000 (16:00 -0700)]
Do not build pushes to master. (#8126)

5 weeks agoMigrate the CI pipeline from Travis to Azure Pipeline (#8098)
Adrien Ferrand [Thu, 2 Jul 2020 22:01:21 +0000 (00:01 +0200)]
Migrate the CI pipeline from Travis to Azure Pipeline (#8098)

Fixes #8071 and fixes https://github.com/certbot/certbot/issues/8110.

This PR migrates every job from Travis in Azure Pipeline.

This PR essentially converts the Travis jobs into Azure Pipeline with a complete iso-fonctionality (or I made a mistake). The jobs are added in the relevant existing pipelines (`main`, `nightly`, `advanced-test`, `release`). A global refactoring thanks to the templating system is done to reduce greatly the verbosity of the pipeline descriptions.

A specific feature (not present in Travis) is added: the stage `On_Failure`. Using directly the Mattermost API, it allows to notify pipeline failure in a Mattermost channel with a link to the failed pipelines without the need to authenticate to Microsoft.

See https://github.com/certbot/certbot/pull/8098#issuecomment-649873641 for the post merge actions to do at the end of this work.

5 weeks agoSet up CentOS 8 test farm tests (#8122)
ohemorange [Thu, 2 Jul 2020 00:07:41 +0000 (17:07 -0700)]
Set up CentOS 8 test farm tests (#8122)

Fixes #7420.

* Set up CentOS 8 test farm tests

* Don't add to apache2_targets until 7273 is resolved

* Start upgrade test from a version that works on centos 8

* remove when possible from targets

5 weeks agocertbot: add --preferred-chain (#8080)
alexzorin [Wed, 1 Jul 2020 00:45:39 +0000 (10:45 +1000)]
certbot: add --preferred-chain (#8080)

* acme: add support for alternative cert. chains

* certbot: add --preferred-chain

* remove support for issuer SKI matching

* show --preferred-chain in "run" help

* warn if no chain matched and it's not a dry-run

* fix existing failing tests

* add unit, integration tests

* bump acme dependency to dev version

* simplify test to avoid py2.7 recursion bug

* add preferred_chain to STR_CONFIG_ITEMS

* reduce preferred_chain warning to info level

* acme: fix some docstrings in .messages

* certbot: fix docstring in crypto_util

* try to fix certbot-nginx acme dep problem

6 weeks agoMake each DNS plugin respect EXCLUDE_CERTBOT_DEPS (#8117)
ohemorange [Mon, 29 Jun 2020 23:58:26 +0000 (16:58 -0700)]
Make each DNS plugin respect EXCLUDE_CERTBOT_DEPS (#8117)

* Don't include certbot deps when EXCLUDE_CERTBOT_DEPS is set

* import os

6 weeks agoAdd missing spaces to manual plugin help. (#8116)
Brad Warren [Mon, 29 Jun 2020 20:34:24 +0000 (13:34 -0700)]
Add missing spaces to manual plugin help. (#8116)

6 weeks agoAdd awscli to requirements.txt (#8113)
Brad Warren [Thu, 25 Jun 2020 23:52:56 +0000 (16:52 -0700)]
Add awscli to requirements.txt (#8113)

6 weeks agoFix paths when calling out to programs outside of snap (#8108)
ohemorange [Thu, 25 Jun 2020 22:36:29 +0000 (15:36 -0700)]
Fix paths when calling out to programs outside of snap (#8108)

Fixes #8093.

This PR modifies and audits all uses of `subprocess` and `Popen` outside of tests, `certbot-ci/`, `certbot-compatibility-test/`, `letsencrypt-auto-source/`, `tools/`, and `windows-installer/`. Calls to outside programs have their `env` modified to remove the `SNAP` components of paths, if they exist. This includes any calls made from hooks, calls to `apachectl` and `nginx`, and to `openssl` from `ocsp.py`.

For testing manually, rsync flags will look something like:

rsync -avzhe ssh root@focal.domain:/home/certbot/certbot/certbot_*_amd64.snap .
rsync -avzhe ssh certbot_*_amd64.snap root@centos7.domain:/root/certbot/

With these modifications, `certbot plugins --prepare` now passes on Centos 7.

If I'm wrong and we package the `openssl` binary, the modifications should be removed from `ocsp.py`, and `env` should be passed into `run_script` rather than set internally in its calls from nginx and apache.

One caveat with this approach is the disconnect between why it's a problem (packaging) and where it's solved (internal to Certbot). I considered a wrapping approach, but we'd still have to audit specific calls. I think the best way to address this is robust testing; specifically, running the snap on other systems.

For hooks, all calls will remove the snap paths if they exist. This is probably fine, because even if the hook intends to call back into certbot, it can do that, it'll just create a new snap.

I'm not sure if we need these modifications for the Mac OS X/ Darwin calls, but they can't hurt.

* Add method to plugins util to get env without snap paths

* Use modified environment in Nginx plugin

* Pass through env to certbot.util.run_script

* Use modified environment in Apache plugin

* move env_no_snap_for_external_calls to certbot.util

* Set env internally to run_script, since we use that only to call out

* Add env to mac subprocess calls in certbot.util

* Add env to openssl call in ocsp.py

* Add env for hooks calls in certbot.compat.misc.

* Pass env into execute_command to avoid circular dependency

* Update hook test to assert called with env

* Fix mypy type hint to account for new param

* Change signature to include Optional

* go back to using CERTBOT_PLUGIN_PATH

* no need to modify PYTHONPATH in env

* robustly detect when we're in a snap

* Improve env util fxn docstring

* Update changelog

* Add unit tests for env_no_snap_for_external_calls

* Import compat.os

6 weeks agoGeneralize renewal rate limit UI warning message (#3456) (#8061)
dmmortimer [Thu, 25 Jun 2020 18:43:08 +0000 (14:43 -0400)]
Generalize renewal rate limit UI warning message (#3456) (#8061)

- Old text hard codes the rate limit
 - Let's Encrypt CA might change its rate limit
 - Other CAs might have different rate limits


6 weeks agoRemove SSL Labs From Certbot Output (#8109)
dkp [Thu, 25 Jun 2020 18:42:07 +0000 (20:42 +0200)]
Remove SSL Labs From Certbot Output (#8109)

The Apache plugin expects clients to support SNI, but
SSL Labs tries without SNI and includes the results
in their score.

Closes certbot/certbot#7728

6 weeks agoCorrect plugin constraints. (#8104)
Brad Warren [Tue, 23 Jun 2020 21:16:41 +0000 (14:16 -0700)]
Correct plugin constraints. (#8104)

6 weeks agoMake DNS plugin snaps use core20 (#8106)
ohemorange [Tue, 23 Jun 2020 16:31:08 +0000 (09:31 -0700)]
Make DNS plugin snaps use core20 (#8106)

Fixes #8103.

* Update the DNS plugin generator script to core20 syntax

* Generate new snapcraft.yamls for the DNS plugins

* Update certbot.wrapper to search for python3.8 paths

6 weeks agoAdd script and generated snapcraft.yaml files (#8096)
Adrien Ferrand [Tue, 23 Jun 2020 00:07:08 +0000 (02:07 +0200)]
Add script and generated snapcraft.yaml files (#8096)

This PR adds a proper snapcraft.yaml file for each DNS plugin, and provides a shell script to generate them.

7 weeks agoRemove unneeded step to create constraints file. (#8102)
Brad Warren [Mon, 22 Jun 2020 23:48:50 +0000 (16:48 -0700)]
Remove unneeded step to create constraints file. (#8102)

7 weeks agoRemove snap-plugin from README (#8101)
Brad Warren [Mon, 22 Jun 2020 22:49:18 +0000 (15:49 -0700)]
Remove snap-plugin from README (#8101)

7 weeks agoBuild the constraints file insided snapcraft (#8097)
Adrien Ferrand [Mon, 22 Jun 2020 20:54:18 +0000 (22:54 +0200)]
Build the constraints file insided snapcraft (#8097)

Fixes #7957

This PR makes snapcraft generate itself the dependencies constraints file during the snap build, instead of having an external script that does it before calling snapcraft.

7 weeks agoDo not unstage generated cffi augeas (#8094)
Brad Warren [Mon, 22 Jun 2020 19:11:38 +0000 (12:11 -0700)]
Do not unstage generated cffi augeas (#8094)

This line seems to refer to [augeas.py](https://github.com/hercules-team/python-augeas/blob/v0.5.0/augeas.py) from the version of Augeas we normally have pinned. This was necessary when we were installing each Certbot component in separate parts and only combining them later to ensure that the Augeas fork (which uses cffi) was used instead of the unmodified pinned version of Augeas.

Since everything is installed in one part and we're removing the Augeas pinning now though, this line is no longer necessary. You can see the snap being built and tested successfully with this change at https://travis-ci.com/github/certbot/certbot/builds/172134518.

* Do not unstage generated cffi augeas

* Add comment about deleted line.

7 weeks agotree-wide: use LooseVersion instead of StrictVersion (#8081)
Florian Klink [Fri, 19 Jun 2020 15:11:35 +0000 (17:11 +0200)]
tree-wide: use LooseVersion instead of StrictVersion (#8081)

According to `distutils/version.py`, StrictVersion is pretty strict in
what version numbers to accept:

> A version number consists of two or three dot-separated numeric
> components, with an optional "pre-release" tag on the end.  The
> pre-release tag consists of the letter 'a' or 'b' followed by a number.

This assumption already fails for some pretty basic python libraries
itself, like setuptools, also available in `46.1.3.post20200610`, a
completely valid version number according to

There doesn't seem to be a particular reason on why StrictVersion has
been used here, so let's use LooseVersion, to be compatible with these

Co-authored-by: Adrien Ferrand <adferrand@users.noreply.github.com>
7 weeks agoUse certbot.wrapper during renewal. (#8095)
Brad Warren [Thu, 18 Jun 2020 23:41:12 +0000 (16:41 -0700)]
Use certbot.wrapper during renewal. (#8095)

7 weeks agoDeferred EFF subscription until the first certificate is successfully issued (#8076)
Adrien Ferrand [Thu, 18 Jun 2020 22:58:19 +0000 (00:58 +0200)]
Deferred EFF subscription until the first certificate is successfully issued (#8076)

* Base logic

* Various controls when email is None

* Adapt eff tests

* Forward compatibility

* Also for csr

* Explicit regr or meta updates in account objects

* Adapt logic to ask for eff subscription during registering

* Adapt tests

* Move dry-run control

* Add some relevant controls on handle_subscription call checks

7 weeks agoDon't include certbot deps when EXCLUDE_CERTBOT_DEPS is set in plugins (#8091)
ohemorange [Thu, 18 Jun 2020 22:24:10 +0000 (15:24 -0700)]
Don't include certbot deps when EXCLUDE_CERTBOT_DEPS is set in plugins (#8091)

This will allow DNS plugin snaps to build if they rely on unreleased acme/certbot, and remove other copy of Certbot from externally snapped plugins. Fixes #8064 and fixes #7946. Implementation is based on the design [here](https://github.com/certbot/certbot/issues/8064#issuecomment-645513120).

To test, see reverted commit 8632064. Steps taken:

- added changes to setup.py and snapcraft.yaml
- successfully snapped, connected, ran `sudo certbot plugins --prepare`
- added temporary changes to have both certbot and certbot-dns-dnsimple use DNSAuthenticator2
- snapped and installed certbot, `certbot plugins` failed as expected.
- snapped and installed certbot-dns-dnsimple, `sudo certbot plugins --prepare` succeeded
- Inspected dns plugin's `bin` and `lib`; no `certbot` or `acme`, as expected.
$ ls /snap/certbot-dns-dnsimple/current/lib/python3.6/site-packages/
OpenSSL                                         future-0.18.2.dist-info        requests_file.py
PyYAML-5.3.1.dist-info                          idna                           setuptools
_cffi_backend.cpython-36m-x86_64-linux-gnu.so   idna-2.9.dist-info             setuptools-47.3.1.dist-info
certbot_dns_dnsimple                            lexicon                        six-1.15.0.dist-info
certbot_dns_dnsimple-1.6.0.dev0-py3.6.egg-info  libfuturize                    six.py
certifi                                         libpasteurize                  tldextract
certifi-2020.4.5.1.dist-info                    past                           tldextract-2.2.2.dist-info
cffi                                            pip                            urllib3
cffi-1.14.0.dist-info                           pip-20.1.1.dist-info           urllib3-1.25.9.dist-info
chardet                                         pkg_resources                  wheel
chardet-3.0.4.dist-info                         pyOpenSSL-19.1.0.dist-info     wheel-0.34.2.dist-info
cryptography                                    pycparser                      yaml
cryptography-2.8.dist-info                      pycparser-2.20.dist-info       zope
dns_lexicon-3.3.26.dist-info                    requests                       zope.interface-5.1.0-py3.6-nspkg.pth
easy_install.py                                 requests-2.23.0.dist-info      zope.interface-5.1.0.dist-info
future                                          requests_file-1.5.1.dist-info
$ ls /snap/certbot-dns-dnsimple/current/bin/
chardetect  futurize  lexicon  pasteurize  tldextract
- reset to HEAD^
- snapped and installed certbot to not have the DNSAuthenticator2 changes, `certbot plugins` failed as expected.

* Don't include certbot deps when EXCLUDE_CERTBOT_DEPS is set

* Set EXCLUDE_CERTBOT_DEPS in certbot-dns-dnsimple/snap/snapcraft.yaml

7 weeks agoSwitch to using snap-constraints in dns plugin so the .gitignore catches it. (#8092)
ohemorange [Thu, 18 Jun 2020 22:15:41 +0000 (15:15 -0700)]
Switch to using snap-constraints in dns plugin so the .gitignore catches it. (#8092)

7 weeks agoMerge pull request #8089 from certbot/squashed-snap-plugin
ohemorange [Thu, 18 Jun 2020 19:59:04 +0000 (12:59 -0700)]
Merge pull request #8089 from certbot/squashed-snap-plugin

Merge the snap-plugin branch into master

7 weeks agoUpdate README instructions for merged master 8089/head
Erica Portnoy [Thu, 18 Jun 2020 00:27:27 +0000 (17:27 -0700)]
Update README instructions for merged master

Use Focal when following README instructions

Discard changes to disco.py

bring README up to date with current knowledge

Move README to snap/local/

7 weeks agoUpdate README
Brad Warren [Mon, 27 Apr 2020 22:22:57 +0000 (15:22 -0700)]

fix branch name


remove readme link

Remove links to Robie's repo.

say you cant use docker

Commands not command

Update publishing permissions section.

Have Certbot trust plugins.

Do not run snapcraft with sudo.

7 weeks agoInitial revision
Robie Basak [Tue, 3 Sep 2019 14:13:27 +0000 (15:13 +0100)]
Initial revision

Fix headings

Fix error in build instructions

7 weeks agoupdate certbot-dns-dnsimple snapcraft.yml.
Brad Warren [Mon, 27 Apr 2020 21:13:59 +0000 (14:13 -0700)]
update certbot-dns-dnsimple snapcraft.yml.

update dnsimple snapcraft.yml

7 weeks agoAdd CERTBOT_PLUGIN_PATH support
Robie Basak [Tue, 3 Sep 2019 10:45:20 +0000 (11:45 +0100)]

Initial revision

Fix interface export path

Switch to strict confinement

Normalise slot parameters

7 weeks agoMerge pull request #8086 from certbot/core20-squashed
ohemorange [Thu, 18 Jun 2020 00:20:46 +0000 (17:20 -0700)]
Merge pull request #8086 from certbot/core20-squashed

Upgrade snap to be based on core20

This PR makes several changes to be built on top of the core20 base snap. Fixes #7854.

The main changes are to `snapcraft.yaml`. With Snapcraft 4.0/core20 base, the python plugin is a thin wrapper, basically creating a `venv` and installing the packages from the source. The trouble with this is that it runs pycache, creating caches that conflict from the different parts. So to solve that, we put everything in a single part. Other changes include:

- We use classic confinement, so we need to specify a bunch of python packages to `stage-packages`, as mentioned [here](https://forum.snapcraft.io/t/trouble-bundling-python-with-classic-confinement-in-core20-4-0-4/18234/2).
- The certbot executable now lives in `bin`, so specify running `certbot/bin`.
- Since `python-augeas` is now being pulled into the single part, remove the pinning from constraints so we can use the latest version directly from github.
- Precompile our `cryptography` and `cffi` wheels to be based on python3.8.

Separately, we had to upgrade the snapcraft docker image to be based on focal, due to the thin wrapper situation. This was accomplished [here](https://github.com/adferrand/snapcraft/pull/1).

7 weeks agoUpgrade snap to be based on core20 8086/head
Erica Portnoy [Fri, 12 Jun 2020 01:06:51 +0000 (18:06 -0700)]
Upgrade snap to be based on core20

* Get rid of a whole bunch of error message
* Remove some more overlaps
* don't use certbot from nginx and apache
* use python3 from bin
* certbot needs to be in bin
* try to exclude just the certbot folder
* try a couple things to use the python from the venv bin
* play around with which versions of things we want from each package
* ok, certbot-nginx does need to stage bin
* certbot needs to not stage bin. why does certbot not put certbot in bin?
* fail to inspect more versions of things in the container shell
* take cffi backend from python-augeas
* if we use certbot from bin things should work?
* why is bin not in path? no idea, but let's get it compiled then inspect things in the snap shell
* use snap.certbot instead of bin/certbot
* it does require bin/certbot. I don't know why.
* let's see if we can stick it all in one step
* try installing local subdirectories
* move python-augeas into the single part
* remove after
* put back python-augeas part for now; ERROR: Could not satisfy constraints for 'python-augeas': installation from path or url cannot be constrained to a version
* how was this previously working without git installed? install git.
* maybe it needs to already have python3-wheel installed
* maybe wheel will install first if I change it to -e
* no -e
* maybe try a different python3 package to stage
* this last change wasn't necessary
* remove the bin/ from renew
* nope, it does need bin/certbot
* back to wget
* stage a bare python3
* add all necessary python packages to stage-packages
* pretty sure we don't actually need wheel. let's try removing it!
* remove python-augeas, since we have it pinned to an older version in cb-auto that might work
* stage augeas
* still need libaugeas-dev
* ok let's try building
* combining into one part works! just make sure to unpin python-augeas when generating snap-constraints.txt
* change our scripts to unpin python-augeas
* Use ubuntu 20 in compile_native_wheels.sh
* .travis.yml should use python3-dev instead of python-dev
* jk! we don't need python3-dev in travis
* Update cffi and cryptography wheels for ubuntu20 version of python
* looks like we need python3-dev to build things
* Remove deprecated i386 wheels

7 weeks agoTrivially upgrade to core20?
Brad Warren [Tue, 19 May 2020 19:06:47 +0000 (12:06 -0700)]
Trivially upgrade to core20?

7 weeks agoRemove the need for TRAVIS to be set. (#8084)
Brad Warren [Wed, 17 Jun 2020 21:41:11 +0000 (14:41 -0700)]
Remove the need for TRAVIS to be set. (#8084)

I initially added this when the script was doing things like migrating all LXD containers to the snap. I think the external side effects are now pretty minimal thought so I think we can remove the need for this environment variable which makes it easier to use outside of CI for manual testing.

7 weeks agoDrop i386 architecture on snap build (#8083)
Adrien Ferrand [Tue, 16 Jun 2020 22:57:05 +0000 (00:57 +0200)]
Drop i386 architecture on snap build (#8083)

This PR remove the i386 architecture in the snap build process, because the base snap `core20` is not available for this architecture.

8 weeks agoRemove on_cancel which isn't recognized by Travis. (#8077)
Brad Warren [Mon, 15 Jun 2020 20:27:23 +0000 (13:27 -0700)]
Remove on_cancel which isn't recognized by Travis. (#8077)

8 weeks agodns-cloudflare: Update docs and error messages to reflect new API permissions (#8015)
Cameron Steel [Fri, 12 Jun 2020 18:38:13 +0000 (04:38 +1000)]
dns-cloudflare: Update docs and error messages to reflect new API permissions (#8015)

* Tweaks for improved Cloudflare API

* Update docs for dns-cloudflare

* Update tests and changelog

* Fix bad merge

* Fix error code for record add

* Improve error message

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
8 weeks agoadd changelog entry (#8067)
Brad Warren [Thu, 11 Jun 2020 08:19:51 +0000 (01:19 -0700)]
add changelog entry (#8067)

2 months agostarts not stats (#8066)
Brad Warren [Wed, 10 Jun 2020 23:58:46 +0000 (16:58 -0700)]
starts not stats (#8066)

2 months agoCertbot snap multiarch build (#8016)
Adrien Ferrand [Wed, 10 Jun 2020 21:33:02 +0000 (23:33 +0200)]
Certbot snap multiarch build (#8016)

This PR proposes a way to build the certbot snap for several architectures, using a QEMU-base emulation approach, and several optimizations to keep the build time of each snap below 20 minutes.

Most of the reasoning for the approach proposed here is described in the original PR: https://github.com/basak/certbot-snap-build/pull/27

On top of it, I added a docker pull to a pre-compiled snapcraft docker, instead of compiling it during the Travis pipeline, in order to save 5 to 7 minutes more on each snap build. The snap images are compiled and stored here: https://hub.docker.com/repository/docker/adferrand/snapcraft. Depending on the time the PR will be reviewed, we can:
* continue to use `adferrand/snapcraft`
* move its logic to certbot scope and use something like `certbot/snapcraft`
* wait for https://github.com/snapcore/snapcraft/pull/3144 to be merged, and use `snapcore/snapcraft`.

* Backport https://github.com/basak/certbot-snap-build/pull/27 into Certbot project

* Fix build deps

* Integrate proactively #8012 to fix builds on non-amd64 archs

* Configure jobs on Travis

* Focus on snap builds. Disable temporarily some jobs. Disable deploy actions by security.

* Specify TARGET_ARCH during snap build

* Do not do anything if TOXENV is not set

* Various optimizations

* Use recent version of ubuntu for get correct features on snap out of the box

* Add up to date wheels

* Organizing scripts

* Set dest dir

* Get back original configuration for Travis

* Add comments

* Update common_libs.sh

* Use adferrand/snapcraft

* Test build

* Stable snapcraft

* Update build_and_install.sh

* Move back snap builds to the cron/release pipeline

* Update snap/local/compile_native_wheels.sh

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
* Update snap/local/compile_native_wheels.sh

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
* Update snap/local/compile_native_wheels.sh

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
* Update snap/local/build_and_install.sh

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
* Enable i386 builds, various optimizations

* Update dependencies

* Configure a simple http server to serve the pre compiled wheels

* Fix wheels compilation

* Relax permissions

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
2 months agoMake Certbot find externally snapped plugins (#8054)
ohemorange [Wed, 10 Jun 2020 20:52:56 +0000 (13:52 -0700)]
Make Certbot find externally snapped plugins (#8054)

* Add snap plugin support

Switch to a PoC branch of certbot that supports the new
CERTBOT_PLUGIN_PATH and wrap the snap to set this variable correctly
based on the content interfaces connected.

(cherry picked from commit 7076a55fd82116d068e2aca7239209b7203917d2)

* Modify certbot.wrapper to append to PYTHONPATH instead of separate CERTBOT_PLUGIN_PATH variable

* Update certbot-wrapper to python3.6 version

* add source field

* Update changelog

* Use bash instead of sh

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
* Exit if something goes wrong

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
* No leading : when modifying empty PYTHONPATH

* Improve bash handling of PYTHONPATH manipulation

Co-authored-by: Robie Basak <robie.basak@canonical.com>
Co-authored-by: Brad Warren <bmw@eff.org>
Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
2 months agoImplement umask for Windows (#7967)
Adrien Ferrand [Wed, 10 Jun 2020 00:08:22 +0000 (02:08 +0200)]
Implement umask for Windows (#7967)

This PR gets its root from an observation I did on current version of Certbot (1.3.0): the `renewal-hooks` directory in Certbot configuration directory is created on Windows with write permissions to everybody.

I thought it was a critical bug since this directory contains hooks that are executed by Certbot, and you certainly do not want this folder to be open to any malicious hook that could be inserted by everyone, then executed with administrator privileges by Certbot.

Turns out for this specific problem that the bug is not critical for the hooks, because the scripts are expected to be in subdirectories of `renewal-hooks` (namely `pre`, `post` and `deploy`), and these subdirectories have proper permissions because we set them explicitly when Certbot is starting.

Still, there is a divergence here between Linux and Windows: on Linux all Certbot directories without explicit permissions have at maximum `0o755` permissions by default, while on Windows it is a `0o777` equivalent. It is not an immediate security risk, but it is definitly error-prone, not expected, and so a potential breach in the future if we forget about it.

Root cause is that umask is not existing in Windows. Indeed under Linux the umask defines the default permissions when you create a file or a directory. Python takes that into account, with an API for `os.open` and `os.mkdir` that expose a `mode` parameter with default value of `0o777`. In practice it is never `0o777` (either you the the `mode` explictly or left the default one) because the effective mode is masked by the current umask value in the system: on Linux it is `0o022`, so files/directories have a maximum mode of `0o755` if you did not set the umask explicitly, and it is what it is observed for Certbot.

However on Windows, the `mode` value passed (and got from default) to the `open` and `mkdir` of `certbot.compat.filesystem` module is taken verbatim, since umask does not exit, and then is used to calculate the DACL of the newly created file/directory. So if the mode is not set explicitly, we end up with files and directories with `0o777` permissions.

This PR fixes this problem by implementing a umask behavior in the `certbot.compat.filesystem` module, that will be applied to any file or directory created by Certbot since we forbid to use the `os` module directly.

The implementation is quite straight-forward. For Linux the behavior is not changed. On Windows a `mask` parameter is added to the function that calculates the DACL, to be invoked appropriately when file or directory are created. The actual value of the mask is taken from an internal class of the `filesystem` module: its default value is `0o755` to match default umasks on Linux, and can be changed with the new method `umask` that have the same behavior than the original `os.umask`. Of course `os.umask` becomes a forbidden function and `filesystem.umask` must be used instead.

Existing code that is impacted have been updated, and new unit tests are created for this new function.

* Implement umask for Windows

* Set umask at the beginning of tests

* Fix lint, update local oldest requirements

* Update certbot-apache/setup.py

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
* Improve tests

* Adapt filesystem.makedirs for Windows

* Fix

* Update certbot-apache/setup.py

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
* Changelog entries

* Fix lint

* Update certbot/CHANGELOG.md

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
2 months agoStop running snapcraft with sudo (#8063)
Brad Warren [Tue, 9 Jun 2020 21:46:11 +0000 (14:46 -0700)]
Stop running snapcraft with sudo (#8063)

* Do not use sudo when building the snap.

* add user to lxd

* Run with lxd group.

2 months agoMerge pull request #8053 from certbot/upgrade-acmev1
Brad Warren [Tue, 9 Jun 2020 18:43:06 +0000 (11:43 -0700)]
Merge pull request #8053 from certbot/upgrade-acmev1

Read acmev1 Let's Encrypt server URL from renewal config as acmev2 URL

2 months agoFix certbot.compat.filesystem documentation (#8058)
Brian Heim [Mon, 8 Jun 2020 21:00:16 +0000 (16:00 -0500)]
Fix certbot.compat.filesystem documentation (#8058)

* Fix bad rst docstrings

* AUTHORS.md: add Brian Heim

Co-authored-by: ohemorange <ebportnoy@gmail.com>
2 months agoRemove documentation for configuring ciphersuites (#8027) (#8056)
Rasesh Patel [Mon, 8 Jun 2020 19:15:44 +0000 (15:15 -0400)]
Remove documentation for configuring ciphersuites (#8027) (#8056)

Issue #1123 discusses a feature that allows users to set the cipher
security level. That feature wasn't built. It didn't provide enough
user value to justify the corresponding increase in complexity. The
feature request and the associated discussion threads were closed.
However, the proposed API spec and the TODO section remained in the
cipher docs. They're a vestige of that issue from olden days and this PR
removes those last living traces...

Fixes #8027.

2 months agoAdd comment about pyca's use of tools script (#8044)
Brad Warren [Mon, 8 Jun 2020 19:14:02 +0000 (12:14 -0700)]
Add comment about pyca's use of tools script (#8044)

2 months agoAUTHORS.md: fix GH url for Brandon Kreisel (#8059)
Brian Heim [Mon, 8 Jun 2020 19:13:29 +0000 (14:13 -0500)]
AUTHORS.md: fix GH url for Brandon Kreisel (#8059)

2 months agoAdd support for NetBSD (#8033)
Lloyd Parkes [Mon, 8 Jun 2020 19:06:38 +0000 (07:06 +1200)]
Add support for NetBSD (#8033)

* Add support for NetBSD by telling certbot-nginx where the nginx
configuration directory is.

* Update the CHANGELOG.

* Pass the right type of sequence to "in". Thanks lint.

* Adjust the CHANGELOG.md entry following feedback from ohemorange.

Co-authored-by: Lloyd Parkes <lloyd@must-have-coffee.gen.nz>
2 months agoupdate changelog upgrade-acmev1 8053/head
Erica Portnoy [Thu, 4 Jun 2020 22:57:34 +0000 (15:57 -0700)]
update changelog

2 months agoMerge remote-tracking branch 'alexzorin/7979_restore_v1_as_v2' into upgrade-acmev1
Erica Portnoy [Thu, 4 Jun 2020 21:29:56 +0000 (14:29 -0700)]
Merge remote-tracking branch 'alexzorin/7979_restore_v1_as_v2' into upgrade-acmev1

2 months agoapache: handle statically linked mod_ssl (#8007)
alexzorin [Thu, 4 Jun 2020 17:34:10 +0000 (03:34 +1000)]
apache: handle statically linked mod_ssl (#8007)

In #7771, the Apache configurator gained the ability to identify what
version of OpenSSL Apache's ssl_module is linked against. However, the
detection was only functional if the module was built as a DSO (which is
almost always the case).

This commit covers the case where the ssl_module is statically linked
within the Apache binary. It requires the user to specify the path to
the binary (with --apache-bin) and emits a warning if static linking is
detected but no path has been provided.