diff --git a/.editorconfig b/.editorconfig old mode 100755 new mode 100644 diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml old mode 100755 new mode 100644 diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml old mode 100755 new mode 100644 diff --git a/.github/ISSUE_TEMPLATE/issue.bug.yml b/.github/ISSUE_TEMPLATE/issue.bug.yml old mode 100755 new mode 100644 diff --git a/.github/ISSUE_TEMPLATE/issue.feature.yml b/.github/ISSUE_TEMPLATE/issue.feature.yml old mode 100755 new mode 100644 diff --git a/.github/workflows/call_issue_pr_tracker.yml b/.github/workflows/call_issue_pr_tracker.yml old mode 100755 new mode 100644 index 2c30784..d07cf12 --- a/.github/workflows/call_issue_pr_tracker.yml +++ b/.github/workflows/call_issue_pr_tracker.yml @@ -8,6 +8,9 @@ on: pull_request_review: types: [submitted,edited,dismissed] +permissions: + contents: read + jobs: manage-project: permissions: diff --git a/.github/workflows/call_issues_cron.yml b/.github/workflows/call_issues_cron.yml old mode 100755 new mode 100644 index 244796f..7db1d96 --- a/.github/workflows/call_issues_cron.yml +++ b/.github/workflows/call_issues_cron.yml @@ -4,6 +4,9 @@ on: - cron: '35 15 * * *' workflow_dispatch: +permissions: + contents: read + jobs: stale: permissions: diff --git a/.github/workflows/external_trigger.yml b/.github/workflows/external_trigger.yml index 7d75675..5daab23 100644 --- a/.github/workflows/external_trigger.yml +++ b/.github/workflows/external_trigger.yml @@ -3,6 +3,9 @@ name: External Trigger Main on: workflow_dispatch: +permissions: + contents: read + jobs: external-trigger-master: runs-on: ubuntu-latest @@ -43,8 +46,8 @@ jobs: "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} exit 1 fi - EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g') - echo "External version: \`${EXT_RELEASE}\`" >> $GITHUB_STEP_SUMMARY + EXT_RELEASE_SANITIZED=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g') + echo "Sanitized external version: \`${EXT_RELEASE_SANITIZED}\`" >> $GITHUB_STEP_SUMMARY echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY image="linuxserver/swag" tag="latest" @@ -100,8 +103,8 @@ jobs: exit 1 fi echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY - if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then - echo "Version \`${EXT_RELEASE}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY + if [ "${EXT_RELEASE_SANITIZED}" == "${IMAGE_VERSION}" ]; then + echo "Sanitized version \`${EXT_RELEASE_SANITIZED}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY exit 0 elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-swag/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then echo "New version \`${EXT_RELEASE}\` found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY @@ -116,7 +119,7 @@ jobs: "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} else printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY - echo "New version \`${EXT_RELEASE}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY + echo "New sanitized version \`${EXT_RELEASE_SANITIZED}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY if [[ "${artifacts_found}" == "true" ]]; then echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY fi @@ -136,7 +139,7 @@ jobs: --data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \ --data-urlencode "Submit=Submit" echo "**** Notifying Discord ****" - TRIGGER_REASON="A version change was detected for swag tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}" + TRIGGER_REASON="A version change was detected for swag tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE_SANITIZED}" curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903, "description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}], "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} diff --git a/.github/workflows/external_trigger_scheduler.yml b/.github/workflows/external_trigger_scheduler.yml index 0a3b07e..a98082b 100644 --- a/.github/workflows/external_trigger_scheduler.yml +++ b/.github/workflows/external_trigger_scheduler.yml @@ -5,6 +5,9 @@ on: - cron: '2 * * * *' workflow_dispatch: +permissions: + contents: read + jobs: external-trigger-scheduler: runs-on: ubuntu-latest diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml index 6c9a147..e50325c 100644 --- a/.github/workflows/greetings.yml +++ b/.github/workflows/greetings.yml @@ -2,8 +2,14 @@ name: Greetings on: [pull_request_target, issues] +permissions: + contents: read + jobs: greeting: + permissions: + issues: write + pull-requests: write runs-on: ubuntu-latest steps: - uses: actions/first-interaction@v1 diff --git a/.github/workflows/package_trigger_scheduler.yml b/.github/workflows/package_trigger_scheduler.yml index 1906f88..3d80cf8 100644 --- a/.github/workflows/package_trigger_scheduler.yml +++ b/.github/workflows/package_trigger_scheduler.yml @@ -5,6 +5,9 @@ on: - cron: '1 3 * * 6' workflow_dispatch: +permissions: + contents: read + jobs: package-trigger-scheduler: runs-on: ubuntu-latest diff --git a/.github/workflows/permissions.yml b/.github/workflows/permissions.yml old mode 100755 new mode 100644 diff --git a/.gitignore b/.gitignore index df432a4..e4dccbc 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ +.idea .jenkins-external diff --git a/Dockerfile b/Dockerfile index 3016894..ebb6cae 100755 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.21 +FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.22 # set version label ARG BUILD_DATE @@ -49,37 +49,36 @@ RUN \ nginx-mod-stream \ nginx-mod-stream-geoip2 \ nginx-vim \ - php83-bcmath \ - php83-bz2 \ - php83-dom \ - php83-exif \ - php83-ftp \ - php83-gd \ - php83-gmp \ - php83-imap \ - php83-intl \ - php83-ldap \ - php83-mysqli \ - php83-mysqlnd \ - php83-opcache \ - php83-pdo_mysql \ - php83-pdo_odbc \ - php83-pdo_pgsql \ - php83-pdo_sqlite \ - php83-pear \ - php83-pecl-apcu \ - php83-pecl-mcrypt \ - php83-pecl-memcached \ - php83-pecl-redis \ - php83-pgsql \ - php83-posix \ - php83-soap \ - php83-sockets \ - php83-sodium \ - php83-sqlite3 \ - php83-tokenizer \ - php83-xmlreader \ - php83-xsl \ + php84-bcmath \ + php84-bz2 \ + php84-dom \ + php84-exif \ + php84-ftp \ + php84-gd \ + php84-gmp \ + php84-imap \ + php84-intl \ + php84-ldap \ + php84-mysqli \ + php84-mysqlnd \ + php84-opcache \ + php84-pdo_mysql \ + php84-pdo_odbc \ + php84-pdo_pgsql \ + php84-pdo_sqlite \ + php84-pear \ + php84-pecl-apcu \ + php84-pecl-memcached \ + php84-pecl-redis \ + php84-pgsql \ + php84-posix \ + php84-soap \ + php84-sockets \ + php84-sodium \ + php84-sqlite3 \ + php84-tokenizer \ + php84-xmlreader \ + php84-xsl \ whois && \ echo "**** install certbot plugins ****" && \ if [ -z ${CERTBOT_VERSION+x} ]; then \ @@ -89,7 +88,7 @@ RUN \ pip install -U --no-cache-dir \ pip \ wheel && \ - pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.21/ \ + pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.22/ \ certbot==${CERTBOT_VERSION} \ certbot-dns-acmedns \ certbot-dns-aliyun \ diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 516f30e..8198789 100755 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.21 +FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.22 # set version label ARG BUILD_DATE @@ -49,37 +49,36 @@ RUN \ nginx-mod-stream \ nginx-mod-stream-geoip2 \ nginx-vim \ - php83-bcmath \ - php83-bz2 \ - php83-dom \ - php83-exif \ - php83-ftp \ - php83-gd \ - php83-gmp \ - php83-imap \ - php83-intl \ - php83-ldap \ - php83-mysqli \ - php83-mysqlnd \ - php83-opcache \ - php83-pdo_mysql \ - php83-pdo_odbc \ - php83-pdo_pgsql \ - php83-pdo_sqlite \ - php83-pear \ - php83-pecl-apcu \ - php83-pecl-mcrypt \ - php83-pecl-memcached \ - php83-pecl-redis \ - php83-pgsql \ - php83-posix \ - php83-soap \ - php83-sockets \ - php83-sodium \ - php83-sqlite3 \ - php83-tokenizer \ - php83-xmlreader \ - php83-xsl \ + php84-bcmath \ + php84-bz2 \ + php84-dom \ + php84-exif \ + php84-ftp \ + php84-gd \ + php84-gmp \ + php84-imap \ + php84-intl \ + php84-ldap \ + php84-mysqli \ + php84-mysqlnd \ + php84-opcache \ + php84-pdo_mysql \ + php84-pdo_odbc \ + php84-pdo_pgsql \ + php84-pdo_sqlite \ + php84-pear \ + php84-pecl-apcu \ + php84-pecl-memcached \ + php84-pecl-redis \ + php84-pgsql \ + php84-posix \ + php84-soap \ + php84-sockets \ + php84-sodium \ + php84-sqlite3 \ + php84-tokenizer \ + php84-xmlreader \ + php84-xsl \ whois && \ echo "**** install certbot plugins ****" && \ if [ -z ${CERTBOT_VERSION+x} ]; then \ @@ -89,7 +88,7 @@ RUN \ pip install -U --no-cache-dir \ pip \ wheel && \ - pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.21/ \ + pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.22/ \ certbot==${CERTBOT_VERSION} \ certbot-dns-acmedns \ certbot-dns-aliyun \ diff --git a/Jenkinsfile b/Jenkinsfile index af1052e..6b41bcc 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -95,7 +95,11 @@ pipeline { env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/' 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 ./root/donate.txt' + if ( env.SYFT_IMAGE_TAG == null ) { + env.SYFT_IMAGE_TAG = 'latest' + } } + echo "Using syft image tag ${SYFT_IMAGE_TAG}" sh '''#! /bin/bash echo "The default github branch detected as ${GH_DEFAULT_BRANCH}" ''' script{ @@ -780,7 +784,7 @@ pipeline { docker run --rm \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ -v ${TEMPDIR}:/tmp \ - ghcr.io/anchore/syft:latest \ + ghcr.io/anchore/syft:${SYFT_IMAGE_TAG} \ ${LOCAL_CONTAINER} -o table=/tmp/package_versions.txt NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 ) echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github" @@ -890,6 +894,7 @@ pipeline { -e WEB_AUTH=\"${CI_AUTH}\" \ -e WEB_PATH=\"${CI_WEBPATH}\" \ -e NODE_NAME=\"${NODE_NAME}\" \ + -e SYFT_IMAGE_TAG=\"${CI_SYFT_IMAGE_TAG:-${SYFT_IMAGE_TAG}}\" \ -t ghcr.io/linuxserver/ci:latest \ python3 test_build.py''' } diff --git a/LICENSE b/LICENSE old mode 100755 new mode 100644 diff --git a/README.md b/README.md index 7bf137c..e2c1361 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,6 @@ [![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!") [![Discord](https://img.shields.io/discord/354974912613449730.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Discord&logo=discord)](https://linuxserver.io/discord "realtime support / chat with the community and the team.") [![Discourse](https://img.shields.io/discourse/https/discourse.linuxserver.io/topics.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=discourse)](https://discourse.linuxserver.io "post on our community forum.") -[![Fleet](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Fleet)](https://fleet.linuxserver.io "an online web interface which displays all of our maintained images.") [![GitHub](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub&logo=github)](https://github.com/linuxserver "view the source for all of our repositories.") [![Open Collective](https://img.shields.io/opencollective/all/linuxserver.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Supporters&logo=open%20collective)](https://opencollective.com/linuxserver "please consider helping us by either donating or contributing to our budget") @@ -22,7 +21,6 @@ Find us at: * [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more! * [Discord](https://linuxserver.io/discord) - realtime support / chat with the community and the team. * [Discourse](https://discourse.linuxserver.io) - post on our community forum. -* [Fleet](https://fleet.linuxserver.io) - an online web interface which displays all of our maintained images. * [GitHub](https://github.com/linuxserver) - view the source for all of our repositories. * [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget @@ -54,7 +52,6 @@ The architectures supported by this image are: | :----: | :----: | ---- | | x86-64 | ✅ | amd64-\ | | arm64 | ✅ | arm64v8-\ | -| armhf | ❌ | | ## Application Setup @@ -145,6 +142,16 @@ This will *ask* Google et al not to index and list your site. Be careful with th * Proxy sample files WILL be updated, however your renamed (enabled) proxy files will not. * You can check the new sample and adjust your active config as needed. +### QUIC support + +This image supports QUIC (also known as HTTP/3) but it must be explicitly enabled in each proxy conf, and the default conf, because if the listener is enabled and you don't expose 443/UDP, it can break connections with some browsers. + +To enable QUIC, expose 443/UDP to your clients, then uncomment both QUIC listeners in all of your active proxy confs, as well as the default conf, and restart the container. + +You should also uncomment the `Alt-Svc` header in your `ssl.conf` so that browsers are aware that you offer QUIC connectivity. + +It is [recommended](https://quic-go.net/docs/quic/optimizations/#udp-buffer-sizes) to increase the UDP send/recieve buffer **on the host** by setting the `net.core.rmem_max` and `net.core.wmem_max` sysctls. Suggested values are 4-16Mb (4194304-16777216 bytes). For persistence between reboots use `/etc/sysctl.d/`. + ### Migration from the old `linuxserver/letsencrypt` image Please follow the instructions [on this blog post](https://www.linuxserver.io/blog/2020-08-21-introducing-swag#migrate). @@ -197,6 +204,7 @@ services: ports: - 443:443 - 80:80 #optional + - 443:443/udp #optional restart: unless-stopped ``` @@ -224,6 +232,7 @@ docker run -d \ -e SWAG_AUTORELOAD_WATCHLIST= `#optional` \ -p 443:443 \ -p 80:80 `#optional` \ + -p 443:443/udp `#optional` \ -v /path/to/swag/config:/config \ --restart unless-stopped \ lscr.io/linuxserver/swag:latest @@ -237,6 +246,7 @@ Containers are configured using parameters passed at runtime (such as those abov | :----: | --- | | `-p 443:443` | HTTPS port | | `-p 80` | HTTP port (required for HTTP validation and HTTP -> HTTPS redirect) | +| `-p 443/udp` | QUIC (HTTP/3) port. Must be enabled in the default and proxy confs. | | `-e PUID=1000` | for UserID - see below for explanation | | `-e PGID=1000` | for GroupID - see below for explanation | | `-e TZ=Etc/UTC` | specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List). | @@ -423,6 +433,8 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64 ## Versions +* **18.07.25:** - Rebase to Alpine 3.22 with PHP 8.4. Add QUIC support. Drop PHP bindings for mcrypt as it is no longer maintained. +* **05.05.25:** - Disable Certbot's built in log rotation. * **19.01.25:** - Add [Auto Reload](https://github.com/linuxserver/docker-mods/tree/swag-auto-reload) functionality to SWAG. * **17.12.24:** - Rebase to Alpine 3.21. * **21.10.24:** - Fix naming issue with Dynu plugin. If you are using Dynu, please make sure your credentials are set in /config/dns-conf/dynu.ini and your DNSPLUGIN variable is set to dynu (not dynudns). diff --git a/package_versions.txt b/package_versions.txt index 1151c4a..7760e92 100755 --- a/package_versions.txt +++ b/package_versions.txt @@ -1,365 +1,372 @@ -NAME VERSION TYPE -Simple Launcher 1.1.0.14 dotnet (+5 duplicates) -acl-libs 2.3.2-r1 apk -acme 3.2.0 python -alpine-baselayout 3.6.8-r1 apk -alpine-baselayout-data 3.6.8-r1 apk -alpine-keys 2.5-r0 apk -alpine-release 3.21.3-r0 apk -aom-libs 3.11.0-r0 apk -apache2-utils 2.4.62-r0 apk -apk-tools 2.14.6-r3 apk -apr 1.7.5-r0 apk -apr-util 1.6.3-r1 apk -argon2-libs 20190702-r5 apk -attrs 25.1.0 python -autocommand 2.2.2 python -azure-common 1.1.28 python -azure-core 1.32.0 python -azure-identity 1.20.0 python -azure-mgmt-core 1.5.0 python -azure-mgmt-dns 8.2.0 python -backports-tarfile 1.2.0 python -bash 5.2.37-r0 apk -beautifulsoup4 4.13.3 python -boto3 1.36.26 python -botocore 1.36.26 python -brotli-libs 1.1.0-r2 apk -bs4 0.0.2 python -busybox 1.37.0-r12 apk -busybox-binsh 1.37.0-r12 apk -c-ares 1.34.3-r0 apk -c-client 2007f-r15 apk -ca-certificates 20241121-r1 apk -ca-certificates-bundle 20241121-r1 apk -cachetools 5.5.2 python -catatonit 0.2.0-r0 apk -certbot 3.2.0 python -certbot-dns-acmedns 0.1.0 python -certbot-dns-aliyun 2.0.0 python -certbot-dns-azure 2.6.1 python -certbot-dns-bunny 3.0.0 python -certbot-dns-cloudflare 3.2.0 python -certbot-dns-cpanel 0.4.0 python -certbot-dns-desec 1.2.1 python -certbot-dns-digitalocean 3.2.0 python -certbot-dns-directadmin 1.0.13 python -certbot-dns-dnsimple 3.2.0 python -certbot-dns-dnsmadeeasy 3.2.0 python -certbot-dns-dnspod 0.1.0 python -certbot-dns-do 0.31.0 python -certbot-dns-domeneshop 0.2.9 python -certbot-dns-dreamhost 1.0 python -certbot-dns-duckdns 1.5 python -certbot-dns-dynudns 0.0.6 python -certbot-dns-freedns 0.2.0 python -certbot-dns-gehirn 3.2.0 python -certbot-dns-glesys 2.1.0 python -certbot-dns-godaddy 2.8.0 python -certbot-dns-google 3.2.0 python -certbot-dns-he 1.0.0 python -certbot-dns-hetzner 2.0.1 python -certbot-dns-infomaniak 0.2.3 python -certbot-dns-inwx 3.0.2 python -certbot-dns-ionos 2024.11.9 python -certbot-dns-linode 3.2.0 python -certbot-dns-loopia 1.0.1 python -certbot-dns-luadns 3.2.0 python -certbot-dns-namecheap 1.0.0 python -certbot-dns-netcup 1.4.4 python -certbot-dns-njalla 2.0.2 python -certbot-dns-nsone 3.2.0 python -certbot-dns-ovh 3.2.0 python -certbot-dns-porkbun 0.9.1 python -certbot-dns-rfc2136 3.2.0 python -certbot-dns-route53 3.2.0 python -certbot-dns-sakuracloud 3.2.0 python -certbot-dns-standalone 1.2.1 python -certbot-dns-transip 0.5.2 python -certbot-dns-vultr 1.1.0 python -certbot-plugin-gandi 1.5.0 python -certifi 2025.1.31 python -cffi 1.17.1 python -charset-normalizer 3.4.1 python -cloudflare 2.19.4 python -composer 2.8.5 binary -configargparse 1.7 python -configobj 5.0.9 python -coreutils 9.5-r2 apk -coreutils-env 9.5-r2 apk -coreutils-fmt 9.5-r2 apk -coreutils-sha512sum 9.5-r2 apk -cryptography 44.0.1 python -curl 8.12.1-r0 apk -distro 1.9.0 python -dns-lexicon 3.20.1 python -dnslib 0.9.25 python -dnspython 2.7.0 python -domeneshop 0.4.4 python -fail2ban 1.1.0 python -fail2ban 1.1.0-r2 apk -fail2ban-pyc 1.1.0-r2 apk -filelock 3.17.0 python -findutils 4.10.0-r0 apk -fontconfig 2.15.0-r1 apk -freetype 2.13.3-r0 apk -future 1.0.0 python -gdbm 1.24-r0 apk -git 2.47.2-r0 apk -git-init-template 2.47.2-r0 apk -git-perl 2.47.2-r0 apk -gmp 6.3.0-r2 apk -gnupg 2.4.7-r0 apk -gnupg-dirmngr 2.4.7-r0 apk -gnupg-gpgconf 2.4.7-r0 apk -gnupg-keyboxd 2.4.7-r0 apk -gnupg-utils 2.4.7-r0 apk -gnupg-wks-client 2.4.7-r0 apk -gnutls 3.8.8-r0 apk -google-api-core 2.24.1 python -google-api-python-client 2.161.0 python -google-auth 2.38.0 python -google-auth-httplib2 0.2.0 python -googleapis-common-protos 1.68.0 python -gpg 2.4.7-r0 apk -gpg-agent 2.4.7-r0 apk -gpg-wks-server 2.4.7-r0 apk -gpgsm 2.4.7-r0 apk -gpgv 2.4.7-r0 apk -httplib2 0.22.0 python -icu-data-en 74.2-r0 apk -icu-libs 74.2-r0 apk -idna 3.10 python -importlib-metadata 8.0.0 python -inflect 7.3.1 python -inotify-tools 4.23.9.0-r0 apk -inotify-tools-libs 4.23.9.0-r0 apk -inwx-domrobot 3.2.0 python -iptables 1.8.11-r1 apk -iptables-legacy 1.8.11-r1 apk -isodate 0.7.2 python -jaraco-collections 5.1.0 python -jaraco-context 5.3.0 python -jaraco-functools 4.0.1 python -jaraco-text 3.12.1 python -jmespath 1.0.1 python -josepy 1.15.0 python -jq 1.7.1-r0 apk -jsonlines 4.0.0 python -jsonpickle 4.0.2 python -libassuan 2.5.7-r0 apk -libattr 2.5.2-r2 apk -libavif 1.0.4-r0 apk -libbsd 0.12.2-r0 apk -libbz2 1.0.8-r6 apk -libcrypto3 3.3.3-r0 apk -libcurl 8.12.1-r0 apk -libdav1d 1.5.0-r0 apk -libedit 20240808.3.1-r0 apk -libevent 2.1.12-r7 apk -libexpat 2.6.4-r0 apk -libffi 3.4.6-r0 apk -libgcc 14.2.0-r4 apk -libgcrypt 1.10.3-r1 apk -libgd 2.3.3-r9 apk -libgpg-error 1.51-r0 apk -libice 1.1.1-r6 apk -libidn2 2.3.7-r0 apk -libintl 0.22.5-r0 apk -libip4tc 1.8.11-r1 apk -libip6tc 1.8.11-r1 apk -libjpeg-turbo 3.0.4-r0 apk -libksba 1.6.7-r0 apk -libldap 2.6.8-r0 apk -libmaxminddb-libs 1.9.1-r0 apk -libmcrypt 2.5.8-r10 apk -libmd 1.1.0-r0 apk -libmemcached-libs 1.1.4-r1 apk -libmnl 1.0.5-r2 apk -libncursesw 6.5_p20241006-r3 apk -libnftnl 1.2.8-r0 apk -libpanelw 6.5_p20241006-r3 apk -libpng 1.6.44-r0 apk -libpq 17.4-r0 apk -libproc2 4.0.4-r2 apk -libpsl 0.21.5-r3 apk -libsasl 2.1.28-r8 apk -libseccomp 2.5.5-r1 apk -libsharpyuv 1.4.0-r0 apk -libsm 1.2.4-r4 apk -libsodium 1.0.20-r0 apk -libssl3 3.3.3-r0 apk -libstdc++ 14.2.0-r4 apk -libtasn1 4.20.0-r0 apk -libunistring 1.2-r0 apk -libuuid 2.40.4-r0 apk -libwebp 1.4.0-r0 apk -libx11 1.8.10-r0 apk -libxau 1.0.11-r4 apk -libxcb 1.16.1-r0 apk -libxdmcp 1.1.5-r1 apk -libxext 1.3.6-r2 apk -libxml2 2.13.4-r3 apk -libxpm 3.5.17-r0 apk -libxslt 1.1.42-r1 apk -libxt 1.3.1-r0 apk -libxtables 1.8.11-r1 apk -libzip 1.11.2-r0 apk -linux-pam 1.6.1-r1 apk -logrotate 3.21.0-r1 apk -loopialib 0.2.0 python -lxml 5.3.1 python -lz4-libs 1.10.0-r0 apk -memcached 1.6.32-r0 apk -mock 5.1.0 python -more-itertools 10.3.0 python -mpdecimal 4.0.0-r0 apk -msal 1.31.1 python -msal-extensions 1.2.0 python -musl 1.2.5-r9 apk -musl-utils 1.2.5-r9 apk -my-test-package 1.0 python -nano 8.2-r0 apk -ncurses-terminfo-base 6.5_p20241006-r3 apk -netcat-openbsd 1.226.1.1-r0 apk -nettle 3.10-r1 apk -nghttp2-libs 1.64.0-r0 apk -nginx 1.26.2-r4 apk -nginx-mod-devel-kit 1.26.2-r4 apk -nginx-mod-http-brotli 1.26.2-r4 apk -nginx-mod-http-dav-ext 1.26.2-r4 apk -nginx-mod-http-echo 1.26.2-r4 apk -nginx-mod-http-fancyindex 1.26.2-r4 apk -nginx-mod-http-geoip2 1.26.2-r4 apk -nginx-mod-http-headers-more 1.26.2-r4 apk -nginx-mod-http-image-filter 1.26.2-r4 apk -nginx-mod-http-perl 1.26.2-r4 apk -nginx-mod-http-redis2 1.26.2-r4 apk -nginx-mod-http-set-misc 1.26.2-r4 apk -nginx-mod-http-upload-progress 1.26.2-r4 apk -nginx-mod-http-xslt-filter 1.26.2-r4 apk -nginx-mod-mail 1.26.2-r4 apk -nginx-mod-rtmp 1.26.2-r4 apk -nginx-mod-stream 1.26.2-r4 apk -nginx-mod-stream-geoip2 1.26.2-r4 apk -nginx-vim 1.26.2-r4 apk -npth 1.6-r4 apk -oniguruma 6.9.9-r0 apk -openssl 3.3.3-r0 apk -p11-kit 0.25.5-r2 apk -packaging 24.2 python -parsedatetime 2.6 python -pcre 8.45-r3 apk -pcre2 10.43-r0 apk -perl 5.40.1-r0 apk -perl-error 0.17029-r2 apk -perl-git 2.47.2-r0 apk -php83 8.3.17-r0 apk -php83-bcmath 8.3.17-r0 apk -php83-bz2 8.3.17-r0 apk -php83-common 8.3.17-r0 apk -php83-ctype 8.3.17-r0 apk -php83-curl 8.3.17-r0 apk -php83-dom 8.3.17-r0 apk -php83-exif 8.3.17-r0 apk -php83-fileinfo 8.3.17-r0 apk -php83-fpm 8.3.17-r0 apk -php83-ftp 8.3.17-r0 apk -php83-gd 8.3.17-r0 apk -php83-gmp 8.3.17-r0 apk -php83-iconv 8.3.17-r0 apk -php83-imap 8.3.17-r0 apk -php83-intl 8.3.17-r0 apk -php83-ldap 8.3.17-r0 apk -php83-mbstring 8.3.17-r0 apk -php83-mysqli 8.3.17-r0 apk -php83-mysqlnd 8.3.17-r0 apk -php83-opcache 8.3.17-r0 apk -php83-openssl 8.3.17-r0 apk -php83-pdo 8.3.17-r0 apk -php83-pdo_mysql 8.3.17-r0 apk -php83-pdo_odbc 8.3.17-r0 apk -php83-pdo_pgsql 8.3.17-r0 apk -php83-pdo_sqlite 8.3.17-r0 apk -php83-pear 8.3.17-r0 apk -php83-pecl-apcu 5.1.24-r0 apk -php83-pecl-igbinary 3.2.16-r0 apk -php83-pecl-mcrypt 1.0.7-r0 apk -php83-pecl-memcached 3.3.0-r0 apk -php83-pecl-msgpack 3.0.0-r0 apk -php83-pecl-redis 6.1.0-r0 apk -php83-pgsql 8.3.17-r0 apk -php83-phar 8.3.17-r0 apk -php83-posix 8.3.17-r0 apk -php83-session 8.3.17-r0 apk -php83-simplexml 8.3.17-r0 apk -php83-soap 8.3.17-r0 apk -php83-sockets 8.3.17-r0 apk -php83-sodium 8.3.17-r0 apk -php83-sqlite3 8.3.17-r0 apk -php83-tokenizer 8.3.17-r0 apk -php83-xml 8.3.17-r0 apk -php83-xmlreader 8.3.17-r0 apk -php83-xmlwriter 8.3.17-r0 apk -php83-xsl 8.3.17-r0 apk -php83-zip 8.3.17-r0 apk -pinentry 1.3.1-r0 apk -pip 25.0.1 python -pkb-client 2.0.0 python -platformdirs 4.2.2 python -popt 1.19-r4 apk -portalocker 2.10.1 python -procps-ng 4.0.4-r2 apk -proto-plus 1.26.0 python -protobuf 5.29.3 python -pyacmedns 0.4 python -pyasn1 0.6.1 python -pyasn1-modules 0.4.1 python -pyc 3.12.9-r0 apk -pycparser 2.22 python -pyjwt 2.10.1 python -pynamecheap 0.0.3 python -pyopenssl 25.0.0 python -pyotp 2.9.0 python -pyparsing 3.2.1 python -pyrfc3339 2.0.1 python -python-dateutil 2.9.0.post0 python -python-digitalocean 1.17.0 python -python-transip 0.6.0 python -python3 3.12.9-r0 apk -python3-pyc 3.12.9-r0 apk -python3-pycache-pyc0 3.12.9-r0 apk -pytz 2025.1 python -pyyaml 6.0.2 python -readline 8.2.13-r0 apk -requests 2.32.3 python -requests-file 2.1.0 python -requests-mock 1.12.1 python -rsa 4.9 python -s3transfer 0.11.2 python -scanelf 1.3.8-r1 apk -setuptools 75.8.0 python -shadow 4.16.0-r1 apk -six 1.17.0 python -skalibs-libs 2.14.3.0-r0 apk -soupsieve 2.6 python -sqlite-libs 3.48.0-r0 apk -ssl_client 1.37.0-r12 apk -tiff 4.7.0-r0 apk -tldextract 5.1.3 python -tomli 2.0.1 python -typeguard 4.3.0 python -typing-extensions 4.12.2 python (+1 duplicate) -tzdata 2025a-r0 apk -unixodbc 2.3.12-r0 apk -uritemplate 4.1.1 python -urllib3 2.3.0 python -utmps-libs 0.1.2.3-r2 apk -wheel 0.43.0 python -wheel 0.45.1 python -whois 5.5.23-r0 apk -xz-libs 5.6.3-r0 apk -zipp 3.19.2 python -zlib 1.3.1-r2 apk -zope-interface 7.2 python -zstd-libs 1.5.6-r2 apk +NAME VERSION TYPE +Simple Launcher 1.1.0.14 binary (+5 duplicates) +acl-libs 2.3.2-r1 apk +acme 4.2.0 python +alpine-baselayout 3.7.0-r0 apk +alpine-baselayout-data 3.7.0-r0 apk +alpine-keys 2.5-r0 apk +alpine-release 3.22.1-r0 apk +aom-libs 3.12.1-r0 apk +apache2-utils 2.4.65-r0 apk +apk-tools 2.14.9-r2 apk +apr 1.7.5-r0 apk +apr-util 1.6.3-r1 apk +argon2-libs 20190702-r5 apk +attrs 25.3.0 python +autocommand 2.2.2 python +azure-common 1.1.28 python +azure-core 1.35.0 python +azure-identity 1.23.1 python +azure-mgmt-core 1.6.0 python +azure-mgmt-dns 9.0.0 python +backports-tarfile 1.2.0 python +bash 5.2.37-r0 apk +beautifulsoup4 4.13.4 python +boto3 1.40.2 python +botocore 1.40.2 python +brotli-libs 1.1.0-r2 apk +bs4 0.0.2 python +busybox 1.37.0-r18 apk +busybox-binsh 1.37.0-r18 apk +c-ares 1.34.5-r0 apk +c-client 2007f-r15 apk +ca-certificates 20250619-r0 apk +ca-certificates-bundle 20250619-r0 apk +cachetools 5.5.2 python +catatonit 0.2.1-r0 apk +certbot 4.2.0 python +certbot-dns-acmedns 0.1.0 python +certbot-dns-aliyun 2.0.0 python +certbot-dns-azure 1.5.0 python +certbot-dns-bunny 3.0.0 python +certbot-dns-cloudflare 4.2.0 python +certbot-dns-cpanel 0.4.0 python +certbot-dns-desec 1.2.1 python +certbot-dns-digitalocean 4.2.0 python +certbot-dns-directadmin 1.0.15 python +certbot-dns-dnsimple 4.2.0 python +certbot-dns-dnsmadeeasy 4.2.0 python +certbot-dns-dnspod 0.1.0 python +certbot-dns-do 0.31.0 python +certbot-dns-domeneshop 0.2.9 python +certbot-dns-dreamhost 1.0 python +certbot-dns-duckdns 1.6 python +certbot-dns-dynudns 0.0.6 python +certbot-dns-freedns 0.2.0 python +certbot-dns-gehirn 4.2.0 python +certbot-dns-glesys 2.1.0 python +certbot-dns-godaddy 2.8.0 python +certbot-dns-google 4.2.0 python +certbot-dns-he 1.0.0 python +certbot-dns-hetzner 2.0.1 python +certbot-dns-infomaniak 0.2.3 python +certbot-dns-inwx 3.0.3 python +certbot-dns-ionos 2024.11.9 python +certbot-dns-linode 4.2.0 python +certbot-dns-loopia 1.0.1 python +certbot-dns-luadns 4.2.0 python +certbot-dns-namecheap 1.0.0 python +certbot-dns-netcup 1.4.4 python +certbot-dns-njalla 2.0.2 python +certbot-dns-nsone 4.2.0 python +certbot-dns-ovh 4.2.0 python +certbot-dns-porkbun 0.10.1 python +certbot-dns-rfc2136 4.2.0 python +certbot-dns-route53 4.2.0 python +certbot-dns-sakuracloud 4.2.0 python +certbot-dns-standalone 1.2.1 python +certbot-dns-transip 0.5.2 python +certbot-dns-vultr 1.1.0 python +certbot-plugin-gandi 1.5.0 python +certifi 2025.8.3 python +cffi 1.17.1 python +charset-normalizer 3.4.2 python +cli UNKNOWN binary +cli-32 UNKNOWN binary +cli-64 UNKNOWN binary +cli-arm64 UNKNOWN binary +cloudflare 2.19.4 python +composer 2.8.10 binary +configargparse 1.7.1 python +configobj 5.0.9 python +coreutils 9.7-r1 apk +coreutils-env 9.7-r1 apk +coreutils-fmt 9.7-r1 apk +coreutils-sha512sum 9.7-r1 apk +cryptography 45.0.5 python +curl 8.14.1-r1 apk +distro 1.9.0 python +dns-lexicon 3.21.1 python +dnslib 0.9.26 python +dnspython 2.7.0 python +domeneshop 0.4.4 python +fail2ban 1.1.0 python +fail2ban 1.1.0-r3 apk +fail2ban-pyc 1.1.0-r3 apk +filelock 3.18.0 python +findutils 4.10.0-r0 apk +fontconfig 2.15.0-r3 apk +freetype 2.13.3-r0 apk +future 1.0.0 python +gdbm 1.24-r0 apk +git 2.49.1-r0 apk +git-init-template 2.49.1-r0 apk +git-perl 2.49.1-r0 apk +gmp 6.3.0-r3 apk +gnupg 2.4.7-r0 apk +gnupg-dirmngr 2.4.7-r0 apk +gnupg-gpgconf 2.4.7-r0 apk +gnupg-keyboxd 2.4.7-r0 apk +gnupg-utils 2.4.7-r0 apk +gnupg-wks-client 2.4.7-r0 apk +gnutls 3.8.8-r0 apk +google-api-core 2.25.1 python +google-api-python-client 2.177.0 python +google-auth 2.40.3 python +google-auth-httplib2 0.2.0 python +googleapis-common-protos 1.70.0 python +gpg 2.4.7-r0 apk +gpg-agent 2.4.7-r0 apk +gpg-wks-server 2.4.7-r0 apk +gpgsm 2.4.7-r0 apk +gpgv 2.4.7-r0 apk +gui UNKNOWN binary +gui-32 UNKNOWN binary +gui-64 UNKNOWN binary +gui-arm64 UNKNOWN binary +httplib2 0.22.0 python +icu-data-en 76.1-r1 apk +icu-libs 76.1-r1 apk +idna 3.10 python +importlib-metadata 8.0.0 python +inflect 7.3.1 python +inotify-tools 4.23.9.0-r0 apk +inotify-tools-libs 4.23.9.0-r0 apk +inwx-domrobot 3.2.0 python +iptables 1.8.11-r1 apk +iptables-legacy 1.8.11-r1 apk +isodate 0.7.2 python +jaraco-collections 5.1.0 python +jaraco-context 5.3.0 python +jaraco-functools 4.0.1 python +jaraco-text 3.12.1 python +jinja2 3.1.6 python +jmespath 1.0.1 python +josepy 2.1.0 python +jq 1.8.0-r0 apk +jsonlines 4.0.0 python +jsonpickle 4.1.1 python +libapk2 2.14.9-r2 apk +libassuan 2.5.7-r0 apk +libattr 2.5.2-r2 apk +libavif 1.3.0-r0 apk +libbsd 0.12.2-r0 apk +libbz2 1.0.8-r6 apk +libcrypto3 3.5.1-r0 apk +libcurl 8.14.1-r1 apk +libdav1d 1.5.1-r0 apk +libedit 20250104.3.1-r1 apk +libevent 2.1.12-r8 apk +libexpat 2.7.1-r0 apk +libffi 3.4.8-r0 apk +libgcc 14.2.0-r6 apk +libgcrypt 1.10.3-r1 apk +libgd 2.3.3-r10 apk +libgpg-error 1.55-r0 apk +libice 1.1.2-r0 apk +libidn2 2.3.7-r0 apk +libintl 0.24.1-r0 apk +libip4tc 1.8.11-r1 apk +libip6tc 1.8.11-r1 apk +libjpeg-turbo 3.1.0-r0 apk +libksba 1.6.7-r0 apk +libldap 2.6.8-r0 apk +libmaxminddb-libs 1.9.1-r0 apk +libmd 1.1.0-r0 apk +libmemcached-libs 1.1.4-r1 apk +libmnl 1.0.5-r2 apk +libncursesw 6.5_p20250503-r0 apk +libnftnl 1.2.9-r0 apk +libpanelw 6.5_p20250503-r0 apk +libpng 1.6.47-r0 apk +libpq 17.5-r0 apk +libproc2 4.0.4-r3 apk +libpsl 0.21.5-r3 apk +libsasl 2.1.28-r8 apk +libseccomp 2.6.0-r0 apk +libsharpyuv 1.5.0-r0 apk +libsm 1.2.5-r0 apk +libsodium 1.0.20-r0 apk +libssl3 3.5.1-r0 apk +libstdc++ 14.2.0-r6 apk +libtasn1 4.20.0-r0 apk +libunistring 1.3-r0 apk +libuuid 2.41-r9 apk +libwebp 1.5.0-r0 apk +libx11 1.8.11-r0 apk +libxau 1.0.12-r0 apk +libxcb 1.17.0-r0 apk +libxdmcp 1.1.5-r1 apk +libxext 1.3.6-r2 apk +libxml2 2.13.8-r0 apk +libxpm 3.5.17-r0 apk +libxslt 1.1.43-r3 apk +libxt 1.3.1-r0 apk +libxtables 1.8.11-r1 apk +libyuv 0.0.1887.20251502-r1 apk +libzip 1.11.4-r0 apk +linux-pam 1.7.0-r4 apk +logrotate 3.21.0-r1 apk +loopialib 0.2.0 python +lxml 6.0.0 python +lz4-libs 1.10.0-r0 apk +markupsafe 3.0.2 python +memcached 1.6.32-r0 apk +mock 5.2.0 python +more-itertools 10.3.0 python +mpdecimal 4.0.1-r0 apk +msal 1.33.0 python +msal-extensions 1.3.1 python +musl 1.2.5-r10 apk +musl-utils 1.2.5-r10 apk +my-test-package 1.0 python +nano 8.4-r0 apk +ncurses-terminfo-base 6.5_p20250503-r0 apk +netcat-openbsd 1.229.1-r0 apk +nettle 3.10.1-r0 apk +nghttp2-libs 1.65.0-r0 apk +nginx 1.28.0-r3 apk +nginx-mod-devel-kit 1.28.0-r3 apk +nginx-mod-http-brotli 1.28.0-r3 apk +nginx-mod-http-dav-ext 1.28.0-r3 apk +nginx-mod-http-echo 1.28.0-r3 apk +nginx-mod-http-fancyindex 1.28.0-r3 apk +nginx-mod-http-geoip2 1.28.0-r3 apk +nginx-mod-http-headers-more 1.28.0-r3 apk +nginx-mod-http-image-filter 1.28.0-r3 apk +nginx-mod-http-perl 1.28.0-r3 apk +nginx-mod-http-redis2 1.28.0-r3 apk +nginx-mod-http-set-misc 1.28.0-r3 apk +nginx-mod-http-upload-progress 1.28.0-r3 apk +nginx-mod-http-xslt-filter 1.28.0-r3 apk +nginx-mod-mail 1.28.0-r3 apk +nginx-mod-rtmp 1.28.0-r3 apk +nginx-mod-stream 1.28.0-r3 apk +nginx-mod-stream-geoip2 1.28.0-r3 apk +nginx-vim 1.28.0-r3 apk +npth 1.8-r0 apk +oniguruma 6.9.10-r0 apk +openssl 3.5.1-r0 apk +p11-kit 0.25.5-r2 apk +packaging 24.2 python +parsedatetime 2.6 python +pcre2 10.43-r1 apk +perl 5.40.3-r0 apk +perl-error 0.17030-r0 apk +perl-git 2.49.1-r0 apk +php84 8.4.10-r0 apk +php84-bcmath 8.4.10-r0 apk +php84-bz2 8.4.10-r0 apk +php84-common 8.4.10-r0 apk +php84-ctype 8.4.10-r0 apk +php84-curl 8.4.10-r0 apk +php84-dom 8.4.10-r0 apk +php84-exif 8.4.10-r0 apk +php84-fileinfo 8.4.10-r0 apk +php84-fpm 8.4.10-r0 apk +php84-ftp 8.4.10-r0 apk +php84-gd 8.4.10-r0 apk +php84-gmp 8.4.10-r0 apk +php84-iconv 8.4.10-r0 apk +php84-intl 8.4.10-r0 apk +php84-ldap 8.4.10-r0 apk +php84-mbstring 8.4.10-r0 apk +php84-mysqli 8.4.10-r0 apk +php84-mysqlnd 8.4.10-r0 apk +php84-opcache 8.4.10-r0 apk +php84-openssl 8.4.10-r0 apk +php84-pdo 8.4.10-r0 apk +php84-pdo_mysql 8.4.10-r0 apk +php84-pdo_odbc 8.4.10-r0 apk +php84-pdo_pgsql 8.4.10-r0 apk +php84-pdo_sqlite 8.4.10-r0 apk +php84-pear 8.4.10-r0 apk +php84-pecl-apcu 5.1.24-r1 apk +php84-pecl-igbinary 3.2.16-r1 apk +php84-pecl-imap 1.0.3-r0 apk +php84-pecl-memcached 3.3.0-r0 apk +php84-pecl-msgpack 3.0.0-r0 apk +php84-pecl-redis 6.2.0-r0 apk +php84-pgsql 8.4.10-r0 apk +php84-phar 8.4.10-r0 apk +php84-posix 8.4.10-r0 apk +php84-session 8.4.10-r0 apk +php84-simplexml 8.4.10-r0 apk +php84-soap 8.4.10-r0 apk +php84-sockets 8.4.10-r0 apk +php84-sodium 8.4.10-r0 apk +php84-sqlite3 8.4.10-r0 apk +php84-tokenizer 8.4.10-r0 apk +php84-xml 8.4.10-r0 apk +php84-xmlreader 8.4.10-r0 apk +php84-xmlwriter 8.4.10-r0 apk +php84-xsl 8.4.10-r0 apk +php84-zip 8.4.10-r0 apk +pinentry 1.3.1-r0 apk +pip 25.2 python +pkb-client 2.2.0 python +platformdirs 4.2.2 python +popt 1.19-r4 apk +procps-ng 4.0.4-r3 apk +proto-plus 1.26.1 python +protobuf 6.31.1 python +pyacmedns 0.4 python +pyasn1 0.6.1 python +pyasn1-modules 0.4.2 python +pyc 3.12.11-r0 apk +pycparser 2.22 python +pyjwt 2.10.1 python +pynamecheap 0.0.3 python +pyopenssl 25.1.0 python +pyotp 2.9.0 python +pyparsing 3.2.3 python +pyrfc3339 2.0.1 python +python-dateutil 2.9.0.post0 python +python-digitalocean 1.17.0 python +python-transip 0.6.0 python +python3 3.12.11-r0 apk +python3-pyc 3.12.11-r0 apk +python3-pycache-pyc0 3.12.11-r0 apk +pyyaml 6.0.2 python +readline 8.2.13-r1 apk +requests 2.32.4 python +requests-file 2.1.0 python +requests-mock 1.12.1 python +rsa 4.9.1 python +s3transfer 0.13.1 python +scanelf 1.3.8-r1 apk +setuptools 80.9.0 python +shadow 4.17.3-r0 apk +six 1.17.0 python +skalibs-libs 2.14.4.0-r0 apk +soupsieve 2.7 python +sqlite-libs 3.49.2-r1 apk +ssl_client 1.37.0-r18 apk +tiff 4.7.0-r0 apk +tldextract 5.3.0 python +tomli 2.0.1 python +typeguard 4.3.0 python +typing-extensions 4.12.2 python +typing-extensions 4.14.1 python +tzdata 2025b-r0 apk +unixodbc 2.3.12-r0 apk +uritemplate 4.2.0 python +urllib3 2.5.0 python +utmps-libs 0.1.3.1-r0 apk +wheel 0.45.1 python (+1 duplicate) +whois 5.6.3-r0 apk +xz-libs 5.8.1-r0 apk +zipp 3.19.2 python +zlib 1.3.1-r2 apk +zope-interface 7.2 python +zstd-libs 1.5.7-r0 apk diff --git a/readme-vars.yml b/readme-vars.yml index 7482dc0..22c5fef 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -44,6 +44,7 @@ opt_param_env_vars: opt_param_usage_include_ports: true opt_param_ports: - {external_port: "80", internal_port: "80", port_desc: "HTTP port (required for HTTP validation and HTTP -> HTTPS redirect)"} + - {external_port: "443", internal_port: "443/udp", port_desc: "QUIC (HTTP/3) port. Must be enabled in the default and proxy confs."} readonly_supported: true readonly_message: | * `/tmp` must be mounted to tmpfs @@ -138,6 +139,16 @@ app_setup_block: | * Proxy sample files WILL be updated, however your renamed (enabled) proxy files will not. * You can check the new sample and adjust your active config as needed. + ### QUIC support + + This image supports QUIC (also known as HTTP/3) but it must be explicitly enabled in each proxy conf, and the default conf, because if the listener is enabled and you don't expose 443/UDP, it can break connections with some browsers. + + To enable QUIC, expose 443/UDP to your clients, then uncomment both QUIC listeners in all of your active proxy confs, as well as the default conf, and restart the container. + + You should also uncomment the `Alt-Svc` header in your `ssl.conf` so that browsers are aware that you offer QUIC connectivity. + + It is [recommended](https://quic-go.net/docs/quic/optimizations/#udp-buffer-sizes) to increase the UDP send/recieve buffer **on the host** by setting the `net.core.rmem_max` and `net.core.wmem_max` sysctls. Suggested values are 4-16Mb (4194304-16777216 bytes). For persistence between reboots use `/etc/sysctl.d/`. + ### Migration from the old `linuxserver/letsencrypt` image Please follow the instructions [on this blog post](https://www.linuxserver.io/blog/2020-08-21-introducing-swag#migrate). @@ -164,6 +175,7 @@ init_diagram: | init-outdated-config -> init-config-end init-config -> init-crontab-config init-mods-end -> init-custom-files + init-adduser -> init-device-perms base -> init-envfile init-swag-samples -> init-fail2ban-config init-os-end -> init-folders @@ -175,6 +187,7 @@ init_diagram: | init-samples -> init-nginx init-version-checks -> init-nginx-end init-adduser -> init-os-end + init-device-perms -> init-os-end init-envfile -> init-os-end init-renew -> init-outdated-config init-keygen -> init-permissions @@ -200,11 +213,13 @@ init_diagram: | svc-swag-auto-reload -> legacy-services } Base Images: { - "baseimage-alpine-nginx:3.21" <- "baseimage-alpine:3.21" + "baseimage-alpine-nginx:3.22" <- "baseimage-alpine:3.22" } "swag:latest" <- Base Images # changelog changelogs: + - {date: "18.07.25:", desc: "Rebase to Alpine 3.22 with PHP 8.4. Add QUIC support. Drop PHP bindings for mcrypt as it is no longer maintained."} + - {date: "05.05.25:", desc: "Disable Certbot's built in log rotation."} - {date: "19.01.25:", desc: "Add [Auto Reload](https://github.com/linuxserver/docker-mods/tree/swag-auto-reload) functionality to SWAG."} - {date: "17.12.24:", desc: "Rebase to Alpine 3.21."} - {date: "21.10.24:", desc: "Fix naming issue with Dynu plugin. If you are using Dynu, please make sure your credentials are set in /config/dns-conf/dynu.ini and your DNSPLUGIN variable is set to dynu (not dynudns)."} diff --git a/root/defaults/nginx/authelia-location.conf.sample b/root/defaults/nginx/authelia-location.conf.sample index 6487536..f927a71 100644 --- a/root/defaults/nginx/authelia-location.conf.sample +++ b/root/defaults/nginx/authelia-location.conf.sample @@ -1,13 +1,8 @@ -## Version 2024/03/14 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authelia-location.conf.sample +## Version 2025/03/25 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authelia-location.conf.sample # Make sure that your authelia container is in the same user defined bridge network and is named authelia # Rename /config/nginx/proxy-confs/authelia.subdomain.conf.sample to /config/nginx/proxy-confs/authelia.subdomain.conf -# For authelia 4.37 and below, make sure that the authelia configuration.yml has 'path: "authelia"' defined -# For authelia 4.38 and above, make sure that the authelia configuration.yml has 'address: "tcp://:9091/authelia"' defined ## Send a subrequest to Authelia to verify if the user is authenticated and has permission to access the resource -## For authelia 4.37 and below, use the following line -# auth_request /authelia/api/verify; -## For authelia 4.38 and above, use the following line auth_request /authelia/api/authz/auth-request; ## If the subreqest returns 200 pass to the backend, if the subrequest returns 401 redirect to the portal diff --git a/root/defaults/nginx/authelia-server.conf.sample b/root/defaults/nginx/authelia-server.conf.sample index 43147de..d969a05 100644 --- a/root/defaults/nginx/authelia-server.conf.sample +++ b/root/defaults/nginx/authelia-server.conf.sample @@ -1,44 +1,15 @@ -## Version 2024/03/16 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authelia-server.conf.sample +## Version 2025/03/25 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authelia-server.conf.sample # Make sure that your authelia container is in the same user defined bridge network and is named authelia # Rename /config/nginx/proxy-confs/authelia.subdomain.conf.sample to /config/nginx/proxy-confs/authelia.subdomain.conf -# For authelia 4.37 and below, make sure that the authelia configuration.yml has 'path: "authelia"' defined -# For authelia 4.38 and above, make sure that the authelia configuration.yml has 'address: "tcp://:9091/authelia"' defined -# location for authelia subfolder requests -location ^~ /authelia { - auth_request off; # requests to this subfolder must be accessible without authentication - - include /config/nginx/proxy.conf; - include /config/nginx/resolver.conf; - set $upstream_authelia authelia; - proxy_pass http://$upstream_authelia:9091; -} - -# location for authelia 4.37 and below auth requests -location = /authelia/api/verify { - internal; - - include /config/nginx/proxy.conf; - include /config/nginx/resolver.conf; - set $upstream_authelia authelia; - proxy_pass http://$upstream_authelia:9091; - - ## Include the Set-Cookie header if present - auth_request_set $set_cookie $upstream_http_set_cookie; - add_header Set-Cookie $set_cookie; - - proxy_pass_request_body off; - proxy_set_header Content-Length ""; -} - -# location for authelia 4.38 and above auth requests +# location for authelia auth requests location = /authelia/api/authz/auth-request { internal; include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; set $upstream_authelia authelia; - proxy_pass http://$upstream_authelia:9091; + proxy_pass http://$upstream_authelia:9091/api/authz/auth-request; ## Include the Set-Cookie header if present auth_request_set $set_cookie $upstream_http_set_cookie; @@ -62,11 +33,6 @@ location @authelia_proxy_signin { ## Translate the Location response header from the auth subrequest into a variable auth_request_set $signin_url $upstream_http_location; - if ($signin_url = '') { - ## Set the $signin_url variable - set $signin_url https://$http_host/authelia/?rd=$target_url; - } - ## Redirect to login return 302 $signin_url; } diff --git a/root/defaults/nginx/authentik-server.conf.sample b/root/defaults/nginx/authentik-server.conf.sample index 1016fbb..7b08ff9 100644 --- a/root/defaults/nginx/authentik-server.conf.sample +++ b/root/defaults/nginx/authentik-server.conf.sample @@ -1,4 +1,4 @@ -## Version 2023/04/27 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authentik-server.conf.sample +## Version 2025/03/25 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/authentik-server.conf.sample # Make sure that your authentik container is in the same user defined bridge network and is named authentik-server # Rename /config/nginx/proxy-confs/authentik.subdomain.conf.sample to /config/nginx/proxy-confs/authentik.subdomain.conf @@ -19,7 +19,7 @@ location = /outpost.goauthentik.io/auth/nginx { include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; set $upstream_authentik authentik-server; - proxy_pass http://$upstream_authentik:9000; + proxy_pass http://$upstream_authentik:9000/outpost.goauthentik.io/auth/nginx; ## Include the Set-Cookie header if present auth_request_set $set_cookie $upstream_http_set_cookie; diff --git a/root/defaults/nginx/site-confs/default.conf.sample b/root/defaults/nginx/site-confs/default.conf.sample index 8613f1e..e240496 100644 --- a/root/defaults/nginx/site-confs/default.conf.sample +++ b/root/defaults/nginx/site-confs/default.conf.sample @@ -1,4 +1,4 @@ -## Version 2024/12/17 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/site-confs/default.conf.sample +## Version 2025/07/18 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/site-confs/default.conf.sample # redirect all traffic to https server { @@ -13,7 +13,9 @@ server { # main server block server { listen 443 ssl default_server; +# listen 443 quic reuseport default_server; listen [::]:443 ssl default_server; +# listen [::]:443 quic reuseport default_server; server_name _; diff --git a/root/defaults/nginx/tinyauth-location.conf.sample b/root/defaults/nginx/tinyauth-location.conf.sample new file mode 100644 index 0000000..3bdae98 --- /dev/null +++ b/root/defaults/nginx/tinyauth-location.conf.sample @@ -0,0 +1,9 @@ +## Version 2025/06/08 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/tinyauth-location.conf.sample +# Make sure that your tinyauth container is in the same user defined bridge network and is named tinyauth +# Rename /config/nginx/proxy-confs/tinyauth.subdomain.conf.sample to /config/nginx/proxy-confs/tinyauth.subdomain.conf + +## Send a subrequest to tinyauth to verify if the user is authenticated and has permission to access the resource +auth_request /tinyauth; + +## If the subreqest returns 200 pass to the backend, if the subrequest returns 401 redirect to the portal +error_page 401 = @tinyauth_login; diff --git a/root/defaults/nginx/tinyauth-server.conf.sample b/root/defaults/nginx/tinyauth-server.conf.sample new file mode 100644 index 0000000..a4256c8 --- /dev/null +++ b/root/defaults/nginx/tinyauth-server.conf.sample @@ -0,0 +1,35 @@ +## Version 2025/06/08 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/tinyauth-server.conf.sample +# Make sure that your tinyauth container is in the same user defined bridge network and is named tinyauth +# Rename /config/nginx/proxy-confs/tinyauth.subdomain.conf.sample to /config/nginx/proxy-confs/tinyauth.subdomain.conf + +# location for tinyauth auth requests +location /tinyauth { + internal; + + include /config/nginx/proxy.conf; + include /config/nginx/resolver.conf; + set $upstream_tinyauth tinyauth; + proxy_pass http://$upstream_tinyauth:3000/api/auth/nginx; + + proxy_set_header x-forwarded-proto $scheme; + proxy_set_header x-forwarded-host $http_host; + proxy_set_header x-forwarded-uri $request_uri; +} + +# virtual location for tinyauth 401 redirects +location @tinyauth_login { + internal; + + ## Set the $target_url variable based on the original request + set_escape_uri $target_url $scheme://$http_host$request_uri; + + ## Set the $signin_url variable + set $domain $host; + if ($host ~* "^[^.]+\.([^.]+\..+)$") { + set $domain $1; + } + set $signin_url https://tinyauth.$domain/login?redirect_uri=$target_url; + + ## Redirect to login + return 302 $signin_url; +} diff --git a/root/etc/s6-overlay/s6-rc.d/init-certbot-config/run b/root/etc/s6-overlay/s6-rc.d/init-certbot-config/run index 51e8e5e..b5e3a26 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-certbot-config/run +++ b/root/etc/s6-overlay/s6-rc.d/init-certbot-config/run @@ -56,6 +56,12 @@ 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 +# Check for broken dns credentials value in cli.ini and remove +sed -i '/dns--credentials/d' /config/etc/letsencrypt/cli.ini + +# Disable Certbot's built in log rotation +set_ini_value "max-log-backups" "0" /config/etc/letsencrypt/cli.ini + # copy dns default configs cp -n /defaults/dns-conf/* /config/dns-conf/ 2> >(grep -v 'cp: not replacing') lsiown -R abc:abc /config/dns-conf diff --git a/root/etc/s6-overlay/s6-rc.d/init-swag-config/run b/root/etc/s6-overlay/s6-rc.d/init-swag-config/run index 5ba2b21..b28d279 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-swag-config/run +++ b/root/etc/s6-overlay/s6-rc.d/init-swag-config/run @@ -22,6 +22,14 @@ if [[ ! -f /config/nginx/authentik-server.conf ]]; then cp /defaults/nginx/authentik-server.conf.sample /config/nginx/authentik-server.conf fi +# copy tinyauth config files if they don't exist +if [[ ! -f /config/nginx/tinyauth-location.conf ]]; then + cp /defaults/nginx/tinyauth-location.conf.sample /config/nginx/tinyauth-location.conf +fi +if [[ ! -f /config/nginx/tinyauth-server.conf ]]; then + cp /defaults/nginx/tinyauth-server.conf.sample /config/nginx/tinyauth-server.conf +fi + # copy old ldap config file to new location if [[ -f /config/nginx/ldap.conf ]] && [[ ! -f /config/nginx/ldap-server.conf ]]; then cp /config/nginx/ldap.conf /config/nginx/ldap-server.conf