Add Debian packaging support with configurable binding

- Add complete debian/ packaging structure for .deb creation
- Support BIND_ADDR environment variable (defaults to 0.0.0.0)
- Create /etc/default/naas config file (defaults to localhost binding)
- Systemd service reads from /etc/default/naas
- Package installs but does not auto-enable service
- Upgrades restart service only if already enabled
- Proper user creation and cleanup on install/remove

Key files:
- debian/control: Package metadata with rustup build dependency support
- debian/naas.default: Configuration template for /etc/default/naas
- debian/naas.service: Updated systemd service with EnvironmentFile
- debian/postinst: Creates naas user, restarts on upgrade if enabled
- debian/prerm: Stops service on removal
- debian/postrm: Cleans up user on purge
- src/main.rs: Added BIND_ADDR support for configurable binding

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Ole-Morten Duesund 2025-09-29 13:35:38 +02:00
commit 57628d940d
11 changed files with 182 additions and 1 deletions

10
debian/changelog vendored Normal file
View file

@ -0,0 +1,10 @@
naas (1.0.0-1) unstable; urgency=medium
* Initial release of NaaS (No as a Service)
* HTTP service that always responds with "no"
* Multiple response formats: text, JSON, XML, YAML, boolean
* Minimalist web frontend and interactive playground
* Health check endpoint
* Systemd service integration
-- Ole-Morten Duesund <olemd@glemt.net> Fri, 27 Sep 2024 15:00:00 +0200

26
debian/control vendored Normal file
View file

@ -0,0 +1,26 @@
Source: naas
Section: net
Priority: optional
Maintainer: Ole-Morten Duesund <olemd@glemt.net>
Build-Depends: debhelper-compat (= 13), cargo | rustup, rustc | rustup
Standards-Version: 4.6.0
Homepage: https://kode.naiv.no/naas
Vcs-Git: https://kode.naiv.no/naas.git
Vcs-Browser: https://kode.naiv.no/naas
Package: naas
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, systemd
Description: No as a Service - HTTP service that always says "no"
NaaS (No as a Service) is a lightweight HTTP service written in pure Rust
that always responds with "no" in various formats including plain text,
JSON, XML, YAML, and boolean.
.
Features include:
- Minimal dependencies (pure Rust, standard library only)
- Multiple response formats
- Mobile-responsive web frontend
- CORS support
- Health check endpoint
- Optimized for small binary size (~1MB)
- Container-ready with health checks

12
debian/naas.default vendored Normal file
View file

@ -0,0 +1,12 @@
# Configuration for NaaS (No as a Service)
# This file is sourced by the systemd service
# Port to listen on (default: 8080)
PORT=8080
# Bind address (default: 127.0.0.1 for localhost only)
# Use 0.0.0.0 to listen on all interfaces
BIND_ADDR=127.0.0.1
# Additional options can be added here as needed
# RUST_LOG=info

1
debian/naas.install vendored Normal file
View file

@ -0,0 +1 @@
target/release/naas usr/bin/

34
debian/naas.service vendored Normal file
View file

@ -0,0 +1,34 @@
[Unit]
Description=No as a Service (NaaS)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
Restart=always
RestartSec=10
TimeoutStopSec=30
# User configuration
User=naas
Group=naas
# Load configuration from /etc/default/naas
EnvironmentFile=-/etc/default/naas
# Binary execution
ExecStart=/usr/bin/naas
# Security settings
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=
# Resource limits
MemoryLimit=256M
CPUQuota=50%
[Install]
WantedBy=multi-user.target

31
debian/postinst vendored Executable file
View file

@ -0,0 +1,31 @@
#!/bin/bash
set -e
case "$1" in
configure)
# Create naas user if it doesn't exist
if ! getent passwd naas >/dev/null; then
adduser --system --group --no-create-home \
--disabled-password --disabled-login \
--shell /bin/false naas
fi
# Reload systemd daemon to pick up new service file
if [ -d /run/systemd/system ]; then
systemctl daemon-reload || true
fi
# On upgrade, restart the service if it's already enabled
if [ -n "$2" ] && [ -d /run/systemd/system ]; then
if systemctl is-enabled naas >/dev/null 2>&1; then
echo "Restarting naas service..."
systemctl restart naas || true
fi
fi
;;
esac
#DEBHELPER#
exit 0

27
debian/postrm vendored Executable file
View file

@ -0,0 +1,27 @@
#!/bin/bash
set -e
case "$1" in
purge)
# Remove naas user on purge (only if package is completely removed)
if getent passwd naas >/dev/null; then
deluser --system naas 2>/dev/null || true
fi
# Reload systemd daemon
if [ -d /run/systemd/system ]; then
systemctl daemon-reload || true
fi
;;
remove)
# Reload systemd daemon to remove service
if [ -d /run/systemd/system ]; then
systemctl daemon-reload || true
fi
;;
esac
#DEBHELPER#
exit 0

18
debian/prerm vendored Executable file
View file

@ -0,0 +1,18 @@
#!/bin/bash
set -e
case "$1" in
remove|deconfigure)
# Stop the service if it's running
if [ -d /run/systemd/system ]; then
if systemctl is-active naas >/dev/null 2>&1; then
systemctl stop naas || true
fi
fi
;;
esac
#DEBHELPER#
exit 0

20
debian/rules vendored Executable file
View file

@ -0,0 +1,20 @@
#!/usr/bin/make -f
%:
dh $@
override_dh_auto_build:
cargo build --release
override_dh_auto_test:
cargo test
override_dh_auto_clean:
cargo clean || true
override_dh_auto_install:
dh_auto_install
# Install config file
install -D -m 644 debian/naas.default debian/naas/etc/default/naas
# Install systemd service
install -D -m 644 debian/naas.service debian/naas/lib/systemd/system/naas.service

1
debian/source/format vendored Normal file
View file

@ -0,0 +1 @@
3.0 (native)