├── scripts
├── Ubuntu12LTS.sh
├── Ubuntu14TS.sh
├── Debian8Jessie.sh
├── FreeBSD10.sh
├── RedHat7.sh
├── CentOS7.sh
├── AmazonLinux2015.sh
├── CentOS6.sh
├── RedHat6.sh
└── Debian7Wheezy.sh
├── LICENSE
└── README.md
/scripts/Ubuntu12LTS.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # Ubuntu 12.04 LT LetsEncrypt beta client installer
4 | #
5 | # If you get stuck, just try again:
6 | # cd ~/ && rm -rf ./letsencrypt && rm -rf ~/.local/share/letsencrypt && rm -rf /etc/letsencrypt && rm -rf ~/.cache/pip
7 | #
8 | # Usage (as root; note the leading space): . ./Ubuntu12LTS.sh
9 |
10 | # Set this to your domain for certificate
11 |
12 | export DOMAIN=www.EXAMPLE.org
13 |
14 | apt-get -y -qq update
15 | apt-get -y -qq install git
16 |
17 | git clone https://github.com/letsencrypt/letsencrypt
18 |
19 | cd letsencrypt
20 |
21 | ./letsencrypt-auto --agree-dev-preview -d $DOMAIN --authenticator manual certonly
22 |
23 |
--------------------------------------------------------------------------------
/scripts/Ubuntu14TS.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # Ubuntu 14.04 LT LetsEncrypt beta client installer
4 | #
5 | # If you get stuck, just try again:
6 | # cd ~/ && rm -rf ./letsencrypt && rm -rf ~/.local/share/letsencrypt && rm -rf /etc/letsencrypt && rm -rf ~/.cache/pip
7 | #
8 | # Usage (as root; note the leading space): . ./Ubuntu14LTS.sh
9 |
10 | # Set this to your domain for certificate
11 |
12 | export DOMAIN=www.EXAMPLE.org
13 |
14 | apt-get -y -qq update
15 | apt-get -y -qq install git
16 |
17 | git clone https://github.com/letsencrypt/letsencrypt
18 |
19 | cd letsencrypt
20 |
21 | ./letsencrypt-auto --agree-dev-preview -d $DOMAIN --authenticator manual certonly
22 |
23 |
--------------------------------------------------------------------------------
/scripts/Debian8Jessie.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # Debian 8 (Jessie) LetsEncrypt beta client installer
4 | #
5 | # If you get stuck, just try again:
6 | # cd ~/ && rm -rf ./letsencrypt && rm -rf ~/.local/share/letsencrypt && rm -rf /etc/letsencrypt && rm -rf ~/.cache/pip
7 | #
8 | # Usage (as root; note the leading space): . ./Debian8Jessie.sh
9 |
10 | # Set this to your domain for certificate
11 |
12 | export DOMAIN=www.EXAMPLE.org
13 |
14 | apt-get -y -qq update
15 | apt-get -y -qq install git
16 |
17 | git clone https://github.com/letsencrypt/letsencrypt
18 |
19 | cd letsencrypt
20 |
21 | ./letsencrypt-auto --agree-dev-preview -d $DOMAIN --authenticator manual certonly
22 |
23 |
--------------------------------------------------------------------------------
/scripts/FreeBSD10.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # FreeBSD 10.2-RELEASE stock build (on AWS: ami-f709a29c) LetsEncrypt beta client installer
4 | #
5 | # If you get stuck, just try again:
6 | # cd ~/ && rm -rf ./letsencrypt && rm -rf ~/.local/share/letsencrypt && rm -rf /usr/local/etc/letsencrypt && rm -rf ~/.cache/pip
7 | #
8 |
9 | # Usage (as root; note the leading space): source ./FreeBSD10.sh
10 |
11 | # Set this to your domain for certificate
12 | export DOMAIN=www.EXAMPLE.org
13 |
14 |
15 | mkdir -p /usr/local/etc/pkg/repos
16 |
17 | # Currently only available for 10.2-Release
18 |
19 | cat > /usr/local/etc/pkg/repos/FreeBSD.conf << 'EOF'
20 | FreeBSD: {
21 | url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest"
22 | }
23 | 'EOF'
24 |
25 | pkg install -y py27-letsencrypt
26 |
27 | letsencrypt --agree-dev-preview -d $DOMAIN --authenticator manual certonly
28 |
29 |
30 | # For trusted cert (currently Beta testers only):
31 | # --server https://acme-v01.api.letsencrypt.org/directory
32 |
33 |
34 |
--------------------------------------------------------------------------------
/scripts/RedHat7.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # RedHat 7 stock LetsEncrypt beta client installer
4 | #
5 | # If you get stuck, just try again:
6 | # cd ~/ && rm -rf ./letsencrypt && rm -rf ~/.local/share/letsencrypt && rm -rf /etc/letsencrypt && rm -rf ~/.cache/pip
7 | #
8 | # Usage (as root; note the leading space): . ./RedHat7.sh
9 |
10 | # Set this to your domain for certificate
11 |
12 | export DOMAIN=www.EXAMPLE.org
13 |
14 | # Sanity checks
15 | if ( whoami | grep -qv root ); then
16 | echo "Fatal: Please rerun script as sudo or root." && read -p "[Hit cntrl-c to break]"
17 | fi
18 | if [ "$DOMAIN" == "www.EXAMPLE.org" ]; then
19 | echo "Fatal: Please set DOMAIN and rerun this script." && read -p "[Hit cntrl-c to break]"
20 | fi
21 |
22 | yum update -y -q
23 | yum -q -y install git
24 |
25 | git clone https://github.com/letsencrypt/letsencrypt
26 | cd letsencrypt
27 | ./letsencrypt-auto --agree-dev-preview -d $DOMAIN --authenticator manual certonly
28 |
29 | # For trusted cert (currently Beta testers only):
30 | # --server https://acme-v01.api.letsencrypt.org/directory
31 |
--------------------------------------------------------------------------------
/scripts/CentOS7.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # CentOS 7 stock LetsEncrypt beta client installer
4 | #
5 | # If you get stuck, just try again:
6 | # cd ~/ && rm -rf ./letsencrypt && rm -rf ~/.local/share/letsencrypt && rm -rf /etc/letsencrypt && rm -rf ~/.cache/pip
7 | #
8 | # Usage (as root; note the leading space): . ./CentOS7.sh
9 |
10 | # Set this to your domain for certificate
11 |
12 | export DOMAIN=www.EXAMPLE.org
13 |
14 | # Sanity checks
15 | if ( whoami | grep -qv root ); then
16 | echo "Fatal: Please rerun script as sudo or root." && read -p "[Hit cntrl-c to break]"
17 | fi
18 | if [ "$DOMAIN" == "www.EXAMPLE.org" ]; then
19 | echo "Fatal: Please set DOMAIN and rerun this script." && read -p "[Hit cntrl-c to break]"
20 | fi
21 |
22 | yum update -y -q
23 | yum -q -y install git
24 |
25 | git clone https://github.com/letsencrypt/letsencrypt
26 |
27 | cd letsencrypt
28 |
29 | ./letsencrypt-auto --agree-dev-preview -d $DOMAIN --authenticator manual certonly
30 |
31 | # For trusted cert (currently Beta testers only):
32 | # --server https://acme-v01.api.letsencrypt.org/directory
33 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/scripts/AmazonLinux2015.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # Amazon Linux 2015.09-Minimal stock LetsEncrypt beta client installer (HVM EBS: ami-fbb9c991)
4 | #
5 | # If you get stuck, just try again:
6 | # cd ~/ && rm -rf ./letsencrypt && rm -rf ~/.local/share/letsencrypt && rm -rf /etc/letsencrypt && rm -rf ~/.cache/pip
7 | #
8 | # Usage (as root; note the leading space): . ./AmazonLinux2015sh
9 |
10 | # Set this to your domain for certificate
11 |
12 | export DOMAIN=www.EXAMPLE.org
13 |
14 | # Sanity checks
15 | if ( whoami | grep -qv root ); then
16 | echo "Fatal: Please rerun script as sudo or root." && read -p "[Hit cntrl-c to break]"
17 | fi
18 | if [ "$DOMAIN" == "www.EXAMPLE.org" ]; then
19 | echo "Fatal: Please set DOMAIN and rerun this script." && read -p "[Hit cntrl-c to break]"
20 | fi
21 |
22 | yum update -y -q
23 |
24 | # The LE installer OS autodetect doesn't recognize Amazon Linux, so we have to manually pre-install required buildpkgs
25 |
26 | yum install -y -q augeas-libs dialog epel-release gcc git libffi-devel openssl-devel python27-pip python27-python-devel python27-virtualenv
27 |
28 | git clone https://github.com/letsencrypt/letsencrypt
29 |
30 | cd letsencrypt
31 |
32 | ./letsencrypt-auto --agree-dev-preview -d $DOMAIN --authenticator manual certonly
33 |
34 | # For trusted cert (currently Beta testers only):
35 | # --server https://acme-v01.api.letsencrypt.org/directory
36 |
--------------------------------------------------------------------------------
/scripts/CentOS6.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # CentOS 6.7 stock LetsEncrypt beta client installer
4 | #
5 | # If you get stuck, just try again:
6 | # cd ~/ && rm -rf ./letsencrypt && rm -rf ~/.local/share/letsencrypt && rm -rf /etc/letsencrypt && rm -rf ~/.cache/pip
7 | #
8 | # Usage (as root; note the leading space): . ./CentOS6.sh
9 |
10 | # Set this to your domain for certificate
11 |
12 | export DOMAIN=www.EXAMPLE.org
13 |
14 | # Sanity checks
15 | if ( whoami | grep -qv root ); then
16 | echo "Fatal: Please rerun script as sudo or root." && read -p "[Hit cntrl-c to break]"
17 | fi
18 | if [ "$DOMAIN" == "www.EXAMPLE.org" ]; then
19 | echo "Fatal: Please set DOMAIN and rerun this script." && read -p "[Hit cntrl-c to break]"
20 | fi
21 |
22 | # Enable EPEL repository (for Python 2.7)
23 | rpm --import https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
24 | rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
25 |
26 | yum install -y -q git python-pip python27-python-devel
27 | pip install --upgrade pip
28 |
29 | # Set temporary PATH and LD Library (current shell only)
30 | # Note the leading space. Rerun if starting new shell before launching letsencrypt-auto
31 |
32 | . /opt/rh/python27/enable
33 |
34 | if ( python -V 2>&1 | grep -q '2.7' ) then
35 | git clone https://github.com/letsencrypt/letsencrypt
36 | cd letsencrypt
37 | ./letsencrypt-auto --agree-dev-preview -d $DOMAIN --authenticator manual certonly
38 | # For trusted cert (currently Beta testers only):
39 | # --server https://acme-v01.api.letsencrypt.org/directory
40 | else
41 | echo -e "\n\nFatal: Incompatible Python build environment. Please rerun: . /opt/rh/python27/enable \n"
42 | fi
43 |
--------------------------------------------------------------------------------
/scripts/RedHat6.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # RedHat 6.7 stock LetsEncrypt beta client installer
4 | #
5 | # If you get stuck, just try again:
6 | # cd ~/ && rm -rf ./letsencrypt && rm -rf ~/.local/share/letsencrypt && rm -rf /etc/letsencrypt && rm -rf ~/.cache/pip
7 | #
8 | # Usage (as root; note the leading space): . ./RedHat6.sh
9 |
10 | # Set this to your domain for certificate
11 |
12 | export DOMAIN=www.EXAMPLE.org
13 |
14 | # Sanity checks
15 | if ( whoami | grep -qv root ); then
16 | echo "Fatal: Please rerun script as sudo or root." && read -p "[Hit cntrl-c to break]"
17 | fi
18 | if [ "$DOMAIN" == "www.EXAMPLE.org" ]; then
19 | echo "Fatal: Please set DOMAIN and rerun this script." && read -p "[Hit cntrl-c to break]"
20 | fi
21 |
22 | # Enable EPEL repository (for Python 2.7)
23 | rpm --import https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
24 | rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
25 |
26 | yum install -y -q git python-pip python27-python-devel
27 | pip install --upgrade pip
28 |
29 | # Set temporary PATH and LD Library (current shell only)
30 | # Note the leading space. Rerun if starting new shell before launching letsencrypt-auto
31 |
32 | . /opt/rh/python27/enable
33 |
34 | if ( python -V 2>&1 | grep -q '2.7' ) then
35 | git clone https://github.com/letsencrypt/letsencrypt
36 | cd letsencrypt
37 | ./letsencrypt-auto --agree-dev-preview -d $DOMAIN --authenticator manual certonly
38 | # For trusted cert (currently Beta testers only):
39 | # --server https://acme-v01.api.letsencrypt.org/directory
40 | else
41 | echo -e "\n\nFatal: Incompatible Python build environment. Please rerun: . /opt/rh/python27/enable \n"
42 | fi
43 |
--------------------------------------------------------------------------------
/scripts/Debian7Wheezy.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # Debian 7.9 (Wheezy) LetsEncrypt beta client installer
4 | #
5 | # If you get stuck, just try again:
6 | # cd ~/ && rm -rf ./letsencrypt && rm -rf ~/.local/share/letsencrypt && rm -rf /etc/letsencrypt && rm -rf ~/.cache/pip
7 | #
8 | # Usage (as root; note the leading space): . ./Debian7Wheezy.sh
9 |
10 | # Set this to your domain for certificate
11 |
12 | export DOMAIN=www.EXAMPLE.org
13 |
14 | apt-get -y -qq update
15 | apt-get -y -qq install \
16 | curl gcc git libbz2-dev libncurses5-dev libreadline-dev libsqlite3-dev libssl-dev llvm make patch python-pip wget zlib1g-dev
17 |
18 |
19 | # A little insane, so read and run at your own risk!
20 |
21 | # This installs the pyenv manager to run non-system multiple/parallel versions of python
22 | # (Rationale in short: LE official python client requires very specific versions of libraries)
23 |
24 | curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
25 |
26 | eval "$(pyenv init -)"
27 | eval "$(pyenv virtualenv-init -)"
28 |
29 | # There will be a long pause at the patch update while pyenv compiles 2.7.9
30 | echo 'To monitor the build process, from another terminal: tail -f /tmp/$(ls -t /tmp | grep log$ | head -n 1)'
31 | pyenv install 2.7.9
32 |
33 | eval "$(pyenv init -)"
34 | eval "$(pyenv virtualenv-init -)"
35 |
36 | pyenv global 2.7.9
37 |
38 | echo "Next line should show: 2.7.9"
39 | python -V
40 |
41 | git clone https://github.com/letsencrypt/letsencrypt
42 |
43 | cd letsencrypt
44 |
45 | ./letsencrypt-auto --agree-dev-preview -d $DOMAIN --authenticator manual certonly
46 |
47 | # For trusted cert (currently Beta testers only):
48 | # --server https://acme-v01.api.letsencrypt.org/directory
49 |
50 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Note: This project has been archived. I recommend using the official CertBot or Lego now (https://certbot.eff.org/ or https://github.com/xenolf/lego)
2 | _________________
3 |
4 | ## LetsEncrypt Client Installers
5 |
6 | A suite of simple install scripts for the LetsEncrypt official certificate client on most major *nix OS (Debian, AWS, CentOS, RedHat, Ubuntu, and FreeBSD)
7 |
8 | This is a minimal, repeatable set of scripts to stand up the official [Let's Encrypt](https://letsencrypt.org/)
9 | certificate management [ACME client tool](https://github.com/letsencrypt/letsencrypt). Let's Encrypt is a really important
10 | project, and the team has made *amazing* progress in the past year.
11 |
12 | The letsencrypt ("LE") client is written in Python, and though it attempts to automatically
13 | detect your operating system and build environment, it can be fragile and error-prone on
14 | some systems, particularly popular distros like Amazon Linux and older versions of CentOS
15 | or RedHat.
16 |
17 | This started because of so many false starts for me when trying to use the beta client. I was eventually able to reliably request and receive certificates on Debian and CentOS on GCE and AWS, and achieve an A+ rating with
18 | [SSLLabs' test suite](https://www.ssllabs.com/ssltest/index.html). Woot!
19 | These scripts are a cleanup and drastic simplification of that work (many dozens of VMs later). My message is: _you too_ can painlessly [generate certs](https://community.letsencrypt.org/t/beta-program-announcements/1631) for your systems.
20 |
21 |
22 | ### Abbreviated advice from the front line
23 |
24 | * For people who are not in the Beta program, the scripts by default will target the LE "staging" API endpoint, and on successful generation of certs, the CA will be a test authority ("Happy Hacker CA"). To enable trusted certificates, Beta testers can modify the scripts as indicated in each, but *only* against white-listed domains (and `example.com` doesn't whitelist `blog.example.com` by default).
25 | * Do __not__ run either these scripts or the client on production systems (yet). LE is still in beta and has some rough edges, including silently invoking sudo and installing [quite a few](#dependencies) development packages. __Please__ study the script for your platform. These were written quickly to help other people hopefully avoid some of the stumbling blocks I hit, and to expand the pool of testing volunteers.
26 | * The Apache and Nginx plugins to autoupdate are very much still works-in-progress. I encourage anyone to help improve them by testing & documenting your results. Constructive feedback is welcome!
27 | * Because the Nginx LE plugin in particular is still classified as highly experimental, I recommend spinning up a test VM (micro instances on GCE or AWS work great), and using the LE client as a certificate fetcher, pushing certs and keys to target servers via ssh.
28 | * Be patient during the build, because there may be long pauses (multi-minute on micro VMs) that are preceded by unrelated warning messages. If you're running on a platform that ships with Python v 2.6 (wheezy, Cent6, Amazon Linux), be aware that there are some [core limits](#urllib3) on the underlying library around TLS, but workarounds are in place during the "bootstrap" process of standing up the client, and additional 2.6 support is being added by the LE team.
29 |
30 |
31 | As indicated in each script, if you get stuck, it's perfectly ok to tear down, rebuild, and try again, just make sure to run the following clean up to remove python and build fragments:
32 |
33 | cd ~/ && rm -rf ./letsencrypt && rm -rf ~/.local/share/letsencrypt && rm -rf /etc/letsencrypt && rm -rf ~/.cache/pip
34 |
35 |
36 | ### If you're just completely stuck and ready to give up
37 |
38 | There are three non-official alternative LE clients, and they work pretty well:
39 |
40 | https://github.com/unixcharles/acme-client (a Ruby gem)
41 | https://github.com/xenolf/lego (a single cross-platform Go program)
42 | https://github.com/diafygi/letsencrypt-nosudo (as the name suggests, a non-sudo alternative—a single python script)
43 |
44 | I tried each, and was able to generate certs quite easily with both Lego and LE-nosudo. Might be worth checking out.
45 |
46 |
47 | #### Must-read (latest on the beta program):
48 |
49 | https://community.letsencrypt.org/t/beta-program-announcements/
50 |
51 |
52 | #### Recommended Nginx config:
53 |
54 | https://community.letsencrypt.org/t/nginx-configuration-sample/2173
55 |
56 |
57 | #### Dependencies
58 |
59 | Here is an inventory of files added to a stock Debian Jessie system by the LE client.
60 | As mentioned earlier, the official python client installs *lots* of packages in the background,
61 | so depending on your use case and tolerance for eventually adding a heavy tools footprint in production,
62 | it may be preferred to run the client as a certificate generator of sorts, and push
63 | certs and keys to a receiving web server or public API endpoint.
64 |
65 | Alternatively, you may want to look at the Go-based [lego client](https://github.com/xenolf/lego) mentioned earlier.
66 | It will compile on virtually any platform into a single binary that you can run on other
67 | servers, and the installer dependencies are all self-contained packages.
68 |
69 | # Generated from a before/after: grep install /var/log/dpkg.log
70 |
71 | augeas-lenses
72 | binutils
73 | cpp
74 | cpp-4.9
75 | dh-python
76 | dialog
77 | gcc
78 | gcc-4.9
79 | git-core
80 | libasan1
81 | libatomic1
82 | libaugeas0
83 | libc-dev-bin
84 | libc6-dev
85 | libcilkrts5
86 | libcloog-isl4
87 | libexpat1-dev
88 | libffi-dev
89 | libgcc-4.9-dev
90 | libgomp1
91 | libisl10
92 | libitm1
93 | liblsan0
94 | libmpc3
95 | libmpdec2
96 | libmpfr4
97 | libpython-dev
98 | libpython2.7
99 | libpython2.7-dev
100 | libpython3-stdlib
101 | libpython3.4-minimal
102 | libpython3.4-stdlib
103 | libquadmath0
104 | libssl-dev
105 | libtsan0
106 | libubsan0
107 | linux-libc-dev
108 | python-chardet-whl
109 | python-colorama-whl
110 | python-dev
111 | python-distlib-whl
112 | python-html5lib-whl
113 | python-pip-whl
114 | python-requests-whl
115 | python-setuptools-whl
116 | python-six-whl
117 | python-urllib3-whl
118 | python-virtualenv
119 | python2.7-dev
120 | python3
121 | python3-minimal
122 | python3-pkg-resources
123 | python3-virtualenv
124 | python3.4
125 | python3.4-minimal
126 | virtualenv
127 | zlib1g-dev
128 |
129 |
130 | #### SSLContext warning from python urllib3
131 |
132 | You may get this warning if you're running on a platform with python 2.6 (Wheezy, Cent6, Amazon Linux):
133 |
134 | > InsecurePlatformWarning: A true SSLContext object is not available.
135 | > This prevents urllib3 from configuring SSL appropriately and may cause
136 | > certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
137 |
138 | The bootstrap processes attempt to handle multiple libraries through python virtual environments,
139 | but on some OS', the only solution at the moment is to run a parallel library manager that
140 | (attempts) to not step over the core system dependencies for yum and apt.
141 |
142 | For this suite of scripts I managed to avoid that in all cases but Debian Wheezy, which required
143 | [pyenv](https://github.com/yyuu/pyenv), which offers a lot of benefits, but brings with
144 | it additional package and environment variable dependencies.
145 |
146 | #### Acknowledgements
147 |
148 | Big shout out to Kubilay Kocak (@koobs) and Bernard Spil (@Sp1l) on getting LetsEncrypt packaged on FreeBSD, and to Jacob Hoffman-Andrews (@j4cob) from @letsencrypt on his support and suggestions.
149 |
150 | #### Contact
151 |
152 | Ping me @kennwhite with questions. Have fun!
153 |
154 |
155 |
--------------------------------------------------------------------------------