From 304d9cbebad83da594fd46274c569562196627e8 Mon Sep 17 00:00:00 2001 From: quietsy Date: Sun, 12 Oct 2025 19:00:07 +0300 Subject: [PATCH] Initial --- .github/workflows/BuildImage.yml | 6 +- Dockerfile | 2 +- Dockerfile.complex | 33 --------- README.md | 74 ++++++++++++++----- root/defaults/ipinfo.conf | 43 +++++++++++ root/etc/periodic/daily/ipinfo | 13 ++++ .../run | 30 -------- .../init-mod-imagename-modname-add-package/up | 1 - .../init-mod-imagename-modname-install/run | 8 -- .../init-mod-imagename-modname-install/type | 1 - .../init-mod-imagename-modname-install/up | 1 - .../dependencies.d/init-mods | 0 .../s6-rc.d/init-mod-swag-ipinfo-setup/run | 19 +++++ .../type | 0 .../s6-rc.d/init-mod-swag-ipinfo-setup/up | 1 + .../init-mod-swag-ipinfo-setup} | 0 .../init-mod-imagename-modname-add-package | 0 .../dependencies.d/init-services | 0 .../s6-rc.d/svc-mod-imagename-modname/run | 7 -- .../s6-rc.d/svc-mod-imagename-modname/type | 1 - .../init-mod-imagename-modname-add-package | 0 .../init-mod-imagename-modname-install | 0 .../contents.d/init-mod-swag-ipinfo-setup} | 0 .../user/contents.d/svc-mod-imagename-modname | 0 24 files changed, 137 insertions(+), 103 deletions(-) delete mode 100644 Dockerfile.complex create mode 100644 root/defaults/ipinfo.conf create mode 100644 root/etc/periodic/daily/ipinfo delete mode 100755 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run delete mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/up delete mode 100755 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run delete mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/type delete mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/up rename root/etc/s6-overlay/s6-rc.d/{init-mod-imagename-modname-add-package => init-mod-swag-ipinfo-setup}/dependencies.d/init-mods (100%) create mode 100755 root/etc/s6-overlay/s6-rc.d/init-mod-swag-ipinfo-setup/run rename root/etc/s6-overlay/s6-rc.d/{init-mod-imagename-modname-add-package => init-mod-swag-ipinfo-setup}/type (100%) create mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-swag-ipinfo-setup/up rename root/etc/s6-overlay/s6-rc.d/{init-mod-imagename-modname-install/dependencies.d/init-mods-package-install => init-mods-end/dependencies.d/init-mod-swag-ipinfo-setup} (100%) delete mode 100644 root/etc/s6-overlay/s6-rc.d/init-mods-package-install/dependencies.d/init-mod-imagename-modname-add-package delete mode 100644 root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/dependencies.d/init-services delete mode 100755 root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/run delete mode 100644 root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/type delete mode 100644 root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-add-package delete mode 100644 root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-install rename root/etc/s6-overlay/s6-rc.d/{init-mods-end/dependencies.d/init-mod-imagename-modname-install => user/contents.d/init-mod-swag-ipinfo-setup} (100%) delete mode 100644 root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-mod-imagename-modname diff --git a/.github/workflows/BuildImage.yml b/.github/workflows/BuildImage.yml index 4715e56..dc602f0 100644 --- a/.github/workflows/BuildImage.yml +++ b/.github/workflows/BuildImage.yml @@ -12,10 +12,10 @@ on: env: GITHUB_REPO: "linuxserver/docker-mods" #don't modify ENDPOINT: "linuxserver/mods" #don't modify - BASEIMAGE: "replace_baseimage" #replace - MODNAME: "replace_modname" #replace + BASEIMAGE: "swag" #replace + MODNAME: "ipinfo" #replace MOD_VERSION: ${{ inputs.mod_version }} #don't modify - MULTI_ARCH: "true" #set to false if not needed + MULTI_ARCH: "false" #set to false if not needed jobs: set-vars: diff --git a/Dockerfile b/Dockerfile index aa66170..b851cad 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM scratch -LABEL maintainer="username" +LABEL maintainer="quietsy" # copy local files COPY root/ / diff --git a/Dockerfile.complex b/Dockerfile.complex deleted file mode 100644 index 3ed07b0..0000000 --- a/Dockerfile.complex +++ /dev/null @@ -1,33 +0,0 @@ -# syntax=docker/dockerfile:1 - -## Buildstage ## -FROM ghcr.io/linuxserver/baseimage-alpine:3.20 AS buildstage - -RUN \ - echo "**** install packages ****" && \ - apk add --no-cache \ - curl && \ - echo "**** grab rclone ****" && \ - mkdir -p /root-layer && \ - if [ $(uname -m) = "x86_64" ]; then \ - echo "Downloading x86_64 tarball" && \ - curl -o \ - /root-layer/rclone.deb -L \ - "https://downloads.rclone.org/v1.47.0/rclone-v1.47.0-linux-amd64.deb"; \ - elif [ $(uname -m) = "aarch64" ]; then \ - echo "Downloading aarch64 tarball" && \ - curl -o \ - /root-layer/rclone.deb -L \ - "https://downloads.rclone.org/v1.47.0/rclone-v1.47.0-linux-arm64.deb"; \ - fi && \ - -# copy local files -COPY root/ /root-layer/ - -## Single layer deployed image ## -FROM scratch - -LABEL maintainer="username" - -# Add files from buildstage -COPY --from=buildstage /root-layer/ / diff --git a/README.md b/README.md index 1700668..7769004 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,65 @@ -# Rsync - Docker mod for openssh-server +# IPINFO Docker mod for Nginx based images -This mod adds rsync to openssh-server, to be installed/updated during container start. +This mod downloads the `ipinfo_lite.mmdb` database under `/config/geoip2db`, the database is updated daily. -In openssh-server docker arguments, set an environment variable `DOCKER_MODS=linuxserver/mods:openssh-server-rsync` +**This mod should not be enabled together with swag-maxmind or swag-dbip mods.** -If adding multiple mods, enter them in an array separated by `|`, such as `DOCKER_MODS=linuxserver/mods:openssh-server-rsync|linuxserver/mods:openssh-server-mod2` +Follow these steps to enable the ipinfo mod: -# Mod creation instructions +1. Sign up and aquire an ipinfo token here: https://ipinfo.io/signup +2. In the container's docker arguments, set the following environment variables: + - `IPINFO_TOKEN=` with your token. +3. In the container's docker arguments, set an environment variable `DOCKER_MODS=linuxserver/mods:swag-ipinfo` + + If adding multiple mods, enter them in an array separated by `|`, such as `DOCKER_MODS=linuxserver/mods:swag-ipinfo|linuxserver/mods:swag-mod2` +4. Recreate the container to apply the changes. +5. Add the following line to `/config/nginx/nginx.conf` under the `http` section: + + ```nginx + include /config/nginx/ipinfo.conf; + ``` +6. Edit `/config/nginx/ipinfo.conf` and add countries to the blocklist / whitelist according to the comments, for example: + + ```nginx + map $geoip2_data_country_iso_code $geo-whitelist { + default no; + UK yes; + } -* Fork the repo, create a new branch based on the branch `template`. -* Edit the `Dockerfile` for the mod. `Dockerfile.complex` is only an example and included for reference; it should be deleted when done. -* Inspect the `root` folder contents. Edit, add and remove as necessary. -* After all init scripts and services are created, run `find ./ -path "./.git" -prune -o \( -name "run" -o -name "finish" -o -name "check" \) -not -perm -u=x,g=x,o=x -print -exec chmod +x {} +` to fix permissions. -* Edit this readme with pertinent info, delete these instructions. -* Finally edit the `.github/workflows/BuildImage.yml`. Customize the vars for `BASEIMAGE` and `MODNAME`. Set the versioning logic and `MULTI_ARCH` if needed. -* Ask the team to create a new branch named `-`. Baseimage should be the name of the image the mod will be applied to. The new branch will be based on the `template` branch. -* Submit PR against the branch created by the team. + map $geoip2_data_country_iso_code $geo-blacklist { + default yes; + US no; + } + ``` +7. Use the definitions in the following way: + ```nginx + server { + listen 443 ssl; + listen [::]:443 ssl; + server_name some-app.*; + include /config/nginx/ssl.conf; + client_max_body_size 0; -## Tips and tricks + if ($lan-ip = yes) { set $geo-whitelist yes; } + if ($geo-whitelist = no) { return 404; } -* Some images have helpers built in, these images are currently: - * [Openvscode-server](https://github.com/linuxserver/docker-openvscode-server/pull/10/files) - * [Code-server](https://github.com/linuxserver/docker-code-server/pull/95) + location / { + ``` + Or for blacklist with both some countries and continents: + ```nginx + server { + listen 443 ssl; + listen [::]:443 ssl; + + server_name some-app.*; + include /config/nginx/ssl.conf; + client_max_body_size 0; + + if ($lan-ip = yes) { set $geo-blacklist yes; } + if ($geo-blacklist = no) { return 404; } + if ($continent-blacklist = no) { return 404; } + + location / { + ``` +8. Restart the container to apply the changes. diff --git a/root/defaults/ipinfo.conf b/root/defaults/ipinfo.conf new file mode 100644 index 0000000..27a8635 --- /dev/null +++ b/root/defaults/ipinfo.conf @@ -0,0 +1,43 @@ +geoip2 /config/geoip2db/ipinfo_lite.mmdb { + auto_reload 1d; + $geoip2_data_network network; + $geoip2_data_country country; + $geoip2_data_country_iso_code country_code; + $geoip2_data_continent continent; + $geoip2_data_continent_code continent_code; + $geoip2_data_asn asn; + $geoip2_data_as_name as_name; + $geoip2_data_as_domain as_domain; +} + +# Country Codes: https://en.wikipedia.org/wiki/ISO_3166-2 + +map $geoip2_data_country_iso_code $geo-whitelist { + default yes; + # Example for whitelisting a country, comment out 'default yes;' above and uncomment 'default no;' and the whitelisted country below + # default no; + # GB yes; +} + +map $geoip2_data_country_iso_code $geo-blacklist { + default yes; + # Example for blacklisting a country, uncomment the blacklisted country below + # GB no; + } + +# Continents: +# Options: AF, AS, EU, NA, OC, SA, AN + + map $geoip2_data_continent_code $continent-blacklist { + default yes; + # Example blacklisting a continent, uncomment the blacklisted continent bellow + # SA no; # South America +} + +geo $lan-ip { + default no; + 10.0.0.0/8 yes; + 172.16.0.0/12 yes; + 192.168.0.0/16 yes; + 127.0.0.1 yes; +} diff --git a/root/etc/periodic/daily/ipinfo b/root/etc/periodic/daily/ipinfo new file mode 100644 index 0000000..30d9f92 --- /dev/null +++ b/root/etc/periodic/daily/ipinfo @@ -0,0 +1,13 @@ +#!/usr/bin/with-contenv bash + +if [[ ! -n "${IPINFO_TOKEN}" ]]; then + echo "IPINFO_TOKEN env var is missing." + exit 1 +fi + +FILE="https://ipinfo.io/data/ipinfo_lite.mmdb?token=${IPINFO_TOKEN}" + +wget -O /tmp/ipinfo_lite.mmdb $FILE +mv -f /tmp/ipinfo_lite.mmdb /config/geoip2db/ipinfo_lite.mmdb +lsiown -R abc:abc /config/geoip2db/ipinfo_lite.mmdb +exit 0 diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run deleted file mode 100755 index 063b570..0000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/with-contenv bash - -# This is the init file used for adding os or pip packages to install lists. -# It takes advantage of the built-in init-mods-package-install init script that comes with the baseimages. -# If using this, we need to make sure we set this init as a dependency of init-mods-package-install so this one runs first - -if ! command -v apprise; then - echo "**** Adding apprise and its deps to package install lists ****" - echo "apprise" >> /mod-pip-packages-to-install.list - ## Ubuntu - if [ -f /usr/bin/apt ]; then - echo "\ - python3 \ - python3-pip \ - runc" >> /mod-repo-packages-to-install.list - fi - # Alpine - if [ -f /sbin/apk ]; then - echo "\ - cargo \ - libffi-dev \ - openssl-dev \ - python3 \ - python3-dev \ - python3 \ - py3-pip" >> /mod-repo-packages-to-install.list - fi -else - echo "**** apprise already installed, skipping ****" -fi diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/up b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/up deleted file mode 100644 index 6414139..0000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/up +++ /dev/null @@ -1 +0,0 @@ -/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run deleted file mode 100755 index 59a4b77..0000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/with-contenv bash - -# This is an install script that is designed to run after init-mods-package-install -# so it can take advantage of packages installed -# init-mods-end depends on this script so that later init and services wait until this script exits - -echo "**** Setting up apprise ****" -apprise blah blah diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/type b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/type deleted file mode 100644 index 3d92b15..0000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/type +++ /dev/null @@ -1 +0,0 @@ -oneshot \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/up b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/up deleted file mode 100644 index 03d298d..0000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/up +++ /dev/null @@ -1 +0,0 @@ -/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/dependencies.d/init-mods b/root/etc/s6-overlay/s6-rc.d/init-mod-swag-ipinfo-setup/dependencies.d/init-mods similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/dependencies.d/init-mods rename to root/etc/s6-overlay/s6-rc.d/init-mod-swag-ipinfo-setup/dependencies.d/init-mods diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-swag-ipinfo-setup/run b/root/etc/s6-overlay/s6-rc.d/init-mod-swag-ipinfo-setup/run new file mode 100755 index 0000000..7fd781c --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-swag-ipinfo-setup/run @@ -0,0 +1,19 @@ +#!/usr/bin/with-contenv bash + +echo "Applying the ipinfo mod..." + +chmod +x /etc/periodic/daily/ipinfo + +# check GeoIP2 database +if [ ! -f /config/geoip2db/ipinfo_lite.mmdb ]; then + echo "Downloading GeoIP2 City database." + mkdir -p "/config/geoip2db" + /etc/periodic/daily/ipinfo +fi + +if [ ! -f /config/nginx/ipinfo.conf ]; then + cp /defaults/ipinfo.conf /config/nginx/ipinfo.conf + lsiown -R abc:abc /config/nginx/ipinfo.conf +fi + +echo "Applied the ipinfo mod" diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/type b/root/etc/s6-overlay/s6-rc.d/init-mod-swag-ipinfo-setup/type similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/type rename to root/etc/s6-overlay/s6-rc.d/init-mod-swag-ipinfo-setup/type diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-swag-ipinfo-setup/up b/root/etc/s6-overlay/s6-rc.d/init-mod-swag-ipinfo-setup/up new file mode 100644 index 0000000..a659f57 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-swag-ipinfo-setup/up @@ -0,0 +1 @@ +/etc/s6-overlay/s6-rc.d/init-mod-swag-ipinfo-setup/run \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/dependencies.d/init-mods-package-install b/root/etc/s6-overlay/s6-rc.d/init-mods-end/dependencies.d/init-mod-swag-ipinfo-setup similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/dependencies.d/init-mods-package-install rename to root/etc/s6-overlay/s6-rc.d/init-mods-end/dependencies.d/init-mod-swag-ipinfo-setup diff --git a/root/etc/s6-overlay/s6-rc.d/init-mods-package-install/dependencies.d/init-mod-imagename-modname-add-package b/root/etc/s6-overlay/s6-rc.d/init-mods-package-install/dependencies.d/init-mod-imagename-modname-add-package deleted file mode 100644 index e69de29..0000000 diff --git a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/dependencies.d/init-services b/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/dependencies.d/init-services deleted file mode 100644 index e69de29..0000000 diff --git a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/run b/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/run deleted file mode 100755 index 02ffe39..0000000 --- a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/run +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/with-contenv bash - -# This is an example service that would run for the mod -# It depends on init-services, the baseimage hook for start of all longrun services - -exec \ - s6-setuidgid abc run my app diff --git a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/type b/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/type deleted file mode 100644 index 1780f9f..0000000 --- a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/type +++ /dev/null @@ -1 +0,0 @@ -longrun \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-add-package b/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-add-package deleted file mode 100644 index e69de29..0000000 diff --git a/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-install b/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-install deleted file mode 100644 index e69de29..0000000 diff --git a/root/etc/s6-overlay/s6-rc.d/init-mods-end/dependencies.d/init-mod-imagename-modname-install b/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-swag-ipinfo-setup similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/init-mods-end/dependencies.d/init-mod-imagename-modname-install rename to root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-swag-ipinfo-setup diff --git a/root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-mod-imagename-modname b/root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-mod-imagename-modname deleted file mode 100644 index e69de29..0000000