10 Commits
Author SHA1 Message Date
pztrn e500bff0f1 Add diffutils for actsync.
ci/woodpecker/tag/build Pipeline was successful
2026-08-09 06:06:57 +05:00
pztrn 6ba17b951e cleanfeed installation, stale pids script fix, start-innd script removal.
ci/woodpecker/tag/build Pipeline was successful
2026-07-29 11:34:53 +05:00
pztrn e97be45bcc Enable nocem. 2026-07-29 10:52:04 +05:00
pztrn c82abea21a Remove stale pids.
ci/woodpecker/tag/build Pipeline was successful
2026-07-29 00:04:18 +05:00
pztrn 6fb95559b5 Update changelog. 2026-07-27 00:20:05 +05:00
pztrn 4346acb651 Switch to s6-overlay, add cron (and cronjobs), syslog.
ci/woodpecker/tag/build Pipeline was successful
2026-07-27 00:18:03 +05:00
pztrn 6bb4e56607 Fix CHANGELOG.
ci/woodpecker/tag/build Pipeline was successful
2026-07-26 19:26:50 +05:00
pztrn 1f51ea539c README fix. 2026-07-26 19:25:56 +05:00
pztrn 3bc6afc318 Shell linting. 2026-07-26 19:25:09 +05:00
pztrn 040dddf723 Changelog, ssmtp, image optimisation, libcanlock. 2026-07-26 19:22:05 +05:00
23 changed files with 260 additions and 57 deletions
+62
View File
@@ -0,0 +1,62 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) but do not follows semantic versioning as it is useless in this type of project.
## [2.7.4-5] - 2026-08-02
### Added
* diffutils package installation for actsync to work.
## [2.7.4-4] - 2026-07-29
### Added
* nocem processing enablement with data from https://rosalind.home.xs4all.nl/nocemreg/nocemreg.html.
* cleanfeed installation
### Changed
* stale pids removal script now always exits 0 if removal failed.
### Removed
* start-innd script which was used previously for starting innd.
## [2.7.4-3] - 2026-07-29
### Added
* remove stale pids on container start
## [2.7.4-2] - 2026-07-26
### Added
* switch to s6-overlay (which is more suitable for containers than plain s6).
* syslogd support via s6-overlay.
* cron daemon with set of default cronjobs.
## [2.7.4-1] - 2026-07-26
### Added
* libcanlock support.
* ssmtp for sending mails.
### Changed
* Little image optimisation - compile everything and cleanup sources in one command. Saves ~10 megabytes 😅.
## [2.7.4] - 2026-07-24
Initial container release with inn 2.7.4 built with perl/python/sqlite support.
[2.7.4-5]: https://code.pztrn.name/containers/inn2/compare/2.7.4-4...2.7.4-5
[2.7.4-4]: https://code.pztrn.name/containers/inn2/compare/2.7.4-3...2.7.4-4
[2.7.4-3]: https://code.pztrn.name/containers/inn2/compare/2.7.4-2...2.7.4-3
[2.7.4-2]: https://code.pztrn.name/containers/inn2/compare/2.7.4-1...2.7.4-2
[2.7.4-1]: https://code.pztrn.name/containers/inn2/compare/2.7.4...2.7.4-1
[2.7.4]: https://code.pztrn.name/containers/inn2/releases/tag/2.7.4
+31 -18
View File
@@ -4,7 +4,10 @@ ENV PERL_MM_USE_DEFAULT=1
RUN apk add --no-cache \ RUN apk add --no-cache \
bison \ bison \
build-base \ build-base \
bzip2 \
curl \ curl \
diffutils \
flex \
gawk \ gawk \
gd-dev \ gd-dev \
gnupg \ gnupg \
@@ -17,42 +20,52 @@ RUN apk add --no-cache \
perl-utils \ perl-utils \
python3 \ python3 \
python3-dev \ python3-dev \
s6 \ s6-overlay \
s6-overlay-syslogd \
shadow \ shadow \
sqlite-dev \ sqlite-dev \
ssmtp \
tar \ tar \
zlib-dev && \ zlib-dev && \
cpan -T GD MIME::Parser && \ cpan -T GD MIME::Parser && \
rm -rf /root/.cpan rm -rf /root/.cpan
# Build everything in one command and cleanup sources so container will eat less space.
ARG VERSION=2.7.4 RUN mkdir /src && cd /src && \
RUN curl -sL https://github.com/InterNetNews/inn/releases/download/${VERSION}/inn-${VERSION}.tar.gz | tar xz # libcanlock
curl -sL https://micha.freeshell.org/libcanlock/src/libcanlock-3.3.3.tar.bz2 | tar xj && cd libcanlock-3.3.3 && ./configure && make && make install && \
WORKDIR /inn-${VERSION} # inn2
RUN ./configure --prefix=/inn2 --with-zlib --with-openssl --with-sqlite --with-krb5 --with-perl --with-python && \ cd /src && curl -sL https://github.com/InterNetNews/inn/releases/download/2.7.4/inn-2.7.4.tar.gz | tar xz && cd inn-2.7.4 && \
./configure --prefix=/inn2 --with-zlib --with-openssl --with-sqlite --with-krb5 --with-perl --with-python --with-canlock && \
make && \ make && \
sed -i 's/#domain:/domain: news.localhost/' site/inn.conf && \ sed -i 's/#domain:/domain: news.localhost/' site/inn.conf && \
make install make install && \
sed -i 's/#\(tlscapath:\)/\1/' /inn2/etc/inn.conf && \
RUN sed -i 's/#\(tlscapath:\)/\1/' /inn2/etc/inn.conf && \
sed -i 's/#\(tlscertfile:\)/\1/' /inn2/etc/inn.conf && \ sed -i 's/#\(tlscertfile:\)/\1/' /inn2/etc/inn.conf && \
sed -i 's/#\(tlskeyfile:\)/\1/' /inn2/etc/inn.conf && \ sed -i 's/#\(tlskeyfile:\)/\1/' /inn2/etc/inn.conf && \
mv /inn2/etc /inn2/etc-default && \ mv /inn2/etc /inn2/etc-default && \
mv /inn2/db /inn2/db-default && \ mv /inn2/db /inn2/db-default && \
mv /inn2/spool /inn2/spool-default mv /inn2/spool /inn2/spool-default && \
# cleanfeed
cd /src && curl -sL https://github.com/infybofh/cleanfeed-ng/archive/refs/tags/2026-07-03-rc1.tar.gz | tar xz && cd cleanfeed-ng-2026-07-03-rc1 && \
cp cleanfeed /inn2/bin/filter/filter_innd.pl && \
mkdir /inn2/etc-default/cleanfeed && \
cp cleanfeed.local.example /inn2/etc-default/cleanfeed/cleanfeed.local && \
cp samples/* /inn2/etc-default/cleanfeed && \
mkdir -p /inn2/spool-default/cleanfeed && \
mkdir -p /var/www/ && \
chown -R news:news /var/www && \
rm -rf /src
COPY configuration /etc COPY etc /etc
COPY start-innd.sh /start-innd
RUN groupmod -g 600 news && usermod -u 600 -g 600 -d /inn2 news && chown -R news:news /inn2 && chown -R news:news /etc/s6 RUN groupmod -g 600 news && usermod -u 600 -g 600 -d /inn2 news && chown -R news:news /inn2 && chown -R news:news /etc/cont-init.d /etc/services.d
WORKDIR /inn2 WORKDIR /inn2
ENV PATH=/inn2/bin:$PATH ENV PATH=/inn2/bin:$PATH
ENV PERL_MM_USE_DEFAULT=1 ENV CLEANFEED_CONFIG_DIR=/inn2/etc/cleanfeed
USER news
EXPOSE 119 EXPOSE 119
EXPOSE 563 EXPOSE 563
VOLUME [ "/inn2/db", "/inn2/spool", "/inn2/log" ] VOLUME [ "/inn2/db", "/inn2/spool", "/inn2/log", "/var/www" ]
CMD ["/usr/bin/s6-svscan", "/etc/s6"] ENTRYPOINT [ "/init" ]
+85 -5
View File
@@ -2,13 +2,13 @@
This repository holds files neccessary to build inn2 (InterNet News 2), a NNTP server. This repository holds files neccessary to build inn2 (InterNet News 2), a NNTP server.
This container is based on [greenbender's image](https://github.com/greenbender/inn-docker). This container is based on [greenbender's image](https://github.com/greenbender/inn-docker) and includes enabled nocems processing and cleanfeed.
## Usage ## Usage
Configuration files are described on [inn official site](https://www.eyrie.org/~eagle/software/inn/) (select proper version from right sidebar). Configuration files are described on [inn official site](https://www.eyrie.org/~eagle/software/inn/) (select proper version from right sidebar).
Using this container with compose: Using this container with compose is simple:
```yaml ```yaml
--- ---
@@ -26,29 +26,98 @@ services:
- "./data/run:/inn2/run" - "./data/run:/inn2/run"
- "./data/spool:/inn2/spool" - "./data/spool:/inn2/spool"
- "./data/tmp:/inn2/tmp" - "./data/tmp:/inn2/tmp"
- "./data/syslog:/var/log"
- "./data/www:/var/www"
ulimits: ulimits:
nofile: nofile:
soft: 65535 soft: 65535
hard: 65535 hard: 65535
``` ```
It is recommended to use macvlan/ipvlan network for container so real user IP will flow within inn2 as by default it will be docker's network gateway for compose project. For that compose file will looks like:
```yaml
---
services:
inn:
image: "code.pztrn.name/containers/inn2:2.7.4"
restart: always
volumes:
- "./data/db:/inn2/db"
- "./data/etc:/inn2/etc"
- "./data/log:/inn2/log"
- "./data/run:/inn2/run"
- "./data/spool:/inn2/spool"
- "./data/tmp:/inn2/tmp"
- "./data/syslog:/var/log"
- "./data/www:/var/www"
networks:
inn2-ipvlan:
ipv4_address: 192.168.168.168 # ip address from real LAN.
ipv6_address: fd00:0:1:2::168 # ip address from real LAN.
ulimits:
nofile:
soft: 65535
hard: 65535
networks:
inn2-ipvlan:
driver: ipvlan
driver_opts:
parent: ens18 # put your real interface name here.
ipvlan_mode: l2
ipam:
config:
- subnet: 192.168.168.160/27 # put real LAN subnet here.
gateway: 192.168.168.161 # put real LAN gateway here.
ip_range: 192.168.168.168/32 # ip address from real LAN.
- subnet: fd00:0:1:2::/64 # put real LAN subnet here.
gateway: fd00:0:1:2::1 # put real LAN gateway here.
ip_range: fd00:0:1:2::168/128 # ip address from real LAN.
enable_ipv6: true
```
Note that this code is built to support dual-stack (IPv4+IPv6). You should either:
1. Remove IPv6 things if not using it.
2. Set up SNAT6 for outgoing connections to work (on host or router).
3. Add globally routable address to IPAM config and network definition in container.
## Cronjobs ## Cronjobs
There is a section in documentation about cron jobs you should configure. This docker image currently isn't supporting these, so configure it separately with lines like: This Docker image come with a recommended in documentation set of cronjobs. To customize it copy `etc/crontabs/news` file, make neccessary changes and mount it to container in `/etc/crontabs/news`.
If you want to use cron outside of your container:
```shell ```shell
0 3 * * * docker compose run inn news.daily expireover lowmark 0 3 * * * docker compose run inn news.daily expireover lowmark delayrm
``` ```
## Sending emails
As this container has no postfix installed (why do you might ever need it here?) you can use [ssmtp](https://wiki.debian.org/sSMTP) which installed in container to get mails sent over SMTP.
## No See 'Em's
This container has nocem enabled and neccessary data will be loaded on first start from [NoCeM registry](https://rosalind.home.xs4all.nl/nocemreg/nocemreg.html).
Make sure you have `news.lists.filters` group created.
## Cleanfeed
Cleanfeed is automatically installed from [infybofh's repository](https://github.com/infybofh/cleanfeed-ng). Configuration is located in `/inn2/etc/cleanfeed` directory within container, please configure it according to your needs.
## Versioning ## Versioning
Image versioning follows official inn2 versions with additional optional version postfix added to indicate image fixes for particular version. Image versioning follows official inn2 versions with additional optional version postfix added to indicate image fixes for particular version.
Examples: Examples:
* 2.7.4-3 - inn version 2.7.4 and 3 additional fixes applied to container. * 2.7.4-3 - inn version 2.7.4 and 3 additional fixes applied to container or inn's dependencies.
* 2.7.6 - inn version 2.7.6 without additional container fixes. * 2.7.6 - inn version 2.7.6 without additional container fixes.
All notable changes to container and it's building process are noted in [CHANGELOG.md](CHANGELOG.md).
## Data directories and permissions ## Data directories and permissions
Configuration is kept in `/inn2/etc`, mount it in your local filesystem. Entrypoint script will copy default configuration for you if missing. Configuration is kept in `/inn2/etc`, mount it in your local filesystem. Entrypoint script will copy default configuration for you if missing.
@@ -62,3 +131,14 @@ inn2 is launched as UID/GID 600 in container, so chown directories properly acco
* If you're not using userns isolation - use `chown 600:600`. * If you're not using userns isolation - use `chown 600:600`.
* If you're using it - use `600 + id from /etc/subuid`, e.g. if you're using default Docker remapping this could be `chown 100600:100600`. * If you're using it - use `600 + id from /etc/subuid`, e.g. if you're using default Docker remapping this could be `chown 100600:100600`.
## Logs
Logs are split in two destinations:
* `/inn2/log` - default INN logs destination.
* `/var/log` - syslog logs.
As INN might log in both of them you should mount a directory for each.
For syslog logs it is a known bug that logs isn't written in `/var/log/innd` or `/var/log/nnrpd`, take a look at `/var/log/syslogd/everything/current` for logs with `news` topic. This might be fixed somewhere soon.
-5
View File
@@ -1,5 +0,0 @@
#!/bin/sh
for file in /etc/s6/*/finish; do
$file
done
-3
View File
@@ -1,3 +0,0 @@
#!/bin/sh
kill "$(cat /inn2/run/innd.pid)"
-3
View File
@@ -1,3 +0,0 @@
#!/bin/execlineb -P
/start-innd
-3
View File
@@ -1,3 +0,0 @@
#!/bin/sh
kill "$(cat /inn2/run/nnrpd-563.pid)"
-3
View File
@@ -1,3 +0,0 @@
#!/bin/execlineb -P
nnrpd -D -f -p 563 -S
+9
View File
@@ -0,0 +1,9 @@
#!/bin/sh -e
mkdir -p /var/log/innd
chown -R 65534:65534 /var/log/innd
chmod 02755 /var/log/innd
mkdir -p /var/log/nnrpd
chown -R 65534:65534 /var/log/nnrpd
chmod 02755 /var/log/nnrpd
+5
View File
@@ -0,0 +1,5 @@
#!/bin/sh
if [ ! -f "/inn2/etc/inn.conf" ]; then
cp -r /inn2/etc-default/* /inn2/etc
fi
+5
View File
@@ -0,0 +1,5 @@
#!/bin/sh
if [ ! -f "/inn2/db/history" ]; then
cp -r /inn2/db-default/* /inn2/db
fi
+5
View File
@@ -0,0 +1,5 @@
#!/bin/sh
if [ ! -d "/inn2/spool/articles" ]; then
cp -r /inn2/spool-default/* /inn2/spool
fi
+3
View File
@@ -0,0 +1,3 @@
#!/bin/sh
chown news:news /etc/crontabs/news
+17
View File
@@ -0,0 +1,17 @@
#!/bin/sh
if [ -f "/inn2/etc/pgp/ncmring.gpg" ]; then
exit 0
fi
if [ ! -d "/inn2/etc/pgp" ]; then
mkdir -p "/inn2/etc/pgp"
fi
echo "* Downloading NoCeM gpg keys and ctl file..."
curl -o /inn2/etc/pgp/ncmring.gpg https://rosalind.home.xs4all.nl/nocemreg/ncmring.asc
chown -R news:news /inn2/etc/nocem.ctl /inn2/etc/pgp
echo "* Enabling NoCeM processing..."
sed -i '/^#nocem/ { s/^#//; n; s/^#//; }' /inn2/etc/newsfeeds
+13
View File
@@ -0,0 +1,13 @@
#!/bin/sh
if [ ! -d "/inn2/etc/cleanfeed" ]; then
cp -r "/inn2/etc-default/cleanfeed" "/inn2/etc"
chown -R news:news "/inn2/etc/cleanfeed"
fi
if [ ! -d "/inn2/spool/cleanfeed" ]; then
mkdir -p "/inn2/spool/cleanfeed"
chown -R news:news "/inn2/spool/cleanfeed"
fi
chown -R news:news /var/www
+3
View File
@@ -0,0 +1,3 @@
#!/bin/sh
rm "/inn2/run/*.pid" || exit 0
+5
View File
@@ -0,0 +1,5 @@
# min hour day month weekday command
0 5 * * * cd /inn2; /inn2/bin/news.daily expireover lowmark delayrm
15 * * * * cd /inn2; /inn2/bin/rnews -U
0 4 * * * cd /inn2; /inn2/bin/ctlinnd -t 120 -s reload incoming.conf 'flush cache'
*/10 * * * * cd /inn2; /inn2/bin/nntpsend
+3
View File
@@ -0,0 +1,3 @@
#!/bin/sh
/usr/sbin/crond -f
+3
View File
@@ -0,0 +1,3 @@
#!/bin/sh
exec logutil-service /var/log/innd
+4
View File
@@ -0,0 +1,4 @@
#!/bin/sh
exec 2>&1
exec s6-setuidgid news /inn2/bin/innd -f
+3
View File
@@ -0,0 +1,3 @@
#!/bin/sh
exec logutil-service /var/log/nnrpd
+4
View File
@@ -0,0 +1,4 @@
#!/bin/sh
exec 2>&1
exec s6-setuidgid news nnrpd -D -f -p 563 -S
-17
View File
@@ -1,17 +0,0 @@
#!/bin/sh
if [ ! -f "/inn2/etc/inn.conf" ]; then
cp -r /inn2/etc-default/* /inn2/etc
fi
if [ ! -f "/inn2/db/history" ]; then
cp -r /inn2/db-default/* /inn2/db
fi
if [ ! -d "/inn2/spool/articles" ]; then
cp -r /inn2/spool-default/* /inn2/spool
fi
cd /inn2
/inn2/bin/innd -f