From f7e8cb0969c13d0ee81afe5f2fdd03a38d687aa7 Mon Sep 17 00:00:00 2001 From: Sunil Purushottam Thakare Date: Sun, 25 May 2025 11:45:47 +0530 Subject: [PATCH 1/2] Add files via upload --- build-deb.sh | 110 ++++++++++++++++++++++++++++++++++++++++++++++++ build-rpm.sh | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++ install.sh | 82 ++++++++++++++++++++++++++++++++++++ 3 files changed, 307 insertions(+) create mode 100644 build-deb.sh create mode 100644 build-rpm.sh create mode 100644 install.sh diff --git a/build-deb.sh b/build-deb.sh new file mode 100644 index 0000000..f809875 --- /dev/null +++ b/build-deb.sh @@ -0,0 +1,110 @@ +#!/bin/bash + +# Check for required tools +if ! command -v dpkg-deb &> /dev/null; then + echo "dpkg-deb is required but not installed. Please install dpkg-dev package." + exit 1 +fi + +# Package information +PACKAGE="nx9-dns-server" +VERSION=$(grep '^version =' Cargo.toml | cut -d '"' -f2) +ARCH=$(dpkg --print-architecture) +MAINTAINER="Sunil Purushottam Thakare" +DESCRIPTION="High-performance DNS server with DNSSEC support" + +# Create package directory structure +PKGDIR="$PACKAGE-$VERSION" +mkdir -p "$PKGDIR/DEBIAN" +mkdir -p "$PKGDIR/usr/local/bin" +mkdir -p "$PKGDIR/etc/nx9-dns-server" +mkdir -p "$PKGDIR/usr/lib/systemd/system" +mkdir -p "$PKGDIR/var/lib/nx9-dns-server" +mkdir -p "$PKGDIR/usr/share/doc/$PACKAGE" + +# Build the project +cargo build --release + +# Create control file +cat > "$PKGDIR/DEBIAN/control" << EOF +Package: $PACKAGE +Version: $VERSION +Architecture: $ARCH +Maintainer: $MAINTAINER +Depends: libc6 (>= 2.17), adduser +Section: net +Priority: optional +Homepage: https://github.com/yourusername/nx9-dns-server +Description: $DESCRIPTION + NX9 DNS Server is a high-performance DNS server implementation + with full DNSSEC support. It provides both authoritative and + recursive DNS services with modern features like cache management + and metrics export. +EOF + +# Create postinst script +cat > "$PKGDIR/DEBIAN/postinst" << EOF +#!/bin/sh +set -e + +# Create nx9-dns user if it doesn't exist +if ! getent passwd nx9-dns > /dev/null; then + adduser --system --group --no-create-home --home /nonexistent nx9-dns +fi + +# Set permissions +chown -R nx9-dns:nx9-dns /var/lib/nx9-dns-server +chmod 755 /var/lib/nx9-dns-server + +# Enable and start service +if [ -x "/bin/systemctl" ]; then + systemctl daemon-reload + systemctl enable nx9-dns-server.service || true + systemctl start nx9-dns-server.service || true +fi +EOF + +# Create prerm script +cat > "$PKGDIR/DEBIAN/prerm" << EOF +#!/bin/sh +set -e + +if [ -x "/bin/systemctl" ]; then + systemctl stop nx9-dns-server.service || true + systemctl disable nx9-dns-server.service || true +fi +EOF + +# Set permissions for maintainer scripts +chmod 755 "$PKGDIR/DEBIAN/postinst" +chmod 755 "$PKGDIR/DEBIAN/prerm" + +# Copy files +cp target/release/nx9-dns-server "$PKGDIR/usr/local/bin/" +cp config/nx9-dns-server.conf "$PKGDIR/etc/nx9-dns-server/" 2>/dev/null || echo "No config file found, skipping..." +cp README.md LICENSE "$PKGDIR/usr/share/doc/$PACKAGE/" 2>/dev/null || echo "No documentation files found, skipping..." + +# Create systemd service file +cat > "$PKGDIR/usr/lib/systemd/system/nx9-dns-server.service" << EOF +[Unit] +Description=NX9 DNS Server +After=network.target + +[Service] +ExecStart=/usr/local/bin/nx9-dns-server +Environment=DNS_DB_PATH=/var/lib/nx9-dns-server/dns.db +Environment=DNSSEC_KEY_FILE=/etc/nx9-dns-server/dnssec.key +Restart=always +User=nx9-dns + +[Install] +WantedBy=multi-user.target +EOF + +# Build the package +dpkg-deb --build "$PKGDIR" + +# Cleanup +rm -rf "$PKGDIR" + +echo "Debian package created: ${PKGDIR}.deb" \ No newline at end of file diff --git a/build-rpm.sh b/build-rpm.sh new file mode 100644 index 0000000..31983a9 --- /dev/null +++ b/build-rpm.sh @@ -0,0 +1,115 @@ +#!/bin/bash + +# Check for required tools +if ! command -v rpmbuild &> /dev/null; then + echo "rpmbuild is required but not installed. Please install rpm-build package." + exit 1 +fi + +# Package information +NAME="nx9-dns-server" +VERSION=$(grep '^version =' Cargo.toml | cut -d '"' -f2) +RELEASE="1" + +# Create RPM build directory structure +mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} + +# Create the spec file +cat > ~/rpmbuild/SPECS/$NAME.spec << EOF +Name: $NAME +Version: $VERSION +Release: $RELEASE%{?dist} +Summary: High-performance DNS server with DNSSEC support +License: MIT +URL: https://github.com/yourusername/nx9-dns-server +BuildRequires: cargo, gcc +Requires: systemd + +%description +NX9 DNS Server is a high-performance DNS server implementation +with full DNSSEC support. It provides both authoritative and +recursive DNS services with modern features like cache management +and metrics export. + +%prep +%setup -q -c -T +cp -r %{_sourcedir}/* . + +%build +cargo build --release + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot}/usr/local/bin +mkdir -p %{buildroot}/etc/nx9-dns-server +mkdir -p %{buildroot}/usr/lib/systemd/system +mkdir -p %{buildroot}/var/lib/nx9-dns-server +mkdir -p %{buildroot}/usr/share/doc/%{name} + +# Install binary +install -m 755 target/release/nx9-dns-server %{buildroot}/usr/local/bin/ + +# Install config +install -m 644 config/nx9-dns-server.conf %{buildroot}/etc/nx9-dns-server/ || : + +# Install docs +install -m 644 README.md LICENSE %{buildroot}/usr/share/doc/%{name}/ || : + +# Install systemd service +cat > %{buildroot}/usr/lib/systemd/system/nx9-dns-server.service << 'EOL' +[Unit] +Description=NX9 DNS Server +After=network.target + +[Service] +ExecStart=/usr/local/bin/nx9-dns-server +Environment=DNS_DB_PATH=/var/lib/nx9-dns-server/dns.db +Environment=DNSSEC_KEY_FILE=/etc/nx9-dns-server/dnssec.key +Restart=always +User=nx9-dns + +[Install] +WantedBy=multi-user.target +EOL + +%pre +# Create nx9-dns user if it doesn't exist +if ! getent passwd nx9-dns > /dev/null; then + useradd -r -s /sbin/nologin nx9-dns +fi + +%post +%systemd_post nx9-dns-server.service +chown -R nx9-dns:nx9-dns /var/lib/nx9-dns-server +chmod 755 /var/lib/nx9-dns-server + +%preun +%systemd_preun nx9-dns-server.service + +%postun +%systemd_postun_with_restart nx9-dns-server.service + +%files +%attr(755,root,root) /usr/local/bin/nx9-dns-server +%dir %attr(755,nx9-dns,nx9-dns) /var/lib/nx9-dns-server +%dir %attr(755,root,root) /etc/nx9-dns-server +%config(noreplace) /etc/nx9-dns-server/nx9-dns-server.conf +/usr/lib/systemd/system/nx9-dns-server.service +%doc /usr/share/doc/%{name}/* + +%changelog +* $(date '+%a %b %d %Y') $USER <$USER@$(hostname)> - $VERSION-$RELEASE +- Initial RPM release +EOF + +# Create source tarball +mkdir -p ~/rpmbuild/SOURCES/$NAME-$VERSION +cp -r * ~/rpmbuild/SOURCES/$NAME-$VERSION/ +cd ~/rpmbuild/SOURCES +tar czf $NAME-$VERSION.tar.gz $NAME-$VERSION +rm -rf $NAME-$VERSION + +# Build the RPM +rpmbuild -ba ~/rpmbuild/SPECS/$NAME.spec + +echo "RPM package created in ~/rpmbuild/RPMS/" \ No newline at end of file diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..d8f9c22 --- /dev/null +++ b/install.sh @@ -0,0 +1,82 @@ +#!/bin/bash + +# Default installation prefix +PREFIX=${PREFIX:-/usr/local} + +# Parse command line arguments +while [[ $# -gt 0 ]]; do + case $1 in + --prefix=*) + PREFIX="${1#*=}" + shift + ;; + --help) + echo "Usage: $0 [--prefix=/installation/path]" + echo "Default prefix is /usr/local" + exit 0 + ;; + *) + echo "Unknown option: $1" + exit 1 + ;; + esac +done + +# Build the project +echo "Building nx9-dns-server..." +cargo build --release + +# Create necessary directories +echo "Creating directories in $PREFIX..." +sudo mkdir -p "$PREFIX/bin" +sudo mkdir -p "$PREFIX/lib/nx9-dns-server" +sudo mkdir -p "$PREFIX/etc/nx9-dns-server" +sudo mkdir -p "$PREFIX/share/doc/nx9-dns-server" +sudo mkdir -p "$PREFIX/share/man/man1" + +# Install binary +echo "Installing binary..." +sudo install -m 755 target/release/nx9-dns-server "$PREFIX/bin/" + +# Install configuration +echo "Installing configuration files..." +sudo install -m 644 config/nx9-dns-server.conf "$PREFIX/etc/nx9-dns-server/" 2>/dev/null || echo "No config file found, skipping..." + +# Install documentation +echo "Installing documentation..." +sudo install -m 644 README.md "$PREFIX/share/doc/nx9-dns-server/" 2>/dev/null || echo "No README found, skipping..." +sudo install -m 644 LICENSE "$PREFIX/share/doc/nx9-dns-server/" 2>/dev/null || echo "No LICENSE found, skipping..." + +# Install man page if it exists +if [ -f doc/nx9-dns-server.1 ]; then + echo "Installing man page..." + sudo install -m 644 doc/nx9-dns-server.1 "$PREFIX/share/man/man1/" + sudo gzip -f "$PREFIX/share/man/man1/nx9-dns-server.1" +fi + +# Create systemd service file +echo "Creating systemd service file..." +cat > nx9-dns-server.service << EOF +[Unit] +Description=NX9 DNS Server +After=network.target + +[Service] +ExecStart=$PREFIX/bin/nx9-dns-server +Environment=DNS_DB_PATH=/var/lib/nx9-dns-server/dns.db +Environment=DNSSEC_KEY_FILE=/etc/nx9-dns-server/dnssec.key +Restart=always +User=nx9-dns + +[Install] +WantedBy=multi-user.target +EOF + +sudo install -m 644 nx9-dns-server.service /lib/systemd/system/ +rm nx9-dns-server.service + +echo "Installation completed successfully!" +echo "To start the service:" +echo "1. Create nx9-dns user: sudo useradd -r -s /bin/false nx9-dns" +echo "2. Enable the service: sudo systemctl enable nx9-dns-server" +echo "3. Start the service: sudo systemctl start nx9-dns-server" \ No newline at end of file From a78beb92fefa93319b92819426d85e7156c174c6 Mon Sep 17 00:00:00 2001 From: Sunil Purushottam Thakare Date: Sun, 25 May 2025 11:49:22 +0530 Subject: [PATCH 2/2] Add files via upload --- Installation.md | 138 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 Installation.md diff --git a/Installation.md b/Installation.md new file mode 100644 index 0000000..1fd3d97 --- /dev/null +++ b/Installation.md @@ -0,0 +1,138 @@ +# NX9 DNS Server Installation Guide + +## Installation Methods + +The NX9 DNS Server provides three flexible installation methods: + +### 1. Direct Installation Script + +The `install.sh` script provides a customizable installation process: + +```bash +# Default installation to /usr/local +./install.sh + +# Custom installation prefix +./install.sh --prefix=/opt/nx9-dns +``` + +#### Features: +- Configurable installation prefix +- Automatic service setup +- Documentation and man page installation +- Proper permission handling + +### 2. Debian Package Installation + +For Debian-based systems (Ubuntu, Debian, etc.): + +```bash +# Build the package +./build-deb.sh + +# Install the generated package +sudo dpkg -i nx9-dns-server-*.deb +``` + +#### Package Features: +- Proper dependency management +- System user creation +- Systemd service integration +- Configuration file management +- Clean uninstallation support + +### 3. RPM Package Installation + +For RPM-based systems (RHEL, CentOS, Fedora): + +```bash +# Build the package +./build-rpm.sh + +# Install the generated package +sudo rpm -i nx9-dns-server-*.rpm +``` + +#### Package Features: +- Automatic dependency resolution +- System service management +- Standard RPM filesystem hierarchy +- Built-in upgrade support + +## Directory Structure + +The installation creates the following directory structure: + +``` +${PREFIX}/ +├── bin/ +│ └── nx9-dns-server +├── lib/ +│ └── nx9-dns-server/ +├── etc/ +│ └── nx9-dns-server/ +│ └── nx9-dns-server.conf +├── share/ +│ ├── doc/ +│ │ └── nx9-dns-server/ +│ │ ├── README.md +│ │ └── LICENSE +│ └── man/ +│ └── man1/ +│ └── nx9-dns-server.1.gz +└── var/ + └── lib/ + └── nx9-dns-server/ + └── dns.db +``` + +## System Integration + +### Service Management +After installation, the server runs as a systemd service: + +```bash +# Start the service +sudo systemctl start nx9-dns-server + +# Enable auto-start at boot +sudo systemctl enable nx9-dns-server + +# Check service status +sudo systemctl status nx9-dns-server +``` + +### Security Features +- Dedicated system user (`nx9-dns`) +- Proper file permissions +- Confined service execution + +### Configuration +- Main configuration: `/etc/nx9-dns-server/nx9-dns-server.conf` +- Database location: `/var/lib/nx9-dns-server/dns.db` +- DNSSEC key file: `/etc/nx9-dns-server/dnssec.key` + +## Uninstallation + +### Using Installation Script +```bash +# If installed with install.sh, manually remove files from prefix +sudo rm -rf ${PREFIX}/{bin,lib,etc,share}/nx9-dns-server +``` + +### Package-based Removal +```bash +# Debian systems +sudo apt remove nx9-dns-server + +# RPM systems +sudo rpm -e nx9-dns-server +``` + +## Notes +- All installation methods require root/sudo privileges +- The installation preserves existing configuration files +- Service user is created automatically +- Logs are integrated with systemd journal + +This installation system follows standard Unix filesystem hierarchy and packaging conventions, making it suitable for both development and production environments. \ No newline at end of file