Compare commits

..

134 Commits

Author SHA1 Message Date
aptalca
a8d03c5280 Merge pull request #460 from linuxserver/package-install
Run package installer as part of SWAG init to prevent init fail due to missing dns plugin
2024-03-05 08:31:23 -05:00
aptalca
907dfc8c03 Revert "Update root/etc/s6-overlay/s6-rc.d/init-certbot-config/run"
This reverts commit bf21a51e10.
2024-03-04 20:19:53 -05:00
aptalca
bf21a51e10 Update root/etc/s6-overlay/s6-rc.d/init-certbot-config/run
Co-authored-by: Eric Nemchik <eric@nemchik.com>
2024-03-04 19:33:01 -05:00
aptalca
32f72ac0b4 make it pretty, grep certbot-dns 2024-03-04 18:33:13 -05:00
aptalca
970fa75e87 run scripts direct 2024-03-04 18:23:04 -05:00
aptalca
137ad9f52e Run package installer as part of SWAG init to prevent init fail due to missing dns plugin 2024-03-04 18:10:49 -05:00
LinuxServer-CI
3145477f72 Bot Updating Package Versions 2024-03-04 22:52:37 +00:00
aptalca
58b9470c52 Merge pull request #458 from linuxserver/edgerepo
package moved to community repo
2024-03-04 17:47:44 -05:00
aptalca
68f5cf8d9e package moved to community repo 2024-03-04 17:11:41 -05:00
LinuxServer-CI
e8d452f4ce Bot Updating Package Versions 2024-02-24 03:25:25 +00:00
LinuxServer-CI
4abd6c9890 Bot Updating Templated Files 2024-02-24 03:21:49 +00:00
LinuxServer-CI
c335faabdc Bot Updating Templated Files 2024-02-24 03:18:57 +00:00
LinuxServer-CI
204dd90f9d Bot Updating Package Versions 2024-02-17 03:20:23 +00:00
LinuxServer-CI
92bfbc19cd Bot Updating Package Versions 2024-02-10 03:18:04 +00:00
LinuxServer-CI
cb3c74a6ee Bot Updating Package Versions 2024-02-08 21:18:13 +00:00
LinuxServer-CI
b7f40863fe Bot Updating Package Versions 2024-02-03 03:21:47 +00:00
LinuxServer-CI
ec6fca9418 Bot Updating Package Versions 2024-01-27 18:57:53 +00:00
Eric Nemchik
25a2832056 Merge pull request #441 from linuxserver/3.19
Rebase to Alpine 3.19 with php 8.3, add root periodic crontabs for logrotate
2024-01-27 12:52:12 -06:00
LinuxServer-CI
3eabd75388 Bot Updating Package Versions 2024-01-27 03:17:21 +00:00
Eric Nemchik
6ed17c1d52 Merge branch 'master' into 3.19 2024-01-23 20:27:06 -06:00
LinuxServer-CI
e568785908 Bot Updating Package Versions 2024-01-20 03:20:49 +00:00
LinuxServer-CI
bcee5182e6 Bot Updating Package Versions 2024-01-13 03:22:08 +00:00
LinuxServer-CI
514cf42606 Bot Updating Templated Files 2024-01-13 03:17:41 +00:00
LinuxServer-CI
270a0d57c9 Bot Updating Package Versions 2024-01-09 20:00:59 +00:00
LinuxServer-CI
6f51d8be26 Bot Updating Templated Files 2024-01-09 19:54:13 +00:00
LinuxServer-CI
d915d516cd Bot Updating Templated Files 2024-01-09 19:47:00 +00:00
Eric Nemchik
ffb03a03f5 Merge pull request #425 from Peglah/dns_glesys
Add GleSYS DNS plugin
2024-01-09 13:43:24 -06:00
Eric Nemchik
9693b5884f Merge branch 'master' into dns_glesys 2024-01-09 13:28:15 -06:00
LinuxServer-CI
87ca95c8c2 Bot Updating Package Versions 2024-01-06 03:21:45 +00:00
Peglah
1a376a6975 rebased 2024-01-01 09:49:44 +01:00
Peglah
8e74593f2c Rebase, Add GleSYS DNS plugin 2024-01-01 09:40:00 +01:00
LinuxServer-CI
00d1bce24d Bot Updating Package Versions 2024-01-01 09:39:14 +01:00
LinuxServer-CI
be853fcb4b Bot Updating Package Versions 2024-01-01 09:39:14 +01:00
LinuxServer-CI
2fb6c1f51f Bot Updating Package Versions 2024-01-01 09:39:14 +01:00
LinuxServer-CI
9339d287d2 Bot Updating Package Versions 2024-01-01 09:39:14 +01:00
LinuxServer-CI
6b62a27bf0 Bot Updating Templated Files 2024-01-01 09:39:14 +01:00
Eric Nemchik
c50ca83ef9 Deprecate certbot-dns-dynu
Signed-off-by: GitHub <noreply@github.com>
2024-01-01 09:39:10 +01:00
LinuxServer-CI
bd94a67024 Bot Updating Package Versions 2024-01-01 09:38:33 +01:00
LinuxServer-CI
11e060174b Bot Updating Package Versions 2024-01-01 09:38:33 +01:00
driz
5f8a531a93 Update nginx-deny.conf 2024-01-01 09:38:33 +01:00
LinuxServer-CI
d2f843c4d1 Bot Updating Package Versions 2024-01-01 09:38:33 +01:00
LinuxServer-CI
ad6bb30bfc Bot Updating Package Versions 2024-01-01 09:38:33 +01:00
LinuxServer-CI
11991aa0b3 Bot Updating Package Versions 2024-01-01 09:38:33 +01:00
LinuxServer-CI
c76e664965 Bot Updating Templated Files 2024-01-01 09:38:33 +01:00
Eric Nemchik
ccbd19fe62 Update readme-vars.yml 2024-01-01 09:38:29 +01:00
LinuxServer-CI
2573b79bad Bot Updating Package Versions 2024-01-01 09:37:47 +01:00
LinuxServer-CI
0e5ba91588 Bot Updating Templated Files 2024-01-01 09:37:47 +01:00
Eric Nemchik
4f92460b29 Run certbot as root to allow fix http validation
Fixes regression from https://github.com/linuxserver/docker-swag/pull/399

Signed-off-by: Eric Nemchik <eric@nemchik.com>
2024-01-01 09:37:39 +01:00
Eric Nemchik
ad1884e5b4 Fix index.php being downloaded on 404
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2024-01-01 09:36:59 +01:00
LinuxServer-CI
70bea0a816 Bot Updating Package Versions 2024-01-01 09:23:16 +01:00
Eric Nemchik
85e44eb399 fix chown for group
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2024-01-01 09:23:16 +01:00
Eric Nemchik
4d3f30b67c Move crontabs to etc
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2024-01-01 09:23:16 +01:00
Eric Nemchik
9da97969f8 Crontabs folder created in base
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2024-01-01 09:23:16 +01:00
Eric Nemchik
2cd84ad12b cron in base
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2024-01-01 09:23:16 +01:00
Eric Nemchik
757ef31216 set owner of certbot folders to abc
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2024-01-01 09:23:16 +01:00
Eric Nemchik
767aad2286 Fix perms
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2024-01-01 09:23:16 +01:00
Eric Nemchik
4cb18bc106 standard cron
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2024-01-01 09:23:16 +01:00
LinuxServer-CI
b1cf98d214 Bot Updating Package Versions 2024-01-01 09:23:16 +01:00
LinuxServer-CI
48dfde26c7 Bot Updating Templated Files 2024-01-01 09:23:16 +01:00
LinuxServer-CI
320404d358 Bot Updating Package Versions 2024-01-01 09:23:16 +01:00
aptalca
52ae487bea install mcrypt from community repo on alpine edge 2024-01-01 09:23:16 +01:00
LinuxServer-CI
65f62d14a6 Bot Updating Package Versions 2024-01-01 09:23:16 +01:00
LinuxServer-CI
accd20cc7a Bot Updating Package Versions 2023-12-30 03:18:23 +00:00
Eric Nemchik
24b3540da5 Fix php83-pecl-mcrypt
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-12-23 16:18:56 -06:00
Eric Nemchik
bc31b51afb Rebase to Alpine 3.19 with php 8.3, add root periodic crontabs for logrotate
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-12-23 16:12:03 -06:00
LinuxServer-CI
bf6ab14281 Bot Updating Package Versions 2023-12-23 03:17:49 +00:00
LinuxServer-CI
7c5d1d886c Bot Updating Package Versions 2023-12-16 03:18:17 +00:00
LinuxServer-CI
5b77a54620 Bot Updating Package Versions 2023-12-12 13:36:29 +00:00
LinuxServer-CI
3b1478667b Bot Updating Templated Files 2023-12-12 13:33:00 +00:00
Eric Nemchik
0ddf8a270b Merge pull request #439 from linuxserver/deprecate-dynu-plugin
Deprecate certbot-dns-dynu
2023-12-12 07:31:30 -06:00
Eric Nemchik
dabbaa3b14 Deprecate certbot-dns-dynu
Signed-off-by: GitHub <noreply@github.com>
2023-12-11 22:17:57 +00:00
LinuxServer-CI
bdd5e047ee Bot Updating Package Versions 2023-12-09 03:20:23 +00:00
LinuxServer-CI
78689b02e2 Bot Updating Package Versions 2023-12-07 13:54:35 +00:00
driz
6c1c4cd00a Update nginx-deny.conf 2023-12-07 08:50:27 -05:00
LinuxServer-CI
31cef5050f Bot Updating Package Versions 2023-12-06 01:09:14 +00:00
LinuxServer-CI
52e8f7223e Bot Updating Package Versions 2023-12-02 03:18:16 +00:00
LinuxServer-CI
1abab5cb6d Bot Updating Package Versions 2023-11-30 23:41:43 +00:00
LinuxServer-CI
0061faef15 Bot Updating Templated Files 2023-11-30 23:38:22 +00:00
Eric Nemchik
6e64bcbd7e Merge pull request #432 from linuxserver/php-404
Fix index.php being downloaded on 404
2023-11-30 17:36:52 -06:00
Eric Nemchik
b9dd1b7c5a Update readme-vars.yml 2023-11-30 17:33:07 -06:00
Eric Nemchik
e9bceab763 Merge branch 'master' into php-404 2023-11-30 17:29:03 -06:00
LinuxServer-CI
eba3c341fa Bot Updating Package Versions 2023-11-28 19:55:58 +00:00
LinuxServer-CI
5fc5825afd Bot Updating Templated Files 2023-11-28 19:50:37 +00:00
Eric Nemchik
de18e4ef24 Merge pull request #431 from linuxserver/root-certbot
Run certbot as root to allow fix http validation
2023-11-28 13:49:03 -06:00
Eric Nemchik
fbe212b67c Fix index.php being downloaded on 404
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-11-27 18:27:05 -06:00
LinuxServer-CI
2ca6807b64 Bot Updating Package Versions 2023-11-25 03:18:43 +00:00
Eric Nemchik
e3560414dc Run certbot as root to allow fix http validation
Fixes regression from https://github.com/linuxserver/docker-swag/pull/399

Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-11-23 07:50:53 -06:00
Eric Nemchik
2f4162578f Merge pull request #399 from linuxserver/standard-cron
standard cron
2023-11-18 19:11:17 -06:00
LinuxServer-CI
2697b74a8c Bot Updating Package Versions 2023-11-18 03:21:34 +00:00
LinuxServer-CI
bd685533a2 Bot Updating Templated Files 2023-11-18 03:17:25 +00:00
LinuxServer-CI
287b952aea Bot Updating Package Versions 2023-11-13 22:20:05 +00:00
aptalca
576b81ab91 Merge pull request #428 from linuxserver/mcrypt
install mcrypt from community repo on alpine edge
2023-11-13 17:16:22 -05:00
aptalca
8b0df1fcbb install mcrypt from community repo on alpine edge 2023-11-13 16:58:13 -05:00
LinuxServer-CI
efdfa45f37 Bot Updating Package Versions 2023-11-11 03:21:56 +00:00
Peglah
278b57fb47 Add GleSYS DNS plugin 2023-11-08 12:42:43 +01:00
Eric Nemchik
82e85d22c1 Merge branch 'master' into standard-cron 2023-11-04 18:37:38 -05:00
Eric Nemchik
8b49f2b0d4 fix chown for group
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-11-04 18:36:31 -05:00
LinuxServer-CI
10d0877547 Bot Updating Package Versions 2023-11-04 03:17:44 +00:00
Eric Nemchik
8fdb472564 Merge branch 'master' into standard-cron 2023-11-01 17:48:15 -05:00
LinuxServer-CI
f6d0e3089a Bot Updating Package Versions 2023-11-01 15:18:10 +00:00
LinuxServer-CI
5ceac2e2ec Bot Updating Package Versions 2023-10-28 03:17:26 +00:00
LinuxServer-CI
5b6498b1a9 Bot Updating Package Versions 2023-10-25 16:20:53 +00:00
LinuxServer-CI
118a76530e Bot Updating Package Versions 2023-10-24 00:07:06 +00:00
LinuxServer-CI
0499547b96 Bot Updating Package Versions 2023-10-21 03:17:27 +00:00
LinuxServer-CI
9cf01a0085 Bot Updating Package Versions 2023-10-20 01:05:07 +00:00
LinuxServer-CI
2b5a2785d6 Bot Updating Package Versions 2023-10-14 03:18:59 +00:00
LinuxServer-CI
202db184b3 Bot Updating Package Versions 2023-10-10 16:23:56 +00:00
LinuxServer-CI
3ed39caf43 Bot Updating Package Versions 2023-10-07 03:22:54 +00:00
LinuxServer-CI
9353e4e8a5 Bot Updating Templated Files 2023-10-07 03:19:04 +00:00
LinuxServer-CI
39e3159f39 Bot Updating Templated Files 2023-10-07 03:16:45 +00:00
Roxedus
9ba44dccee Merge pull request #415 from linuxserver/2.7-fix 2023-10-04 01:33:49 +02:00
Roxedus
49f6fb2b6e Update detection 2023-10-04 00:33:00 +02:00
LinuxServer-CI
693c24173b Bot Updating Package Versions 2023-10-03 20:17:30 +00:00
LinuxServer-CI
8a90cf85d8 Bot Updating Package Versions 2023-10-01 16:32:35 +00:00
LinuxServer-CI
fd958fe6b3 Bot Updating Templated Files 2023-10-01 16:29:08 +00:00
Eric Nemchik
eb8f12b5de Merge pull request #412 from Platzii/directadmin-fix
Fix "unrecognized arguments" issue in DirectAdmin DNS plugin
2023-10-01 11:27:34 -05:00
Simon Lepla
dae223ca0f Fix "unrecognized arguments" issue in DirectAdmin DNS plugin 2023-10-01 12:07:41 +02:00
LinuxServer-CI
14226ce700 Bot Updating Package Versions 2023-09-30 03:22:11 +00:00
LinuxServer-CI
b64bb62303 Bot Updating Package Versions 2023-09-23 03:18:35 +00:00
LinuxServer-CI
f478a200e8 Bot Updating Package Versions 2023-09-19 19:17:39 +00:00
LinuxServer-CI
40200982d1 Bot Updating Package Versions 2023-09-19 19:12:05 +00:00
Adam
3476f8b6f6 Merge pull request #406 from linuxserver/namecheap 2023-09-19 20:08:26 +01:00
LinuxServer-CI
3e9dc80ed4 Bot Updating Package Versions 2023-09-16 03:17:06 +00:00
LinuxServer-CI
4486d528d1 Bot Updating Package Versions 2023-09-09 03:19:54 +00:00
LinuxServer-CI
e0032ecfd4 Bot Updating Package Versions 2023-09-02 03:16:49 +00:00
Eric Nemchik
b1c1262a2c Add Namecheap DNS plugin
Signed-off-by: GitHub <noreply@github.com>
2023-08-28 14:38:34 +00:00
LinuxServer-CI
3b49643c78 Bot Updating Package Versions 2023-08-26 03:18:54 +00:00
Eric Nemchik
23728cba0b Move crontabs to etc
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-08-19 10:17:40 -05:00
Eric Nemchik
7e1db9c562 Crontabs folder created in base
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-08-19 08:42:48 -05:00
Eric Nemchik
919b8ac152 cron in base
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-08-18 23:38:31 -05:00
LinuxServer-CI
0f9d247ba4 Bot Updating Package Versions 2023-08-19 03:17:05 +00:00
Eric Nemchik
0b738d9ee0 set owner of certbot folders to abc
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-07-31 15:13:43 -05:00
Eric Nemchik
269e9cdd3f Fix perms
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-07-30 09:50:18 -05:00
Eric Nemchik
17387674b8 standard cron
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-07-30 01:17:57 -05:00
26 changed files with 691 additions and 610 deletions

View File

@@ -67,10 +67,10 @@ body:
- type: textarea - type: textarea
attributes: attributes:
description: | description: |
Provide a full docker log, output of "docker logs linuxserver.io" Provide a full docker log, output of "docker logs swag"
label: Container logs label: Container logs
placeholder: | placeholder: |
Output of `docker logs linuxserver.io` Output of `docker logs swag`
render: bash render: bash
validations: validations:
required: true required: true

View File

@@ -7,7 +7,7 @@ jobs:
external-trigger-master: external-trigger-master:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3.1.0 - uses: actions/checkout@v4.1.1
- name: External Trigger - name: External Trigger
if: github.ref == 'refs/heads/master' if: github.ref == 'refs/heads/master'

View File

@@ -9,7 +9,7 @@ jobs:
external-trigger-scheduler: external-trigger-scheduler:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3.1.0 - uses: actions/checkout@v4.1.1
with: with:
fetch-depth: '0' fetch-depth: '0'

View File

@@ -7,7 +7,7 @@ jobs:
package-trigger-master: package-trigger-master:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3.1.0 - uses: actions/checkout@v4.1.1
- name: Package Trigger - name: Package Trigger
if: github.ref == 'refs/heads/master' if: github.ref == 'refs/heads/master'

View File

@@ -9,7 +9,7 @@ jobs:
package-trigger-scheduler: package-trigger-scheduler:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3.1.0 - uses: actions/checkout@v4.1.1
with: with:
fetch-depth: '0' fetch-depth: '0'

View File

@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.18 FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.19
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@@ -45,39 +45,39 @@ RUN \
nginx-mod-stream \ nginx-mod-stream \
nginx-mod-stream-geoip2 \ nginx-mod-stream-geoip2 \
nginx-vim \ nginx-vim \
php82-bcmath \ php83-bcmath \
php82-bz2 \ php83-bz2 \
php82-dom \ php83-dom \
php82-exif \ php83-exif \
php82-ftp \ php83-ftp \
php82-gd \ php83-gd \
php82-gmp \ php83-gmp \
php82-imap \ php83-imap \
php82-intl \ php83-intl \
php82-ldap \ php83-ldap \
php82-mysqli \ php83-mysqli \
php82-mysqlnd \ php83-mysqlnd \
php82-opcache \ php83-opcache \
php82-pdo_mysql \ php83-pdo_mysql \
php82-pdo_odbc \ php83-pdo_odbc \
php82-pdo_pgsql \ php83-pdo_pgsql \
php82-pdo_sqlite \ php83-pdo_sqlite \
php82-pear \ php83-pear \
php82-pecl-apcu \ php83-pecl-apcu \
php82-pecl-memcached \ php83-pecl-memcached \
php82-pecl-redis \ php83-pecl-redis \
php82-pgsql \ php83-pgsql \
php82-posix \ php83-posix \
php82-soap \ php83-soap \
php82-sockets \ php83-sockets \
php82-sodium \ php83-sodium \
php82-sqlite3 \ php83-sqlite3 \
php82-tokenizer \ php83-tokenizer \
php82-xmlreader \ php83-xmlreader \
php82-xsl \ php83-xsl \
whois && \ whois && \
apk add --no-cache --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing \ apk add --no-cache --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community \
php82-pecl-mcrypt && \ php83-pecl-mcrypt && \
echo "**** install certbot plugins ****" && \ echo "**** install certbot plugins ****" && \
if [ -z ${CERTBOT_VERSION+x} ]; then \ if [ -z ${CERTBOT_VERSION+x} ]; then \
CERTBOT_VERSION=$(curl -sL https://pypi.python.org/pypi/certbot/json |jq -r '. | .info.version'); \ CERTBOT_VERSION=$(curl -sL https://pypi.python.org/pypi/certbot/json |jq -r '. | .info.version'); \
@@ -86,7 +86,7 @@ RUN \
pip install -U --no-cache-dir \ pip install -U --no-cache-dir \
pip \ pip \
wheel && \ wheel && \
pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.18/ \ pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.19/ \
certbot==${CERTBOT_VERSION} \ certbot==${CERTBOT_VERSION} \
certbot-dns-acmedns \ certbot-dns-acmedns \
certbot-dns-aliyun \ certbot-dns-aliyun \
@@ -104,9 +104,9 @@ RUN \
certbot-dns-domeneshop \ certbot-dns-domeneshop \
certbot-dns-dreamhost \ certbot-dns-dreamhost \
certbot-dns-duckdns \ certbot-dns-duckdns \
certbot-dns-dynu \
certbot-dns-freedns \ certbot-dns-freedns \
certbot-dns-gehirn \ certbot-dns-gehirn \
certbot-dns-glesys \
certbot-dns-godaddy \ certbot-dns-godaddy \
certbot-dns-google \ certbot-dns-google \
certbot-dns-google-domains \ certbot-dns-google-domains \
@@ -118,6 +118,7 @@ RUN \
certbot-dns-linode \ certbot-dns-linode \
certbot-dns-loopia \ certbot-dns-loopia \
certbot-dns-luadns \ certbot-dns-luadns \
certbot-dns-namecheap \
certbot-dns-netcup \ certbot-dns-netcup \
certbot-dns-njalla \ certbot-dns-njalla \
certbot-dns-nsone \ certbot-dns-nsone \

View File

@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.18 FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.19
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@@ -45,39 +45,39 @@ RUN \
nginx-mod-stream \ nginx-mod-stream \
nginx-mod-stream-geoip2 \ nginx-mod-stream-geoip2 \
nginx-vim \ nginx-vim \
php82-bcmath \ php83-bcmath \
php82-bz2 \ php83-bz2 \
php82-dom \ php83-dom \
php82-exif \ php83-exif \
php82-ftp \ php83-ftp \
php82-gd \ php83-gd \
php82-gmp \ php83-gmp \
php82-imap \ php83-imap \
php82-intl \ php83-intl \
php82-ldap \ php83-ldap \
php82-mysqli \ php83-mysqli \
php82-mysqlnd \ php83-mysqlnd \
php82-opcache \ php83-opcache \
php82-pdo_mysql \ php83-pdo_mysql \
php82-pdo_odbc \ php83-pdo_odbc \
php82-pdo_pgsql \ php83-pdo_pgsql \
php82-pdo_sqlite \ php83-pdo_sqlite \
php82-pear \ php83-pear \
php82-pecl-apcu \ php83-pecl-apcu \
php82-pecl-memcached \ php83-pecl-memcached \
php82-pecl-redis \ php83-pecl-redis \
php82-pgsql \ php83-pgsql \
php82-posix \ php83-posix \
php82-soap \ php83-soap \
php82-sockets \ php83-sockets \
php82-sodium \ php83-sodium \
php82-sqlite3 \ php83-sqlite3 \
php82-tokenizer \ php83-tokenizer \
php82-xmlreader \ php83-xmlreader \
php82-xsl \ php83-xsl \
whois && \ whois && \
apk add --no-cache --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing \ apk add --no-cache --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community \
php82-pecl-mcrypt && \ php83-pecl-mcrypt && \
echo "**** install certbot plugins ****" && \ echo "**** install certbot plugins ****" && \
if [ -z ${CERTBOT_VERSION+x} ]; then \ if [ -z ${CERTBOT_VERSION+x} ]; then \
CERTBOT_VERSION=$(curl -sL https://pypi.python.org/pypi/certbot/json |jq -r '. | .info.version'); \ CERTBOT_VERSION=$(curl -sL https://pypi.python.org/pypi/certbot/json |jq -r '. | .info.version'); \
@@ -86,7 +86,7 @@ RUN \
pip install -U --no-cache-dir \ pip install -U --no-cache-dir \
pip \ pip \
wheel && \ wheel && \
pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.18/ \ pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.19/ \
certbot==${CERTBOT_VERSION} \ certbot==${CERTBOT_VERSION} \
certbot-dns-acmedns \ certbot-dns-acmedns \
certbot-dns-aliyun \ certbot-dns-aliyun \
@@ -104,9 +104,9 @@ RUN \
certbot-dns-domeneshop \ certbot-dns-domeneshop \
certbot-dns-dreamhost \ certbot-dns-dreamhost \
certbot-dns-duckdns \ certbot-dns-duckdns \
certbot-dns-dynu \
certbot-dns-freedns \ certbot-dns-freedns \
certbot-dns-gehirn \ certbot-dns-gehirn \
certbot-dns-glesys \
certbot-dns-godaddy \ certbot-dns-godaddy \
certbot-dns-google \ certbot-dns-google \
certbot-dns-google-domains \ certbot-dns-google-domains \
@@ -118,6 +118,7 @@ RUN \
certbot-dns-linode \ certbot-dns-linode \
certbot-dns-loopia \ certbot-dns-loopia \
certbot-dns-luadns \ certbot-dns-luadns \
certbot-dns-namecheap \
certbot-dns-netcup \ certbot-dns-netcup \
certbot-dns-njalla \ certbot-dns-njalla \
certbot-dns-nsone \ certbot-dns-nsone \

179
Jenkinsfile vendored
View File

@@ -16,7 +16,7 @@ pipeline {
GITHUB_TOKEN=credentials('498b4638-2d02-4ce5-832d-8a57d01d97ab') GITHUB_TOKEN=credentials('498b4638-2d02-4ce5-832d-8a57d01d97ab')
GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0') GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0')
GITLAB_NAMESPACE=credentials('gitlab-namespace-id') GITLAB_NAMESPACE=credentials('gitlab-namespace-id')
SCARF_TOKEN=credentials('scarf_api_key') DOCKERHUB_TOKEN=credentials('docker-hub-ci-pat')
EXT_PIP = 'certbot' EXT_PIP = 'certbot'
BUILD_VERSION_ARG = 'CERTBOT_VERSION' BUILD_VERSION_ARG = 'CERTBOT_VERSION'
LS_USER = 'linuxserver' LS_USER = 'linuxserver'
@@ -60,11 +60,16 @@ pipeline {
env.COMMIT_SHA = sh( env.COMMIT_SHA = sh(
script: '''git rev-parse HEAD''', script: '''git rev-parse HEAD''',
returnStdout: true).trim() returnStdout: true).trim()
env.GH_DEFAULT_BRANCH = sh(
script: '''git remote show origin | grep "HEAD branch:" | sed 's|.*HEAD branch: ||' ''',
returnStdout: true).trim()
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/commit/' + env.GIT_COMMIT env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/commit/' + env.GIT_COMMIT
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/' env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/'
env.PULL_REQUEST = env.CHANGE_ID env.PULL_REQUEST = env.CHANGE_ID
env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/call_issue_pr_tracker.yml ./.github/workflows/call_issues_cron.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml ./.github/workflows/package_trigger.yml ./root/donate.txt' env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/call_issue_pr_tracker.yml ./.github/workflows/call_issues_cron.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml ./.github/workflows/package_trigger.yml ./root/donate.txt'
} }
sh '''#! /bin/bash
echo "The default github branch detected as ${GH_DEFAULT_BRANCH}" '''
script{ script{
env.LS_RELEASE_NUMBER = sh( env.LS_RELEASE_NUMBER = sh(
script: '''echo ${LS_RELEASE} |sed 's/^.*-ls//g' ''', script: '''echo ${LS_RELEASE} |sed 's/^.*-ls//g' ''',
@@ -121,7 +126,7 @@ pipeline {
steps{ steps{
script{ script{
env.EXT_RELEASE_CLEAN = sh( env.EXT_RELEASE_CLEAN = sh(
script: '''echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''', script: '''echo ${EXT_RELEASE} | sed 's/[~,%@+;:/ ]//g' ''',
returnStdout: true).trim() returnStdout: true).trim()
def semver = env.EXT_RELEASE_CLEAN =~ /(\d+)\.(\d+)\.(\d+)/ def semver = env.EXT_RELEASE_CLEAN =~ /(\d+)\.(\d+)\.(\d+)/
@@ -139,7 +144,7 @@ pipeline {
} }
if (env.SEMVER != null) { if (env.SEMVER != null) {
if (BRANCH_NAME != "master" && BRANCH_NAME != "main") { if (BRANCH_NAME != "${env.GH_DEFAULT_BRANCH}") {
env.SEMVER = "${env.SEMVER}-${BRANCH_NAME}" env.SEMVER = "${env.SEMVER}-${BRANCH_NAME}"
} }
println("SEMVER: ${env.SEMVER}") println("SEMVER: ${env.SEMVER}")
@@ -240,9 +245,11 @@ pipeline {
-v ${WORKSPACE}:/mnt \ -v ${WORKSPACE}:/mnt \
-e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \ -e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \
-e AWS_SECRET_ACCESS_KEY=\"${S3_SECRET}\" \ -e AWS_SECRET_ACCESS_KEY=\"${S3_SECRET}\" \
ghcr.io/linuxserver/baseimage-alpine:3.17 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\ ghcr.io/linuxserver/baseimage-alpine:3.19 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\
apk add --no-cache py3-pip && \ apk add --no-cache python3 && \
pip install s3cmd && \ python3 -m venv /lsiopy && \
pip install --no-cache-dir -U pip && \
pip install --no-cache-dir s3cmd && \
s3cmd put --no-preserve --acl-public -m text/xml /mnt/shellcheck-result.xml s3://ci-tests.linuxserver.io/${IMAGE}/${META_TAG}/shellcheck-result.xml" || :''' s3cmd put --no-preserve --acl-public -m text/xml /mnt/shellcheck-result.xml s3://ci-tests.linuxserver.io/${IMAGE}/${META_TAG}/shellcheck-result.xml" || :'''
} }
} }
@@ -271,7 +278,8 @@ pipeline {
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile ${TEMPDIR}/repo/${LS_REPO}/ cp ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile ${TEMPDIR}/repo/${LS_REPO}/
git add Jenkinsfile git add Jenkinsfile
git commit -m 'Bot Updating Templated Files' git commit -m 'Bot Updating Templated Files'
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER} echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "Updating Jenkinsfile" echo "Updating Jenkinsfile"
rm -Rf ${TEMPDIR} rm -Rf ${TEMPDIR}
@@ -295,7 +303,8 @@ pipeline {
git rm "${i}" git rm "${i}"
done done
git commit -m 'Bot Updating Templated Files' git commit -m 'Bot Updating Templated Files'
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER} echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "Deleting old and deprecated templates" echo "Deleting old and deprecated templates"
rm -Rf ${TEMPDIR} rm -Rf ${TEMPDIR}
@@ -324,19 +333,26 @@ pipeline {
fi fi
git add readme-vars.yml ${TEMPLATED_FILES} git add readme-vars.yml ${TEMPLATED_FILES}
git commit -m 'Bot Updating Templated Files' git commit -m 'Bot Updating Templated Files'
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER} echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
else else
echo "false" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER} echo "false" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
fi fi
mkdir -p ${TEMPDIR}/gitbook mkdir -p ${TEMPDIR}/docs
git clone https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/gitbook/docker-documentation git clone https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/docs/docker-documentation
if [[ ("${BRANCH_NAME}" == "master") || ("${BRANCH_NAME}" == "main") ]] && [[ (! -f ${TEMPDIR}/gitbook/docker-documentation/images/docker-${CONTAINER_NAME}.md) || ("$(md5sum ${TEMPDIR}/gitbook/docker-documentation/images/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')") ]]; then if [[ "${BRANCH_NAME}" == "${GH_DEFAULT_BRANCH}" ]] && [[ (! -f ${TEMPDIR}/docs/docker-documentation/docs/images/docker-${CONTAINER_NAME}.md) || ("$(md5sum ${TEMPDIR}/docs/docker-documentation/docs/images/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')") ]]; then
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md ${TEMPDIR}/gitbook/docker-documentation/images/ cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md ${TEMPDIR}/docs/docker-documentation/docs/images/
cd ${TEMPDIR}/gitbook/docker-documentation/ cd ${TEMPDIR}/docs/docker-documentation
git add images/docker-${CONTAINER_NAME}.md GH_DOCS_DEFAULT_BRANCH=$(git remote show origin | grep "HEAD branch:" | sed 's|.*HEAD branch: ||')
git add docs/images/docker-${CONTAINER_NAME}.md
git commit -m 'Bot Updating Documentation' git commit -m 'Bot Updating Documentation'
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git --all git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git ${GH_DOCS_DEFAULT_BRANCH} --rebase
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git ${GH_DOCS_DEFAULT_BRANCH} || \
(MAXWAIT="10" && echo "Push to docs failed, trying again in ${MAXWAIT} seconds" && \
sleep $((RANDOM % MAXWAIT)) && \
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git ${GH_DOCS_DEFAULT_BRANCH} --rebase && \
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git ${GH_DOCS_DEFAULT_BRANCH})
fi fi
mkdir -p ${TEMPDIR}/unraid mkdir -p ${TEMPDIR}/unraid
git clone https://github.com/linuxserver/docker-templates.git ${TEMPDIR}/unraid/docker-templates git clone https://github.com/linuxserver/docker-templates.git ${TEMPDIR}/unraid/docker-templates
@@ -346,8 +362,9 @@ pipeline {
elif [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-icon.png ]]; then elif [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-icon.png ]]; then
sed -i "s|master/linuxserver.io/img/linuxserver-ls-logo.png|master/linuxserver.io/img/${CONTAINER_NAME}-icon.png|" ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml sed -i "s|master/linuxserver.io/img/linuxserver-ls-logo.png|master/linuxserver.io/img/${CONTAINER_NAME}-icon.png|" ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml
fi fi
if [[ ("${BRANCH_NAME}" == "master") || ("${BRANCH_NAME}" == "main") ]] && [[ (! -f ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml) || ("$(md5sum ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml | awk '{ print $1 }')") ]]; then if [[ "${BRANCH_NAME}" == "${GH_DEFAULT_BRANCH}" ]] && [[ (! -f ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml) || ("$(md5sum ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml | awk '{ print $1 }')") ]]; then
cd ${TEMPDIR}/unraid/templates/ cd ${TEMPDIR}/unraid/templates/
GH_TEMPLATES_DEFAULT_BRANCH=$(git remote show origin | grep "HEAD branch:" | sed 's|.*HEAD branch: ||')
if grep -wq "${CONTAINER_NAME}" ${TEMPDIR}/unraid/templates/unraid/ignore.list; then if grep -wq "${CONTAINER_NAME}" ${TEMPDIR}/unraid/templates/unraid/ignore.list; then
echo "Image is on the ignore list, marking Unraid template as deprecated" echo "Image is on the ignore list, marking Unraid template as deprecated"
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml ${TEMPDIR}/unraid/templates/unraid/ cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml ${TEMPDIR}/unraid/templates/unraid/
@@ -359,7 +376,31 @@ pipeline {
git add unraid/${CONTAINER_NAME}.xml git add unraid/${CONTAINER_NAME}.xml
git commit -m 'Bot Updating Unraid Template' git commit -m 'Bot Updating Unraid Template'
fi fi
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git --all git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git ${GH_TEMPLATES_DEFAULT_BRANCH} --rebase
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git ${GH_TEMPLATES_DEFAULT_BRANCH} || \
(MAXWAIT="10" && echo "Push to unraid templates failed, trying again in ${MAXWAIT} seconds" && \
sleep $((RANDOM % MAXWAIT)) && \
git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git ${GH_TEMPLATES_DEFAULT_BRANCH} --rebase && \
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git ${GH_TEMPLATES_DEFAULT_BRANCH})
fi
# Stage 4 - Sync Readme to Docker Hub
if [[ "${BRANCH_NAME}" == "${GH_DEFAULT_BRANCH}" ]]; then
if [[ $(cat ${TEMPDIR}/docker-${CONTAINER_NAME}/README.md | wc -m) > 25000 ]]; then
echo "Readme is longer than 25,000 characters. Syncing the lite version to Docker Hub"
DH_README_SYNC_PATH="${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/README.lite"
else
echo "Syncing readme to Docker Hub"
DH_README_SYNC_PATH="${TEMPDIR}/docker-${CONTAINER_NAME}/README.md"
fi
DH_TOKEN=$(curl -d '{"username":"linuxserverci", "password":"'${DOCKERHUB_TOKEN}'"}' -H "Content-Type: application/json" -X POST https://hub.docker.com/v2/users/login | jq -r '.token')
curl -s \
-H "Authorization: JWT ${DH_TOKEN}" \
-H "Content-Type: application/json" \
-X PATCH \
-d "{\\"full_description\\":$(jq -Rsa . ${DH_README_SYNC_PATH})}" \
https://hub.docker.com/v2/repositories/${DOCKERHUB_IMAGE} || :
else
echo "Not the default Github branch. Skipping readme sync to Docker Hub."
fi fi
rm -Rf ${TEMPDIR}''' rm -Rf ${TEMPDIR}'''
script{ script{
@@ -425,35 +466,6 @@ pipeline {
"visibility":"public"}' ''' "visibility":"public"}' '''
} }
} }
/* #######################
Scarf.sh package registry
####################### */
// Add package to Scarf.sh and set permissions
stage("Scarf.sh package registry"){
when {
branch "master"
environment name: 'EXIT_STATUS', value: ''
}
steps{
sh '''#! /bin/bash
PACKAGE_UUID=$(curl -X GET -H "Authorization: Bearer ${SCARF_TOKEN}" https://scarf.sh/api/v1/organizations/linuxserver-ci/packages | jq -r '.[] | select(.name=="linuxserver/swag") | .uuid' || :)
if [ -z "${PACKAGE_UUID}" ]; then
echo "Adding package to Scarf.sh"
curl -sX POST https://scarf.sh/api/v1/organizations/linuxserver-ci/packages \
-H "Authorization: Bearer ${SCARF_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"name":"linuxserver/swag",\
"shortDescription":"example description",\
"libraryType":"docker",\
"website":"https://github.com/linuxserver/docker-swag",\
"backendUrl":"https://ghcr.io/linuxserver/swag",\
"publicUrl":"https://lscr.io/linuxserver/swag"}' || :
else
echo "Package already exists on Scarf.sh"
fi
'''
}
}
/* ############### /* ###############
Build Container Build Container
############### */ ############### */
@@ -588,7 +600,8 @@ pipeline {
wait wait
git add package_versions.txt git add package_versions.txt
git commit -m 'Bot Updating Package Versions' git commit -m 'Bot Updating Package Versions'
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master
echo "true" > /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER} echo "true" > /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER}
echo "Package tag updated, stopping build process" echo "Package tag updated, stopping build process"
else else
@@ -691,12 +704,6 @@ pipeline {
} }
steps { steps {
withCredentials([ withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
],
[ [
$class: 'UsernamePasswordMultiBinding', $class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot', credentialsId: 'Quay.io-Robot',
@@ -707,7 +714,7 @@ pipeline {
retry(5) { retry(5) {
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
@@ -738,12 +745,6 @@ pipeline {
} }
steps { steps {
withCredentials([ withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
],
[ [
$class: 'UsernamePasswordMultiBinding', $class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot', credentialsId: 'Quay.io-Robot',
@@ -754,7 +755,7 @@ pipeline {
retry(5) { retry(5) {
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
@@ -849,37 +850,39 @@ pipeline {
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done''' curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done'''
} }
} }
// Use helper container to sync the current README on master to the dockerhub endpoint // Add protection to the release branch
stage('Sync-README') { stage('Github-Release-Branch-Protection') {
when { when {
branch "master"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
steps { steps {
withCredentials([ echo "Setting up protection for release branch master"
[ sh '''#! /bin/bash
$class: 'UsernamePasswordMultiBinding', curl -H "Authorization: token ${GITHUB_TOKEN}" -X PUT https://api.github.com/repos/${LS_USER}/${LS_REPO}/branches/master/protection \
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207', -d $(jq -c . << EOF
usernameVariable: 'DOCKERUSER', {
passwordVariable: 'DOCKERPASS' "required_status_checks": null,
] "enforce_admins": false,
]) { "required_pull_request_reviews": {
sh '''#! /bin/bash "dismiss_stale_reviews": false,
set -e "require_code_owner_reviews": false,
TEMPDIR=$(mktemp -d) "require_last_push_approval": false,
docker pull ghcr.io/linuxserver/jenkins-builder:latest "required_approving_review_count": 1
docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH="${BRANCH_NAME}" -v ${TEMPDIR}:/ansible/jenkins ghcr.io/linuxserver/jenkins-builder:latest },
docker pull ghcr.io/linuxserver/readme-sync "restrictions": null,
docker run --rm=true \ "required_linear_history": false,
-e DOCKERHUB_USERNAME=$DOCKERUSER \ "allow_force_pushes": false,
-e DOCKERHUB_PASSWORD=$DOCKERPASS \ "allow_deletions": false,
-e GIT_REPOSITORY=${LS_USER}/${LS_REPO} \ "block_creations": false,
-e DOCKER_REPOSITORY=${IMAGE} \ "required_conversation_resolution": true,
-e GIT_BRANCH=master \ "lock_branch": false,
-v ${TEMPDIR}/docker-${CONTAINER_NAME}:/mnt \ "allow_fork_syncing": false,
ghcr.io/linuxserver/readme-sync bash -c 'node sync' "required_signatures": false
rm -Rf ${TEMPDIR} ''' }
} EOF
) '''
} }
} }
// If this is a Pull request send the CI link as a comment on it // If this is a Pull request send the CI link as a comment on it

169
README.md
View File

@@ -1,6 +1,5 @@
<!-- DO NOT EDIT THIS FILE MANUALLY --> <!-- DO NOT EDIT THIS FILE MANUALLY -->
<!-- Please read the https://github.com/linuxserver/docker-swag/blob/master/.github/CONTRIBUTING.md --> <!-- Please read https://github.com/linuxserver/docker-swag/blob/master/.github/CONTRIBUTING.md -->
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io) [![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io)
[![Blog](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Blog)](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!") [![Blog](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Blog)](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!")
@@ -46,7 +45,7 @@ SWAG - Secure Web Application Gateway (formerly known as letsencrypt, no relatio
## Supported Architectures ## Supported Architectures
We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/). We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://distribution.github.io/distribution/spec/manifest-v2-2/#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/).
Simply pulling `lscr.io/linuxserver/swag:latest` should retrieve the correct image for your arch, but you can also pull specific arch images via tags. Simply pulling `lscr.io/linuxserver/swag:latest` should retrieve the correct image for your arch, but you can also pull specific arch images via tags.
@@ -75,6 +74,21 @@ The architectures supported by this image are:
* After setup, navigate to `https://yourdomain.url` to access the default homepage (http access through port 80 is disabled by default, you can enable it by editing the default site config at `/config/nginx/site-confs/default.conf`). * After setup, navigate to `https://yourdomain.url` to access the default homepage (http access through port 80 is disabled by default, you can enable it by editing the default site config at `/config/nginx/site-confs/default.conf`).
* Certs are checked nightly and if expiration is within 30 days, renewal is attempted. If your cert is about to expire in less than 30 days, check the logs under `/config/log/letsencrypt` to see why the renewals have been failing. It is recommended to input your e-mail in docker parameters so you receive expiration notices from Let's Encrypt in those circumstances. * Certs are checked nightly and if expiration is within 30 days, renewal is attempted. If your cert is about to expire in less than 30 days, check the logs under `/config/log/letsencrypt` to see why the renewals have been failing. It is recommended to input your e-mail in docker parameters so you receive expiration notices from Let's Encrypt in those circumstances.
### Certbot Plugins
SWAG includes many Certbot plugins out of the box, but not all plugins can be includes.
If you need a plugin that is not included, the quickest way to have the plugin available is to use our [Universal Package Install Docker Mod](https://github.com/linuxserver/docker-mods/tree/universal-package-install).
Set the following environment variables on your container:
```yaml
DOCKER_MODS=linuxserver/mods:universal-package-install
INSTALL_PIP_PACKAGES=certbot-dns-<plugin>
```
Set the required credentials (usually found in the plugin documentation) in `/config/dns-conf/<plugin>.ini`.
It is recommended to attempt obtaining a certificate with `STAGING=true` first to make sure the plugin is working as expected.
### Security and password protection ### Security and password protection
* The container detects changes to url and subdomains, revokes existing certs and generates new ones during start. * The container detects changes to url and subdomains, revokes existing certs and generates new ones during start.
@@ -138,13 +152,12 @@ Please follow the instructions [on this blog post](https://www.linuxserver.io/bl
## Usage ## Usage
Here are some example snippets to help you get started creating a container. To help you get started creating a container from this image you can either use docker-compose or the docker cli.
### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose)) ### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose))
```yaml ```yaml
--- ---
version: "2.1"
services: services:
swag: swag:
image: lscr.io/linuxserver/swag:latest image: lscr.io/linuxserver/swag:latest
@@ -166,7 +179,7 @@ services:
- EXTRA_DOMAINS= #optional - EXTRA_DOMAINS= #optional
- STAGING=false #optional - STAGING=false #optional
volumes: volumes:
- /path/to/appdata/config:/config - /path/to/swag/config:/config
ports: ports:
- 443:443 - 443:443
- 80:80 #optional - 80:80 #optional
@@ -194,15 +207,14 @@ docker run -d \
-e STAGING=false `#optional` \ -e STAGING=false `#optional` \
-p 443:443 \ -p 443:443 \
-p 80:80 `#optional` \ -p 80:80 `#optional` \
-v /path/to/appdata/config:/config \ -v /path/to/swag/config:/config \
--restart unless-stopped \ --restart unless-stopped \
lscr.io/linuxserver/swag:latest lscr.io/linuxserver/swag:latest
``` ```
## Parameters ## Parameters
Container images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `<external>:<internal>` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container. Containers are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `<external>:<internal>` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container.
| Parameter | Function | | Parameter | Function |
| :----: | --- | | :----: | --- |
@@ -215,13 +227,13 @@ Container images are configured using parameters passed at runtime (such as thos
| `-e VALIDATION=http` | Certbot validation method to use, options are `http` or `dns` (`dns` method also requires `DNSPLUGIN` variable set). | | `-e VALIDATION=http` | Certbot validation method to use, options are `http` or `dns` (`dns` method also requires `DNSPLUGIN` variable set). |
| `-e SUBDOMAINS=www,` | Subdomains you'd like the cert to cover (comma separated, no spaces) ie. `www,ftp,cloud`. For a wildcard cert, set this *exactly* to `wildcard` (wildcard cert is available via `dns` validation only) | | `-e SUBDOMAINS=www,` | Subdomains you'd like the cert to cover (comma separated, no spaces) ie. `www,ftp,cloud`. For a wildcard cert, set this *exactly* to `wildcard` (wildcard cert is available via `dns` validation only) |
| `-e CERTPROVIDER=` | Optionally define the cert provider. Set to `zerossl` for ZeroSSL certs (requires existing [ZeroSSL account](https://app.zerossl.com/signup) and the e-mail address entered in `EMAIL` env var). Otherwise defaults to Let's Encrypt. | | `-e CERTPROVIDER=` | Optionally define the cert provider. Set to `zerossl` for ZeroSSL certs (requires existing [ZeroSSL account](https://app.zerossl.com/signup) and the e-mail address entered in `EMAIL` env var). Otherwise defaults to Let's Encrypt. |
| `-e DNSPLUGIN=cloudflare` | Required if `VALIDATION` is set to `dns`. Options are `acmedns`, `aliyun`, `azure`, `bunny`, `cloudflare`, `cpanel`, `desec`, `digitalocean`, `directadmin`, `dnsimple`, `dnsmadeeasy`, `dnspod`, `do`, `domeneshop`, `dreamhost`, `duckdns`, `dynu`, `freedns`, `gandi`, `gehirn`, `godaddy`, `google`, `google-domains`, `he`, `hetzner`, `infomaniak`, `inwx`, `ionos`, `linode`, `loopia`, `luadns`, `netcup`, `njalla`, `nsone`, `ovh`, `porkbun`, `rfc2136`, `route53`, `sakuracloud`, `standalone`, `transip`, and `vultr`. Also need to enter the credentials into the corresponding ini (or json for some plugins) file under `/config/dns-conf`. | | `-e DNSPLUGIN=cloudflare` | Required if `VALIDATION` is set to `dns`. Options are `acmedns`, `aliyun`, `azure`, `bunny`, `cloudflare`, `cpanel`, `desec`, `digitalocean`, `directadmin`, `dnsimple`, `dnsmadeeasy`, `dnspod`, `do`, `domeneshop`, `dreamhost`, `duckdns`, `freedns`, `gandi`, `gehirn`, `glesys`, `godaddy`, `google`, `google-domains`, `he`, `hetzner`, `infomaniak`, `inwx`, `ionos`, `linode`, `loopia`, `luadns`, `namecheap`, `netcup`, `njalla`, `nsone`, `ovh`, `porkbun`, `rfc2136`, `route53`, `sakuracloud`, `standalone`, `transip`, and `vultr`. Also need to enter the credentials into the corresponding ini (or json for some plugins) file under `/config/dns-conf`. |
| `-e PROPAGATION=` | Optionally override (in seconds) the default propagation time for the dns plugins. | | `-e PROPAGATION=` | Optionally override (in seconds) the default propagation time for the dns plugins. |
| `-e EMAIL=` | Optional e-mail address used for cert expiration notifications (Required for ZeroSSL). | | `-e EMAIL=` | Optional e-mail address used for cert expiration notifications (Required for ZeroSSL). |
| `-e ONLY_SUBDOMAINS=false` | If you wish to get certs only for certain subdomains, but not the main domain (main domain may be hosted on another machine and cannot be validated), set this to `true` | | `-e ONLY_SUBDOMAINS=false` | If you wish to get certs only for certain subdomains, but not the main domain (main domain may be hosted on another machine and cannot be validated), set this to `true` |
| `-e EXTRA_DOMAINS=` | Additional fully qualified domain names (comma separated, no spaces) ie. `extradomain.com,subdomain.anotherdomain.org,*.anotherdomain.org` | | `-e EXTRA_DOMAINS=` | Additional fully qualified domain names (comma separated, no spaces) ie. `extradomain.com,subdomain.anotherdomain.org,*.anotherdomain.org` |
| `-e STAGING=false` | Set to `true` to retrieve certs in staging mode. Rate limits will be much higher, but the resulting cert will not pass the browser's security test. Only to be used for testing purposes. | | `-e STAGING=false` | Set to `true` to retrieve certs in staging mode. Rate limits will be much higher, but the resulting cert will not pass the browser's security test. Only to be used for testing purposes. |
| `-v /config` | All the config files including the webroot reside here. | | `-v /config` | Persistent config files |
### Portainer notice ### Portainer notice
@@ -234,10 +246,10 @@ You can set any environment variable from a file by using a special prepend `FIL
As an example: As an example:
```bash ```bash
-e FILE__PASSWORD=/run/secrets/mysecretpassword -e FILE__MYVAR=/run/secrets/mysecretvariable
``` ```
Will set the environment variable `PASSWORD` based on the contents of the `/run/secrets/mysecretpassword` file. Will set the environment variable `MYVAR` based on the contents of the `/run/secrets/mysecretvariable` file.
## Umask for running applications ## Umask for running applications
@@ -246,15 +258,20 @@ Keep in mind umask is not chmod it subtracts from permissions based on it's valu
## User / Group Identifiers ## User / Group Identifiers
When using volumes (`-v` flags) permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user `PUID` and group `PGID`. When using volumes (`-v` flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user `PUID` and group `PGID`.
Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic. Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.
In this instance `PUID=1000` and `PGID=1000`, to find yours use `id user` as below: In this instance `PUID=1000` and `PGID=1000`, to find yours use `id your_user` as below:
```bash ```bash
$ id username id your_user
uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup) ```
Example output:
```text
uid=1000(your_user) gid=1000(your_user) groups=1000(your_user)
``` ```
## Docker Mods ## Docker Mods
@@ -265,53 +282,100 @@ We publish various [Docker Mods](https://github.com/linuxserver/docker-mods) to
## Support Info ## Support Info
* Shell access whilst the container is running: `docker exec -it swag /bin/bash` * Shell access whilst the container is running:
* To monitor the logs of the container in realtime: `docker logs -f swag`
* container version number ```bash
* `docker inspect -f '{{ index .Config.Labels "build_version" }}' swag` docker exec -it swag /bin/bash
* image version number ```
* `docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/swag:latest`
* To monitor the logs of the container in realtime:
```bash
docker logs -f swag
```
* Container version number:
```bash
docker inspect -f '{{ index .Config.Labels "build_version" }}' swag
```
* Image version number:
```bash
docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/swag:latest
```
## Updating Info ## Updating Info
Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (ie. nextcloud, plex), we do not recommend or support updating apps inside the container. Please consult the [Application Setup](#application-setup) section above to see if it is recommended for the image. Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (noted in the relevant readme.md), we do not recommend or support updating apps inside the container. Please consult the [Application Setup](#application-setup) section above to see if it is recommended for the image.
Below are the instructions for updating containers: Below are the instructions for updating containers:
### Via Docker Compose ### Via Docker Compose
* Update all images: `docker-compose pull` * Update images:
* or update a single image: `docker-compose pull swag` * All images:
* Let compose update all containers as necessary: `docker-compose up -d`
* or update a single container: `docker-compose up -d swag` ```bash
* You can also remove the old dangling images: `docker image prune` docker-compose pull
```
* Single image:
```bash
docker-compose pull swag
```
* Update containers:
* All containers:
```bash
docker-compose up -d
```
* Single container:
```bash
docker-compose up -d swag
```
* You can also remove the old dangling images:
```bash
docker image prune
```
### Via Docker Run ### Via Docker Run
* Update the image: `docker pull lscr.io/linuxserver/swag:latest` * Update the image:
* Stop the running container: `docker stop swag`
* Delete the container: `docker rm swag` ```bash
docker pull lscr.io/linuxserver/swag:latest
```
* Stop the running container:
```bash
docker stop swag
```
* Delete the container:
```bash
docker rm swag
```
* Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your `/config` folder and settings will be preserved) * Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your `/config` folder and settings will be preserved)
* You can also remove the old dangling images: `docker image prune` * You can also remove the old dangling images:
### Via Watchtower auto-updater (only use if you don't remember the original parameters) ```bash
docker image prune
* Pull the latest image at its tag and replace it with the same env variables in one run: ```
```bash
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--run-once swag
```
* You can also remove the old dangling images: `docker image prune`
**Note:** We do not endorse the use of Watchtower as a solution to automated updates of existing Docker containers. In fact we generally discourage automated updates. However, this is a useful tool for one-time manual updates of containers where you have forgotten the original parameters. In the long term, we highly recommend using [Docker Compose](https://docs.linuxserver.io/general/docker-compose).
### Image Update Notifications - Diun (Docker Image Update Notifier) ### Image Update Notifications - Diun (Docker Image Update Notifier)
* We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported. **tip**: We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
## Building locally ## Building locally
@@ -336,6 +400,13 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
## Versions ## Versions
* **23.01.24:** - Rebase to Alpine 3.19 with php 8.3, add root periodic crontabs for logrotate.
* **01.01.24:** - Add GleSYS DNS plugin.
* **11.12.23:** - Deprecate certbot-dns-dynu to resolve dependency conflicts with other plugins.
* **30.11.23:** - [Existing users should update:](https://github.com/linuxserver/docker-swag/blob/master/README.md#updating-configs) site-confs/default.conf - Fix index.php being downloaded on 404.
* **23.11.23:** - Run certbot as root to allow fix http validation.
* **01.10.23:** - Fix "unrecognized arguments" issue in DirectAdmin DNS plugin.
* **28.08.23:** - Add Namecheap DNS plugin.
* **12.08.23:** - Add FreeDNS plugin. Detect certbot DNS authenticators using CLI. * **12.08.23:** - Add FreeDNS plugin. Detect certbot DNS authenticators using CLI.
* **07.08.23:** - Add Bunny DNS Configuration. * **07.08.23:** - Add Bunny DNS Configuration.
* **27.07.23:** - Added support for dreamhost validation. * **27.07.23:** - Added support for dreamhost validation.

View File

@@ -1,343 +1,346 @@
NAME VERSION TYPE NAME VERSION TYPE
ConfigArgParse 1.7 python ConfigArgParse 1.7 python
PyJWT 2.8.0 python PyJWT 2.8.0 python
PyYAML 6.0.1 python PyNamecheap 0.0.3 python
Simple Launcher Executable 1.1.0.14 dotnet PyYAML 6.0.1 python
acme 2.6.0 python Simple Launcher 1.1.0.14 dotnet (+5 duplicates)
alpine-baselayout 3.4.3-r1 apk acme 2.9.0 python
alpine-baselayout-data 3.4.3-r1 apk alpine-baselayout 3.4.3-r2 apk
alpine-keys 2.4-r1 apk alpine-baselayout-data 3.4.3-r2 apk
alpine-release 3.18.2-r0 apk alpine-keys 2.4-r1 apk
aom-libs 3.6.1-r0 apk alpine-release 3.19.1-r0 apk
apache2-utils 2.4.57-r3 apk aom-libs 3.7.1-r0 apk
apk-tools 2.14.0-r2 apk apache2-utils 2.4.58-r1 apk
apr 1.7.4-r0 apk apk-tools 2.14.0-r5 apk
apr-util 1.6.3-r1 apk apr 1.7.4-r0 apk
argon2-libs 20190702-r4 apk apr-util 1.6.3-r1 apk
attrs 23.1.0 python argon2-libs 20190702-r5 apk
azure-common 1.1.28 python attrs 23.2.0 python
azure-core 1.29.1 python azure-common 1.1.28 python
azure-identity 1.14.0 python azure-core 1.30.1 python
azure-mgmt-core 1.4.0 python azure-identity 1.15.0 python
azure-mgmt-dns 8.1.0 python azure-mgmt-core 1.4.0 python
bash 5.2.15-r5 apk azure-mgmt-dns 8.1.0 python
beautifulsoup4 4.12.2 python bash 5.2.21-r0 apk
boto3 1.28.25 python beautifulsoup4 4.12.3 python
botocore 1.31.25 python boto3 1.34.55 python
brotli-libs 1.0.9-r14 apk botocore 1.34.55 python
bs4 0.0.1 python brotli-libs 1.1.0-r1 apk
busybox 1.36.1 binary bs4 0.0.2 python
busybox 1.36.1-r2 apk busybox 1.36.1-r15 apk
busybox-binsh 1.36.1-r2 apk busybox-binsh 1.36.1-r15 apk
c-client 2007f-r15 apk c-ares 1.24.0-r1 apk
ca-certificates 20230506-r0 apk c-client 2007f-r15 apk
ca-certificates-bundle 20230506-r0 apk ca-certificates 20230506-r0 apk
cachetools 5.3.1 python ca-certificates-bundle 20230506-r0 apk
certbot 2.6.0 python cachetools 5.3.3 python
certbot-dns-acmedns 0.1.0 python certbot 2.9.0 python
certbot-dns-aliyun 2.0.0 python certbot-dns-acmedns 0.1.0 python
certbot-dns-azure 2.3.0 python certbot-dns-aliyun 2.0.0 python
certbot-dns-bunny 0.0.9 python certbot-dns-azure 2.4.0 python
certbot-dns-cloudflare 2.6.0 python certbot-dns-bunny 0.0.9 python
certbot-dns-cpanel 0.4.0 python certbot-dns-cloudflare 2.9.0 python
certbot-dns-desec 1.2.1 python certbot-dns-cpanel 0.4.0 python
certbot-dns-digitalocean 2.6.0 python certbot-dns-desec 1.2.1 python
certbot-dns-directadmin 1.0.3 python certbot-dns-digitalocean 2.9.0 python
certbot-dns-dnsimple 2.6.0 python certbot-dns-directadmin 1.0.4 python
certbot-dns-dnsmadeeasy 2.6.0 python certbot-dns-dnsimple 2.9.0 python
certbot-dns-dnspod 0.1.0 python certbot-dns-dnsmadeeasy 2.9.0 python
certbot-dns-do 0.31.0 python certbot-dns-dnspod 0.1.0 python
certbot-dns-domeneshop 0.2.9 python certbot-dns-do 0.31.0 python
certbot-dns-dreamhost 1.0 python certbot-dns-domeneshop 0.2.9 python
certbot-dns-duckdns 1.3 python certbot-dns-dreamhost 1.0 python
certbot-dns-dynu 0.0.4 python certbot-dns-duckdns 1.3 python
certbot-dns-freedns 0.1.0 python certbot-dns-freedns 0.1.0 python
certbot-dns-gehirn 2.6.0 python certbot-dns-gehirn 2.9.0 python
certbot-dns-godaddy 2.6.0 python certbot-dns-glesys 2.1.0 python
certbot-dns-google 2.6.0 python certbot-dns-godaddy 2.8.0 python
certbot-dns-google-domains 0.1.11 python certbot-dns-google 2.9.0 python
certbot-dns-he 1.0.0 python certbot-dns-google-domains 0.1.11 python
certbot-dns-hetzner 2.0.0 python certbot-dns-he 1.0.0 python
certbot-dns-infomaniak 0.2.1 python certbot-dns-hetzner 2.0.0 python
certbot-dns-inwx 2.2.0 python certbot-dns-infomaniak 0.2.2 python
certbot-dns-ionos 2022.11.24 python certbot-dns-inwx 2.2.0 python
certbot-dns-linode 2.6.0 python certbot-dns-ionos 2024.1.8 python
certbot-dns-loopia 1.0.1 python certbot-dns-linode 2.9.0 python
certbot-dns-luadns 2.6.0 python certbot-dns-loopia 1.0.1 python
certbot-dns-netcup 1.3.0 python certbot-dns-luadns 2.9.0 python
certbot-dns-njalla 1.0.0 python certbot-dns-namecheap 1.0.0 python
certbot-dns-nsone 2.6.0 python certbot-dns-netcup 1.4.3 python
certbot-dns-ovh 2.6.0 python certbot-dns-njalla 1.0.0 python
certbot-dns-porkbun 0.8 python certbot-dns-nsone 2.9.0 python
certbot-dns-rfc2136 2.6.0 python certbot-dns-ovh 2.9.0 python
certbot-dns-route53 2.6.0 python certbot-dns-porkbun 0.8 python
certbot-dns-sakuracloud 2.6.0 python certbot-dns-rfc2136 2.9.0 python
certbot-dns-standalone 1.1 python certbot-dns-route53 2.9.0 python
certbot-dns-transip 0.5.2 python certbot-dns-sakuracloud 2.9.0 python
certbot-dns-vultr 1.1.0 python certbot-dns-standalone 1.1 python
certbot-plugin-gandi 1.4.3 python certbot-dns-transip 0.5.2 python
certifi 2023.7.22 python certbot-dns-vultr 1.1.0 python
cffi 1.15.1 python certbot-plugin-gandi 1.5.0 python
charset-normalizer 3.2.0 python certifi 2024.2.2 python
cloudflare 2.11.6 python cffi 1.16.0 python
configobj 5.0.8 python charset-normalizer 3.3.2 python
coreutils 9.3-r1 apk cloudflare 2.19.2 python
cryptography 41.0.3 python composer 2.7.1 binary
curl 8.2.1-r0 apk configobj 5.0.8 python
dataclasses-json 0.5.14 python coreutils 9.4-r2 apk
distro 1.8.0 python coreutils-env 9.4-r2 apk
dns-lexicon 3.11.7 python coreutils-fmt 9.4-r2 apk
dnslib 0.9.23 python coreutils-sha512sum 9.4-r2 apk
dnspython 2.4.2 python cryptography 42.0.5 python
domeneshop 0.4.3 python curl 8.5.0-r0 apk
fail2ban 1.0.2 python dataclasses-json 0.5.14 python
fail2ban 1.0.2-r2 apk distro 1.9.0 python
fail2ban-pyc 1.0.2-r2 apk dns-lexicon 3.17.0 python
filelock 3.12.2 python dnslib 0.9.24 python
fontconfig 2.14.2-r3 apk dnspython 2.6.1 python
freetype 2.13.0-r5 apk domeneshop 0.4.3 python
future 0.18.3 python fail2ban 1.0.2 python
gdbm 1.23-r1 apk fail2ban 1.0.2-r3 apk
git 2.40.1-r0 apk fail2ban-pyc 1.0.2-r3 apk
git-perl 2.40.1-r0 apk filelock 3.13.1 python
gmp 6.2.1-r3 apk fontconfig 2.14.2-r4 apk
gnupg 2.4.3-r0 apk freetype 2.13.2-r0 apk
gnupg-dirmngr 2.4.3-r0 apk future 1.0.0 python
gnupg-gpgconf 2.4.3-r0 apk gdbm 1.23-r1 apk
gnupg-keyboxd 2.4.3-r0 apk git 2.43.0-r0 apk
gnupg-utils 2.4.3-r0 apk git-perl 2.43.0-r0 apk
gnupg-wks-client 2.4.3-r0 apk gmp 6.3.0-r0 apk
gnutls 3.8.0-r2 apk gnupg 2.4.4-r0 apk
google-api-core 2.11.1 python gnupg-dirmngr 2.4.4-r0 apk
google-api-python-client 2.96.0 python gnupg-gpgconf 2.4.4-r0 apk
google-auth 2.22.0 python gnupg-keyboxd 2.4.4-r0 apk
google-auth-httplib2 0.1.0 python gnupg-utils 2.4.4-r0 apk
googleapis-common-protos 1.60.0 python gnupg-wks-client 2.4.4-r0 apk
gpg 2.4.3-r0 apk gnutls 3.8.3-r0 apk
gpg-agent 2.4.3-r0 apk google-api-core 2.17.1 python
gpg-wks-server 2.4.3-r0 apk google-api-python-client 2.120.0 python
gpgsm 2.4.3-r0 apk google-auth 2.28.1 python
gpgv 2.4.3-r0 apk google-auth-httplib2 0.2.0 python
httplib2 0.22.0 python googleapis-common-protos 1.62.0 python
icu-data-en 73.2-r2 apk gpg 2.4.4-r0 apk
icu-libs 73.2-r2 apk gpg-agent 2.4.4-r0 apk
idna 3.4 python gpg-wks-server 2.4.4-r0 apk
importlib-metadata 6.8.0 python gpgsm 2.4.4-r0 apk
ip6tables 1.8.9-r2 apk gpgv 2.4.4-r0 apk
iptables 1.8.9-r2 apk hiredis 1.2.0-r0 apk
isodate 0.6.1 python httplib2 0.22.0 python
jmespath 1.0.1 python icu-data-en 74.1-r0 apk
josepy 1.13.0 python icu-libs 74.1-r0 apk
jq 1.6-r3 apk idna 3.6 python
jsonlines 3.1.0 python iptables 1.8.10-r3 apk
jsonpickle 3.0.1 python isodate 0.6.1 python
libacl 2.3.1-r3 apk jmespath 1.0.1 python
libassuan 2.5.6-r0 apk josepy 1.14.0 python
libattr 2.5.1-r4 apk jq 1.7.1-r0 apk
libavif 0.11.1-r2 apk jsonlines 4.0.0 python
libbsd 0.11.7-r1 apk jsonpickle 3.0.3 python
libbz2 1.0.8-r5 apk libacl 2.3.1-r4 apk
libc-utils 0.7.2-r5 apk libassuan 2.5.6-r1 apk
libcrypto3 3.1.2-r0 apk libattr 2.5.1-r5 apk
libcurl 8.2.1-r0 apk libavif 1.0.3-r0 apk
libdav1d 1.2.1-r0 apk libbsd 0.11.7-r3 apk
libedit 20221030.3.1-r1 apk libbz2 1.0.8-r6 apk
libevent 2.1.12-r6 apk libc-utils 0.7.2-r5 apk
libexpat 2.5.0-r1 apk libcrypto3 3.1.4-r5 apk
libffi 3.4.4-r2 apk libcurl 8.5.0-r0 apk
libgcc 12.2.1_git20220924-r10 apk libdav1d 1.3.0-r1 apk
libgcrypt 1.10.2-r1 apk libedit 20230828.3.1-r3 apk
libgd 2.3.3-r7 apk libevent 2.1.12-r7 apk
libgpg-error 1.47-r1 apk libexpat 2.6.0-r0 apk
libice 1.1.1-r2 apk libffi 3.4.4-r3 apk
libidn2 2.3.4-r1 apk libgcc 13.2.1_git20231014-r0 apk
libintl 0.21.1-r7 apk libgcrypt 1.10.3-r0 apk
libjpeg-turbo 2.1.5.1-r3 apk libgd 2.3.3-r8 apk
libksba 1.6.4-r0 apk libgpg-error 1.47-r2 apk
libldap 2.6.5-r0 apk libice 1.1.1-r5 apk
libmaxminddb-libs 1.7.1-r1 apk libidn2 2.3.4-r4 apk
libmcrypt 2.5.8-r10 apk libintl 0.22.3-r0 apk
libmd 1.0.4-r2 apk libjpeg-turbo 3.0.1-r0 apk
libmemcached-libs 1.1.4-r1 apk libksba 1.6.5-r0 apk
libmnl 1.0.5-r1 apk libldap 2.6.6-r1 apk
libncursesw 6.4_p20230506-r0 apk libmaxminddb-libs 1.7.1-r2 apk
libnftnl 1.2.5-r1 apk libmcrypt 2.5.8-r10 apk
libpanelw 6.4_p20230506-r0 apk libmd 1.1.0-r0 apk
libpng 1.6.39-r3 apk libmemcached-libs 1.1.4-r1 apk
libpq 15.3-r0 apk libmnl 1.0.5-r2 apk
libproc2 4.0.3-r1 apk libncursesw 6.4_p20231125-r0 apk
libsasl 2.1.28-r4 apk libnftnl 1.2.6-r0 apk
libseccomp 2.5.4-r2 apk libpanelw 6.4_p20231125-r0 apk
libsm 1.2.4-r1 apk libpng 1.6.40-r0 apk
libsodium 1.0.18-r3 apk libpq 16.2-r0 apk
libssl3 3.1.2-r0 apk libproc2 4.0.4-r0 apk
libstdc++ 12.2.1_git20220924-r10 apk libsasl 2.1.28-r5 apk
libtasn1 4.19.0-r1 apk libseccomp 2.5.5-r0 apk
libunistring 1.1-r1 apk libsharpyuv 1.3.2-r0 apk
libuuid 2.38.1-r8 apk libsm 1.2.4-r3 apk
libwebp 1.3.1-r0 apk libsodium 1.0.19-r0 apk
libx11 1.8.4-r4 apk libssl3 3.1.4-r5 apk
libxau 1.0.11-r2 apk libstdc++ 13.2.1_git20231014-r0 apk
libxcb 1.15-r1 apk libtasn1 4.19.0-r2 apk
libxdmcp 1.1.4-r2 apk libunistring 1.1-r2 apk
libxext 1.3.5-r2 apk libuuid 2.39.3-r0 apk
libxml2 2.11.4-r0 apk libwebp 1.3.2-r0 apk
libxpm 3.5.16-r1 apk libx11 1.8.7-r0 apk
libxslt 1.1.38-r0 apk libxau 1.0.11-r3 apk
libxt 1.3.0-r2 apk libxcb 1.16-r0 apk
libzip 1.9.2-r2 apk libxdmcp 1.1.4-r3 apk
linux-pam 1.5.2-r10 apk libxext 1.3.5-r3 apk
logrotate 3.21.0-r1 apk libxml2 2.11.7-r0 apk
loopialib 0.2.0 python libxpm 3.5.17-r0 apk
lxml 4.9.3 python libxslt 1.1.39-r0 apk
lz4-libs 1.9.4-r4 apk libxt 1.3.0-r4 apk
marshmallow 3.20.1 python libxtables 1.8.10-r3 apk
memcached 1.6.21 binary libzip 1.10.1-r0 apk
memcached 1.6.21-r0 apk linux-pam 1.5.3-r7 apk
mock 5.1.0 python logrotate 3.21.0-r1 apk
mpdecimal 2.5.1-r2 apk loopialib 0.2.0 python
msal 1.23.0 python lxml 5.1.0 python
msal-extensions 1.0.0 python lz4-libs 1.9.4-r5 apk
musl 1.2.4-r1 apk marshmallow 3.21.1 python
musl-utils 1.2.4-r1 apk memcached 1.6.22-r0 apk
mypy-extensions 1.0.0 python mock 5.1.0 python
nano 7.2-r1 apk mpdecimal 2.5.1-r2 apk
ncurses-terminfo-base 6.4_p20230506-r0 apk msal 1.27.0 python
netcat-openbsd 1.219-r1 apk msal-extensions 1.1.0 python
nettle 3.8.1-r2 apk musl 1.2.4_git20230717-r4 apk
nghttp2-libs 1.55.1-r0 apk musl-utils 1.2.4_git20230717-r4 apk
nginx 1.24.0-r6 apk mypy-extensions 1.0.0 python
nginx-mod-devel-kit 1.24.0-r6 apk nano 7.2-r1 apk
nginx-mod-http-brotli 1.24.0-r6 apk ncurses-terminfo-base 6.4_p20231125-r0 apk
nginx-mod-http-dav-ext 1.24.0-r6 apk netcat-openbsd 1.226-r0 apk
nginx-mod-http-echo 1.24.0-r6 apk nettle 3.9.1-r0 apk
nginx-mod-http-fancyindex 1.24.0-r6 apk nghttp2-libs 1.58.0-r0 apk
nginx-mod-http-geoip2 1.24.0-r6 apk nginx 1.24.0-r15 apk
nginx-mod-http-headers-more 1.24.0-r6 apk nginx-mod-devel-kit 1.24.0-r15 apk
nginx-mod-http-image-filter 1.24.0-r6 apk nginx-mod-http-brotli 1.24.0-r15 apk
nginx-mod-http-perl 1.24.0-r6 apk nginx-mod-http-dav-ext 1.24.0-r15 apk
nginx-mod-http-redis2 1.24.0-r6 apk nginx-mod-http-echo 1.24.0-r15 apk
nginx-mod-http-set-misc 1.24.0-r6 apk nginx-mod-http-fancyindex 1.24.0-r15 apk
nginx-mod-http-upload-progress 1.24.0-r6 apk nginx-mod-http-geoip2 1.24.0-r15 apk
nginx-mod-http-xslt-filter 1.24.0-r6 apk nginx-mod-http-headers-more 1.24.0-r15 apk
nginx-mod-mail 1.24.0-r6 apk nginx-mod-http-image-filter 1.24.0-r15 apk
nginx-mod-rtmp 1.24.0-r6 apk nginx-mod-http-perl 1.24.0-r15 apk
nginx-mod-stream 1.24.0-r6 apk nginx-mod-http-redis2 1.24.0-r15 apk
nginx-mod-stream-geoip2 1.24.0-r6 apk nginx-mod-http-set-misc 1.24.0-r15 apk
nginx-vim 1.24.0-r6 apk nginx-mod-http-upload-progress 1.24.0-r15 apk
npth 1.6-r4 apk nginx-mod-http-xslt-filter 1.24.0-r15 apk
oniguruma 6.9.8-r1 apk nginx-mod-mail 1.24.0-r15 apk
openssl 3.1.2-r0 apk nginx-mod-rtmp 1.24.0-r15 apk
p11-kit 0.24.1-r2 apk nginx-mod-stream 1.24.0-r15 apk
packaging 23.1 python nginx-mod-stream-geoip2 1.24.0-r15 apk
parsedatetime 2.6 python nginx-vim 1.24.0-r15 apk
pcre 8.45-r3 apk npth 1.6-r4 apk
pcre2 10.42-r1 apk oniguruma 6.9.9-r0 apk
perl 5.36.1-r2 apk openssl 3.1.4-r5 apk
perl-error 0.17029-r1 apk p11-kit 0.25.3-r0 apk
perl-git 2.40.1-r0 apk packaging 23.2 python
php-cli 8.2.8 binary parsedatetime 2.6 python
php-fpm 8.2.8 binary pcre 8.45-r3 apk
php82 8.2.8-r0 apk pcre2 10.42-r2 apk
php82-bcmath 8.2.8-r0 apk perl 5.38.2-r0 apk
php82-bz2 8.2.8-r0 apk perl-error 0.17029-r2 apk
php82-common 8.2.8-r0 apk perl-git 2.43.0-r0 apk
php82-ctype 8.2.8-r0 apk php83 8.3.3-r0 apk
php82-curl 8.2.8-r0 apk php83-bcmath 8.3.3-r0 apk
php82-dom 8.2.8-r0 apk php83-bz2 8.3.3-r0 apk
php82-exif 8.2.8-r0 apk php83-common 8.3.3-r0 apk
php82-fileinfo 8.2.8-r0 apk php83-ctype 8.3.3-r0 apk
php82-fpm 8.2.8-r0 apk php83-curl 8.3.3-r0 apk
php82-ftp 8.2.8-r0 apk php83-dom 8.3.3-r0 apk
php82-gd 8.2.8-r0 apk php83-exif 8.3.3-r0 apk
php82-gmp 8.2.8-r0 apk php83-fileinfo 8.3.3-r0 apk
php82-iconv 8.2.8-r0 apk php83-fpm 8.3.3-r0 apk
php82-imap 8.2.8-r0 apk php83-ftp 8.3.3-r0 apk
php82-intl 8.2.8-r0 apk php83-gd 8.3.3-r0 apk
php82-ldap 8.2.8-r0 apk php83-gmp 8.3.3-r0 apk
php82-mbstring 8.2.8-r0 apk php83-iconv 8.3.3-r0 apk
php82-mysqli 8.2.8-r0 apk php83-imap 8.3.3-r0 apk
php82-mysqlnd 8.2.8-r0 apk php83-intl 8.3.3-r0 apk
php82-opcache 8.2.8-r0 apk php83-ldap 8.3.3-r0 apk
php82-openssl 8.2.8-r0 apk php83-mbstring 8.3.3-r0 apk
php82-pdo 8.2.8-r0 apk php83-mysqli 8.3.3-r0 apk
php82-pdo_mysql 8.2.8-r0 apk php83-mysqlnd 8.3.3-r0 apk
php82-pdo_odbc 8.2.8-r0 apk php83-opcache 8.3.3-r0 apk
php82-pdo_pgsql 8.2.8-r0 apk php83-openssl 8.3.3-r0 apk
php82-pdo_sqlite 8.2.8-r0 apk php83-pdo 8.3.3-r0 apk
php82-pear 8.2.8-r0 apk php83-pdo_mysql 8.3.3-r0 apk
php82-pecl-apcu 5.1.22-r0 apk php83-pdo_odbc 8.3.3-r0 apk
php82-pecl-igbinary 3.2.14-r0 apk php83-pdo_pgsql 8.3.3-r0 apk
php82-pecl-mcrypt 1.0.6-r0 apk php83-pdo_sqlite 8.3.3-r0 apk
php82-pecl-memcached 3.2.0-r1 apk php83-pear 8.3.3-r0 apk
php82-pecl-msgpack 2.2.0-r0 apk php83-pecl-apcu 5.1.23-r0 apk
php82-pecl-redis 5.3.7-r2 apk php83-pecl-igbinary 3.2.15-r0 apk
php82-pgsql 8.2.8-r0 apk php83-pecl-mcrypt 1.0.7-r0 apk
php82-phar 8.2.8-r0 apk php83-pecl-memcached 3.2.0-r0 apk
php82-posix 8.2.8-r0 apk php83-pecl-msgpack 2.2.0-r1 apk
php82-session 8.2.8-r0 apk php83-pecl-redis 6.0.2-r0 apk
php82-simplexml 8.2.8-r0 apk php83-pgsql 8.3.3-r0 apk
php82-soap 8.2.8-r0 apk php83-phar 8.3.3-r0 apk
php82-sockets 8.2.8-r0 apk php83-posix 8.3.3-r0 apk
php82-sodium 8.2.8-r0 apk php83-session 8.3.3-r0 apk
php82-sqlite3 8.2.8-r0 apk php83-simplexml 8.3.3-r0 apk
php82-tokenizer 8.2.8-r0 apk php83-soap 8.3.3-r0 apk
php82-xml 8.2.8-r0 apk php83-sockets 8.3.3-r0 apk
php82-xmlreader 8.2.8-r0 apk php83-sodium 8.3.3-r0 apk
php82-xmlwriter 8.2.8-r0 apk php83-sqlite3 8.3.3-r0 apk
php82-xsl 8.2.8-r0 apk php83-tokenizer 8.3.3-r0 apk
php82-zip 8.2.8-r0 apk php83-xml 8.3.3-r0 apk
pinentry 1.2.1-r1 apk php83-xmlreader 8.3.3-r0 apk
pip 23.2.1 python php83-xmlwriter 8.3.3-r0 apk
pkb-client 1.2 python php83-xsl 8.3.3-r0 apk
popt 1.19-r2 apk php83-zip 8.3.3-r0 apk
portalocker 2.7.0 python pinentry 1.2.1-r1 apk
procps-ng 4.0.3-r1 apk pip 24.0 python
protobuf 4.24.0 python pkb-client 1.2 python
publicsuffixlist 0.9.4 python popt 1.19-r3 apk
pyOpenSSL 23.2.0 python portalocker 2.8.2 python
pyRFC3339 1.1 python procps-ng 4.0.4-r0 apk
pyacmedns 0.4 python protobuf 4.25.3 python
pyasn1 0.5.0 python publicsuffixlist 0.9.4 python
pyasn1-modules 0.3.0 python pyOpenSSL 24.0.0 python
pyc 0.1-r0 apk pyRFC3339 1.1 python
pycparser 2.21 python pyacmedns 0.4 python
pyparsing 3.1.1 python pyasn1 0.5.1 python
python 3.11.4 binary pyasn1-modules 0.3.0 python
python-dateutil 2.8.2 python pyc 3.11.8-r0 apk
python-digitalocean 1.17.0 python pycparser 2.21 python
python-transip 0.6.0 python pyotp 2.9.0 python
python3 3.11.4-r0 apk pyparsing 3.1.1 python
python3-pyc 3.11.4-r0 apk python-dateutil 2.9.0.post0 python
python3-pycache-pyc0 3.11.4-r0 apk python-digitalocean 1.17.0 python
pytz 2023.3 python python-transip 0.6.0 python
readline 8.2.1-r1 apk python3 3.11.8-r0 apk
requests 2.31.0 python python3-pyc 3.11.8-r0 apk
requests-file 1.5.1 python python3-pycache-pyc0 3.11.8-r0 apk
requests-mock 1.11.0 python pytz 2024.1 python
rsa 4.9 python readline 8.2.1-r2 apk
s3transfer 0.6.1 python requests 2.31.0 python
scanelf 1.3.7-r1 apk requests-file 2.0.0 python
setuptools 65.5.0 python requests-mock 1.11.0 python
shadow 4.13-r4 apk rsa 4.9 python
six 1.16.0 python s3transfer 0.10.0 python
skalibs 2.13.1.1-r1 apk scanelf 1.3.7-r2 apk
soupsieve 2.4.1 python setuptools 65.5.0 python
sqlite-libs 3.41.2-r2 apk shadow 4.14.2-r0 apk
ssl_client 1.36.1-r2 apk six 1.16.0 python
tiff 4.5.1-r0 apk skalibs 2.14.0.1-r0 apk
tldextract 3.4.4 python soupsieve 2.5 python
typing-inspect 0.9.0 python sqlite-libs 3.44.2-r0 apk
typing_extensions 4.7.1 python ssl_client 1.36.1-r15 apk
tzdata 2023c-r1 apk tiff 4.6.0-r0 apk
unixodbc 2.3.11-r2 apk tldextract 5.1.1 python
uritemplate 4.1.1 python typing-inspect 0.9.0 python
urllib3 1.26.16 python typing_extensions 4.10.0 python
utmps-libs 0.1.2.1-r1 apk tzdata 2024a-r0 apk
wheel 0.41.1 python unixodbc 2.3.12-r0 apk
whois 5.5.17-r0 apk uritemplate 4.1.1 python
xz-libs 5.4.3-r0 apk urllib3 2.0.7 python
zipp 3.16.2 python utmps-libs 0.1.2.2-r0 apk
zlib 1.2.13-r1 apk wheel 0.42.0 python
zope.interface 6.0 python whois 5.5.20-r0 apk
zstd-libs 1.5.5-r4 apk xz-libs 5.4.5-r0 apk
zlib 1.3.1-r0 apk
zope.interface 6.2 python
zstd-libs 1.5.5-r8 apk

View File

@@ -34,7 +34,7 @@ param_env_vars:
- { env_var: "VALIDATION", env_value: "http", desc: "Certbot validation method to use, options are `http` or `dns` (`dns` method also requires `DNSPLUGIN` variable set)." } - { env_var: "VALIDATION", env_value: "http", desc: "Certbot validation method to use, options are `http` or `dns` (`dns` method also requires `DNSPLUGIN` variable set)." }
param_usage_include_vols: true param_usage_include_vols: true
param_volumes: param_volumes:
- { vol_path: "/config", vol_host_path: "/path/to/appdata/config", desc: "All the config files including the webroot reside here." } - { vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/config", desc: "Persistent config files" }
param_usage_include_ports: true param_usage_include_ports: true
param_ports: param_ports:
- { external_port: "443", internal_port: "443", port_desc: "Https port" } - { external_port: "443", internal_port: "443", port_desc: "Https port" }
@@ -50,7 +50,7 @@ opt_param_usage_include_env: true
opt_param_env_vars: opt_param_env_vars:
- { env_var: "SUBDOMAINS", env_value: "www,", desc: "Subdomains you'd like the cert to cover (comma separated, no spaces) ie. `www,ftp,cloud`. For a wildcard cert, set this *exactly* to `wildcard` (wildcard cert is available via `dns` validation only)" } - { env_var: "SUBDOMAINS", env_value: "www,", desc: "Subdomains you'd like the cert to cover (comma separated, no spaces) ie. `www,ftp,cloud`. For a wildcard cert, set this *exactly* to `wildcard` (wildcard cert is available via `dns` validation only)" }
- { env_var: "CERTPROVIDER", env_value: "", desc: "Optionally define the cert provider. Set to `zerossl` for ZeroSSL certs (requires existing [ZeroSSL account](https://app.zerossl.com/signup) and the e-mail address entered in `EMAIL` env var). Otherwise defaults to Let's Encrypt." } - { env_var: "CERTPROVIDER", env_value: "", desc: "Optionally define the cert provider. Set to `zerossl` for ZeroSSL certs (requires existing [ZeroSSL account](https://app.zerossl.com/signup) and the e-mail address entered in `EMAIL` env var). Otherwise defaults to Let's Encrypt." }
- { env_var: "DNSPLUGIN", env_value: "cloudflare", desc: "Required if `VALIDATION` is set to `dns`. Options are `acmedns`, `aliyun`, `azure`, `bunny`, `cloudflare`, `cpanel`, `desec`, `digitalocean`, `directadmin`, `dnsimple`, `dnsmadeeasy`, `dnspod`, `do`, `domeneshop`, `dreamhost`, `duckdns`, `dynu`, `freedns`, `gandi`, `gehirn`, `godaddy`, `google`, `google-domains`, `he`, `hetzner`, `infomaniak`, `inwx`, `ionos`, `linode`, `loopia`, `luadns`, `netcup`, `njalla`, `nsone`, `ovh`, `porkbun`, `rfc2136`, `route53`, `sakuracloud`, `standalone`, `transip`, and `vultr`. Also need to enter the credentials into the corresponding ini (or json for some plugins) file under `/config/dns-conf`." } - { env_var: "DNSPLUGIN", env_value: "cloudflare", desc: "Required if `VALIDATION` is set to `dns`. Options are `acmedns`, `aliyun`, `azure`, `bunny`, `cloudflare`, `cpanel`, `desec`, `digitalocean`, `directadmin`, `dnsimple`, `dnsmadeeasy`, `dnspod`, `do`, `domeneshop`, `dreamhost`, `duckdns`, `freedns`, `gandi`, `gehirn`, `glesys`, `godaddy`, `google`, `google-domains`, `he`, `hetzner`, `infomaniak`, `inwx`, `ionos`, `linode`, `loopia`, `luadns`, `namecheap`, `netcup`, `njalla`, `nsone`, `ovh`, `porkbun`, `rfc2136`, `route53`, `sakuracloud`, `standalone`, `transip`, and `vultr`. Also need to enter the credentials into the corresponding ini (or json for some plugins) file under `/config/dns-conf`." }
- { env_var: "PROPAGATION", env_value: "", desc: "Optionally override (in seconds) the default propagation time for the dns plugins." } - { env_var: "PROPAGATION", env_value: "", desc: "Optionally override (in seconds) the default propagation time for the dns plugins." }
- { env_var: "EMAIL", env_value: "", desc: "Optional e-mail address used for cert expiration notifications (Required for ZeroSSL)." } - { env_var: "EMAIL", env_value: "", desc: "Optional e-mail address used for cert expiration notifications (Required for ZeroSSL)." }
- { env_var: "ONLY_SUBDOMAINS", env_value: "false", desc: "If you wish to get certs only for certain subdomains, but not the main domain (main domain may be hosted on another machine and cannot be validated), set this to `true`" } - { env_var: "ONLY_SUBDOMAINS", env_value: "false", desc: "If you wish to get certs only for certain subdomains, but not the main domain (main domain may be hosted on another machine and cannot be validated), set this to `true`" }
@@ -58,7 +58,7 @@ opt_param_env_vars:
- { env_var: "STAGING", env_value: "false", desc: "Set to `true` to retrieve certs in staging mode. Rate limits will be much higher, but the resulting cert will not pass the browser's security test. Only to be used for testing purposes." } - { env_var: "STAGING", env_value: "false", desc: "Set to `true` to retrieve certs in staging mode. Rate limits will be much higher, but the resulting cert will not pass the browser's security test. Only to be used for testing purposes." }
opt_param_usage_include_vols: false opt_param_usage_include_vols: false
opt_param_volumes: opt_param_volumes:
- { vol_path: "/config", vol_host_path: "/path/to/appdata/config", desc: "Configuration files." } - { vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/config", desc: "Persistent config files" }
opt_param_usage_include_ports: true opt_param_usage_include_ports: true
opt_param_ports: opt_param_ports:
- { external_port: "80", internal_port: "80", port_desc: "Http port (required for http validation and http -> https redirect)" } - { external_port: "80", internal_port: "80", port_desc: "Http port (required for http validation and http -> https redirect)" }
@@ -90,6 +90,21 @@ app_setup_block: |
* After setup, navigate to `https://yourdomain.url` to access the default homepage (http access through port 80 is disabled by default, you can enable it by editing the default site config at `/config/nginx/site-confs/default.conf`). * After setup, navigate to `https://yourdomain.url` to access the default homepage (http access through port 80 is disabled by default, you can enable it by editing the default site config at `/config/nginx/site-confs/default.conf`).
* Certs are checked nightly and if expiration is within 30 days, renewal is attempted. If your cert is about to expire in less than 30 days, check the logs under `/config/log/letsencrypt` to see why the renewals have been failing. It is recommended to input your e-mail in docker parameters so you receive expiration notices from Let's Encrypt in those circumstances. * Certs are checked nightly and if expiration is within 30 days, renewal is attempted. If your cert is about to expire in less than 30 days, check the logs under `/config/log/letsencrypt` to see why the renewals have been failing. It is recommended to input your e-mail in docker parameters so you receive expiration notices from Let's Encrypt in those circumstances.
### Certbot Plugins
SWAG includes many Certbot plugins out of the box, but not all plugins can be includes.
If you need a plugin that is not included, the quickest way to have the plugin available is to use our [Universal Package Install Docker Mod](https://github.com/linuxserver/docker-mods/tree/universal-package-install).
Set the following environment variables on your container:
```yaml
DOCKER_MODS=linuxserver/mods:universal-package-install
INSTALL_PIP_PACKAGES=certbot-dns-<plugin>
```
Set the required credentials (usually found in the plugin documentation) in `/config/dns-conf/<plugin>.ini`.
It is recommended to attempt obtaining a certificate with `STAGING=true` first to make sure the plugin is working as expected.
### Security and password protection ### Security and password protection
* The container detects changes to url and subdomains, revokes existing certs and generates new ones during start. * The container detects changes to url and subdomains, revokes existing certs and generates new ones during start.
@@ -153,6 +168,13 @@ app_setup_block: |
# changelog # changelog
changelogs: changelogs:
- { date: "23.01.24:", desc: "Rebase to Alpine 3.19 with php 8.3, add root periodic crontabs for logrotate." }
- { date: "01.01.24:", desc: "Add GleSYS DNS plugin." }
- { date: "11.12.23:", desc: "Deprecate certbot-dns-dynu to resolve dependency conflicts with other plugins." }
- { date: "30.11.23:", desc: "[Existing users should update:](https://github.com/linuxserver/docker-swag/blob/master/README.md#updating-configs) site-confs/default.conf - Fix index.php being downloaded on 404." }
- { date: "23.11.23:", desc: "Run certbot as root to allow fix http validation." }
- { date: "01.10.23:", desc: "Fix \"unrecognized arguments\" issue in DirectAdmin DNS plugin." }
- { date: "28.08.23:", desc: "Add Namecheap DNS plugin." }
- { date: "12.08.23:", desc: "Add FreeDNS plugin. Detect certbot DNS authenticators using CLI." } - { date: "12.08.23:", desc: "Add FreeDNS plugin. Detect certbot DNS authenticators using CLI." }
- { date: "07.08.23:", desc: "Add Bunny DNS Configuration." } - { date: "07.08.23:", desc: "Add Bunny DNS Configuration." }
- { date: "27.07.23:", desc: "Added support for dreamhost validation." } - { date: "27.07.23:", desc: "Added support for dreamhost validation." }

View File

@@ -1,3 +0,0 @@
# Instructions: https://github.com/bikram990/certbot-dns-dynu#configuration
# Replace with your API token from your dynu account.
dns_dynu_auth_token = AbCbASsd!@34

View File

@@ -0,0 +1,5 @@
# Instructions: https://github.com/runfalk/certbot-dns-glesys#usage
# GleSYS API credentials used by Certbot
dns_glesys_user = CL00000
dns_glesys_password = apikeygoeshere

View File

@@ -0,0 +1,4 @@
# Instructions: https://github.com/knoxell/certbot-dns-namecheap#credentials
# Namecheap API credentials used by Certbot
dns_namecheap_username=my-username
dns_namecheap_api_key=my-api-key

View File

@@ -12,4 +12,4 @@ datepattern = {^LN-BEG}
# DEV NOTES: # DEV NOTES:
# #
# Author: Will L (driz@linuxserver.io) # Author: notdriz

View File

@@ -1,4 +1,4 @@
## Version 2023/06/05 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/site-confs/default.conf.sample ## Version 2023/11/27 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/site-confs/default.conf.sample
# redirect all traffic to https # redirect all traffic to https
server { server {
@@ -48,7 +48,7 @@ server {
# enable for Authentik (requires authentik-server.conf in the server block) # enable for Authentik (requires authentik-server.conf in the server block)
#include /config/nginx/authentik-location.conf; #include /config/nginx/authentik-location.conf;
try_files $uri $uri/ /index.html /index.php$is_args$args =404; try_files $uri $uri/ /index.html /index.php$is_args$args;
} }
location ~ ^(.+\.php)(.*)$ { location ~ ^(.+\.php)(.*)$ {
@@ -65,6 +65,7 @@ server {
# enable for Authentik (requires authentik-server.conf in the server block) # enable for Authentik (requires authentik-server.conf in the server block)
#include /config/nginx/authentik-location.conf; #include /config/nginx/authentik-location.conf;
try_files $fastcgi_script_name =404;
fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass 127.0.0.1:9000; fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php; fastcgi_index index.php;

View File

View File

@@ -1,9 +1,8 @@
# do daily/weekly/monthly maintenance
# min hour day month weekday command # min hour day month weekday command
*/15 * * * * run-parts /etc/periodic/15min */15 * * * * run-parts /etc/periodic/15min
0 * * * * run-parts /etc/periodic/hourly 0 * * * * run-parts /etc/periodic/hourly
0 2 * * * run-parts /etc/periodic/daily 0 2 * * * run-parts /etc/periodic/daily
0 3 * * 6 run-parts /etc/periodic/weekly 0 3 * * 6 run-parts /etc/periodic/weekly
0 5 1 * * run-parts /etc/periodic/monthly 0 5 1 * * run-parts /etc/periodic/monthly
# renew letsencrypt certs
8 2 * * * /app/le-renew.sh >> /config/log/letsencrypt/letsencrypt.log 2>&1 8 2 * * * /app/le-renew.sh >> /config/log/letsencrypt/letsencrypt.log 2>&1

View File

@@ -23,14 +23,27 @@ for i in "${SANED_VARS[@]}"; do
export echo "${i}"="$(echo "${!i}" | tr '[:upper:]' '[:lower:]')" export echo "${i}"="$(echo "${!i}" | tr '[:upper:]' '[:lower:]')"
done done
# Check for and install requested DNS plugins
if grep -q "universal-package-install" <<< "${DOCKER_MODS}" && grep -q "certbot-dns" <<< "${INSTALL_PIP_PACKAGES}"; then
echo "**** Installing requested dns plugins ****"
/etc/s6-overlay/s6-rc.d/init-mod-universal-package-install-add-package/run
/etc/s6-overlay/s6-rc.d/init-mods-package-install/run
fi
# check to make sure DNSPLUGIN is selected if dns validation is used # check to make sure DNSPLUGIN is selected if dns validation is used
CERTBOT_DNS_AUTHENTICATORS=$(certbot plugins --authenticators 2>/dev/null | sed -e 's/^Entry point: cpanel =/Entry point: dns-cpanel =/' -e '/^Entry point: dns-/!d' -e 's/^Entry point: dns-\([^ ]*\) =.*/\1/' | sort) CERTBOT_DNS_AUTHENTICATORS=$(certbot plugins --authenticators 2>/dev/null | sed -e 's/^Entry point: EntryPoint(name='\''cpanel'\''/Entry point: EntryPoint(name='\''dns-cpanel'\''/' -e '/EntryPoint(name='\''dns-/!d' -e 's/^Entry point: EntryPoint(name='\''dns-\([^ ]*\)'\'',/\1/' | sort)
if [[ "${VALIDATION}" = "dns" ]] && ! echo "${CERTBOT_DNS_AUTHENTICATORS}" | grep -q "${DNSPLUGIN}"; then if [[ "${VALIDATION}" = "dns" ]] && ! echo "${CERTBOT_DNS_AUTHENTICATORS}" | grep -q "${DNSPLUGIN}"; then
echo "Please set the DNSPLUGIN variable to one of the following:" echo "Please set the DNSPLUGIN variable to one of the following:"
echo "${CERTBOT_DNS_AUTHENTICATORS}" echo "${CERTBOT_DNS_AUTHENTICATORS}"
sleep infinity sleep infinity
fi fi
# set owner of certbot's CONFIG_DIR, WORK_DIR, and LOGS_DIR to abc
lsiown -R abc:abc \
/etc/letsencrypt \
/var/lib/letsencrypt \
/var/log/letsencrypt
# set_ini_value logic: # set_ini_value logic:
# - if the name is not found in the file, append the name=value to the end of the file # - if the name is not found in the file, append the name=value to the end of the file
# - if the name is found in the file, replace the value # - if the name is found in the file, replace the value
@@ -46,6 +59,7 @@ function set_ini_value() {
# ensure config files exist and has at least one value set (set_ini_value does not work on empty files) # ensure config files exist and has at least one value set (set_ini_value does not work on empty files)
touch /config/etc/letsencrypt/cli.ini touch /config/etc/letsencrypt/cli.ini
lsiown abc:abc /config/etc/letsencrypt/cli.ini
grep -qF 'agree-tos' /config/etc/letsencrypt/cli.ini || echo 'agree-tos=true' >>/config/etc/letsencrypt/cli.ini grep -qF 'agree-tos' /config/etc/letsencrypt/cli.ini || echo 'agree-tos=true' >>/config/etc/letsencrypt/cli.ini
# copy dns default configs # copy dns default configs
@@ -304,7 +318,7 @@ if [[ "${VALIDATION}" = "dns" ]]; then
sed -i "/^dns-${DNSPLUGIN}-propagation-seconds\b/d" /config/etc/letsencrypt/cli.ini sed -i "/^dns-${DNSPLUGIN}-propagation-seconds\b/d" /config/etc/letsencrypt/cli.ini
fi fi
# plugins that use old parameter naming convention # plugins that use old parameter naming convention
if [[ "${DNSPLUGIN}" =~ ^(cpanel|directadmin)$ ]]; then if [[ "${DNSPLUGIN}" =~ ^(cpanel)$ ]]; then
sed -i "/^dns-${DNSPLUGIN}-credentials\b/d" /config/etc/letsencrypt/cli.ini sed -i "/^dns-${DNSPLUGIN}-credentials\b/d" /config/etc/letsencrypt/cli.ini
sed -i "/^dns-${DNSPLUGIN}-propagation-seconds\b/d" /config/etc/letsencrypt/cli.ini sed -i "/^dns-${DNSPLUGIN}-propagation-seconds\b/d" /config/etc/letsencrypt/cli.ini
set_ini_value "authenticator" "${DNSPLUGIN}" /config/etc/letsencrypt/cli.ini set_ini_value "authenticator" "${DNSPLUGIN}" /config/etc/letsencrypt/cli.ini

View File

@@ -1,38 +0,0 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
# make folders
mkdir -p \
/config/crontabs
## root
# if crontabs do not exist in config
if [[ ! -f /config/crontabs/root ]]; then
# copy crontab from system
if crontab -l -u root; then
crontab -l -u root >/config/crontabs/root
fi
# if crontabs still do not exist in config (were not copied from system)
# copy crontab from included defaults (using -n, do not overwrite an existing file)
cp -n /etc/crontabs/root /config/crontabs/ 2> >(grep -v 'cp: not replacing')
fi
# set permissions and import user crontabs
lsiown root:root /config/crontabs/root
crontab -u root /config/crontabs/root
## abc
# if crontabs do not exist in config
if [[ ! -f /config/crontabs/abc ]]; then
# copy crontab from system
if crontab -l -u abc; then
crontab -l -u abc >/config/crontabs/abc
fi
# if crontabs still do not exist in config (were not copied from system)
# copy crontab from included defaults (using -n, do not overwrite an existing file)
cp -n /etc/crontabs/abc /config/crontabs/ 2> >(grep -v 'cp: not replacing')
fi
# set permissions and import user crontabs
lsiown abc:abc /config/crontabs/abc
crontab -u abc /config/crontabs/abc

View File

@@ -1 +0,0 @@
oneshot

View File

@@ -1 +0,0 @@
/etc/s6-overlay/s6-rc.d/init-crontabs-config/run

View File

@@ -3,7 +3,7 @@
# make our folders and links # make our folders and links
mkdir -p \ mkdir -p \
/config/{fail2ban,crontabs,dns-conf} \ /config/{fail2ban,dns-conf} \
/config/etc/letsencrypt/renewal-hooks \ /config/etc/letsencrypt/renewal-hooks \
/config/log/{fail2ban,letsencrypt,nginx} \ /config/log/{fail2ban,letsencrypt,nginx} \
/config/nginx/proxy-confs \ /config/nginx/proxy-confs \