deb-mock/scripts/setup-debian-repo.sh
robojerk 16bfc027bf
Some checks failed
Build and Publish Debian Package / build-deb (push) Failing after 1m33s
Build Deb-Mock Package / build (push) Successful in 1m22s
Test Deb-Mock Build / test (push) Failing after 50s
add Debian packaging and repository infrastructure
2025-08-03 23:38:25 +00:00

108 lines
No EOL
2.8 KiB
Bash
Executable file

#!/bin/bash
set -e
# Setup script for Deb-Mock Debian Repository
# This script sets up a Debian repository on the Forgejo server
REPO_DIR="/var/www/debian-repo"
REPO_USER="www-data"
REPO_GROUP="www-data"
echo "Setting up Deb-Mock Debian Repository..."
# Create repository directory
sudo mkdir -p "$REPO_DIR"
sudo chown "$REPO_USER:$REPO_GROUP" "$REPO_DIR"
# Install required packages
sudo apt update
sudo apt install -y reprepro nginx apache2-utils
# Create repository structure
sudo -u "$REPO_USER" mkdir -p "$REPO_DIR/conf"
sudo -u "$REPO_USER" mkdir -p "$REPO_DIR/dists"
sudo -u "$REPO_USER" mkdir -p "$REPO_DIR/pool"
# Create repository configuration
sudo -u "$REPO_USER" cat > "$REPO_DIR/conf/distributions" << 'EOF'
Origin: Deb-Mock Repository
Label: Deb-Mock
Codename: unstable
Architectures: amd64 arm64 i386 all source
Components: main
Description: Deb-Mock Debian Package Repository
SignWith: default
EOF
# Create options file
sudo -u "$REPO_USER" cat > "$REPO_DIR/conf/options" << 'EOF'
verbose
basedir .
EOF
# Create incoming directory for package uploads
sudo -u "$REPO_USER" mkdir -p "$REPO_DIR/incoming"
# Set up nginx configuration
sudo cat > /etc/nginx/sites-available/debian-repo << 'EOF'
server {
listen 80;
server_name debian.raines.xyz;
root /var/www/debian-repo;
index index.html;
location / {
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
location ~ /\. {
deny all;
}
}
EOF
# Enable the site
sudo ln -sf /etc/nginx/sites-available/debian-repo /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
# Create GPG key for repository signing (if not exists)
if ! gpg --list-keys deb-mock@raines.xyz >/dev/null 2>&1; then
echo "Creating GPG key for repository signing..."
cat > /tmp/gpg-batch << 'EOF'
%echo Generating GPG key for Deb-Mock repository
Key-Type: RSA
Key-Length: 4096
Name-Real: Deb-Mock Repository
Name-Email: deb-mock@raines.xyz
Expire-Date: 0
%commit
%echo GPG key generation complete
EOF
gpg --batch --generate-key /tmp/gpg-batch
rm /tmp/gpg-batch
fi
# Export public key
gpg --armor --export deb-mock@raines.xyz > "$REPO_DIR/deb-mock.gpg.key"
# Set proper permissions
sudo chown -R "$REPO_USER:$REPO_GROUP" "$REPO_DIR"
sudo chmod -R 755 "$REPO_DIR"
echo "Deb-Mock Debian Repository setup complete!"
echo ""
echo "Repository URL: http://debian.raines.xyz"
echo "Public key: http://debian.raines.xyz/deb-mock.gpg.key"
echo ""
echo "To add this repository to a Debian system:"
echo "wget -O - http://debian.raines.xyz/deb-mock.gpg.key | sudo apt-key add -"
echo "echo 'deb http://debian.raines.xyz unstable main' | sudo tee /etc/apt/sources.list.d/deb-mock.list"
echo "sudo apt update"
echo ""
echo "To add a package to the repository:"
echo "reprepro -b $REPO_DIR includedeb unstable /path/to/package.deb"