commit
051e021fdd
22 changed files with 254 additions and 0 deletions
@ -0,0 +1,18 @@ |
||||
#!/usr/bin/perl -w |
||||
|
||||
use esmith::Build::CreateLinks qw(:all); |
||||
|
||||
templates2events("/etc/letsencrypt.sh/config.sh", qw(le-update ssl-update bootstrap-console-save)); |
||||
templates2events("/etc/crontab", qw(le-update)); |
||||
templates2events("/etc/letsencrypt.sh/domains.txt", |
||||
qw( |
||||
le-update |
||||
bootstrap-console-save |
||||
domain-create |
||||
domain-delete |
||||
host-create |
||||
host-delete |
||||
host-modify |
||||
)); |
||||
templates2events("/etc/httpd/conf/httpd.conf", qw(le-update)); |
||||
safe_symlink("sigusr1", "root/etc/e-smith/events/le-update/services2adjust/httpd-e-smith"); |
@ -0,0 +1 @@ |
||||
enabled |
@ -0,0 +1 @@ |
||||
service |
@ -0,0 +1,3 @@ |
||||
#!/bin/sh |
||||
|
||||
exec /usr/bin/letsencrypt.sh -c |
@ -0,0 +1,13 @@ |
||||
{ |
||||
|
||||
my $le = $letsencrypt{'status'} || 'disabled'; |
||||
|
||||
if ($le eq 'enabled'){ |
||||
$OUT .= '# Letsencrypt renewal' . "\n"; |
||||
$OUT .= '2 4 * * * root sleep $[ $RANDOM \% 3600 ]; /usr/bin/letsencrypt.sh -c > /dev/null 2>&1' . "\n"; |
||||
} |
||||
else{ |
||||
$OUT .= '# Letsencrypt is disabled' . "\n"; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,19 @@ |
||||
{ |
||||
if (($letsencrypt{'status'} || 'disabled') eq 'enabled'){ |
||||
$OUT .=<<"_EOF"; |
||||
|
||||
<Directory /var/lib/letsencrypt.sh> |
||||
Options None |
||||
AllowOverride None |
||||
Order deny,allow |
||||
Deny from all |
||||
Allow from all |
||||
Header set Content-Type "application/jose+json" |
||||
</Directory> |
||||
|
||||
_EOF |
||||
} |
||||
else{ |
||||
$OUT .= "# Letsencrypt is disabled\n"; |
||||
} |
||||
} |
@ -0,0 +1,13 @@ |
||||
{ |
||||
if (($domain->prop('Letsencrypt') || 'enabled') ne 'disabled' && ((${'httpd-e-smith'}{'TCPPort'} || '80') eq $port)){ |
||||
$OUT .=<<"_EOF"; |
||||
Alias /.well-known/acme-challenge/ /var/lib/letsencrypt.sh/ |
||||
<Location /.well-known/acme-challenge/> |
||||
Allow from all |
||||
</Location> |
||||
_EOF |
||||
} |
||||
else{ |
||||
$OUT .= "# Support for Letsencrypt is disabled on this domain\n"; |
||||
} |
||||
} |
@ -0,0 +1,13 @@ |
||||
{ |
||||
if (($domain->prop('Letsencrypt') || 'enabled') ne 'disabled' && ((${'httpd-e-smith'}{'TCPPort'} || '80') eq $port)){ |
||||
$OUT .=<<"_EOF"; |
||||
Alias /.well-known/acme-challenge/ /var/lib/letsencrypt.sh/ |
||||
<Location /.well-known/acme-challenge/> |
||||
Allow from all |
||||
</Location> |
||||
_EOF |
||||
} |
||||
else{ |
||||
$OUT .= "# Support for Letsencrypt is disabled on this domain\n"; |
||||
} |
||||
} |
@ -0,0 +1,13 @@ |
||||
{ |
||||
if (($domain->prop('Letsencrypt') || 'enabled') ne 'disabled' && ((${'httpd-e-smith'}{'TCPPort'} || '80') eq $port)){ |
||||
$OUT .=<<"_EOF"; |
||||
Alias /.well-known/acme-challenge/ /var/lib/letsencrypt.sh/ |
||||
<Location /.well-known/acme-challenge/> |
||||
Allow from all |
||||
</Location> |
||||
_EOF |
||||
} |
||||
else{ |
||||
$OUT .= "# Support for Letsencrypt is disabled on this domain\n"; |
||||
} |
||||
} |
@ -0,0 +1,13 @@ |
||||
{ |
||||
if (($domain->prop('Letsencrypt') || 'enabled') ne 'disabled' && ((${'httpd-e-smith'}{'TCPPort'} || '80') eq $port)){ |
||||
$OUT .=<<"_EOF"; |
||||
Alias /.well-known/acme-challenge/ /var/lib/letsencrypt.sh/ |
||||
<Location /.well-known/acme-challenge/> |
||||
Allow from all |
||||
</Location> |
||||
_EOF |
||||
} |
||||
else{ |
||||
$OUT .= "# Support for Letsencrypt is disabled on this domain\n"; |
||||
} |
||||
} |
@ -0,0 +1,13 @@ |
||||
{ |
||||
if (($domain->prop('Letsencrypt') || 'enabled') ne 'disabled' && ((${'httpd-e-smith'}{'TCPPort'} || '80') eq $port)){ |
||||
$OUT .=<<"_EOF"; |
||||
Alias /.well-known/acme-challenge/ /var/lib/letsencrypt.sh/ |
||||
<Location /.well-known/acme-challenge/> |
||||
Allow from all |
||||
</Location> |
||||
_EOF |
||||
} |
||||
else{ |
||||
$OUT .= "# Support for Letsencrypt is disabled on this domain\n"; |
||||
} |
||||
} |
@ -0,0 +1,13 @@ |
||||
{ |
||||
if (($domain->prop('Letsencrypt') || 'enabled') ne 'disabled' && ((${'httpd-e-smith'}{'TCPPort'} || '80') eq $port)){ |
||||
$OUT .=<<"_EOF"; |
||||
Alias /.well-known/acme-challenge/ /var/lib/letsencrypt.sh/ |
||||
<Location /.well-known/acme-challenge/> |
||||
Allow from all |
||||
</Location> |
||||
_EOF |
||||
} |
||||
else{ |
||||
$OUT .= "# Support for Letsencrypt is disabled on this domain\n"; |
||||
} |
||||
} |
@ -0,0 +1,13 @@ |
||||
{ |
||||
if (($domain->prop('Letsencrypt') || 'enabled') ne 'disabled' && ((${'httpd-e-smith'}{'TCPPort'} || '80') eq $port)){ |
||||
$OUT .=<<"_EOF"; |
||||
Alias /.well-known/acme-challenge/ /var/lib/letsencrypt.sh/ |
||||
<Location /.well-known/acme-challenge/> |
||||
Allow from all |
||||
</Location> |
||||
_EOF |
||||
} |
||||
else{ |
||||
$OUT .= "# Support for Letsencrypt is disabled on this domain\n"; |
||||
} |
||||
} |
@ -0,0 +1 @@ |
||||
BASEDIR=/home/e-smith/db/letsencrypt.sh/ |
@ -0,0 +1 @@ |
||||
WELLKNOWN=/var/lib/letsencrypt.sh/ |
@ -0,0 +1 @@ |
||||
KEYSIZE="{ $letsencrypt{KeySize} || '4096' }" |
@ -0,0 +1 @@ |
||||
HOOK=/sbin/e-smith/le_hook.sh |
@ -0,0 +1,2 @@ |
||||
RENEW_DAYS="30" |
||||
PRIVATE_KEY_RENEW="yes" |
@ -0,0 +1,32 @@ |
||||
{ |
||||
|
||||
use esmith::DomainsDB; |
||||
use esmith::HostsDB; |
||||
|
||||
my $d = esmith::DomainsDB->open_ro || die "Couldn't open DomainsDB\n"; |
||||
my $h = esmith::HostsDB->open_ro || die "Couldn't open HostsDB\n"; |
||||
|
||||
my $names = (); |
||||
|
||||
foreach my $domain ($d->domains, $d->get_all_by_prop(type => 'vhost')){ |
||||
my $le = $domain->prop('Letsencrypt') || 'enabled'; |
||||
push @names, $domain->key unless $le ne 'enabled'; |
||||
} |
||||
|
||||
foreach my $host ($h->hosts){ |
||||
my $name = $host->key; |
||||
my $dom = $DomainName; |
||||
if ($name =~ m/[a-z0-9]*\.(.*)/i){ |
||||
$dom = $1; |
||||
} |
||||
my $type = $host->prop('HostType') || 'Self'; |
||||
my $le = $host->prop('Letsencrypt') || 'disabled'; |
||||
if ($le =~ m/^enabled|yes|1|on$/i || |
||||
$type eq 'Self' && $dom eq $DomainName){ |
||||
push @names, $host->key; |
||||
} |
||||
} |
||||
|
||||
$OUT .= join(" ", @names); |
||||
|
||||
} |
@ -0,0 +1,17 @@ |
||||
#!/bin/sh |
||||
|
||||
ACTION=shift |
||||
|
||||
if [ "$ACTION" == "deploy_cert" ]; then |
||||
# New cert |
||||
KEY=shift |
||||
CRT=shift |
||||
CHAIN=shift |
||||
/sbin/e-smith/db configuration setprop modSSL key $KEY crt $CRT CertificateChainFile $CHAIN |
||||
/sbin/e-smith/signal-event ssl-update |
||||
elif [ "$ACTION" == "clean_challenge" ]; then |
||||
ALTNAME=shift |
||||
if [ "$ALTNAME" == "" ]; then |
||||
echo "Error while creating or renewing letsencrypt certificate" | mail -s "Letsencrypt error" admin |
||||
fi |
||||
fi |
@ -0,0 +1,53 @@ |
||||
%define version 0.0.1 |
||||
%define release 0.beta9 |
||||
%define name smeserver-letsencrypt-client |
||||
|
||||
Summary: Letencrypt client for SME Server |
||||
Name: %{name} |
||||
Version: %{version} |
||||
Release: %{release}%{?dist} |
||||
License: GPL |
||||
Group: Applications/System |
||||
Source: %{name}-%{version}.tar.gz |
||||
|
||||
BuildRoot: /var/tmp/%{name}-%{version}-%{release}-buildroot |
||||
BuildArchitectures: noarch |
||||
BuildRequires: e-smith-devtools |
||||
|
||||
Requires: e-smith-base >= 5.4.0-26 |
||||
Requires: letsencrypt.sh |
||||
|
||||
%description |
||||
Automatically get certificates from letsencrypt |
||||
Using https://github.com/lukas2511/letsencrypt.sh |
||||
|
||||
%changelog |
||||
* Fri Jan 22 2016 Daniel Berteaud <daniel@firewall-services.com> - 0.1.0-1.sme |
||||
- Initial release |
||||
|
||||
%prep |
||||
%setup -q -n %{name}-%{version} |
||||
|
||||
%build |
||||
%{__mkdir_p} root/home/e-smith/db/letsencrypt.sh |
||||
perl createlinks |
||||
|
||||
%install |
||||
/bin/rm -rf $RPM_BUILD_ROOT |
||||
(cd root; /usr/bin/find . -depth -print | /bin/cpio -dump $RPM_BUILD_ROOT) |
||||
/bin/rm -f %{name}-%{version}-filelist |
||||
/sbin/e-smith/genfilelist $RPM_BUILD_ROOT \ |
||||
--dir /var/lib/letsencrypt 'attr(0750,root,apache)' \ |
||||
--dir /home/e-smith/db/letsencrypt.sh 'attr(0750,root,root)' \ |
||||
> %{name}-%{version}-filelist |
||||
|
||||
%files -f %{name}-%{version}-filelist |
||||
%defattr(-,root,root) |
||||
|
||||
%clean |
||||
rm -rf $RPM_BUILD_ROOT |
||||
|
||||
%pre |
||||
|
||||
%post |
||||
|
Loading…
Reference in new issue