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:
parent
ebd0fcc448
commit
57628d940d
11 changed files with 182 additions and 1 deletions
10
debian/changelog
vendored
Normal file
10
debian/changelog
vendored
Normal 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
26
debian/control
vendored
Normal 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
12
debian/naas.default
vendored
Normal 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
1
debian/naas.install
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
target/release/naas usr/bin/
|
||||
34
debian/naas.service
vendored
Normal file
34
debian/naas.service
vendored
Normal 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
31
debian/postinst
vendored
Executable 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
27
debian/postrm
vendored
Executable 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
18
debian/prerm
vendored
Executable 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
20
debian/rules
vendored
Executable 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
1
debian/source/format
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
3.0 (native)
|
||||
|
|
@ -330,7 +330,8 @@ const PLAYGROUND_FRONTEND: &str = r#"<!DOCTYPE html>
|
|||
|
||||
fn main() {
|
||||
let port = std::env::var("PORT").unwrap_or_else(|_| "8080".to_string());
|
||||
let addr = format!("0.0.0.0:{}", port);
|
||||
let bind_addr = std::env::var("BIND_ADDR").unwrap_or_else(|_| "0.0.0.0".to_string());
|
||||
let addr = format!("{}:{}", bind_addr, port);
|
||||
|
||||
let listener = TcpListener::bind(&addr).expect("Failed to bind to address");
|
||||
println!("No as a Service running on http://{}", addr);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue