Added offline and do-not-pre-update options

This commit is contained in:
Giuseppe Ragusa 2022-06-02 21:43:07 +02:00 committed by GitHub
parent 92b35b59d9
commit e7d12fe312
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 94 additions and 20 deletions

View File

@ -145,6 +145,7 @@ sm_ca_dir=/etc/rhsm/ca
unset tmp_sm_ca_dir
# all repos must be signed with the same key given in $gpg_key_url
declare -A rocky_repo_offline_baseurls=()
declare -A repo_urls
repo_urls=(
[rockybaseos]="https://dl.rockylinux.org/pub/rocky/${SUPPORTED_MAJOR}/BaseOS/$ARCH/os/"
@ -523,7 +524,11 @@ check_repourl () {
IFS=, read -r -a urls <<<"${repoinfo_results[Repo-baseurl]}"
local u
for u in "${urls[@]##*( )}"; do
curl -sfLI "${u%% *}repodata/repomd.xml" > /dev/null && return
if [[ $offline_mode ]]; then
return 1
else
curl -sfLI "${u%% *}repodata/repomd.xml" > /dev/null && return
fi
done
return "$(( $? ? $? : 1 ))"
}
@ -620,14 +625,25 @@ collect_system_info () {
# Check to see if we need to change the repourl on any system repositories
# (CentOS 8)
local -A dist_repourl_map
dist_repourl_map=(
[centos:baseos]=https://dl.rockylinux.org/vault/centos/8.5.2111/BaseOS/$ARCH/os/
[centos:appstream]=https://dl.rockylinux.org/vault/centos/8.5.2111/AppStream/$ARCH/os/
[centos:ha]=https://dl.rockylinux.org/vault/centos/8.5.2111/HighAvailability/$ARCH/os/
[centos:powertools]=https://dl.rockylinux.org/vault/centos/8.5.2111/PowerTools/$ARCH/os/
[centos:extras]=https://dl.rockylinux.org/vault/centos/8.5.2111/extras/$ARCH/os/
[centos:devel]=https://dl.rockylinux.org/vault/centos/8.5.2111/Devel/$ARCH/os/
)
if [[ $offline_mode ]]; then
dist_repourl_map=(
[centos:baseos]=file:///mnt/centos/BaseOS/
[centos:appstream]=file:///mnt/centos/AppStream/
[centos:ha]=file:///mnt/centos/HighAvailability/
[centos:powertools]=file:///mnt/centos/PowerTools/
[centos:extras]=file:///mnt/centos/extras/
[centos:devel]=file:///mnt/centos/Devel/
)
else
dist_repourl_map=(
[centos:baseos]=https://dl.rockylinux.org/vault/centos/8.5.2111/BaseOS/$ARCH/os/
[centos:appstream]=https://dl.rockylinux.org/vault/centos/8.5.2111/AppStream/$ARCH/os/
[centos:ha]=https://dl.rockylinux.org/vault/centos/8.5.2111/HighAvailability/$ARCH/os/
[centos:powertools]=https://dl.rockylinux.org/vault/centos/8.5.2111/PowerTools/$ARCH/os/
[centos:extras]=https://dl.rockylinux.org/vault/centos/8.5.2111/extras/$ARCH/os/
[centos:devel]=https://dl.rockylinux.org/vault/centos/8.5.2111/Devel/$ARCH/os/
)
fi
# In case migration is attempted from very old CentOS (before the repository
# names were lowercased)
@ -642,6 +658,7 @@ collect_system_info () {
local -a enabled_repos=()
declare -g -A enabled_repo_check=()
declare -g -a dist_repourl_swaps=()
declare -g -a dist_repourl_offline=()
readarray -s 1 -t enabled_repos < <(dnf -q -y repolist --enabled)
for r in "${enabled_repos[@]}"; do
enabled_repo_check[${r%% *}]=1
@ -894,7 +911,7 @@ $'because continuing with the migration could cause further damage to system.'
}
convert_info_dir=/root/convert
unset convert_to_rocky reinstall_all_rpms verify_all_rpms update_efi \
unset dont_update offline_mode convert_to_rocky reinstall_all_rpms verify_all_rpms update_efi \
container_macros
usage() {
@ -902,7 +919,9 @@ usage() {
"Usage: ${0##*/} [OPTIONS]" \
'' \
'Options:' \
'-d Do not update before conversion' \
'-h Display this help' \
'-o Work in offline mode' \
'-r Convert to rocky' \
'-V Verify switch' \
' !! USE WITH CAUTION !!'
@ -972,8 +991,8 @@ package_swaps() {
sed -i \
-e 's/^\[/['"$stream_prefix"'/' \
-e 's|^mirrorlist=|#mirrorlist=|' \
-e 's|^#baseurl=http://mirror.centos.org/$contentdir/$stream/|baseurl=http://mirror.centos.org/centos/8-stream/|' \
-e 's|^baseurl=http://vault.centos.org/$contentdir/$stream/|baseurl=https://vault.centos.org/centos/8-stream/|' \
-e 's|^#baseurl=http://mirror.centos.org/$contentdir/$stream/|baseurl='"${stream_mirror_baseurl}"'|' \
-e 's|^baseurl=http://vault.centos.org/$contentdir/$stream/|baseurl='"${stream_vault_baseurl}"'|' \
"${repos_files[@]}"
fi
@ -1073,6 +1092,30 @@ EOF
done
fi
# Offline
# Map Rocky's repos to offline local repos - temporarily disable a repo if its equivalent was disabled before migration
if [[ $offline_mode ]]; then
infomsg $'Ensuring offline repos are configured before the package swap\n'
dist_repourl_offline+=(
"--disablerepo=*"
)
for k in "${!enabled_repo_check[@]}"; do
dist_repourl_offline+=(
"--enablerepo=$k"
)
for r in "${!pkg_repo_map[@]}"; do
if [[ $r = $k ]]; then
dist_repourl_offline+=(
"--setopt=$r.mirrorlist="
"--setopt=$r.metalink="
"--setopt=$r.baseurl="
"--setopt=$r.baseurl=${rocky_repo_offline_baseurls[$r]}"
)
fi
done
done
fi
# Distrosync
infomsg $'Ensuring repos are enabled before the package swap\n'
safednf -y --enableplugin=config_manager config-manager \
@ -1097,23 +1140,23 @@ EOF
if (( ${#disable_modules[@]} )); then
infomsg $'Disabling modules\n\n'
safednf -y module disable "${disable_modules[@]}" ||
safednf -y "${dist_repourl_offline[@]}" module disable "${disable_modules[@]}" ||
exit_message "Can't disable modules ${disable_modules[*]}"
fi
if (( ${#enabled_modules[@]} )); then
infomsg $'Enabling modules\n\n'
safednf -y module enable "${enabled_modules[@]}" ||
safednf -y "${dist_repourl_offline[@]}" module enable "${enabled_modules[@]}" ||
exit_message "Can't enable modules ${enabled_modules[*]}"
fi
# Make sure that excluded modules are disabled.
infomsg $'Disabling excluded modules\n\n'
safednf -y module disable "${module_excludes[@]}" ||
safednf -y "${dist_repourl_offline[@]}" module disable "${module_excludes[@]}" ||
exit_message "Can't disable modules ${module_excludes[*]}"
infomsg $'\nSyncing packages\n\n'
dnf -y distro-sync || exit_message "Error during distro-sync."
dnf -y "${dist_repourl_offline[@]}" distro-sync || exit_message "Error during distro-sync."
# Disable Stream repos.
if (( ${#installed_sys_stream_repos_pkgs[@]} ||
@ -1125,7 +1168,7 @@ $'Failed to disable CentOS Stream repos, please check and disable manually.\n'
if (( ${#stream_always_replace[@]} )) &&
[[ $(saferpm -qa "${stream_always_replace[@]}") ]]; then
safednf -y distro-sync "${stream_always_replace[@]}" ||
safednf -y "${dist_repourl_offline[@]}" distro-sync "${stream_always_replace[@]}" ||
exit_message "Error during distro-sync."
fi
@ -1172,7 +1215,7 @@ EOF
fi
if (( ${#always_install[@]} )); then
safednf -y install "${always_install[@]}" || exit_message \
safednf -y "${dist_repourl_offline[@]}" install "${always_install[@]}" || exit_message \
"Error installing required packages: ${always_install[*]}"
fi
@ -1270,12 +1313,18 @@ establish_gpg_trust () {
## End actual work
noopts=0
while getopts "hrVR" option; do
while getopts "dhorV" option; do
(( noopts++ ))
case "$option" in
d)
dont_update=true
;;
h)
usage
;;
o)
offline_mode=true
;;
r)
convert_to_rocky=true
;;
@ -1292,6 +1341,27 @@ if (( ! noopts )); then
usage
fi
if [[ $offline_mode ]]; then
gpg_key_url="file:///mnt/RPM-GPG-KEY-rockyofficial"
repo_urls=(
[rockybaseos]="file:///mnt/rocky/BaseOS/"
[rockyappstream]="file:///mnt/rocky/AppStream/"
)
stream_mirror_baseurl="file:///mnt/centos-stream/"
stream_vault_baseurl="file:///mnt/centos-stream-vault/"
rocky_repo_offline_baseurls=(
[baseos]="file:///mnt/rocky/BaseOS/"
[appstream]="file:///mnt/rocky/AppStream/"
[ha]="file:///mnt/rocky/HA/"
[powertools]="file:///mnt/rocky/PowerTools/"
[extras]="file:///mnt/rocky/Extras/"
[devel]="file:///mnt/rocky/Devel/"
)
else
stream_mirror_baseurl="http://mirror.centos.org/centos/8-stream/"
stream_vault_baseurl="https://vault.centos.org/centos/8-stream/"
fi
pre_setup
trap exit_clean EXIT
pre_check
@ -1305,7 +1375,11 @@ fi
if [[ $convert_to_rocky ]]; then
collect_system_info
establish_gpg_trust
pre_update
if [[ $dont_update ]]; then
infomsg $'\nSkipping update as requested.\n'
else
pre_update
fi
package_swaps
fi