2021-07-05 06:50:25 +00:00
|
|
|
#!/bin/bash
|
|
|
|
# This should only be ran during straight updates during a minor release cadence.
|
|
|
|
# In the case of point releases, this will need to be changed accordingly so that
|
|
|
|
# way it can be ran properly.
|
|
|
|
#
|
|
|
|
# The point of this script is to basically allow all old versions of a package
|
|
|
|
# or set of packages to be available during the life of a point release. As it
|
|
|
|
# currently stands, CentOS has started doing this for both 8 and 8-stream. RHEL
|
|
|
|
# also does this (and has always done this, except they take it a step further
|
|
|
|
# and provide everything, even if it's not installable).
|
|
|
|
#
|
|
|
|
# Compose dir example: /mnt/repos-staging/mirror/pub/rocky/8.4-RC2
|
|
|
|
|
2021-07-06 17:08:30 +00:00
|
|
|
# Source common variables
|
2021-07-08 02:54:12 +00:00
|
|
|
export RLVER=8
|
2021-07-08 02:58:50 +00:00
|
|
|
# shellcheck disable=SC2046,1091,1090
|
2021-07-06 21:34:26 +00:00
|
|
|
source "$(dirname "$0")/common"
|
2021-07-05 06:50:25 +00:00
|
|
|
|
|
|
|
echo "** Updating source repos"
|
2021-07-06 17:08:30 +00:00
|
|
|
for y in "${ALL_REPOS[@]}"; do
|
2021-07-06 23:11:25 +00:00
|
|
|
test -d "${STAGING_ROOT}/${RELEASE_DIR}/${y}/source/tree"
|
2021-07-05 06:50:25 +00:00
|
|
|
ret_val=$?
|
|
|
|
if [ "$ret_val" -eq 0 ]; then
|
2021-07-06 17:08:30 +00:00
|
|
|
createrepo --update "${STAGING_ROOT}/${RELEASE_DIR}/${y}/source/tree" \
|
2021-07-05 06:50:25 +00:00
|
|
|
"--distro=cpe:/o:rocky:rocky:${REVISION:0:1},Rocky Linux ${REVISION:0:1}"
|
2021-07-11 22:46:50 +00:00
|
|
|
test -f /root/bin/sign-repo.sh && /root/bin/sign-repo.sh \
|
|
|
|
"${STAGING_ROOT}/${RELEASE_DIR}/${y}/source/tree/repodata/repomd.xml"
|
2021-07-05 06:50:25 +00:00
|
|
|
else
|
2021-07-06 17:08:30 +00:00
|
|
|
echo "${STAGING_ROOT}/${RELEASE_DIR}/${y}/source/tree does not exist"
|
2021-07-05 06:50:25 +00:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
# Sync up some stuff
|
|
|
|
echo "** Updating arch repos as necessary **"
|
|
|
|
for x in "${ARCHES[@]}"; do
|
|
|
|
echo "${x}: Sync up repos that do not use comps/groups"
|
|
|
|
# regular repos, no comps
|
|
|
|
for y in "${NONMODS_REPOS[@]}"; do
|
|
|
|
# os and debug/tree directories
|
|
|
|
for z in os debug/tree; do
|
2021-07-06 17:08:30 +00:00
|
|
|
test -d "${STAGING_ROOT}/${RELEASE_DIR}/${y}/${x}/${z}"
|
2021-07-05 06:50:25 +00:00
|
|
|
ret_val=$?
|
|
|
|
if [ "$ret_val" -eq 0 ]; then
|
2021-07-06 17:08:30 +00:00
|
|
|
createrepo --update "${STAGING_ROOT}/${RELEASE_DIR}/${y}/${x}/${z}" \
|
2021-07-05 06:50:25 +00:00
|
|
|
"--distro=cpe:/o:rocky:rocky:${REVISION:0:1},Rocky Linux ${REVISION:0:1}"
|
2021-07-11 22:46:50 +00:00
|
|
|
test -f /root/bin/sign-repo.sh && /root/bin/sign-repo.sh \
|
|
|
|
"${STAGING_ROOT}/${RELEASE_DIR}/${y}/${x}/${z}/repodata/repomd.xml"
|
2021-07-05 06:50:25 +00:00
|
|
|
else
|
2021-07-06 17:08:30 +00:00
|
|
|
echo "${STAGING_ROOT}/${RELEASE_DIR}/${y}/${x}/${z} does not exist"
|
2021-07-05 06:50:25 +00:00
|
|
|
fi
|
|
|
|
done
|
2021-07-05 11:09:47 +00:00
|
|
|
done
|
2021-07-05 06:50:25 +00:00
|
|
|
# repos with comps/groups involved, but only debug
|
|
|
|
for y in "${MODS_REPOS[@]}"; do
|
2021-07-06 17:08:30 +00:00
|
|
|
test -d "${STAGING_ROOT}/${RELEASE_DIR}/${y}/${x}/debug/tree"
|
2021-07-05 06:50:25 +00:00
|
|
|
ret_val=$?
|
|
|
|
if [ "$ret_val" -eq 0 ]; then
|
2021-07-10 23:09:34 +00:00
|
|
|
createrepo --update "${STAGING_ROOT}/${RELEASE_DIR}/${y}/${x}/debug/tree" \
|
2021-07-05 06:50:25 +00:00
|
|
|
"--distro=cpe:/o:rocky:rocky:${REVISION:0:1},Rocky Linux ${REVISION:0:1}"
|
2021-07-11 22:46:50 +00:00
|
|
|
test -f /root/bin/sign-repo.sh && /root/bin/sign-repo.sh \
|
|
|
|
"${STAGING_ROOT}/${RELEASE_DIR}/${y}/${x}/debug/tree/repodata/repomd.xml"
|
2021-07-05 06:50:25 +00:00
|
|
|
else
|
2021-07-06 17:08:30 +00:00
|
|
|
echo "${STAGING_ROOT}/${RELEASE_DIR}/${y}/${x}/debug/tree does not exist"
|
2021-07-05 06:50:25 +00:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
echo "** Update all repos with comps/groups"
|
|
|
|
for y in "${MODS_REPOS[@]}"; do
|
|
|
|
echo "${y}: ${x}"
|
2021-07-06 17:08:30 +00:00
|
|
|
test -d "${STAGING_ROOT}/${RELEASE_DIR}/${y}/${x}/os"
|
2021-07-05 06:50:25 +00:00
|
|
|
ret_val=$?
|
|
|
|
if [ "$ret_val" -eq 0 ]; then
|
2021-07-06 17:08:30 +00:00
|
|
|
createrepo --update "${STAGING_ROOT}/${RELEASE_DIR}/${y}/${x}/os" \
|
2021-07-05 06:50:25 +00:00
|
|
|
--groupfile="/mnt/compose/8/latest-Rocky-8/work/${x}/comps/comps-${y}.${x}.xml" \
|
2021-07-06 20:16:01 +00:00
|
|
|
--xz --revision="${REVISION}" \
|
2021-07-05 06:50:25 +00:00
|
|
|
"--distro=cpe:/o:rocky:rocky:${REVISION:0:1},Rocky Linux ${REVISION:0:1}" \
|
|
|
|
--workers=8 --checksum=sha256
|
2021-07-11 22:46:50 +00:00
|
|
|
test -f /root/bin/sign-repo.sh && /root/bin/sign-repo.sh \
|
|
|
|
"${STAGING_ROOT}/${RELEASE_DIR}/${y}/${x}/os/repodata/repomd.xml"
|
2021-07-05 06:50:25 +00:00
|
|
|
else
|
2021-07-06 17:08:30 +00:00
|
|
|
echo "${STAGING_ROOT}/${RELEASE_DIR}/${y}/${x}/os does not exist"
|
2021-07-05 06:50:25 +00:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
echo "** Update modules"
|
|
|
|
for y in "${MODS[@]}"; do
|
|
|
|
echo "Modules: ${y} ${x}"
|
|
|
|
cp "/mnt/compose/8_metadata/${x}/${y}-modules.yaml" /tmp/modules.yaml
|
2021-07-06 17:08:30 +00:00
|
|
|
test -d "${STAGING_ROOT}/${RELEASE_DIR}/${y}/${x}/os"
|
2021-07-05 10:43:58 +00:00
|
|
|
ret_val=$?
|
|
|
|
if [ "$ret_val" -eq 0 ]; then
|
|
|
|
modifyrepo --mdtype=modules /tmp/modules.yaml \
|
2021-07-06 17:08:30 +00:00
|
|
|
"${STAGING_ROOT}/${RELEASE_DIR}/${y}/${x}/os/repodata" \
|
2021-07-05 10:43:58 +00:00
|
|
|
--compress --compress-type=gz
|
2021-07-11 22:46:50 +00:00
|
|
|
# This might not be necessary, but it does not hurt incase repomd is modified
|
|
|
|
test -f /root/bin/sign-repo.sh && /root/bin/sign-repo.sh \
|
|
|
|
"${STAGING_ROOT}/${RELEASE_DIR}/${y}/${x}/os/repodata/repomd.xml"
|
2021-07-05 10:43:58 +00:00
|
|
|
else
|
2021-07-06 17:08:30 +00:00
|
|
|
echo "${STAGING_ROOT}/${RELEASE_DIR}/${y}/${x}/os does not exist"
|
2021-07-05 10:43:58 +00:00
|
|
|
fi
|
2021-07-05 06:50:25 +00:00
|
|
|
|
|
|
|
rm /tmp/modules.yaml
|
|
|
|
sleep 1
|
|
|
|
done
|
2021-07-06 02:59:39 +00:00
|
|
|
|
|
|
|
echo "** Fix variants"
|
2021-07-06 17:08:30 +00:00
|
|
|
TREEINFO_VAR="${STAGING_ROOT}/${RELEASE_DIR}/BaseOS/${x}/os/.treeinfo"
|
2021-07-06 02:59:39 +00:00
|
|
|
test -f "${TREEINFO_VAR}"
|
|
|
|
treeinfo_retval=$?
|
|
|
|
test -x /usr/bin/python3
|
|
|
|
python_retval=$?
|
|
|
|
# There is an awk way to do this, but it was easier to implement python and
|
|
|
|
# cat heredoc together. It felt cleaner. This was a trick I had used in a
|
|
|
|
# previous life when I had to admin Solaris systems, and I needed a way to
|
|
|
|
# add a solaris 10 system into FreeIPA (it was not fun, let me tell you). But
|
|
|
|
# the take away is I learned something kind of on the fly and well, it worked.
|
|
|
|
# Emails should have stamps.
|
|
|
|
if [ "$treeinfo_retval" -eq 0 ] && [ "$python_retval" -eq 0 ]; then
|
|
|
|
cat <<EOF | /usr/bin/python3
|
|
|
|
from configparser import ConfigParser
|
|
|
|
config = ConfigParser()
|
2021-07-06 03:06:19 +00:00
|
|
|
config.read('${TREEINFO_VAR}')
|
2021-07-06 02:59:39 +00:00
|
|
|
config.set('tree', 'variants', 'BaseOS,AppStream')
|
2021-07-07 21:37:50 +00:00
|
|
|
config.add_section('variant-AppStream')
|
2021-07-06 02:59:39 +00:00
|
|
|
config.set('variants-AppStream', 'id', 'AppStream')
|
|
|
|
config.set('variants-AppStream', 'name', 'AppStream')
|
|
|
|
config.set('variants-AppStream', 'type', 'variant')
|
|
|
|
config.set('variants-AppStream', 'uid', 'AppStream')
|
|
|
|
config.set('variants-AppStream', 'packages', '../../../AppStream/${x}/os/Packages')
|
|
|
|
config.set('variants-AppStream', 'repository', '../../../AppStream/${x}/os/')
|
2021-07-06 03:06:19 +00:00
|
|
|
with open('${TREEINFO_VAR}', 'w') as configfile:
|
2021-07-06 02:59:39 +00:00
|
|
|
config.write(configfile)
|
|
|
|
EOF
|
|
|
|
else
|
|
|
|
echo "${TREEINFO_VAR} or python3 does not exist on this system."
|
|
|
|
fi
|
2021-07-05 06:50:25 +00:00
|
|
|
done
|