#!/bin/bash # Build a .deb package for irc-bot. # Run on any Debian/Ubuntu host: bash build_deb.sh set -euo pipefail PACKAGE=irc-bot VERSION=1.0.0 ARCH=all DEB_NAME="${PACKAGE}_${VERSION}_${ARCH}.deb" BUILD_DIR="$(mktemp -d)" PKG_ROOT="${BUILD_DIR}/${PACKAGE}" echo "==> Building ${DEB_NAME} in ${BUILD_DIR}" # ── Directory layout inside the .deb ───────────────────────────────────────── install -d "${PKG_ROOT}/DEBIAN" install -d "${PKG_ROOT}/opt/irc-bot/bot" install -d "${PKG_ROOT}/opt/irc-bot/portal/templates" install -d "${PKG_ROOT}/opt/irc-bot/portal/static" install -d "${PKG_ROOT}/opt/irc-bot/config" install -d "${PKG_ROOT}/lib/systemd/system" # Runtime dirs are created by postinst, not shipped in the package # (avoids dpkg owning /var/lib/irc-bot with wrong permissions before user exists) # ── Application source ──────────────────────────────────────────────────────── cp bot/__init__.py "${PKG_ROOT}/opt/irc-bot/bot/" cp bot/irc_client.py "${PKG_ROOT}/opt/irc-bot/bot/" cp bot/llm_client.py "${PKG_ROOT}/opt/irc-bot/bot/" cp bot/memory.py "${PKG_ROOT}/opt/irc-bot/bot/" cp bot/message_handler.py "${PKG_ROOT}/opt/irc-bot/bot/" cp portal/__init__.py "${PKG_ROOT}/opt/irc-bot/portal/" cp portal/app.py "${PKG_ROOT}/opt/irc-bot/portal/" cp portal/config_manager.py "${PKG_ROOT}/opt/irc-bot/portal/" cp -r portal/templates/ "${PKG_ROOT}/opt/irc-bot/portal/" cp -r portal/static/ "${PKG_ROOT}/opt/irc-bot/portal/" cp requirements.txt "${PKG_ROOT}/opt/irc-bot/" cp .env.example "${PKG_ROOT}/opt/irc-bot/" cp README.md "${PKG_ROOT}/opt/irc-bot/" # Default config.json — marked as conffile so dpkg won't overwrite on upgrade install -d "${PKG_ROOT}/etc/irc-bot" cp config/config.json "${PKG_ROOT}/etc/irc-bot/config.json" # ── Systemd units ───────────────────────────────────────────────────────────── cp debian/systemd/irc-bot.service "${PKG_ROOT}/lib/systemd/system/" cp debian/systemd/irc-bot-portal.service "${PKG_ROOT}/lib/systemd/system/" # ── DEBIAN control files ────────────────────────────────────────────────────── cp debian/control "${PKG_ROOT}/DEBIAN/control" cp debian/conffiles "${PKG_ROOT}/DEBIAN/conffiles" cp debian/postinst "${PKG_ROOT}/DEBIAN/postinst" cp debian/prerm "${PKG_ROOT}/DEBIAN/prerm" cp debian/postrm "${PKG_ROOT}/DEBIAN/postrm" chmod 755 "${PKG_ROOT}/DEBIAN/postinst" chmod 755 "${PKG_ROOT}/DEBIAN/prerm" chmod 755 "${PKG_ROOT}/DEBIAN/postrm" # ── Installed-Size (approximate, in KB) ────────────────────────────────────── SIZE_KB=$(du -sk "${PKG_ROOT}" | cut -f1) sed -i "s/^Installed-Size:.*/Installed-Size: ${SIZE_KB}/" "${PKG_ROOT}/DEBIAN/control" 2>/dev/null || true printf "\nInstalled-Size: ${SIZE_KB}\n" >> "${PKG_ROOT}/DEBIAN/control" # ── Build ───────────────────────────────────────────────────────────────────── dpkg-deb --build --root-owner-group "${PKG_ROOT}" "${DEB_NAME}" echo "" echo "==> Built: ${DEB_NAME}" echo "" echo "Install with:" echo " sudo dpkg -i ${DEB_NAME}" echo " sudo apt-get install -f # resolve any missing deps" echo "" echo "Then edit /etc/irc-bot/.env and start:" echo " sudo systemctl start irc-bot irc-bot-portal" # Cleanup rm -rf "${BUILD_DIR}"