Dehydrated updates for Devuan.

This commit is contained in:
Darren 'Tadgy' Austin 2026-03-19 20:20:05 +00:00
commit 67a9bdd9eb
8 changed files with 455 additions and 361 deletions

View file

@ -11,344 +11,348 @@ LmdpdGhvb2tz 1773074781.635958529 1771512801.560006128 root:root 0755 - -
LmdpdGhvb2tzL3ByZS1jb21taXQ= 1757519106.000000000 1757519106.000000000 root:root 0755 - -
LmdpdGlnbm9yZQ== 1762025173.020942279 1757593248.000000000 root:root 0644 - -
LmdpdG1vZHVsZXM= 1757607701.000000000 1757607701.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjLy5naXRpZ25vcmU= 1773946669.402887347 1757611781.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
ZXRjL2FwYWNoZTIvLmdpdGlnbm9yZQ== 1766069108.043264156 1757775932.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
ZXRjL2FwYWNoZTIvYXBhY2hlMi5jb25m 1773343425.497690175 1757785514.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
bW9kcy1lbmFibGVk - -
ZXRjL2FwYWNoZTIvbW9kcy1lbmFibGVkL2F1dGhuX2NvcmUubG9hZA== 1771512801.564006063 1771512801.564006063 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
bW9kcy1lbmFibGVk - -
ZXRjL2FwYWNoZTIvbW9kcy1lbmFibGVkL2F1dGhuX2ZpbGUubG9hZA== 1771512801.564006063 1771512801.564006063 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
bW9kcy1lbmFibGVk - -
ZXRjL2FwYWNoZTIvbW9kcy1lbmFibGVkL2F1dGh6X2NvcmUubG9hZA== 1771512801.564006063 1771512801.564006063 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
bW9kcy1lbmFibGVk - -
ZXRjL2FwYWNoZTIvbW9kcy1lbmFibGVkL2F1dGh6X3VzZXIubG9hZA== 1771512801.564006063 1771512801.564006063 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
bW9kcy1lbmFibGVk - -
ZXRjL2FwYWNoZTIvbW9kcy1lbmFibGVkL2NnaWQubG9hZA== 1771512801.564006063 1771512801.564006063 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
bW9kcy1lbmFibGVk - -
ZXRjL2FwYWNoZTIvbW9kcy1lbmFibGVkL2RlZmxhdGUubG9hZA== 1771512801.564006063 1771512801.564006063 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
bW9kcy1lbmFibGVk - -
ZXRjL2FwYWNoZTIvbW9kcy1lbmFibGVkL2ZpbHRlci5sb2Fk 1771512801.568005995 1771512801.568005995 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
bW9kcy1lbmFibGVk - -
ZXRjL2FwYWNoZTIvbW9kcy1lbmFibGVkL2h0dHAyLmxvYWQ= 1771512801.568005995 1771512801.568005995 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
bW9kcy1lbmFibGVk - -
ZXRjL2FwYWNoZTIvbW9kcy1lbmFibGVkL2luY2x1ZGUubG9hZA== 1771512801.568005995 1771512801.568005995 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
bW9kcy1lbmFibGVk - -
ZXRjL2FwYWNoZTIvbW9kcy1lbmFibGVkL3Byb3h5LmxvYWQ= 1771512801.568005995 1771512801.568005995 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
bW9kcy1lbmFibGVk - -
ZXRjL2FwYWNoZTIvbW9kcy1lbmFibGVkL3Byb3h5X2ZjZ2kubG9hZA== 1771512801.568005995 1771512801.568005995 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
bW9kcy1lbmFibGVk - -
ZXRjL2FwYWNoZTIvbW9kcy1lbmFibGVkL3Byb3h5X2h0dHAubG9hZA== 1773512305.071354981 1773512305.071354981 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
bW9kcy1lbmFibGVk - -
ZXRjL2FwYWNoZTIvbW9kcy1lbmFibGVkL3Jld3JpdGUubG9hZA== 1773519967.649760800 1773519967.649760800 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
bW9kcy1lbmFibGVk - -
ZXRjL2FwYWNoZTIvbW9kcy1lbmFibGVkL3NvY2FjaGVfc2htY2IubG9hZA== 1773343134.250327036 1773343134.250327036 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
bW9kcy1lbmFibGVk - -
ZXRjL2FwYWNoZTIvbW9kcy1lbmFibGVkL3NzbC5sb2Fk 1773343014.364235719 1773343014.364235719 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
c2l0ZXMtYXZhaWxhYmxl - -
ZXRjL2FwYWNoZTIvc2l0ZXMtYXZhaWxhYmxlLy5naXRpZ25vcmU= 1766069274.068541443 1766069263.648712326 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
c2l0ZXMtYXZhaWxhYmxl - -
ZXRjL2FwYWNoZTIvc2l0ZXMtYXZhaWxhYmxlL2NvcmUuc2xhY2t3YXJlLnVrLm5ldC5jb25m 1773519943.102151242 1757785113.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXBhY2hlMg== - -
c2l0ZXMtZW5hYmxlZA== - -
ZXRjL2FwYWNoZTIvc2l0ZXMtZW5hYmxlZC8wMC1jb3JlLnNsYWNrd2FyZS51ay5uZXQuY29uZg== 1773340506.404142422 1773340506.404142422 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXB0 - -
ZXRjL2FwdC8uZ2l0aWdub3Jl 1762532662.236312315 1762532566.409854495 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXB0 - -
cHJlZmVyZW5jZXMuZA== - -
ZXRjL2FwdC9wcmVmZXJlbmNlcy5kL3N1cnk= 1762021809.456432672 1762021809.456432672 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXB0 - -
c291cmNlcy5saXN0LmQ= - -
ZXRjL2FwdC9zb3VyY2VzLmxpc3QuZC9mZC5saXN0 1762021706.378133066 1762021706.374133133 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
YXB0 - -
c291cmNlcy5saXN0LmQ= - -
ZXRjL2FwdC9zb3VyY2VzLmxpc3QuZC9zdXJ5Lmxpc3Q= 1762021706.378133066 1762021706.378133066 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
Y3Jvbi4xNW1pbg== - -
ZXRjL2Nyb24uMTVtaW4vLmdpdGlnbm9yZQ== 1762535468.567176697 1762535289.358058790 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
Y3Jvbi5k - -
ZXRjL2Nyb24uZC8uZ2l0aWdub3Jl 1762535453.203423781 1762535289.358058790 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
Y3Jvbi5kYWlseQ== - -
ZXRjL2Nyb24uZGFpbHkvLmdpdGlnbm9yZQ== 1762538383.748288196 1762535499.146684944 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
Y3Jvbi5kYWlseQ== - -
ZXRjL2Nyb24uZGFpbHkvMC1yb3RhdGUtbG9ncy1zeW1saW5rcw== 1773074830.431179720 1773074830.431179720 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
Y3Jvbi5kYWlseQ== - -
ZXRjL2Nyb24uZGFpbHkvMTAtZGVoeWRyYXRlZA== 1773074830.431179720 1773074830.431179720 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
Y3Jvbi5kYWlseQ== - -
ZXRjL2Nyb24uZGFpbHkvNS11cGRhdGUtcGFja2FnZXMtbGlzdA== 1773074830.431179720 1773074830.431179720 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
Y3Jvbi5kYWlseQ== - -
ZXRjL2Nyb24uZGFpbHkvNy13YXJuLWdpdC1zdGF0dXM= 1773074830.431179720 1773074830.431179720 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
Y3Jvbi5ob3VybHk= - -
ZXRjL2Nyb24uaG91cmx5Ly5naXRpZ25vcmU= 1762535518.534373147 1762535518.534373147 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
Y3Jvbi5tb250aGx5 - -
ZXRjL2Nyb24ubW9udGhseS8uZ2l0aWdub3Jl 1762535548.045898541 1762535548.045898541 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
Y3Jvbi53ZWVrbHk= - -
ZXRjL2Nyb24ud2Vla2x5Ly5naXRpZ25vcmU= 1762628453.620630321 1762535530.470181196 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
Y3Jvbi53ZWVrbHk= - -
ZXRjL2Nyb24ud2Vla2x5L2NsZWFuLXBocA== 1773074830.431179720 1773074830.431179720 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
Y3Jvbi55ZWFybHk= - -
ZXRjL2Nyb24ueWVhcmx5Ly5naXRpZ25vcmU= 1762535568.001577608 1762535568.001577608 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjL2Nyb250YWI= 1762534976.223094581 1757593504.000000000 root:root 0600 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZGVmYXVsdA== - -
ZXRjL2RlZmF1bHQvLmdpdGlnbm9yZQ== 1762624179.585857684 1762624148.166366444 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZGVmYXVsdA== - -
ZXRjL2RlZmF1bHQvcHJvbWV0aGV1cy1ub2RlLWV4cG9ydGVy 1773511187.568917165 1762023153.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZGVmYXVsdA== - -
ZXRjL2RlZmF1bHQvcm90YXRlLWxvZ3Mtc3ltbGlua3M= 1758555243.000000000 1758552192.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZGVmYXVsdA== - -
ZXRjL2RlZmF1bHQvdGVycmFmb3JtLWh0dHAtYmFja2VuZA== 1773511563.759009356 1757595391.000000000 root:root 0600 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZGVoeWRyYXRlZA== - -
ZXRjL2RlaHlkcmF0ZWQvLmdpdGlnbm9yZQ== 1758038054.000000000 1758038054.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZGVoeWRyYXRlZA== - -
YWNjb3VudHM= - -
ZXRjL2RlaHlkcmF0ZWQvYWNjb3VudHMvLmdpdGlnbm9yZQ== 1757873230.000000000 1757873230.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZGVoeWRyYXRlZA== - -
YWNjb3VudHM= - -
ZXRjL2RlaHlkcmF0ZWQvYWNjb3VudHMvYUhSMGNITTZMeTloWTIxbExYWXdNaTVoY0drdWJHVjBjMlZ1WTNKNWNIUXViM0puTDJScGNtVmpkRzl5ZVFvLnRhci5ncGc= 1773159494.828502366 1757873275.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZGVoeWRyYXRlZA== - -
YXJjaGl2ZQ== - -
ZXRjL2RlaHlkcmF0ZWQvYXJjaGl2ZS8uZ2l0aWdub3Jl 1757874259.000000000 1757873451.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZGVoeWRyYXRlZA== - -
Y2VydHM= - -
ZXRjL2RlaHlkcmF0ZWQvY2VydHMvLmdpdGlnbm9yZQ== 1757874303.000000000 1757873537.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZGVoeWRyYXRlZA== - -
Y29uZi5k - -
ZXRjL2RlaHlkcmF0ZWQvY29uZi5kLy5naXRrZWVwZGly 1773342473.728835264 1773342473.728835264 root:root 0644 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZGVoeWRyYXRlZA== - -
ZXRjL2RlaHlkcmF0ZWQvY29uZmln 1773422158.392330219 1757862077.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZGVoeWRyYXRlZA== - -
ZXRjL2RlaHlkcmF0ZWQvZG9tYWlucw== 1757862328.000000000 1757862077.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZGVoeWRyYXRlZA== - -
ZG9tYWlucy5k - -
ZXRjL2RlaHlkcmF0ZWQvZG9tYWlucy5kL19leGFtcGxlXw== 1773422197.987710884 1757862077.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZGVoeWRyYXRlZA== - -
aG9va3M= - -
ZXRjL2RlaHlkcmF0ZWQvaG9va3MvZGVmYXVsdA== 1773342632.190315764 1757862077.000000000 root:root 0755 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZnVzaW9uZGlyZWN0b3J5 - -
ZXRjL2Z1c2lvbmRpcmVjdG9yeS9mdXNpb25kaXJlY3RvcnktYXBhY2hlLmNvbmY= 1740415693.000000000 1762022137.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZnVzaW9uZGlyZWN0b3J5 - -
ZXRjL2Z1c2lvbmRpcmVjdG9yeS9mdXNpb25kaXJlY3RvcnkuY29uZg== - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZnVzaW9uZGlyZWN0b3J5 - -
ZXRjL2Z1c2lvbmRpcmVjdG9yeS9mdXNpb25kaXJlY3RvcnkuY29uZi5vcmln 1760207207.000000000 1760207207.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRjL2dyb3Vw 1762530431.632238190 1762530431.632238190 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjL2dyb3Vw 1773951237.415059979 1773951237.415059979 root:root 0644 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjL2dzaGFkb3cuZ3Bn 1762628156.813441524 1762447499.282711556 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjL2hvc3RuYW1l 1757594311.000000000 1757594311.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjL2hvc3Rz 1762446715.371577485 1757594362.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
aW5pdC5k - -
ZXRjL2luaXQuZC8uZ2l0aWdub3Jl 1771459200.000000000 1771459200.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
aW5pdC5k - -
ZXRjL2luaXQuZC90ZXJyYWZvcm0taHR0cC1iYWNrZW5k 1773654405.833829368 1771459200.000000000 root:root 0755 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjL2tyYjUuY29uZg== 1773662876.418407545 1583171707.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
bGRhcA== - -
ZXRjL2xkYXAvbGRhcC5jb25m 1758374529.000000000 1730112559.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
bGRhcA== - -
c2NoZW1h - -
ZXRjL2xkYXAvc2NoZW1hLy5naXRpZ25vcmU= 1762628549.507075969 1762628549.507075969 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
bGRhcA== - -
c2NoZW1h - -
ZXRjL2xkYXAvc2NoZW1hL3JmYzIzMDdiaXMuc2NoZW1h 1759835660.000000000 1759835660.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjL2xvZ2luLmRlZnM= 1771509215.801996599 1745058028.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjL21vdGQ= 1762625944.389278724 1756052400.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjL21zbXRwLmFsaWFzZXM= 1758035451.000000000 1758035451.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjL21zbXRwcmMuZ3Bn 1761052674.000000000 1758049424.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
bmV0d29yaw== - -
ZXRjL25ldHdvcmsvLmdpdGlnbm9yZQ== 1757596572.000000000 1757596572.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
bmV0d29yaw== - -
ZXRjL25ldHdvcmsvaW50ZXJmYWNlcw== 1762449437.502802342 1762449437.502802342 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
bmV0d29yaw== - -
aW50ZXJmYWNlcy5k - -
ZXRjL25ldHdvcmsvaW50ZXJmYWNlcy5kL2V0aDA= 1762449591.864258045 1762449559.040799058 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
bmV0d29yaw== - -
aW50ZXJmYWNlcy5k - -
ZXRjL25ldHdvcmsvaW50ZXJmYWNlcy5kL2V0aDE= 1762449602.376084790 1762449560.312778093 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRjL3Bhc3N3ZA== 1773520112.011464701 1762449439.234773795 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjL3Bhc3N3ZA== 1773951229.999182951 1773951229.999182951 root:root 0644 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
cGhw - -
ZXRjL3BocC8uZ2l0aWdub3Jl 1773950303.090525695 1773950303.090525695 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
cGhw - -
OC40 - -
ZXRjL3BocC84LjQvLmdpdGlnbm9yZQ== 1773950864.129246341 1773950864.129246341 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
cGhw - -
OC40 - -
YXBhY2hlMg== - -
ZXRjL3BocC84LjQvYXBhY2hlMi8uZ2l0aWdub3Jl 1773950761.570942616 1773950761.570942616 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
cGhw - -
OC40 - -
YXBhY2hlMg== - -
ZXRjL3BocC84LjQvYXBhY2hlMi9waHAuaW5p 1773248884.583344972 1773248884.583344972 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
cGhw - -
OC40 - -
Y2xp - -
ZXRjL3BocC84LjQvY2xpLy5naXRpZ25vcmU= 1773950780.838623940 1773950780.838623940 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
cGhw - -
OC40 - -
Y2xp - -
ZXRjL3BocC84LjQvY2xpL3BocC5pbmk= 1773248893.095208163 1773248893.095208163 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
cGhw - -
OC40 - -
ZnBt - -
ZXRjL3BocC84LjQvZnBtLy5naXRpZ25vcmU= 1773950820.753963759 1773950820.753963759 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
cGhw - -
OC40 - -
ZnBt - -
ZXRjL3BocC84LjQvZnBtL3BocC1mcG0uY29uZg== 1773249914.582789624 1771512192.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
cGhw - -
OC40 - -
ZnBt - -
ZXRjL3BocC84LjQvZnBtL3BocC5pbmk= 1773248900.295092442 1773248900.295092442 root:root 0777 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
cGhw - -
OC40 - -
ZnBt - -
cG9vbC5k - -
ZXRjL3BocC84LjQvZnBtL3Bvb2wuZC93d3cuY29uZg== 1773343753.212472726 1771512192.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
cGhw - -
OC40 - -
ZXRjL3BocC84LjQvcGhwLmluaQ== 1773248696.138374022 1773229113.232168334 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
cGhwbGRhcGFkbWlu - -
ZXRjL3BocGxkYXBhZG1pbi8uZ2l0aWdub3Jl 1762628720.800299329 1762628701.308615289 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
cGhwbGRhcGFkbWlu - -
ZXRjL3BocGxkYXBhZG1pbi9jb25maWcucGhwLmdwZw== 1761052640.000000000 1758539944.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjL3BrZ2xpc3Q= 1773878402.020187156 1762560002.068536774 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
cHVzaG92ZXItY2xpZW50 - -
ZXRjL3B1c2hvdmVyLWNsaWVudC8uZ2l0aWdub3Jl 1762628624.365862525 1762448145.464092595 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
cHVzaG92ZXItY2xpZW50 - -
ZXRjL3B1c2hvdmVyLWNsaWVudC9kZWZhdWx0LmdwZw== 1762448163.991787320 1762448163.979787518 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjL3Jlc29sdi5jb25m 1773592997.299303370 1757611605.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjL3JzeXNsb2cuY29uZg== 1757785113.000000000 1757785113.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
c2FtYmE= - -
ZXRjL3NhbWJhL3NtYi5jb25m 1762447904.392054475 1758208516.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
c2FtYmE= - -
ZXRjL3NhbWJhL3NtYnVzZXJz 1758121825.000000000 1758121586.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjL3NoYWRvdy5ncGc= 1762628180.969049967 1762447484.598952854 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
c3No - -
ZXRjL3NzaC8uZ2l0aWdub3Jl 1762628843.382312260 1757606957.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
c3No - -
ZXRjL3NzaC9zc2hfY29uZmln 1757606630.000000000 1757606630.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
c3No - -
ZXRjL3NzaC9zc2hkX2NvbmZpZw== 1758202229.000000000 1757606896.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
c3NoZ3VhcmQ= - -
ZXRjL3NzaGd1YXJkL3NzaGd1YXJkLmNvbmY= 1758050700.000000000 1758050700.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
c3NoZ3VhcmQ= - -
ZXRjL3NzaGd1YXJkL3doaXRlbGlzdA== 1758050235.000000000 1758050235.000000000 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
c3Vkb2Vycy5k - -
ZXRjL3N1ZG9lcnMuZC8uZ2l0aWdub3Jl 1762026765.566662574 1762026765.566662574 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
c3Vkb2Vycy5k - -
ZXRjL3N1ZG9lcnMuZC9kZWZhdWx0cw== 1757599359.000000000 1757599359.000000000 root:root 0640 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
c3Vkb2Vycy5k - -
ZXRjL3N1ZG9lcnMuZC9yb290LWFjY2Vzcw== 1757600157.000000000 1757600157.000000000 root:root 0640 - -
aG9tZQ== 1773074781.647958337 1771512801.576005863 root:root 0755 - -
@ -409,36 +413,36 @@ b3B0L3NiaW4vcHVzaG92ZXItY2xpZW50 1758224526.000000000 1758224526.000000000 root:
b3B0 1771515169.961748163 1771501851.000000000 root:root 0755 - -
c2Jpbg== 1767688090.000000000 1767688090.000000000 root:root 0777 - -
b3B0L3NiaW4vdGVycmFmb3JtLWh0dHAtYmFja2VuZA== 1757590543.000000000 1757590543.000000000 root:root 0755 - -
cm9vdA== 1773947266.280944041 1771512801.616005200 root:root 0755 - -
cm9vdA== 1773951371.844830681 1771512801.616005200 root:root 0755 - -
cm9vdC8uYmFzaF9sb2dvdXQ= 1757582867.000000000 1757582867.000000000 root:root 0644 - -
cm9vdA== 1773947266.280944041 1771512801.616005200 root:root 0755 - -
cm9vdA== 1773951371.844830681 1771512801.616005200 root:root 0755 - -
cm9vdC8uYmFzaF9wcm9maWxl 1757584711.000000000 1757584711.000000000 root:root 0644 - -
cm9vdA== 1773947266.280944041 1771512801.616005200 root:root 0755 - -
cm9vdA== 1773951371.844830681 1771512801.616005200 root:root 0755 - -
cm9vdC8uYmFzaHJj 1758887027.000000000 1757586493.000000000 root:root 0644 - -
cm9vdA== 1773947266.280944041 1771512801.616005200 root:root 0755 - -
cm9vdA== 1773951371.844830681 1771512801.616005200 root:root 0755 - -
cm9vdC8uZ2l0Y29uZmln 1757582738.000000000 1757582738.000000000 root:root 0644 - -
cm9vdA== 1773947266.280944041 1771512801.616005200 root:root 0755 - -
cm9vdA== 1773951371.844830681 1771512801.616005200 root:root 0755 - -
cm9vdC8uZ2l0aWdub3Jl 1771509562.912369370 1757600312.000000000 root:root 0644 - -
cm9vdA== 1773947266.280944041 1771512801.616005200 root:root 0755 - -
cm9vdA== 1773951371.844830681 1771512801.616005200 root:root 0755 - -
LmxvY2Fs - -
c2hhcmU= - -
bmFubw== - -
cm9vdC8ubG9jYWwvc2hhcmUvbmFuby8uZ2l0aWdub3Jl 1757586210.000000000 1757586210.000000000 root:root 0644 - -
cm9vdA== 1773947266.280944041 1771512801.616005200 root:root 0755 - -
cm9vdA== 1773951371.844830681 1771512801.616005200 root:root 0755 - -
cm9vdC8ubmFub3Jj 1757585756.000000000 1757585756.000000000 root:root 0644 - -
cm9vdA== 1773947266.280944041 1771512801.616005200 root:root 0755 - -
cm9vdA== 1773951371.844830681 1771512801.616005200 root:root 0755 - -
LnNzaA== - -
cm9vdC8uc3NoLy5naXRpZ25vcmU= 1757593349.000000000 1757593349.000000000 root:root 0644 - -
cm9vdA== 1773947266.280944041 1771512801.616005200 root:root 0755 - -
cm9vdA== 1773951371.844830681 1771512801.616005200 root:root 0755 - -
LnNzaA== - -
cm9vdC8uc3NoL2F1dGhvcml6ZWRfa2V5cw== 1757587611.000000000 1757587611.000000000 root:root 0644 - -
cm9vdA== 1773947266.280944041 1771512801.616005200 root:root 0755 - -
cm9vdA== 1773951371.844830681 1771512801.616005200 root:root 0755 - -
c3R1ZmYtdG8ta2VlcA== - -
cm9vdC9zdHVmZi10by1rZWVwL2NsZWFuLWZk 1758994151.000000000 1758992264.000000000 root:root 0755 - -
cm9vdA== 1773947266.280944041 1771512801.616005200 root:root 0755 - -
cm9vdA== 1773951371.844830681 1771512801.616005200 root:root 0755 - -
c3R1ZmYtdG8ta2VlcA== - -
cm9vdC9zdHVmZi10by1rZWVwL2R1bW15LWRlZmF1bHQtbXRh 1762020478.278412865 1762020215.034844513 root:root 0644 - -
cm9vdA== 1773947266.280944041 1771512801.616005200 root:root 0755 - -
cm9vdA== 1773951371.844830681 1771512801.616005200 root:root 0755 - -
c3R1ZmYtdG8ta2VlcA== - -
cm9vdC9zdHVmZi10by1rZWVwL2R1bW15LWRlZmF1bHQtbXRhXzAuMC4xX2FsbC5kZWI= 1762020499.466056182 1762020499.458056317 root:root 0644 - -
dmFy 1773949028.799601180 1771512801.620005134 root:root 0755 - -
@ -462,19 +466,26 @@ dmFy 1773949028.799601180 1771512801.620005134 root:root 0755 - -
dG1w 1773942460.457147071 1771501870.000000000 root:root 1777 - -
cGhwLXVwbG9hZHM= - -
dmFyL3RtcC9waHAtdXBsb2Fkcy8uZ2l0aWdub3Jl 1773949181.645073322 1773949181.645073322 root:root 0644 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRjL3NoYWRvdw== 1762449439.206774257 1762449439.206774257 root:shadow 0640 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRjL3NoYWRvdy0= 1762023813.000000000 1762023813.000000000 root:shadow 0640 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
dmFy 1773949028.799601180 1771512801.620005134 root:root 0755 - -
d3d3 - -
dmFyL3d3dy8uZ2l0aWdub3Jl 1773949001.724048991 1773949001.724048991 root:root 0644 - -
dmFy 1773949028.799601180 1771512801.620005134 root:root 0755 - -
d3d3 - -
ZGVoeWRyYXRlZA== - -
dmFyL3d3dy9kZWh5ZHJhdGVkLy5naXRpZ25vcmU= 1773946447.886574894 1773340286.179664904 root:root 0644 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjL3NoYWRvdw== 1773951229.983183217 1773951229.983183217 root:shadow 0640 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjL3NoYWRvdy0= 1762449439.000000000 1762449439.000000000 root:shadow 0640 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
ZXRjL3N1ZG9lcnM= 1751262933.000000000 1751262933.000000000 root:root 0440 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
c3Vkb2Vycy5k - -
ZXRjL3N1ZG9lcnMuZC9SRUFETUU= 1751262933.000000000 1751262933.000000000 root:root 0440 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
c3Vkb2Vycy5k - -
ZXRjL3N1ZG9lcnMuZC9kZWZhdWx0cw== 1757599359.000000000 1757599359.000000000 root:root 0640 - -
ZXRj 1773949446.172698365 1771501908.000000000 root:root 0755 - -
ZXRj 1773951237.415059979 1771501908.000000000 root:root 0755 - -
c3Vkb2Vycy5k - -
ZXRjL3N1ZG9lcnMuZC9yb290LWFjY2Vzcw== 1757600157.000000000 1757600157.000000000 root:root 0640 - -
aG9tZQ== 1773074781.647958337 1771512801.576005863 root:root 0755 - -

View file

View file

@ -3,7 +3,7 @@
# $SCRIPTDIR/config (next to this script)
# /usr/local/etc/dehydrated/config
# /etc/dehydrated/config
# ${PWD}/config (in current working-directory)
# $PWD/config (in current working-directory)
# Which user should dehydrated run as? This will be implictly enforced when running as root.
# Default: <unset>
@ -32,7 +32,7 @@
#OLDCA="https://acme-v01.api.letsencrypt.org/directory"
# Which challenge should be used?
# Supported values: http-01, dns-01, tls-alpn-01.
# Supported values: http-01, dns-01, dns-persist-01, tls-alpn-01.
# Default: http-01
#CHALLENGETYPE="http-01"
@ -40,7 +40,7 @@
# This allows overriding the defaults found in the main configuration file.
# Additional config files in this directory must be named with a '.sh' ending.
# Default: <unset>
#CONFIG_D=""
CONFIG_D="/etc/dehydrated/conf.d"
# Base directory for account key, generated certificates and list of domains.
# Default: $SCRIPTDIR
@ -48,28 +48,28 @@ BASEDIR="/etc/dehydrated"
# File containing the list of domains for which to request certificates.
# Default: $BASEDIR/domains.txt
DOMAINS_TXT="${BASEDIR}/domains"
DOMAINS_TXT="$BASEDIR/domains"
# Directory for per-domain configuration files.
# If not set, per-domain configurations are sourced from each certificates output directory.
# Default: <unset>
DOMAINS_D="${BASEDIR}/domains.d"
DOMAINS_D="$BASEDIR/domains.d"
# Output directory for generated certificates.
# Default: ${BASEDIR}/certs
#CERTDIR="${BASEDIR}/certs"
# Default: $BASEDIR/certs
#CERTDIR="$BASEDIR/certs"
# Output directory for alpn verification certificates.
# Default: ${BASEDIR}/alpn-certs
#ALPNCERTDIR="${BASEDIR}/alpn-certs"
# Default: $BASEDIR/alpn-certs
#ALPNCERTDIR="$BASEDIR/alpn-certs"
# Directory for account keys and registration information.
# Default: ${BASEDIR}/accounts
#ACCOUNTDIR="${BASEDIR}/accounts"
# Default: $BASEDIR/accounts
#ACCOUNTDIR="$BASEDIR/accounts"
# Output directory for challenge-tokens to be served by webserver, or deployed in $HOOK.
# Default: /var/www/dehydrated
WELLKNOWN="/srv/dehydrated"
WELLKNOWN="/var/www/dehydrated"
# Default keysize for private keys.
# Default: 4096
@ -91,7 +91,7 @@ WELLKNOWN="/srv/dehydrated"
# Program or function called at certain stages of processing.
# BASEDIR and WELLKNOWN variables are exported and can be used in an external program.
# Default: <unset>
HOOK="${BASEDIR}/hooks/default"
HOOK="$BASEDIR/hooks/default"
# Chain clean_challenge|deploy_challenge arguments together into one hook call per certificate?
# Default: no
@ -103,7 +103,7 @@ HOOK="${BASEDIR}/hooks/default"
# Regenerate private keys instead of just signing new certificates on renewal?
# Default: yes
PRIVATE_KEY_RENEW="no"
#PRIVATE_KEY_RENEW="yes"
# Create an extra private key for rollover?
# Default: no
@ -136,7 +136,7 @@ LOCKFILE="/run/dehydrated.lock"
# Issuer chain cache directory.
# Default: $BASEDIR/chains
#CHAINCACHE="${BASEDIR}/chains"
#CHAINCACHE="$BASEDIR/chains"
# Automatic cleanup?
# Default: no

View file

@ -1,7 +1,7 @@
# The settings in this file can be used to override those in the global config file in /etc/dehydrated
# Which challenge should be used?
# Supported values: http-01, dns-01, tls-alpn-01.
# Supported values: http-01, dns-01, dns-persist-01, tls-alpn-01.
# Default: http-01
#CHALLENGETYPE="http-01"

View file

@ -1,136 +1,189 @@
#!/usr/bin/env bash
# This file contains the default hook functions for dehydrated - these functions will be used when there is no overriding certificate specific hooks file.
# All but startup_hook and ext_hook can be overridden by a hooks script on a per certificate basis.
# This file contains the default hook functions for dehydrated - these functions will be used when there is no overriding certificate
# specific hooks file. All but startup_hook and ext_hook can be overridden by a hooks script on a per certificate basis.
#
# shellcheck disable=SC2034,SC2317
# Configuration.
# Where the copies of the current certificates/keys should be placed. Comment for no copying.
CERTSDIR="/etc/certificates"
# The syslog facility and tag to use.
FACILITY="local3"
TAG="dehydrated"
# Where from/to to send emails.
EMAIL_FROM="\"Server: ${HOSTNAME%%.*}\" <noreply@slackware.uk>"
# The syslog facility and tag to use. Comment for no sysloging.
SYSLOG_FACILITY="local1"
SYSLOG_TAG="dehydrated-hooks"
# Where from/to to send emails. Comment for no emailing.
EMAIL_FROM="\"Server: ${HOSTNAME%%.*}\" <noreply@slackware.uk.net>"
EMAIL_TO=("Systems' Administrator <sysadmin@slackware.uk>")
# Get the system ID.
# shellcheck disable=SC2046
declare SYSTEM_$(grep '^ID=' /etc/os-release 2>/dev/null)
# Write a message to syslog, and send a copy via email.
# Write a message to syslog and/or send via email.
notify() {
local LOG_PREFIX="${LOG_PREFIX:-Certificate renewal} $1" PRIORITY
# Parameters:
# $1 Log entry type (currently one of: error, warning or info).
# $2... The text of the log entry.
local PREFIX PRIORITY
[[ -z "$1" ]] && return 1
# Select the syslog priority level.
case "$1" in
'error') PRIORITY="err" ;;
'warning') PRIORITY="warn" ;;
*) PRIORITY="info" ;;
esac
'error')
PREFIX="${LOG_PREFIX:-Certificate renewal} $1"
PRIORITY="err"
shift
;;
'info')
PREFIX="${LOG_PREFIX:-Certificate renewal} $1"
PRIORITY="info"
shift
;;
'warning')
PREFIX="${LOG_PREFIX:-Certificate renewal} $1"
PRIORITY="warn"
shift
;;
*)
LOG_PREFIX="Dehydrated hooks' coding"
notify "error" "Invalid or no log entry severity specified - using 'error'"
PREFIX="${LOG_PREFIX:-Certificate renewal} error"
PRIORITY="err"
;;
esac
# Log the message to syslog
if [[ "$ID" == "alpine" ]]; then
# Log the message to syslog.
[[ -n "$SYSLOG_FACILITY" ]] && [[ -n "$SYSLOG_TAG" ]] && {
if [[ "$SYSTEM_ID" == "alpine" ]]; then
# BusyBox logger on Alpine's is missing the --id option.
printf "%s\\n" "$LOG_PREFIX:" "$@" "EOX" | logger -p "$FACILITY.$PRIORITY" -t "$TAG" >/dev/null 2>&1
printf "%s\\n" "$PREFIX:" "$@" "EOL" | logger -p "$SYSLOG_FACILITY.$PRIORITY" -t "$SYSLOG_TAG" >/dev/null 2>&1
else
printf "%s\\n" "$LOG_PREFIX:" "$@" "EOX" | logger --id="$$" -p "$FACILITY.$PRIORITY" -t "$TAG" >/dev/null 2>&1
printf "%s\\n" "$PREFIX:" "$@" "EOL" | logger --id="$$" -p "$SYSLOG_FACILITY.$PRIORITY" -t "$SYSLOG_TAG" >/dev/null 2>&1
fi
}
# Email the notification.
printf "%s\\n" "$@" | mail -r "$EMAIL_FROM" -s "$LOG_PREFIX" "${EMAIL_TO[@]}" >/dev/null 2>&1
[[ -n "$EMAIL_FROM" ]] && [[ -n "${EMAIL_TO[*]}" ]] && {
printf "%s\\n" "$@" | mail -r "$EMAIL_FROM" -s "$PREFIX" "${EMAIL_TO[@]}" >/dev/null 2>&1
}
return 0
}
# Service configurations (used at startup/shutdown).
services() {
local DAEMON ERR=0 LOG_PREFIX="Dehydrated configuration" PIDFILE RCFILE SANITY="$1"
# Parameters:
# $1 Whether to sanity check configuration. '1' == sanity check.
# Select the service configuration based on the distribution.
# RCFILE_<service> is required for any service.
# Either DAEMON_<service> or PIDFILE_<service>, or both is required for any service.
if [[ "$SYSTEM_ID" == "slackware" ]]; then
# HTTP daemon selection.
if [[ -x "/etc/rc.d/rc.httpd" ]]; then
RCFILE_HTTPD="/etc/rc.d/rc.httpd"
DAEMON_HTTPD="httpd"
PIDFILE_HTTPD="/run/httpd.pid"
elif [[ -x "/etc/rc.d/rc.thttpd" ]]; then
RCFILE_HTTPD="/etc/rc.d/rc.thttpd"
DAEMON_HTTPD="thttpd"
PIDFILE_HTTPD="/run/thttpd.pid"
fi
# FTP daemon selection.
if [[ -x "/etc/rc.d/rc.proftpd" ]]; then
RCFILE_FTPD="/etc/rc.d/rc.proftpd"
DAEMON_FTPD="proftpd"
PIDFILE_FTPD="/run/proftpd.pid"
fi
# SMTP daemon selection.
if [[ -x "/etc/rc.d/rc.exim" ]]; then
RCFILE_SMTPD="/etc/rc.d/rc.exim"
DAEMON_SMTPD="exim"
PIDFILE_SMTPD="/run/exim.pid"
fi
elif [[ "$SYSTEM_ID" == "void" ]]; then
# HTTP daemon selection.
# thttpd on Void doesn't have a directly callable rc script, so can't be supported.
if [[ -x "/usr/sbin/apachectl" ]]; then
RCFILE_HTTPD="/usr/sbin/apachectl"
DAEMON_HTTPD="httpd"
PIDFILE_HTTPD="/run/httpd/httpd.pid"
fi
elif [[ "$SYSTEM_ID" == "alpine" ]]; then
# HTTP daemon selection.
local LOG_PREFIX="Dehydrated hooks' configuration" SERVICE
declare -g -A SERVICE_CTL SERVICE_DAEMON SERVICE_PIDFILE
# Select the service configurations based on the distribution.
# SERVICE_CTL['<service>'] is required, and either SERVICE_DAEMON['<service>'] or SERVICE_PIDFILE['<service>'], or both is required for any service.
# An 'httpd' service must be defined for certificate renewal to work.
if [[ "$SYSTEM_ID" == "alpine" ]]; then
# HTTP daemon.
if [[ -x "/etc/init.d/apache2" ]]; then
RCFILE_HTTPD="/etc/init.d/apache2"
DAEMON_HTTPD="httpd"
PIDFILE_HTTPD="/run/apache2/httpd.pid"
SERVICE_CTL['httpd']="/etc/init.d/apache2"
SERVICE_DAEMON['httpd']="httpd"
SERVICE_PIDFILE['httpd']="/run/apache2/httpd.pid"
elif [[ -x "/etc/init.d/thttpd" ]]; then
RCFILE_HTTPD="/etc/init.d/thttpd"
DAEMON_HTTPD="thttpd"
PIDFILE_HTTPD="/run/thttpd.pid"
SERVICE_CTL['httpd']="/etc/init.d/thttpd"
SERVICE_DAEMON['httpd']="thttpd"
SERVICE_PIDFILE['httpd']="/run/thttpd.pid"
fi
# Samba daemon selection.
if [[ -x "/etc/init.d/samba" ]]; then
# FIXME:
# RCFILE_SAMBA="/etc/init.d/samba"
DAEMON_SAMBA="samba"
PIDFILE_SAMBA="/run/samba.pid"
SERVICE_CTL['samba']="/etc/init.d/samba"
SERVICE_DAEMON['samba']="samba"
SERVICE_PIDFILE['samba']="/run/samba.pid"
fi
elif [[ "$SYSTEM_ID" =~ ^(debian|devuan)$ ]]; then
# HTTP daemon.
if [[ -x "/usr/sbin/apachectl" ]]; then
SERVICE_CTL['httpd']="/usr/sbin/apachectl"
SERVICE_DAEMON['httpd']="apache2"
SERVICE_PIDFILE['httpd']="/run/apache2/apache2.pid"
fi
# Samba daemon.
if [[ -x "/etc/init.d/samba" ]]; then
SERVICE_CTL['samba']="/etc/init.d/samba"
SERVICE_DAEMON['samba']="samba"
SERVICE_PIDFILE['samba']="/run/samba/samba.pid"
fi
elif [[ "$SYSTEM_ID" == "slackware" ]]; then
# HTTP daemon.
if [[ -x "/etc/rc.d/rc.httpd" ]]; then
SERVICE_CTL['httpd']="/etc/rc.d/rc.httpd"
SERVICE_DAEMON['httpd']="httpd"
SERVICE_PIDFILE['httpd']="/run/httpd.pid"
elif [[ -x "/etc/rc.d/rc.thttpd" ]]; then
SERVICE_CTL['httpd']="/etc/rc.d/rc.thttpd"
SERVICE_DAEMON['httpd']="thttpd"
SERVICE_PIDFILE['httpd']="/run/thttpd.pid"
fi
# FTP daemon.
if [[ -x "/etc/rc.d/rc.proftpd" ]]; then
SERVICE_CTL['ftpd']="/etc/rc.d/rc.proftpd"
SERVICE_DAEMON['ftpd']="proftpd"
SERVICE_PIDFILE['ftpd']="/run/proftpd.pid"
fi
# SMTP daemon.
if [[ -x "/etc/rc.d/rc.exim" ]]; then
SERVICE_CTL['smtpd']="/etc/rc.d/rc.exim"
SERVICE_DAEMON['smtpd']="exim"
SERVICE_PIDFILE['smtpd']="/run/exim.pid"
fi
elif [[ "$SYSTEM_ID" == "void" ]]; then
# HTTP daemon selection.
# Note: thttpd on Void doesn't have a directly callable rc script, so can't be supported.
if [[ -x "/usr/sbin/apachectl" ]]; then
SERVICE_CTL['httpd']="/usr/sbin/apachectl"
SERVICE_DAEMON['httpd']="httpd"
SERVICE_PIDFILE['httpd']="/run/httpd/httpd.pid"
fi
else
notify "error" "'$SYSTEM_ID' is not a supported platform for hooks"
return 1
fi
# Sanity check settings.
((SANITY == 1)) && {
[[ -z "$RCFILE_HTTPD" ]] && notify "warning" "No configuration settings for an HTTP daemon - no start/restart of HTTP daemon is possible -- check configuration"
for RCFILE in "${!RCFILE_@}"; do
DAEMON="DAEMON_${RCFILE#RCFILE_}"
PIDFILE="PIDFILE_${RCFILE#RCFILE_}"
[[ -n "${!RCFILE}" ]] && [[ -z "${!DAEMON}" ]] && [[ -z "${!PIDFILE}" ]] && notify "error" "'$RCFILE' is set, but neither '$DAEMON' nor '$PIDFILE' is set - at least one setting is required -- aborting" && ERR=1
(( $1 == 1 )) && {
local IFS=$'\n'
for SERVICE in $(printf "%s\\n" "${!SERVICE_CTL[@]}" "${!SERVICE_DAEMON[@]}" "${!SERVICE_PIDFILE[@]}" | sort | uniq); do
if [[ -z "${SERVICE_CTL[\"$SERVICE\"]}" ]]; then
if [[ "$SERVICE" == "httpd" ]]; then
notify "warning" "'SERVICE_CTL' is not set for service 'httpd' - HTTP based validation, if used, not possible" "Comment all 'httpd' SERVICE_* settings to silence this warning"
else
notify "warning" "'SERVICE_CTL' is not set for service '$SERVICE'"
fi
unset "SERVICE_CTL['$SERVICE']" "SERVICE_DAEMON['$SERVICE']" "SERVICE_PIDFILE['$SERVICE']"
continue
else
[[ -z "${SERVICE_DAEMON[\"$SERVICE\"]}" ]] && [[ -z "${SERVICE_PIDFILE[\"$SERVICE\"]}" ]] && {
notify "warning" "neither 'SERVICE_DAEMON' nor 'SERVICE_PIDFILE' is set for service '$SERVICE' - at least one setting is required"
unset "SERVICE_CTL['$SERVICE']" "SERVICE_DAEMON['$SERVICE']" "SERVICE_PIDFILE['$SERVICE']"
continue
}
fi
done
}
((ERR == 1)) && return 1
return 0
}
# Called once for every domain that needs to be validated, including any alternative names listed.
deploy_challenge() {
local DOMAIN="$1" TOKEN_FILENAME="$2" TOKEN_VALUE="$3"
# This hook is called once for every domain that needs to be
# validated, including any alternative names you may have listed.
# Parameters:
# DOMAIN - The domain name (CN or subject alternative name) being validated.
# TOKEN_FILENAME - The name of the file containing the token to be served for HTTP validation
# $1 (DOMAIN) The domain name (CN or subject alternative name) being validated.
# $2 (TOKEN_FILENAME) The name of the file containing the token to be served for HTTP validation
# Should be served by your web server as /.well-known/acme-challenge/${TOKEN_FILENAME}.
# TOKEN_VALUE - The token value that needs to be served for validation.
# For DNS validation, this is what you want to put in the _acme-challenge TXT record.
# $3 (TOKEN_VALUE) The token value that needs to be served for validation.
# For HTTP validation it is the value that is expected be found in the $TOKEN_FILENAME file.
# For DNS validation, this is what you want to put in the _acme-challenge TXT record.
local DOMAIN="$1" TOKEN_FILENAME="$2" TOKEN_VALUE="$3"
# Simple example: Use nsupdate with local named
# printf 'server 127.0.0.1\nupdate add _acme-challenge.%s 300 IN TXT "%s"\nsend\n' "$DOMAIN" "$TOKEN_VALUE" | nsupdate -k /var/run/named/session.key
@ -139,11 +192,18 @@ deploy_challenge() {
}
# Called after attempting to validate each domain, whether or not validation was successful.
# Can be used to delete files or DNS records that are no longer needed.
clean_challenge() {
local DOMAIN="$1" TOKEN_FILENAME="$2" TOKEN_VALUE="$3"
# Parameters:
# $1 (DOMAIN) The domain name (CN or subject alternative name) being validated.
# $2 (TOKEN_FILENAME) The name of the file containing the token to be served for HTTP validation
# Should be served by your web server as /.well-known/acme-challenge/${TOKEN_FILENAME}.
# $3 (TOKEN_VALUE) The token value that needs to be served for validation.
# For HTTP validation it is the value that is expected be found in the $TOKEN_FILENAME file.
# For DNS validation, this is what you want to put in the _acme-challenge TXT record.
# This hook is called after attempting to validate each domain, whether or not validation was successful. Here you can delete files or DNS records that are no longer needed.
# The parameters are the same as for deploy_challenge.
local DOMAIN="$1" TOKEN_FILENAME="$2" TOKEN_VALUE="$3"
# Simple example: Use nsupdate with local named
# printf 'server 127.0.0.1\nupdate delete _acme-challenge.%s TXT "%s"\nsend\n' "$DOMAIN" "$TOKEN_VALUE" | nsupdate -k /var/run/named/session.key
@ -152,38 +212,37 @@ clean_challenge() {
}
# Called after the certificates have been created but before they are symlinked.
# This allows the sync the files to disk to prevent creating a symlink to empty files on unexpected system crashes.
# This hook is not intended to be used for further processing of certificate files; see deploy_cert for that.
sync_cert() {
# Parameters:
# $1 (KEYFILE) The path of the file containing the private key.
# $2 (CERTFILE) The path of the file containing the signed certificate.
# $3 (FULLCHAINFILE) The path of the file containing the full certificate chain.
# $4 (CHAINFILE) The path of the file containing the intermediate certificate(s).
# $5 (REQUESTFILE) The path of the file containing the certificate signing request.
local KEYFILE="$1" CERTFILE="$2" FULLCHAINFILE="$3" CHAINFILE="$4" REQUESTFILE="$5"
# This hook is called after the certificates have been created but before they are symlinked.
# This allows you to sync the files to disk to prevent creating a symlink to empty files on unexpected system crashes.
# This hook is not intended to be used for further processing of certificate files; see deploy_cert for that.
# Parameters:
# KEYFILE - The path of the file containing the private key.
# CERTFILE - The path of the file containing the signed certificate.
# FULLCHAINFILE - The path of the file containing the full certificate chain.
# CHAINFILE - The path of the file containing the intermediate certificate(s).
# REQUESTFILE - The path of the file containing the certificate signing request.
# Simple example: sync the files before symlinking them
# sync "$KEYFILE" "$CERTFILE" "$FULLCHAINFILE" "$CHAINFILE" "$REQUESTFILE"
sync "$KEYFILE" "$CERTFILE" "$FULLCHAINFILE" "$CHAINFILE" "$REQUESTFILE"
return 0
}
# Called once for each certificate that has been produced.
# Here you can copy your new certificates to service-specific locations and reload the service.
deploy_cert() {
local DOMAIN="$1" KEYFILE="$2" CERTFILE="$3" FULLCHAINFILE="$4" CHAINFILE="$5" TIMESTAMP="$6"
# This hook is called once for each certificate that has been produced.
# Here you might, for instance, copy your new certificates to service-specific locations and reload the service.
# Parameters:
# DOMAIN - The primary domain name, i.e. the certificate common name (CN).
# KEYFILE - The path of the file containing the private key.
# CERTFILE - The path of the file containing the signed certificate.
# FULLCHAINFILE - The path of the file containing the full certificate chain.
# CHAINFILE - The path of the file containing the intermediate certificate(s).
# TIMESTAMP - Timestamp when the specified certificate was created.
# $1 (DOMAIN) The primary domain name, i.e. the certificate common name (CN).
# $2 (KEYFILE) The path of the file containing the private key.
# $3 (CERTFILE) The path of the file containing the signed certificate.
# $4 (FULLCHAINFILE) The path of the file containing the full certificate chain.
# $5 (CHAINFILE) The path of the file containing the intermediate certificate(s).
# $6 (TIMESTAMP) Timestamp when the specified certificate was created.
local DOMAIN="$1" KEYFILE="$2" CERTFILE="$3" FULLCHAINFILE="$4" CHAINFILE="$5" TIMESTAMP="$6"
local FILE LOG_PREFIX="Certificate deployment"
@ -198,9 +257,10 @@ deploy_cert() {
}
done
# Only copy the certificate if it differs from the new one.
cmp "$CERTFILE" "$CERTSDIR/${DOMAIN}_cert.pem" >/dev/null 2>&1 || {
# The first time through this will create the files readable by root only, but better to err on the side of caution.
# Subsequent runs will retain whatever permissions were set by the admin after the first run.
cmp "$CERTFILE" "$CERTSDIR/${DOMAIN}_cert.pem" >/dev/null 2>&1 || {
umask 066
# shellcheck disable=SC2015
cat "$CERTFILE" >"$CERTSDIR/${DOMAIN}_cert.pem" && cat "$KEYFILE" >"$CERTSDIR/${DOMAIN}_key.pem" && cat "$CHAINFILE" >"$CERTSDIR/${DOMAIN}_chain.pem" && cat "$FULLCHAINFILE" >"$CERTSDIR/${DOMAIN}_fullchain.pem" || {
@ -211,7 +271,7 @@ deploy_cert() {
}
# Set a marker (used in the exit_hook function) to signal that services should be reloaded at the end of deployments.
touch /run/dehydrated-reload-marker || {
touch "/run/dehydrated-reload-marker" || {
notify "warning" "Failed to create reload marker during '$DOMAIN' certificate deployment - reloading services manually may be required -- check server"
# Return 0 so that dehydrated doesn't stop - there may be some more certificates to renew.
return 0
@ -225,15 +285,15 @@ deploy_cert() {
}
# Called once for each updated OCSP stapling file that has been produced.
# Here you can copy your new OCSP stapling files to service-specific locations and reload the service.
deploy_ocsp() {
local DOMAIN="$1" OCSPFILE="$2" TIMESTAMP="$3"
# This hook is called once for each updated ocsp stapling file that has been produced.
# Here you might, for instance, copy your new ocsp stapling files to service-specific locations and reload the service.
# Parameters:
# DOMAIN - The primary domain name, i.e. the certificate common name (CN).
# OCSPFILE - The path of the ocsp stapling file.
# TIMESTAMP - Timestamp when the specified ocsp stapling file was created.
# $1 (DOMAIN) The primary domain name, i.e. the certificate common name (CN).
# $2 (OCSPFILE) The path of the OCSP stapling file.
# $3 (TIMESTAMP) Timestamp when the specified OCSP stapling file was created.
local DOMAIN="$1" OCSPFILE="$2" TIMESTAMP="$3"
# Simple example: Copy file to nginx config
# cp "$OCSPFILE" /etc/nginx/ssl/; chown -R nginx: /etc/nginx/ssl
@ -243,28 +303,28 @@ deploy_ocsp() {
}
# Called once for each certificate that is still valid and therefore wasn't reissued.
unchanged_cert() {
local DOMAIN="$1" KEYFILE="$2" CERTFILE="$3" FULLCHAINFILE="$4" CHAINFILE="$5"
# This hook is called once for each certificate that is still valid and therefore wasn't reissued.
# Parameters:
# DOMAIN - The primary domain name, i.e. the certificate common name (CN).
# KEYFILE - The path of the file containing the private key.
# CERTFILE - The path of the file containing the signed certificate.
# FULLCHAINFILE - The path of the file containing the full certificate chain.
# CHAINFILE - The path of the file containing the intermediate certificate(s).
# $1 (DOMAIN) The primary domain name, i.e. the certificate common name (CN).
# $2 (KEYFILE) The path of the file containing the private key.
# $3 (CERTFILE) The path of the file containing the signed certificate.
# $4 (FULLCHAINFILE) The path of the file containing the full certificate chain.
# $5 (CHAINFILE) The path of the file containing the intermediate certificate(s).
local DOMAIN="$1" KEYFILE="$2" CERTFILE="$3" FULLCHAINFILE="$4" CHAINFILE="$5"
return 0
}
# Called if the challenge response has failed, so domain owners can be aware and act accordingly.
invalid_challenge() {
local DOMAIN="$1" RESPONSE="$2"
# This hook is called if the challenge response has failed, so domain owners can be aware and act accordingly.
# Parameters:
# DOMAIN - The primary domain name, i.e. the certificate common name (CN).
# RESPONSE - The response that the verification server returned
# $1 (DOMAIN) The primary domain name, i.e. the certificate common name (CN).
# $2 (RESPONSE) The response that the verification server returned
local DOMAIN="$1" RESPONSE="$2"
# Notify the sysadmin.
notify "error" "Validation of '$DOMAIN' failed:" "$RESPONSE"
@ -273,154 +333,174 @@ invalid_challenge() {
}
# Called when an HTTP request fails (e.g., when the ACME server is busy, returns an error, etc).
# It will be called upon any response code that does not start with '2'. Useful to alert admins about problems with requests.
request_failure() {
# Parameters:
# $1 (STATUSCODE) The HTML status code that originated the error.
# $2 (REASON) The specified reason for the error.
# $3 (REQTYPE) The kind of request that was made (GET, POST...)
local STATUSCODE="$1" REASON="$2" REQTYPE="$3" HEADERS="$4"
# This hook is called when an HTTP request fails (e.g., when the ACME server is busy, returns an error, etc).
# It will be called upon any response code that does not start with '2'. Useful to alert admins about problems with requests.
# Parameters:
# STATUSCODE - The HTML status code that originated the error.
# REASON - The specified reason for the error.
# REQTYPE - The kind of request that was made (GET, POST...)
# Notify the sysadmin.
notify "error" "HTTP $REQTYPE request failed for '$DOMAIN' with code '$STATUSCODE'" "Reason: $REASON" "Headers:" "$HEADERS"
notify "error" "HTTP '$REQTYPE' request failed for '$DOMAIN' with code '$STATUSCODE'" "Reason: $REASON" "Headers:" "$HEADERS"
return 0
}
# Called before any certificate signing operation takes place.
# It can be used to generate or fetch a certificate signing request with external tools.
# The output should be just the cerificate signing request formatted as PEM.
generate_csr() {
local DOMAIN="$1" CERTDIR="$2" ALTNAMES="$3"
# This hook is called before any certificate signing operation takes place.
# It can be used to generate or fetch a certificate signing request with external tools.
# The output should be just the cerificate signing request formatted as PEM.
# Parameters:
# DOMAIN - The primary domain as specified in domains.txt.
# $1 (DOMAIN) The primary domain as specified in domains.txt.
# This does not need to match with the domains in the CSR, it's basically just the directory name.
# CERTDIR - Certificate output directory for this particular certificate.
# $2 (CERTDIR) Certificate output directory for this particular certificate.
# Can be used for storing additional files.
# ALTNAMES - All domain names for the current certificate as specified in domains.txt.
# $3 (ALTNAMES) All domain names for the current certificate as specified in domains.txt.
# Again, this doesn't need to match with the CSR, it's just there for convenience.
local DOMAIN="$1" CERTDIR="$2" ALTNAMES="$3"
# Simple example: Look for pre-generated CSRs
# if [ -e "$CERTDIR/pre-generated.csr" ]; then
# cat "$CERTDIR/pre-generated.csr"
# fi
# [[ -e "$CERTDIR/pre-generated.csr" ]] && cat "$CERTDIR/pre-generated.csr"
return 0
}
# Called before the cron command to do some initial tasks (e.g. starting a webserver).
startup_hook() {
# This hook is called before the cron command to do some initial tasks (e.g. starting a webserver).
local LOG_PREFIX="Dehydrated startup"
# Read services configuration (with sanity check)
services 1 || return 1
# The 'root' user is required.
(( $(id -u) != 0 )) && {
notify "error" "Must be running as 'root' -- aborting"
return 1
}
# Read services configuration (with sanity checks).
services "1"
# Make sure the certificates directory exists.
[[ -n "$CERTSDIR" ]] && {
umask 022
# shellcheck disable=SC2174
mkdir -p -m 0755 "$CERTSDIR" 2>/dev/null || {
notify "error" "Failed to create certificate storage directory -- aborting"
notify "error" "Failed to create certificate storage directory '$CERTSDIR' -- aborting"
return 1
}
}
# If an HTTP daemon rc script is available and the service is not already running, start it.
[[ -n "$RCFILE_HTTPD" ]] && {
pgrep -c ${PIDFILE_HTTPD:+-F "$PIDFILE_HTTPD"} "$DAEMON_HTTPD" >/dev/null 2>&1 || {
"$RCFILE_HTTPD" start >/dev/null 2>&1
# If an HTTP daemon is not already running, start it.
[[ -n "${SERVICE_CTL['httpd']}" ]] && {
pgrep -c ${SERVICE_PIDFILE['httpd']:+-F "${SERVICE_PIDFILE['httpd']}"} "${SERVICE_DAEMON['httpd']}" >/dev/null 2>&1 || {
"${SERVICE_CTL['httpd']}" "start" >/dev/null 2>&1
sleep 5
if pgrep -c ${PIDFILE_HTTPD:+-F "$PIDFILE_HTTPD"} "$DAEMON_HTTPD" >/dev/null 2>&1; then
if pgrep -c ${SERVICE_PIDFILE['httpd']:+-F "${SERVICE_PIDFILE['httpd']}"} "${SERVICE_DAEMON['httpd']}" >/dev/null 2>&1; then
# Set a marker (used in exit_hook()) to signal that the HTTP daemon should be stopped at the end of deployments.
touch /run/dehydrated-http-daemon-stop-marker 2>/dev/null || notify "warning" "Failed to create HTTP daemon stop marker - HTTP daemon will be left running -- check server"
touch "/run/dehydrated-http-daemon-stop-marker" 2>/dev/null || notify "warning" "Failed to create HTTP daemon stop marker - HTTP daemon will be left running -- check server"
else
notify "error" "Failure of '$RCFILE_HTTPD' to start HTTP daemon -- aborting"
notify "error" "Failed to start HTTP daemon for nonce validation -- aborting"
return 1
fi
}
}
# Add firewall rules to allow HTTP traffic so the nonce can be validated.
{ iptables -N dehydrated && ip6tables -N dehydrated && iptables -I INPUT 1 -j dehydrated && ip6tables -I INPUT 1 -j dehydrated && iptables -I dehydrated 1 -p tcp --syn --dport 80 -m conntrack --ctstate NEW -j ACCEPT && ip6tables -I dehydrated 1 -p tcp --syn --dport 80 -m conntrack --ctstate NEW -j ACCEPT; } >/dev/null 2>&1 || {
notify "error" "Failed to insert firewall rules to allow nonce validation -- aborting"
{ iptables -N dehydrated && ip6tables -N dehydrated && \
iptables -I INPUT 1 -j dehydrated && ip6tables -I INPUT 1 -j dehydrated && \
iptables -I dehydrated 1 -p tcp --dport 80 -j ACCEPT && ip6tables -I dehydrated 1 -p tcp --dport 80 -j ACCEPT; } >/dev/null 2>&1 || {
notify "warning" "Failed to insert firewall rules to allow nonce validation"
return 1
}
}
return 0
}
# Called at the end of the cron command and can be used to do some final (cleanup or other) tasks.
exit_hook() {
local ERROR="$1"
# This hook is called at the end of the cron command and can be used to do some final (cleanup or other) tasks.
# Parameters:
# ERROR - Contains error message if dehydrated exits with error.
# $1 (ERROR) Contains error message if dehydrated exits with error.
local DAEMON ERR=0 LOG_PREFIX="Dehydrated shutdown" PIDFILE RCFILE TIMEOUT=30
local ERROR="$1"
local ERR=0 LOG_PREFIX="Dehydrated shutdown" SERVICE TIMEOUT=30
# Read services configuration (without sanity check - this was already done at startup)
services 0 || return 1
# Delete firewall rules that was added to allow HTTP traffic.
iptables -C INPUT -j dehydrated >/dev/null 2>&1 && iptables -D INPUT -j dehydrated >/dev/null 2>&1
ip6tables -C INPUT -j dehydrated >/dev/null 2>&1 && ip6tables -D INPUT -j dehydrated >/dev/null 2>&1
iptables -F dehydrated >/dev/null 2>&1
ip6tables -F dehydrated >/dev/null 2>&1
iptables -X dehydrated >/dev/null 2>&1
ip6tables -X dehydrated >/dev/null 2>&1
services 0
# If the reload marker was set, restart services.
[[ -e /run/dehydrated-reload-marker ]] && {
for RCFILE in "${!RCFILE_@}"; do
DAEMON="DAEMON_${RCFILE#RCFILE_}"
PIDFILE="PIDFILE_${RCFILE#RCFILE_}"
[[ -e "/run/dehydrated-reload-marker" ]] && {
local IFS=$'\n'
for SERVICE in $(printf "%s\\n" "${!SERVICE_CTL[@]}"); do
# If the HTTP daemon is going to be shut down, there's no need to restart it.
[[ "$RCFILE" == "RCFILE_HTTPD" ]] && [[ -e /run/dehydrated-http-daemon-stop-marker ]] && continue
# Restart the service.
"${!RCFILE}" restart >/dev/null 2>&1 || notify "warning" "Failed to restart service '${!DAEMON}' -- check server"
sleep "$TIMEOUT"
pgrep -c ${PIDFILE:+-F "${!PIDFILE}"} "${!DAEMON}" >/dev/null 2>&1 || {
notify "warning" "Service '${!DAEMON}' exited unexpectedly - trying to start again"
"${!RCFILE}" start >/dev/null 2>&1 || notify "warning" "Failed to start service '${!DAEMON}' -- check server"
sleep "$TIMEOUT"
pgrep -c ${PIDFILE:+-F "${!PIDFILE}"} "${!DAEMON}" >/dev/null 2>&1 || {
notify "warning" "Service '${!DAEMON}' failed to restart correctly -- check server"
[[ "$SERVICE" == "httpd" ]] && [[ -e "/run/dehydrated-http-daemon-stop-marker" ]] && continue
# Restart the services.
"${SERVICE_CTL[\"$SERVICE\"]}" "restart" >/dev/null 2>&1 || {
notify "error" "Controlled restart of service '$SERVICE' failed -- check server"
ERR=1
continue
}
sleep "$TIMEOUT"
pgrep -c ${SERVICE_PIDFILE["$SERVICE"]:+-F "${SERVICE_PIDFILE[\"$SERVICE\"]}"} "${SERVICE_DAEMON[\"$SERVICE\"]}" >/dev/null 2>&1 || {
notify "warning" "Service '$SERVICE' exited unexpectedly - trying to start again"
"${SERVICE_CTL[\"$SERVICE\"]}" "start" >/dev/null 2>&1 || {
notify "error" "Controlled start of service '$SERVICE' failed -- check server"
ERR=1
continue
}
sleep "$TIMEOUT"
pgrep -c ${SERVICE_PIDFILE["$SERVICE"]:+-F "${SERVICE_PIDFILE[\"$SERVICE\"]}"} "${SERVICE_DAEMON[\"$SERVICE\"]}" >/dev/null 2>&1 || {
notify "error" "Multiple failures (re)starting service '$SERVICE' -- check server"
ERR=1
continue
}
}
done
}
# Remove the reload marker if all services restarted without issue. Keep the marker if any failed.
((ERR == 0)) && { rm -f /run/dehydrated-reload-marker 2>/dev/null || notify "warning" "Failed to remove services reload marker -- check server"; }
(( ERR == 0 )) && {
rm -f "/run/dehydrated-reload-marker" 2>/dev/null || notify "warning" "Failed to remove services reload marker -- check server"
}
# If an HTTP daemon was started by dehydrated, stop it now.
# If an HTTP daemon is configured, process the shutdown of it.
[[ -n "${SERVICE_CTL['httpd']}" ]] && {
# Delete firewall rules that were added to allow HTTP traffic.
{ iptables -C INPUT -j dehydrated && iptables -D INPUT -j dehydrated; } >/dev/null 2>&1
{ ip6tables -C INPUT -j dehydrated && ip6tables -D INPUT -j dehydrated; } >/dev/null 2>&1
iptables -F dehydrated >/dev/null 2>&1
ip6tables -F dehydrated >/dev/null 2>&1
iptables -X dehydrated >/dev/null 2>&1
ip6tables -X dehydrated >/dev/null 2>&1
# If an HTTP daemon was started in startup_hook(), stop it now.
ERR=0
[[ -e /run/dehydrated-http-daemon-stop-marker ]] && {
pgrep -c ${PIDFILE_HTTPD:+-F "$PIDFILE_HTTPD"} "$DAEMON_HTTPD" >/dev/null 2>&1 && {
"$RCFILE_HTTPD" stop >/dev/null 2>&1 || notify "warning" "Failed to gracefully stop service '$DAEMON_HTTPD' -- check server"
[[ -e "/run/dehydrated-http-daemon-stop-marker" ]] && {
pgrep -c ${SERVICE_PIDFILE['httpd']:+-F "${SERVICE_PIDFILE['httpd']}"} "${SERVICE_DAEMON['httpd']}" >/dev/null 2>&1 && {
"${SERVICE_CTL['httpd']}" "stop" >/dev/null 2>&1 || notify "error" "Controlled stop service of 'httpd' failed -- check server"
sleep "$TIMEOUT"
pgrep -c ${PIDFILE_HTTPD:+-F "$PIDFILE_HTTPD"} "$DAEMON_HTTPD" >/dev/null 2>&1 && {
pkill -TERM ${PIDFILE_HTTPD:+-F "$PIDFILE_HTTPD"} "$DAEMON_HTTPD" >/dev/null 2>&1 || notify "warning" "Failed to -SIGTERM service '$DAEMON_HTTPD' -- check server"
pgrep -c ${SERVICE_PIDFILE['httpd']:+-F "${SERVICE_PIDFILE['httpd']}"} "${SERVICE_DAEMON['httpd']}" >/dev/null 2>&1 && {
pkill -TERM ${SERVICE_PIDFILE['httpd']:+-F "${SERVICE_PIDFILE['httpd']}"} "${SERVICE_DAEMON['httpd']}" >/dev/null 2>&1 || notify "warning" "Failed to SIGTERM service 'httpd' -- check server"
sleep "$TIMEOUT"
pgrep -c ${PIDFILE_HTTPD:+-F "$PIDFILE_HTTPD"} "$DAEMON_HTTPD" >/dev/null 2>&1 && {
pkill -KILL ${PIDFILE_HTTPD:+-F "$PIDFILE_HTTPD"} "$DAEMON_HTTPD" >/dev/null 2>&1 || notify "warning" "Failed to -SIGKILL service '$DAEMON_HTTPD' -- check server"
pgrep -c ${SERVICE_PIDFILE['httpd']:+-F "${SERVICE_PIDFILE['httpd']}"} "${SERVICE_DAEMON['httpd']}" >/dev/null 2>&1 && {
pkill -KILL ${SERVICE_PIDFILE['httpd']:+-F "${SERVICE_PIDFILE['httpd']}"} "${SERVICE_DAEMON['httpd']}" >/dev/null 2>&1 || notify "warning" "Failed to SIGKILL service 'httpd' -- check server"
sleep 5
}
}
pgrep -c ${PIDFILE_HTTPD:+-F "$PIDFILE_HTTPD"} "$DAEMON_HTTPD" >/dev/null 2>&1 && notify "warning" "Failed to stop HTTP daemon that dehydrated started" && ERR=1
pgrep -c ${SERVICE_PIDFILE['httpd']:+-F "${SERVICE_PIDFILE['httpd']}"} "${SERVICE_DAEMON['httpd']}" >/dev/null 2>&1 && notify "error" "Failed to stop HTTP daemon that dehydrated started" && ERR=1
}
}
# If the HTTP daemon was stopped correctly, remove the stop marker.
((ERR == 0)) && { rm -f /run/dehydrated-http-daemon-stop-marker 2>/dev/null || notify "warning" "Failed to remove HTTP daemon stop marker -- check server"; }
(( ERR == 0 )) && {
rm -f "/run/dehydrated-http-daemon-stop-marker" 2>/dev/null || notify "warning" "Failed to remove HTTP daemon stop marker -- check server"
}
}
return 0
}

1
var/www/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/html/

2
var/www/dehydrated/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
/*
!/.gitignore