Wow! Thanks for all the feedback everyone.
> On Jul 23, 2018, at 6:52 PM, Chris Jerdonek <chris.jerdo...@gmail.com> wrote:
>
> 1) Can you list in the document the non-Python dependencies and what
> they're used for to give people an idea?
Done! I added this to the “Certbot Background” section at the top of the
document.
> 2) I don't know how Certbot is architected, but would it be possible
> to put the "meat" of Certbot inside a Docker container (ideally
> including most of the non-Python dependencies), and then have a much
> lighter-weight Python application (with fewer dependencies) running
> outside of Docker, and that calls the application inside the Docker
> container when it needs to do stuff?
Maybe. Currently each method of performing the domain validation required to
get a certificate and the support for installing the certificate in different
servers is implemented by a plugin to Certbot. These plugins implement a class
with a certain interface which it registers as a setuptools entry_point. At
runtime, Certbot picks the class type desired by the user, creates an instance
of it, and calls its methods as necessary to obtain a certificate, install it,
etc. Most of these plugins make use of code in Certbot’s modules that implement
common functionality to simplify plugin development.
This architecture seems like the opposite of what you’re proposing as Certbot
is calling the plugin as needed rather than the other way around, but we’re
certainly open to the possibility of changing things to make it easier to
distribute Certbot. Are you aware of another significantly sized project that
is structured in this way?
> On Jul 23, 2018, at 7:04 PM, Eli Ribble via Distutils-SIG
> <distutils-sig@python.org> wrote:
>
> I think I'd separate out certbot installed by the package manager which is
> just a simple bootstrapper and the certbot installed in the virtualenv which
> does real work.
This is an interesting idea. By making our own .deb and .rpm packages, we can
handle things like installing non-Python dependencies and adding cron jobs or
systemd timers in the conventional, system specific way rather than trying to
use our single certbot-auto script that tries to work everywhere. It also gives
us the option to distribute this Certbot bootstrapper separately on less
popular OSes with the caveat that those users will have to install dependencies
and set up automating certificate renewal themselves. Thanks for the suggestion!
> On Jul 23, 2018, at 7:54 PM, Michael Sarahan <msara...@anaconda.com> wrote:
>
> > How will separately distributed plugins work?
>
> Having that layout makes plugins easy, because the paths are both
> standardized and relocatable (assume relative paths most of the time).
Do you know if our approach to using setuptools entry_points to find plugins
will work? This is described at
https://setuptools.readthedocs.io/en/latest/setuptools.html#dynamic-discovery-of-services-and-plugins
<https://setuptools.readthedocs.io/en/latest/setuptools.html#dynamic-discovery-of-services-and-plugins>.
>
> I work for Anaconda, and am also a core member of Conda-forge. If you have
> any questions or just want to talk about how conda/conda-forge may or may not
> meet your needs, please feel free to reach out.
Thanks a lot on this offer. I may take you up on that as I continue to dig into
our options and experiment.
> On Jul 23, 2018, at 11:10 PM, James Bennett <ubernost...@gmail.com> wrote:
>
> On Mon, Jul 23, 2018 at 8:17 PM, Alex Walters <tritium-l...@sdamon.com
> <mailto:tritium-l...@sdamon.com>> wrote:
> As a user of certbot, docker, conda, nix, and guix are non-starters. I'm not
> depending on those tools for my production server (and while docker may be a
> dependency for some people, that is hardly universal). Adding heavyweight
> technical dependencies are problematic if your goal is to get everyone using
> your software. You're better off with cx_freeze or pyinstaller binaries
> downloaded from a website or a PPA-like-system to add to system package
> managers, which are not perfect solutions either.
>
> I would emphasize this point.
Not wanting to install a lot of extra software to use Certbot is certainly fair
and we’d obviously prefer our packaging solution to be as lightweight as
possible. Thanks for bringing this up as a consideration.
With that said, our current approaches aren’t working for us. We’re a small
development team and continuing to maintain our custom certbot-auto installer
which installs dependencies through your OS package manager and creates a
virtual environment tucked away in /opt is a significant drain on our
resources. If there’s existing tools or projects which can make this easier for
us, we’d like to consider them so we can focus our efforts on Certbot and its
features rather than packaging and distribution.
Our concerns with cx_freeze/pyinstaller and maintaining our own native
packaging repos are listed in the Google Doc. If you have information which may
help here, please share! Barring someone suggesting something we haven’t
considered, maintaining our own native package repos is one of the three
options we’re still considering and we haven’t heard many complaints about
certbot-auto (when it works). If we go with something that requires
significantly more resources though, we’ll definitely take the fact it does
this into consideration and would likely offer a lighter weight (but more
manual) installation process for sysadmins who prefer it.
> The real question here is what use case you're targeting.
Our main use case has been the long tail of individuals or small teams of
sysadmins who maintain servers and need or want help and automation around
maintaining a secure TLS configuration. Making Certbot available to anyone else
who wants to use it is just icing on the cake.
> On Jul 24, 2018, at 4:36 AM, Nick Coghlan <ncogh...@gmail.com> wrote:
>
> However, there *are* folks that have been working on allowing
> applications to be defined primarily as Python projects, and then have
> the creation of wrapper native installers be a pushbutton exercise,
> rather than requiring careful human handholding.
This is definitely our preferred approach to building native packages right
now. To be honest, no one on my team has any experience building .debs and
.rpms and we’re happy to learn what we need to if we go with this approach, but
the more reliable automation around the process we can use the better.
> Regardless, given the design constraints and the target audience, it's
> unlikely to be possible to avoid offering a two-level solution, where
> the lower platform dependent layer sets up any services and cron jobs
> required, as well as establishing a Python virtual environment in
> /opt, and then the bulk of certbot, as well as any installed plugins,
> run in that venv (plugins would still be managed with pip, just
> installed into the certbot venv rather than globally).
Outside of FPM’s support for packaging a virtual environment which Freddy
Rietdijk mentioned, we really hadn’t considered this approach. I think it’s an
interesting idea and could work well for us. I gave a couple more thoughts on
this approach in my reply to Eli Ribble who suggested the same thing.
> For actually building and publishing those platform dependent pieces,
> openSUSE's Open Build Service is the most complete offering I'm aware
> of: https://openbuildservice.org/ (Fedora's COPR is good for targeting
> RPM based distros, and Ubuntu offer their PPA system, but OBS allows
> creation of multiple respository formats).
Thanks a lot for this and the other pointers in your post Nick. It’s very
helpful!
--
Distutils-SIG mailing list -- distutils-sig@python.org
To unsubscribe send an email to distutils-sig-le...@python.org
https://mail.python.org/mm3/mailman3/lists/distutils-sig.python.org/
Message archived at
https://mail.python.org/mm3/archives/list/distutils-sig@python.org/message/E364VEIRYBK32CA2BBEUQYKKZVWWVR3Q/