ircu2/tools/linesync/README.md

167 lines
4.0 KiB
Markdown

# Linesync
Git-based configuration sync for Nefarious IRCd. Pulls config updates from a git repository and sends SIGHUP to reload.
## Using Docker Compose
Add linesync to your `docker-compose.yml`:
```yaml
services:
nefarious:
image: ghcr.io/evilnet/nefarious2:latest
container_name: nefarious
volumes:
- ./local.conf:/home/nefarious/ircd/local.conf
ports:
- "6667:6667"
linesync:
image: ghcr.io/evilnet/nefarious2-linesync:latest
depends_on:
- nefarious
volumes:
- ./linesync-ssh:/home/linesync/.ssh
- ./local.conf:/home/linesync/ircd/local.conf
- ./linesync:/home/linesync/ircd/linesync
- /var/run/docker.sock:/var/run/docker.sock
environment:
NEFARIOUS_CONTAINER: nefarious
SYNC_INTERVAL: 300
IRCD_CONF: /home/linesync/ircd/local.conf
```
### Setup
```bash
# Create directories
mkdir -p ./linesync-ssh ./linesync
touch ./local.conf
# Generate SSH key
docker compose run --rm linesync keygen
# Add the printed public key to your git repo's deploy keys
# Clone the linesync repo
docker compose run --rm -e GIT_REPOSITORY=git@github.com:yourorg/linesync-data.git linesync setup
# Start services
docker compose up -d
```
### Manual sync
```bash
docker compose run --rm linesync once
```
---
## Using Standalone Docker
### Setup
```bash
# Build
cd tools/linesync
docker build -t linesync .
# Create directories
mkdir -p ./linesync-ssh ./linesync
touch ./local.conf
# Generate SSH key
docker run --rm -v ./linesync-ssh:/home/linesync/.ssh linesync keygen
# Add the printed public key to your git repo's deploy keys
# Clone the linesync repo
docker run --rm \
-v ./linesync-ssh:/home/linesync/.ssh \
-v ./local.conf:/home/linesync/ircd/local.conf \
-v ./linesync:/home/linesync/ircd/linesync \
-e GIT_REPOSITORY=git@github.com:yourorg/linesync-data.git \
linesync setup
```
### Run continuous sync
```bash
docker run -d \
--name linesync \
-v ./linesync-ssh:/home/linesync/.ssh \
-v ./local.conf:/home/linesync/ircd/local.conf \
-v ./linesync:/home/linesync/ircd/linesync \
-v /var/run/docker.sock:/var/run/docker.sock \
-e NEFARIOUS_CONTAINER=nefarious \
-e SYNC_INTERVAL=300 \
-e IRCD_CONF=/home/linesync/ircd/local.conf \
linesync sync
```
### Run once
```bash
docker run --rm \
-v ./linesync-ssh:/home/linesync/.ssh \
-v ./local.conf:/home/linesync/ircd/local.conf \
-v ./linesync:/home/linesync/ircd/linesync \
-v /var/run/docker.sock:/var/run/docker.sock \
-e IRCD_CONF=/home/linesync/ircd/local.conf \
linesync once
```
### Debug shell
```bash
docker run --rm -it \
-v ./linesync-ssh:/home/linesync/.ssh \
-v ./local.conf:/home/linesync/ircd/local.conf \
-v ./linesync:/home/linesync/ircd/linesync \
linesync shell
```
---
## Environment Variables
| Variable | Default | Description |
|----------|---------|-------------|
| `GIT_REPOSITORY` | — | Git repo URL (required for setup) |
| `NEFARIOUS_CONTAINER` | `nefarious` | Container to send SIGHUP |
| `SYNC_INTERVAL` | `300` | Seconds between syncs |
| `IRCD_CONF` | `/home/linesync/ircd/ircd.conf` | Config file path |
| `CERT_TAG` | — | Git tag for SSL cert sync |
| `CERT_FILE` | `fullchain.pem` | Output path for synced certificate |
## Config File Format
Your git repository needs a `linesync.data` file with IRC config blocks. These get inserted into your config between markers:
```
# BEGIN LINESYNC
... (managed by linesync) ...
# END LINESYNC
```
Markers are added automatically on first sync.
## SSL Certificate Sync
Store certs in git tags:
```bash
git tag -f myserver-cert $(cat fullchain.pem | git hash-object -w --stdin)
git push origin :refs/tags/myserver-cert
git push --tags
```
Then set `CERT_TAG=myserver-cert` in your environment. To write to a specific file (e.g., `ircd.pem`), also set `CERT_FILE=/home/linesync/ircd/ircd.pem`.
## Notes
- UID/GID is auto-detected from bind mounts — files will be owned by your host user
- Docker socket access grants container control privileges
- Use read-only deploy keys