utils/assets/update_mirror_ubuntu.sh

82 lines
2.5 KiB
Bash
Executable File

#! /usr/bin/env bash
set -e
set -x
# Automate the initial creation and update of an Ubuntu package mirror in aptly
# The variables (as set below) will create a mirror of the Ubuntu repo
# with the main & universe components, you can add other components like restricted
# multiverse etc by adding to the array (separated by spaces).
# For more detail about each of the variables below refer to:
# https://help.ubuntu.com/community/Repositories/CommandLine
if [ "$MODE" = "packages" ]; then
FILTER_OPTS=(-filter="$(cat /opt/packages | paste -sd \| -)" -filter-with-deps)
else
FILTER_OPTS=()
fi
# Create repository mirrors if they don't exist
set +e
for component in ${COMPONENTS}; do
for repo in ${REPOS}; do
aptly mirror list -raw | grep "^${repo}-${component}$"
if [[ $? -ne 0 ]]; then
echo "Creating mirror of ${repo}-${component} repository."
aptly mirror create \
-architectures=amd64 "${FILTER_OPTS[@]}" ${repo}-${component} ${UPSTREAM_URL} ${repo} ${component}
fi
done
done
set -e
# Update all repository mirrors
for component in ${COMPONENTS}; do
for repo in ${REPOS}; do
echo "Updating ${repo}-${component} repository mirror.."
aptly mirror update ${repo}-${component}
done
done
# Create snapshots of updated repositories
for component in ${COMPONENTS}; do
for repo in ${REPOS}; do
echo "Creating snapshot of ${repo}-${component} repository mirror.."
SNAPSHOTARRAY+="${repo}-${component}-`date +%Y%m%d%H` "
aptly snapshot create ${repo}-${component}-`date +%Y%m%d%H` from mirror ${repo}-${component}
done
done
echo ${SNAPSHOTARRAY[@]}
# Merge snapshots into a single snapshot with updates applied
echo "Merging snapshots into one.."
aptly snapshot merge -latest \
${UBUNTU_RELEASE}-merged-`date +%Y%m%d%H` \
${SNAPSHOTARRAY[@]}
# Publish the latest merged snapshot
set +e
aptly publish list -raw | awk '{print $2}' | grep "^${UBUNTU_RELEASE}$"
if [[ $? -eq 0 ]]; then
aptly publish switch \
-batch=true \
-passphrase="${GPG_PASSWORD}" \
${UBUNTU_RELEASE} ${UBUNTU_RELEASE}-merged-`date +%Y%m%d%H`
else
aptly publish snapshot \
-batch=true \
-passphrase="${GPG_PASSWORD}" \
-distribution=${UBUNTU_RELEASE} ${UBUNTU_RELEASE}-merged-`date +%Y%m%d%H`
fi
set -e
# Export the GPG Public key
if [[ ! -f /opt/aptly/public/aptly_repo_signing.key ]]; then
gpg --export --armor > /opt/aptly/public/aptly_repo_signing.key
fi
# Generate Aptly Graph
aptly graph -output /opt/aptly/public/aptly_graph.png