- reposync and packagerepo web service - change backing datastore to be cephfs /shared/app/packagerepo Reviewed-on: https://git.query.consul/unkinben/puppet-prod/pulls/307
98 lines
2.5 KiB
Plaintext
98 lines
2.5 KiB
Plaintext
#!/usr/bin/bash
|
|
|
|
# Function to perform reposync
|
|
perform_reposync() {
|
|
local reponame="$1"
|
|
local basepath="$2"
|
|
|
|
/usr/bin/dnf reposync \
|
|
--gpgcheck \
|
|
--delete \
|
|
--downloadcomps \
|
|
--download-metadata \
|
|
--remote-time \
|
|
--disablerepo="*" \
|
|
--enablerepo="${reponame}" \
|
|
--download-path="${basepath}/live"
|
|
}
|
|
|
|
# Function to download GPG keys
|
|
download_gpg_key() {
|
|
local gpgkeyurl="$1"
|
|
local reponame="$2"
|
|
local basepath="$3"
|
|
|
|
# Extract filename from URL
|
|
local filename=$(basename "$gpgkeyurl")
|
|
|
|
# Download GPG key to the specified path with the filename from the URL
|
|
curl -s --create-dirs -o "${basepath}/live/${reponame}/${filename}" "$gpgkeyurl" || {
|
|
echo "Failed to download GPG key from $gpgkeyurl"
|
|
}
|
|
|
|
# import the gpg key
|
|
rpm --import "${basepath}/live/${reponame}/${filename}" || echo "Failed to import gpg key ${basepath}/live/${reponame}/${filename}"
|
|
}
|
|
|
|
# Function to perform rsync with hard links
|
|
perform_rsync() {
|
|
local source_path="$1"
|
|
local dest_path="$2"
|
|
|
|
# Create the destination directory if it doesn't exist
|
|
mkdir -p "$dest_path"
|
|
|
|
# Use rsync to create hard links to the files in the destination directory
|
|
rsync -a --link-dest="$source_path" "$source_path"/* "$dest_path"
|
|
}
|
|
|
|
create_repo_metadata() {
|
|
local repo_path="${1}"
|
|
|
|
if [[ -d "$repo_path" ]]; then
|
|
echo "Running createrepo on ${repo_path}..."
|
|
createrepo --update "${repo_path}"
|
|
if [[ $? -eq 0 ]]; then
|
|
echo "Successfully created repository metadata for ${repo_path}"
|
|
else
|
|
echo "Failed to create repository metadata for ${repo_path}" >&2
|
|
return 1
|
|
fi
|
|
else
|
|
echo "The specified repository path does not exist: ${repo_path}" >&2
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Current date in the required format
|
|
DATE=$(date +%Y%m%d)
|
|
|
|
# iterate over each configuration file
|
|
for conf in /etc/reposync/conf.d/*.conf; do
|
|
|
|
# source the configuration to get the variables
|
|
source "$conf"
|
|
|
|
# Call the function to download the GPG key
|
|
download_gpg_key "$GPGKEYURL" "$REPONAME" "$BASEPATH"
|
|
|
|
# Call the reposync function
|
|
perform_reposync "$REPONAME" "$BASEPATH"
|
|
|
|
# Path for rsync source
|
|
live_path="${BASEPATH}/live/${REPONAME}"
|
|
|
|
# Path for rsync destination
|
|
snap_path="${BASEPATH}/snap/${OSNAME}/${RELEASE}/${REPOSITORY}-${DATE}/${ARCH}/os"
|
|
|
|
# Call the rsync function
|
|
perform_rsync "$live_path" "$snap_path"
|
|
|
|
# After syncing each repo, fix the repository metadata
|
|
create_repo_metadata "${snap_path}"
|
|
|
|
# Update selinux
|
|
restorecon -R ${snap_path}
|
|
|
|
done
|