Projects / zhurnal / create_debian_package.sh

git clone https://molodetz.nl/retoor/zhurnal.git

Raw source file available here .

#!/bin/bash

set -e

# Ensure script is run with sudo or as root
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root or with sudo"
exit 1
fi

# Project details
PROJECT_NAME="zhurnal"
VERSION=$(python3 -c "import importlib.metadata; print(importlib.metadata.version('$PROJECT_NAME'))")
ARCH=$(dpkg --print-architecture)

# Create package directory structure
PACKAGE_DIR="/tmp/${PROJECT_NAME}_${VERSION}_${ARCH}"
mkdir -p "${PACKAGE_DIR}/DEBIAN"
mkdir -p "${PACKAGE_DIR}/usr/local/bin"
mkdir -p "${PACKAGE_DIR}/usr/local/lib/python3/dist-packages/${PROJECT_NAME}"
mkdir -p "${PACKAGE_DIR}/etc/${PROJECT_NAME}"

# Create control file
cat > "${PACKAGE_DIR}/DEBIAN/control" << EOF
Package: ${PROJECT_NAME}
Version: ${VERSION}
Section: utils
Priority: optional
Architecture: ${ARCH}
Depends: python3 (>= 3.8), python3-pip, python3-venv
Maintainer: Your Name
Description: Zhurnal - A command-line utility for running and monitoring commands
EOF

# Create postinst script for additional setup
cat > "${PACKAGE_DIR}/DEBIAN/postinst" << EOF
#!/bin/bash
set -e

# Create virtual environment if not exists
if [ ! -d "/opt/${PROJECT_NAME}/.venv" ]; then
python3 -m venv /opt/${PROJECT_NAME}/.venv
/opt/${PROJECT_NAME}/.venv/bin/pip install --upgrade pip
/opt/${PROJECT_NAME}/.venv/bin/pip install git+https://retoor.molodetz.nl/retoor/zhurnal.git
fi

# Create symlink to binary
ln -sf /opt/${PROJECT_NAME}/.venv/bin/${PROJECT_NAME} /usr/local/bin/${PROJECT_NAME}

exit 0
EOF

# Create prerm script for cleanup
cat > "${PACKAGE_DIR}/DEBIAN/prerm" << EOF
#!/bin/bash
set -e

# Remove symlink
rm -f /usr/local/bin/${PROJECT_NAME}

exit 0
EOF

# Make scripts executable
chmod 755 "${PACKAGE_DIR}/DEBIAN/postinst"
chmod 755 "${PACKAGE_DIR}/DEBIAN/prerm"

# Copy project files
cp -r src/${PROJECT_NAME}/* "${PACKAGE_DIR}/usr/local/lib/python3/dist-packages/${PROJECT_NAME}/"

# Build the package
dpkg-deb --build "${PACKAGE_DIR}"

# Move package to current directory
mv "/tmp/${PROJECT_NAME}_${VERSION}_${ARCH}.deb" .

# Cleanup
rm -rf "${PACKAGE_DIR}"

echo "Debian package created successfully: ${PROJECT_NAME}_${VERSION}_${ARCH}.deb"