Rename project to ddns-service

This commit is contained in:
2026-01-18 14:32:41 +01:00
parent d0ac96bad8
commit 27fd8ab438
18 changed files with 61 additions and 61 deletions

View File

@@ -1,4 +1,4 @@
# DDNS Daemon # DDNS Service
Dynamic DNS update service with CLI administration. Accepts HTTP(S) requests to update DNS A/AAAA records using the dns-manager library. Dynamic DNS update service with CLI administration. Accepts HTTP(S) requests to update DNS A/AAAA records using the dns-manager library.
@@ -20,9 +20,9 @@ Dynamic DNS update service with CLI administration. Accepts HTTP(S) requests to
## Project Structure ## Project Structure
``` ```
ddns-daemon/ ddns-service/
├── ddns-daemon # Main executable ├── ddns-service # Main executable
├── ddns_daemon/ # Python package ├── ddns_service/ # Python package
│ ├── __init__.py # Version info │ ├── __init__.py # Version info
│ ├── cleanup.py # TTL expiry cleanup │ ├── cleanup.py # TTL expiry cleanup
│ ├── cli.py # CLI commands │ ├── cli.py # CLI commands
@@ -35,7 +35,7 @@ ddns-daemon/
│ ├── server.py # HTTP server │ ├── server.py # HTTP server
│ └── validation.py # Hostname validation │ └── validation.py # Hostname validation
├── config.example.toml ├── config.example.toml
├── ddns-daemon.service ├── ddns-service.service
├── requirements.txt ├── requirements.txt
└── README.md └── README.md
``` ```
@@ -56,7 +56,7 @@ pip install -r requirements.txt
## Configuration ## Configuration
Copy `config.example.toml` to `/etc/ddns-daemon/config.toml` or `./config.toml`: Copy `config.example.toml` to `/etc/ddns-service/config.toml` or `./config.toml`:
```toml ```toml
[daemon] [daemon]
@@ -66,19 +66,19 @@ Copy `config.example.toml` to `/etc/ddns-daemon/config.toml` or `./config.toml`:
# log_target = "stdout" # default: "stdout", or "syslog", "file" # log_target = "stdout" # default: "stdout", or "syslog", "file"
# syslog_socket = "/dev/log" # default: "/dev/log" # syslog_socket = "/dev/log" # default: "/dev/log"
# syslog_facility = "daemon" # default: "daemon" # syslog_facility = "daemon" # default: "daemon"
# log_file = "/var/log/ddns-daemon.log" # default, used if log_target = "file" # log_file = "/var/log/ddns-service.log" # default, used if log_target = "file"
# log_file_size = 52428800 # default: 52428800 (50 MB in bytes) # log_file_size = 52428800 # default: 52428800 (50 MB in bytes)
# log_versions = 5 # default: 5 backup files # log_versions = 5 # default: 5 backup files
# log_requests = false # default: false # log_requests = false # default: false
# ssl = false # default: false # ssl = false # default: false
ssl_cert_file = "/etc/ddns-daemon/cert.pem" # required if ssl = true ssl_cert_file = "/etc/ddns-service/cert.pem" # required if ssl = true
ssl_key_file = "/etc/ddns-daemon/key.pem" # required if ssl = true ssl_key_file = "/etc/ddns-service/key.pem" # required if ssl = true
# proxy_header = "" # default: "" (disabled), e.g. "X-Forwarded-For" # proxy_header = "" # default: "" (disabled), e.g. "X-Forwarded-For"
# trusted_proxies = [] # default: [], e.g. ["127.0.0.1", "10.0.0.0/8"] # trusted_proxies = [] # default: [], e.g. ["127.0.0.1", "10.0.0.0/8"]
[database] [database]
# backend = "sqlite" # default: "sqlite", or "mariadb" # backend = "sqlite" # default: "sqlite", or "mariadb"
path = "/var/lib/ddns-daemon/ddns.db" # required for sqlite path = "/var/lib/ddns-service/ddns.db" # required for sqlite
[dns_service] [dns_service]
# manager_config_file = "/etc/dns-manager/config.yml" # default # manager_config_file = "/etc/dns-manager/config.yml" # default
@@ -142,64 +142,64 @@ password = ["password"]
### Initialize Database ### Initialize Database
```bash ```bash
./ddns-daemon --init-db ./ddns-service --init-db
``` ```
### User Management ### User Management
```bash ```bash
# List users # List users
./ddns-daemon user list ./ddns-service user list
# Add user (prompts for password) # Add user (prompts for password)
./ddns-daemon user add myuser user@example.com ./ddns-service user add myuser user@example.com
# Delete user (fails if hostnames exist) # Delete user (fails if hostnames exist)
./ddns-daemon user delete myuser ./ddns-service user delete myuser
# Change password # Change password
./ddns-daemon user passwd myuser ./ddns-service user passwd myuser
# Update email # Update email
./ddns-daemon user email myuser new@example.com ./ddns-service user email myuser new@example.com
``` ```
### Hostname Management ### Hostname Management
```bash ```bash
# List all hostnames # List all hostnames
./ddns-daemon hostname list ./ddns-service hostname list
# List hostnames for specific user # List hostnames for specific user
./ddns-daemon hostname list --user myuser ./ddns-service hostname list --user myuser
# Add hostname # Add hostname
./ddns-daemon hostname add myuser mypc.dyn.example.com dyn.example.com ./ddns-service hostname add myuser mypc.dyn.example.com dyn.example.com
# Add hostname with custom TTLs # Add hostname with custom TTLs
./ddns-daemon hostname add myuser mypc.dyn.example.com dyn.example.com \ ./ddns-service hostname add myuser mypc.dyn.example.com dyn.example.com \
--dns-ttl 60 --expiry-ttl 7200 --dns-ttl 60 --expiry-ttl 7200
# Modify hostname TTLs # Modify hostname TTLs
./ddns-daemon hostname modify mypc.dyn.example.com --dns-ttl 120 ./ddns-service hostname modify mypc.dyn.example.com --dns-ttl 120
# Delete hostname # Delete hostname
./ddns-daemon hostname delete mypc.dyn.example.com ./ddns-service hostname delete mypc.dyn.example.com
``` ```
### Manual Cleanup ### Manual Cleanup
```bash ```bash
./ddns-daemon cleanup ./ddns-service cleanup
``` ```
### Run Daemon ### Run Daemon
```bash ```bash
./ddns-daemon --daemon ./ddns-service --daemon
# With debug logging # With debug logging
./ddns-daemon --daemon --debug ./ddns-service --daemon --debug
``` ```
### Debug Mode ### Debug Mode
@@ -207,8 +207,8 @@ password = ["password"]
Use `--debug` to enable debug logging for any command: Use `--debug` to enable debug logging for any command:
```bash ```bash
./ddns-daemon --debug user list ./ddns-service --debug user list
./ddns-daemon --debug cleanup ./ddns-service --debug cleanup
``` ```
## HTTP API ## HTTP API
@@ -276,30 +276,30 @@ useradd -r -s /sbin/nologin ddns
2. Create directories: 2. Create directories:
```bash ```bash
mkdir -p /etc/ddns-daemon /var/lib/ddns-daemon mkdir -p /etc/ddns-service /var/lib/ddns-service
chown ddns:ddns /var/lib/ddns-daemon chown ddns:ddns /var/lib/ddns-service
``` ```
3. Install files: 3. Install files:
```bash ```bash
cp -r ddns_daemon /opt/ddns-daemon/ cp -r ddns_service /opt/ddns-service/
cp ddns-daemon /opt/ddns-daemon/ cp ddns-service /opt/ddns-service/
cp config.example.toml /etc/ddns-daemon/config.toml cp config.example.toml /etc/ddns-service/config.toml
cp ddns-daemon.service /etc/systemd/system/ cp ddns-service.service /etc/systemd/system/
``` ```
4. Configure and start: 4. Configure and start:
```bash ```bash
# Edit config # Edit config
vi /etc/ddns-daemon/config.toml vi /etc/ddns-service/config.toml
# Initialize database # Initialize database
/opt/ddns-daemon/ddns_daemon.py --init-db /opt/ddns-service/ddns-service --init-db
# Enable and start # Enable and start
systemctl daemon-reload systemctl daemon-reload
systemctl enable ddns-daemon systemctl enable ddns-service
systemctl start ddns-daemon systemctl start ddns-service
``` ```
## Security Considerations ## Security Considerations
@@ -352,7 +352,7 @@ Each HTTP request is assigned a random 8-character transaction ID for log correl
When using syslog, timestamps are omitted (syslog provides them): When using syslog, timestamps are omitted (syslog provides them):
``` ```
ddns-daemon[12345]: [INFO] [a1b2c3d4] Updated: hostname=mypc.dyn.example.com ipv4=1.2.3.4 ipv6=N/A ddns-service[12345]: [INFO] [a1b2c3d4] Updated: hostname=mypc.dyn.example.com ipv4=1.2.3.4 ipv6=N/A
``` ```
### CLI Logging ### CLI Logging

View File

@@ -5,19 +5,19 @@
# log_target = "stdout" # default, "stdout", "syslog" or "file" # log_target = "stdout" # default, "stdout", "syslog" or "file"
# syslog_socket = "/dev/log" # default # syslog_socket = "/dev/log" # default
# syslog_facility = "daemon" # default # syslog_facility = "daemon" # default
# log_file = "/var/log/ddns-daemon.log" # default, used if log_target = "file" # log_file = "/var/log/ddns-service.log" # default, used if log_target = "file"
# log_file_size = 52428800 # default, 50 MB in bytes # log_file_size = 52428800 # default, 50 MB in bytes
# log_versions = 5 # default, 5 backup files # log_versions = 5 # default, 5 backup files
# log_requests = false # default # log_requests = false # default
# ssl = false # default # ssl = false # default
ssl_cert_file = "/etc/ddns-daemon/cert.pem" # required if ssl = true ssl_cert_file = "/etc/ddns-service/cert.pem" # required if ssl = true
ssl_key_file = "/etc/ddns-daemon/key.pem" # required if ssl = true ssl_key_file = "/etc/ddns-service/key.pem" # required if ssl = true
# proxy_header = "" # default (disabled), header name e.g. "X-Forwarded-For" # proxy_header = "" # default (disabled), header name e.g. "X-Forwarded-For"
# trusted_proxies = [] # default, list of trusted proxy IPs/CIDRs # trusted_proxies = [] # default, list of trusted proxy IPs/CIDRs
[database] [database]
# backend = "sqlite" # default, "sqlite", or "mariadb" # backend = "sqlite" # default, "sqlite", or "mariadb"
path = "/var/lib/ddns-daemon/ddns.db" # required for sqlite path = "/var/lib/ddns-service/ddns.db" # required for sqlite
# host = "localhost" # required for mariadb # host = "localhost" # required for mariadb
# port = 3306 # required for mariadb # port = 3306 # required for mariadb
# user = "ddns" # required for mariadb # user = "ddns" # required for mariadb

View File

@@ -1,12 +1,12 @@
#!/sbin/openrc-run #!/sbin/openrc-run
description="DDNS Daemon - Dynamic DNS Update Service" description="DDNS Service - Dynamic DNS Update Service"
: ${USER:=ddns} : ${USER:=ddns}
: ${GROUP:=ddns} : ${GROUP:=ddns}
: ${OPTIONS:=} : ${OPTIONS:=}
command="/usr/bin/ddns-daemon" command="/usr/bin/ddns-service"
command_args="--daemon ${OPTIONS}" command_args="--daemon ${OPTIONS}"
command_user="${USER}:${GROUP}" command_user="${USER}:${GROUP}"
command_background="yes" command_background="yes"
@@ -18,5 +18,5 @@ depend() {
} }
start_pre() { start_pre() {
checkpath --directory --owner ${USER}:${GROUP} --mode 0750 /var/lib/ddns-daemon checkpath --directory --owner ${USER}:${GROUP} --mode 0750 /var/lib/ddns-service
} }

View File

@@ -1,13 +1,13 @@
[Unit] [Unit]
Description=DDNS Daemon - Dynamic DNS Update Service Description=DDNS Service - Dynamic DNS Update Service
After=network.target After=network.target
[Service] [Service]
Type=simple Type=simple
User=ddns User=ddns
Group=ddns Group=ddns
WorkingDirectory=/opt/ddns-daemon WorkingDirectory=/opt/ddns-service
ExecStart=/usr/bin/ddns-daemon --daemon ExecStart=/usr/bin/ddns-service --daemon
ExecReload=/bin/kill -HUP $MAINPID ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure Restart=on-failure
RestartSec=5 RestartSec=5
@@ -17,7 +17,7 @@ NoNewPrivileges=yes
ProtectSystem=strict ProtectSystem=strict
ProtectHome=yes ProtectHome=yes
PrivateTmp=yes PrivateTmp=yes
ReadWritePaths=/var/lib/ddns-daemon ReadWritePaths=/var/lib/ddns-service
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target

View File

@@ -3,10 +3,10 @@ requires = ["setuptools >= 77.0.3"]
build-backend = "setuptools.build_meta" build-backend = "setuptools.build_meta"
[tool.setuptools.dynamic] [tool.setuptools.dynamic]
version = {attr = "ddns_daemon.__version__"} version = {attr = "ddns_service.__version__"}
[project] [project]
name = "ddns_daemon" name = "ddns_service"
dynamic = ["version"] dynamic = ["version"]
dependencies = [ dependencies = [
"dns-manager @ git+https://git.ccc-rheintal.ch/spacefreak/dns-manager.git", "dns-manager @ git+https://git.ccc-rheintal.ch/spacefreak/dns-manager.git",
@@ -23,7 +23,7 @@ maintainers = [
description = "Dynamic DNS update service with CLI administration." description = "Dynamic DNS update service with CLI administration."
readme = "README.md" readme = "README.md"
license = "GPL-3.0-only" license = "GPL-3.0-only"
keywords = ["dns", "ddns", "daemon", "http", "https"] keywords = ["dns", "ddns", "service", "http", "https"]
classifiers = [ classifiers = [
"Development Status :: 4 - Beta", "Development Status :: 4 - Beta",
"Topic :: Internet :: Name Service (DNS)", "Topic :: Internet :: Name Service (DNS)",
@@ -35,5 +35,5 @@ classifiers = [
mysql = ["pymysql>=1.1.0"] mysql = ["pymysql>=1.1.0"]
[project.scripts] [project.scripts]
ddns-daemon = "ddns_daemon.main:main" ddns-service = "ddns_service.main:main"

View File

@@ -1,5 +1,5 @@
""" """
DDNS Daemon - Dynamic DNS update service. DDNS Service - Dynamic DNS update service.
A daemon that accepts HTTP(S) requests to dynamically update DNS entries. A daemon that accepts HTTP(S) requests to dynamically update DNS entries.
Includes CLI administration tools for user and hostname management. Includes CLI administration tools for user and hostname management.

View File

@@ -10,7 +10,7 @@ except ImportError:
# Default config paths (searched in order) # Default config paths (searched in order)
CONFIG_PATHS = [ CONFIG_PATHS = [
"/etc/ddns-daemon/config.toml", "/etc/ddns-service/config.toml",
"./config.toml", "./config.toml",
] ]
@@ -133,7 +133,7 @@ def load_config(config_path):
cfg["daemon"].setdefault("log_target", "stdout") cfg["daemon"].setdefault("log_target", "stdout")
cfg["daemon"].setdefault("syslog_socket", "/dev/log") cfg["daemon"].setdefault("syslog_socket", "/dev/log")
cfg["daemon"].setdefault("syslog_facility", "daemon") cfg["daemon"].setdefault("syslog_facility", "daemon")
cfg["daemon"].setdefault("log_file", "/var/log/ddns-daemon.log") cfg["daemon"].setdefault("log_file", "/var/log/ddns-service.log")
cfg["daemon"].setdefault("log_file_size", 52428800) cfg["daemon"].setdefault("log_file_size", 52428800)
cfg["daemon"].setdefault("log_versions", 5) cfg["daemon"].setdefault("log_versions", 5)
cfg["daemon"].setdefault("log_requests", False) cfg["daemon"].setdefault("log_requests", False)

View File

@@ -70,7 +70,7 @@ def setup_logging(
target="stdout", target="stdout",
syslog_socket="/dev/log", syslog_socket="/dev/log",
syslog_facility="daemon", syslog_facility="daemon",
log_file="/var/log/ddns-daemon.log", log_file="/var/log/ddns-service.log",
log_file_size=52428800, log_file_size=52428800,
log_versions=5, log_versions=5,
): ):
@@ -104,8 +104,8 @@ def setup_logging(
facility=facility, facility=facility,
) )
formatter = TxnIdFormatter( formatter = TxnIdFormatter(
"ddns-daemon[%(process)d]: [%(levelname)s] [%(txn_id)s] %(message)s", "ddns-service[%(process)d]: [%(levelname)s] [%(txn_id)s] %(message)s",
"ddns-daemon[%(process)d]: [%(levelname)s] %(message)s", "ddns-service[%(process)d]: [%(levelname)s] %(message)s",
) )
elif target == "file": elif target == "file":
handler = logging.handlers.RotatingFileHandler( handler = logging.handlers.RotatingFileHandler(

View File

@@ -1,5 +1,5 @@
""" """
DDNS Daemon - Dynamic DNS update service. DDNS Service - Dynamic DNS update service.
Main executable for CLI and daemon mode. Main executable for CLI and daemon mode.
""" """
@@ -30,7 +30,7 @@ from .server import run_daemon
def build_parser(): def build_parser():
"""Build the argument parser.""" """Build the argument parser."""
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description="DDNS Daemon - Dynamic DNS update service", description="DDNS Service - Dynamic DNS update service",
formatter_class=argparse.RawDescriptionHelpFormatter, formatter_class=argparse.RawDescriptionHelpFormatter,
) )
parser.add_argument( parser.add_argument(