mirror of
https://github.com/osmarks/ngircd.git
synced 2024-12-13 02:10:27 +00:00
Add a Dockerfile and documentation to the project
This commit is contained in:
parent
c0b8b94550
commit
934f3a0d88
1
.dockerignore
Symbolic link
1
.dockerignore
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
.gitignore
|
@ -18,6 +18,7 @@ EXTRA_DIST = \
|
|||||||
autogen.sh \
|
autogen.sh \
|
||||||
configure.ng \
|
configure.ng \
|
||||||
.clang_complete \
|
.clang_complete \
|
||||||
|
.dockerignore \
|
||||||
.mailmap
|
.mailmap
|
||||||
|
|
||||||
clean-local:
|
clean-local:
|
||||||
|
62
contrib/Dockerfile
Normal file
62
contrib/Dockerfile
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# ngIRCd -- The Next Generation IRC Daemon
|
||||||
|
# Copyright (c)2001-2024 Alexander Barton (alex@barton.de) and Contributors
|
||||||
|
|
||||||
|
# Build Container
|
||||||
|
|
||||||
|
FROM docker.io/library/debian:stable-slim AS build
|
||||||
|
USER root
|
||||||
|
RUN apt-get -y update \
|
||||||
|
&& apt-get -y install --no-install-recommends \
|
||||||
|
autoconf \
|
||||||
|
automake \
|
||||||
|
build-essential \
|
||||||
|
expect \
|
||||||
|
gawk \
|
||||||
|
git \
|
||||||
|
libgnutls28-dev \
|
||||||
|
libident-dev \
|
||||||
|
libpam0g-dev \
|
||||||
|
openssl \
|
||||||
|
pkg-config \
|
||||||
|
telnet \
|
||||||
|
zlib1g-dev \
|
||||||
|
&& mkdir -p /usr/local/src/ngircd /opt/ngircd \
|
||||||
|
&& chown bin:bin /usr/local/src/ngircd /opt/ngircd
|
||||||
|
WORKDIR /usr/local/src/ngircd
|
||||||
|
COPY . /usr/local/src/ngircd
|
||||||
|
RUN chown -R bin /usr/local/src/ngircd
|
||||||
|
USER bin
|
||||||
|
RUN ./autogen.sh --prefix=/opt/ngircd \
|
||||||
|
--with-gnutls \
|
||||||
|
--with-iconv \
|
||||||
|
--with-ident \
|
||||||
|
--with-pam \
|
||||||
|
&& make all \
|
||||||
|
&& make -C src/ngircd check \
|
||||||
|
&& make install \
|
||||||
|
&& printf \
|
||||||
|
"# ngircd.conf\n\n[Global]\nServerGID=irc\nServerUID=irc\n\n[Options]\nIdent=no\nPAM=no\n\n[SSL]\nCAFile=/etc/ssl/certs/ca-certificates.crt\n" \
|
||||||
|
>/opt/ngircd/etc/ngircd.conf \
|
||||||
|
&& chmod -R a+rX /opt/ngircd
|
||||||
|
|
||||||
|
# Run container
|
||||||
|
|
||||||
|
FROM docker.io/library/debian:stable-slim
|
||||||
|
USER root
|
||||||
|
RUN apt-get -y update \
|
||||||
|
&& apt-get -y install --no-install-recommends --no-install-suggests \
|
||||||
|
ca-certificates \
|
||||||
|
catatonit \
|
||||||
|
libgnutls30 \
|
||||||
|
libident \
|
||||||
|
libpam0g \
|
||||||
|
libwrap0 \
|
||||||
|
zlib1g \
|
||||||
|
&& apt-get -y clean \
|
||||||
|
&& rm -rf /var/cache/debconf/*-old /var/lib/apt/lists/*
|
||||||
|
COPY --from=build /opt/ngircd /opt/ngircd
|
||||||
|
USER irc
|
||||||
|
ENTRYPOINT [ "/usr/bin/catatonit", "--", "/opt/ngircd/sbin/ngircd", "--nodaemon" ]
|
||||||
|
EXPOSE 6667 6697
|
||||||
|
HEALTHCHECK --interval=30s --timeout=5s --retries=1 --start-period=5s \
|
||||||
|
CMD [ "/usr/bin/grep", "-F", ":1A0B ", "/proc/net/tcp" ]
|
@ -14,6 +14,7 @@ SUBDIRS = Debian
|
|||||||
EXTRA_DIST = README.md \
|
EXTRA_DIST = README.md \
|
||||||
de.barton.ngircd.metainfo.xml \
|
de.barton.ngircd.metainfo.xml \
|
||||||
de.barton.ngircd.plist \
|
de.barton.ngircd.plist \
|
||||||
|
Dockerfile \
|
||||||
ngindent.sh \
|
ngindent.sh \
|
||||||
ngircd-bsd.sh \
|
ngircd-bsd.sh \
|
||||||
ngIRCd-Logo.gif \
|
ngIRCd-Logo.gif \
|
||||||
|
@ -9,6 +9,9 @@ This `contrib/` directory contains the following sub-folders and files:
|
|||||||
|
|
||||||
- `de.barton.ngircd.plist[.tmpl]`: launchd(8) property list file.
|
- `de.barton.ngircd.plist[.tmpl]`: launchd(8) property list file.
|
||||||
|
|
||||||
|
- `Dockerfile`: Container definition file, for Docker or Podman for example.
|
||||||
|
More information can be found in the `doc/Container.md` file.
|
||||||
|
|
||||||
- `ngindent.sh`: Script to indent the code of ngIRCd in the "standard way".
|
- `ngindent.sh`: Script to indent the code of ngIRCd in the "standard way".
|
||||||
|
|
||||||
- `ngircd-bsd.sh`: Start/stop script for FreeBSD.
|
- `ngircd-bsd.sh`: Start/stop script for FreeBSD.
|
||||||
|
82
doc/Container.md
Normal file
82
doc/Container.md
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
# [ngIRCd](https://ngircd.barton.de) - Container How-To
|
||||||
|
|
||||||
|
The ngIRCd daemon can be run as a containerized application, for example using
|
||||||
|
Docker or Podman (the latter being preferred and used in the examples below).
|
||||||
|
The container definition file, also known as "Docker file", is bundled with this
|
||||||
|
distribution as `contrib/Dockerfile` and based on the official "stable-slim"
|
||||||
|
container of the Debian project (see https://hub.docker.com/_/debian).
|
||||||
|
|
||||||
|
## Building the container
|
||||||
|
|
||||||
|
You can use the following command to build the ngIRCd container image:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
podman build --format=docker -f contrib/Dockerfile .
|
||||||
|
```
|
||||||
|
|
||||||
|
The `Dockerfile` includes a `HEALTHCHECK` directive, which is not supported by
|
||||||
|
the default OCI 1.0 image format, therefore we use the "docker" format here.
|
||||||
|
|
||||||
|
If you are using Git, you can tag the built image like this (use the ID of the
|
||||||
|
newly built image!):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
podman tag <container_id> "ngircd:$(git describe --tags | sed 's/rel-//g')"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Running the container
|
||||||
|
|
||||||
|
You can use this command to run the ngIRCd container using Podman, for example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
podman run --name=ngircd --detach \
|
||||||
|
-p 127.0.0.1:6667:6667 \
|
||||||
|
ngircd:<tag>
|
||||||
|
```
|
||||||
|
|
||||||
|
This creates and starts a new container named "ngircd" from the image
|
||||||
|
"ngircd:<tag>" (you habe to substitute _<tag>_ with the real tag name here!) and
|
||||||
|
maps the host port 6667 on localhost to the port 6667 inside of the container.
|
||||||
|
|
||||||
|
### Configuring the container
|
||||||
|
|
||||||
|
The ngIRCd inside of the container is installed inside of `/opt/ngircd/` and the
|
||||||
|
default drop-in directory is `/opt/ngircd/etc/ngircd.conf.d`. Therefore you can
|
||||||
|
map a host folder to this drop-in directory inside of the container and place
|
||||||
|
drop-in configuration file(s) in the host path like this:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p /host/path/to/ngircd/conf.d
|
||||||
|
touch /host/path/to/ngircd/conf.d/my.conf
|
||||||
|
podman run --name=ngircd --detach \
|
||||||
|
-p 127.0.0.1:6667:6667 \
|
||||||
|
-v /host/path/to/ngircd/conf.d:/opt/ngircd/etc/ngircd.conf.d' \
|
||||||
|
ngircd:<tag>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Testing the configuration
|
||||||
|
|
||||||
|
As with the native daemon, it is a very good idea to validate the configuration
|
||||||
|
of the daemon after making changes.
|
||||||
|
|
||||||
|
With Docker and Podman, you can pass arguments to the `ngircd` binary inside of
|
||||||
|
the container by simply appending it to the "run" command line like this:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
podman run --name=ngircd --rm -it \
|
||||||
|
-v /host/path/to/ngircd/conf.d:/opt/ngircd/etc/ngircd.conf.d' \
|
||||||
|
ngircd:<tag>
|
||||||
|
--configtest
|
||||||
|
```
|
||||||
|
|
||||||
|
### Reloading the daemon configuration in a running container
|
||||||
|
|
||||||
|
To activate changed configuration of ngIRCd, you can either restart the
|
||||||
|
container (which will disconnect all currently connected clients) or signal
|
||||||
|
`ngircd`(8) inside of the running container to reload its configuration file(s).
|
||||||
|
|
||||||
|
The latter can be done with this command, for example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
podman exec -it ngircd /bin/bash -c 'kill -HUP $(/usr/bin/pidof -s ngircd)'
|
||||||
|
```
|
@ -21,6 +21,7 @@ static_docs = \
|
|||||||
Bopm.txt \
|
Bopm.txt \
|
||||||
Capabilities.txt \
|
Capabilities.txt \
|
||||||
Commands.txt \
|
Commands.txt \
|
||||||
|
Container.md \
|
||||||
Contributing.txt \
|
Contributing.txt \
|
||||||
FAQ.md \
|
FAQ.md \
|
||||||
HowToRelease.txt \
|
HowToRelease.txt \
|
||||||
|
Loading…
Reference in New Issue
Block a user