Files

63 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# ==============================================================================
# Update and sign Eendoe APT Repository
# ==============================================================================
set -euo pipefail
REPO_DIR="/sites/repository/binaries"
DISTS_DIR="${REPO_DIR}/dists/stable"
MAIN_DIR="${DISTS_DIR}/main/binary-amd64"
KEY_ID="56499F920639F571"
echo "=== Updating Eendoe APT Repository ==="
cd "$REPO_DIR"
mkdir -p "$MAIN_DIR"
echo "Scanning packages in pool/main..."
dpkg-scanpackages --multiversion pool/main /dev/null > "$MAIN_DIR/Packages"
echo "Compressing Packages..."
gzip -9c "$MAIN_DIR/Packages" > "$MAIN_DIR/Packages.gz"
bzip2 -9c "$MAIN_DIR/Packages" > "$MAIN_DIR/Packages.bz2"
echo "Generating Release file..."
cd "$DISTS_DIR"
cat << EOF > Release
Origin: Eendoe
Label: Eendoe Repository
Suite: stable
Codename: stable
Date: $(date -Ru)
Architectures: amd64 all
Components: main
Description: Eendoe Private APT Package Repository
EOF
add_checksums() {
local algo="$1"
local cmd="$2"
echo "${algo}:" >> Release
for file in main/binary-amd64/Packages main/binary-amd64/Packages.gz main/binary-amd64/Packages.bz2; do
if [ -f "$file" ]; then
local size
size=$(stat -c%s "$file")
local hash
hash=$($cmd "$file" | awk '{print $1}')
printf " %s %16d %s\n" "$hash" "$size" "$file" >> Release
fi
done
}
add_checksums "MD5Sum" "md5sum"
add_checksums "SHA1" "sha1sum"
add_checksums "SHA256" "sha256sum"
echo "Signing Release with GPG key $KEY_ID..."
rm -f Release.gpg InRelease
gpg --batch --yes --default-key "$KEY_ID" --armor --detach-sign -o Release.gpg Release
gpg --batch --yes --default-key "$KEY_ID" --clearsign -o InRelease Release
echo "=== Repository update & signing complete ==="