#!/bin/bash
source /etc/openEuler-latest
LANG=en_US.UTF-8
service_ip=121.36.84.172
function configure_original_repo() {
original_ver=$1
echo "[${original_ver}_OS]
name=${original_ver}_OS
baseurl=https://repo.openeuler.org/${original_ver}/OS/$(arch)/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${original_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
[${original_ver}_everything]
name=${original_ver}_everything
baseurl=https://repo.openeuler.org/${original_ver}/everything/$(arch)/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${original_ver}/everything/$(arch)/RPM-GPG-KEY-openEuler
[${original_ver}_source]
name=${original_ver}_source
baseurl=https://repo.openeuler.org/${original_ver}/source/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${original_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
[${original_ver}_update]
name=${original_ver}_update
baseurl=https://repo.openeuler.org/${original_ver}/update/$(arch)/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${original_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
" >/etc/yum.repos.d/"${original_ver}".repo
if [[ ${original_ver}x == "openEuler-20.03-LTS"x ]] || [[ ${original_ver}x == "openEuler-20.03-LTS-SP1"x ]]; then
echo "[${original_ver}_EPOL]
name=${original_ver}_EPOL
baseurl=https://repo.openeuler.org/${original_ver}/EPOL/$(arch)/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${original_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
[${original_ver}_EPOL_source]
name=${original_ver}_EPOL_source
baseurl=https://repo.openeuler.org/${original_ver}/EPOL/source/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${original_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
[${original_ver}_EPOL_update]
name=${original_ver}_EPOL_update
baseurl=https://repo.openeuler.org/${original_ver}/EPOL/update/$(arch)/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${original_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
[${original_ver}_EPOL_update_source]
name=${original_ver}_EPOL_update_source
baseurl=https://repo.openeuler.org/${original_ver}/EPOL/update/source/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${original_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler" >>/etc/yum.repos.d/"${original_ver}".repo
else
echo "[${original_ver}_EPOL]
name=${original_ver}_EPOL
baseurl=https://repo.openeuler.org/${original_ver}/EPOL/main/$(arch)/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${original_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
[${original_ver}_EPOL_source]
name=${original_ver}_EPOL_source
baseurl=https://repo.openeuler.org/${original_ver}/EPOL/main/source/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${original_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
[${original_ver}_EPOL_update]
name=${original_ver}_EPOL_update
baseurl=https://repo.openeuler.org/${original_ver}/EPOL/update/main/$(arch)/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${original_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
[${original_ver}_EPOL_update_source]
name=${original_ver}_EPOL_update_source
baseurl=https://repo.openeuler.org/${original_ver}/EPOL/update/main/source/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${original_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler" >>/etc/yum.repos.d/"${original_ver}".repo
fi
}
function configure_target_repo() {
target_ver=${1-${openeulerversion}}
echo "[${target_ver}_OS]
name=${target_ver}_OS
baseurl=https://repo.openeuler.org/${target_ver}/OS/$(arch)/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${target_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
[${target_ver}_everything]
name=${target_ver}_everything
baseurl=https://repo.openeuler.org/${target_ver}/everything/$(arch)/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${target_ver}/everything/$(arch)/RPM-GPG-KEY-openEuler
[${target_ver}_source]
name=${target_ver}_source
baseurl=https://repo.openeuler.org/${target_ver}/source/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${target_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
[${target_ver}_update]
name=${target_ver}_update
baseurl=https://repo.openeuler.org/${target_ver}/update/$(arch)/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${target_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
[${target_ver}_update_source]
name=${target_ver}_update_source
baseurl=https://repo.openeuler.org/${target_ver}/update/source/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${target_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
" >/etc/yum.repos.d/"${target_ver}".repo
if [ "${target_ver}"x == "openEuler-20.03-LTS-SP1"x ]; then
echo "[${target_ver}_EPOL]
name=${target_ver}_EPOL
baseurl=https://repo.openeuler.org/${target_ver}/EPOL/$(arch)/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${target_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
[${target_ver}_EPOL_source]
name=${target_ver}_EPOL_source
baseurl=https://repo.openeuler.org/${target_ver}/EPOL/source/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${target_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
[${target_ver}_EPOL_update]
name=${target_ver}_EPOL_update
baseurl=https://repo.openeuler.org/${target_ver}/EPOL/update/$(arch)/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${target_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
[${target_ver}_EPOL_update_source]
name=${target_ver}_EPOL_update_source
baseurl=https://repo.openeuler.org/${target_ver}/EPOL/update/source/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${target_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler" >>/etc/yum.repos.d/"${target_ver}".repo
else
echo "[${target_ver}_EPOL]
name=${target_ver}_EPOL
baseurl=https://repo.openeuler.org/${target_ver}/EPOL/main/$(arch)/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${target_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
[${target_ver}_EPOL_source]
name=${target_ver}_EPOL_source
baseurl=https://repo.openeuler.org/${target_ver}/EPOL/main/source/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${target_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
[${target_ver}_EPOL_update]
name=${target_ver}_EPOL_update
baseurl=https://repo.openeuler.org/${target_ver}/EPOL/update/main/$(arch)/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${target_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
[${target_ver}_EPOL_update_source]
name=${target_ver}_EPOL_update_source
baseurl=https://repo.openeuler.org/${target_ver}/EPOL/update/main/source/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/${target_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler" >>/etc/yum.repos.d/"${target_ver}".repo
fi
printf "
[${target_ver}_%s]
name=${target_ver}_%s
baseurl=http://${service_ip}/repo.openeuler.org/${target_ver}/%s/$(arch)/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/${target_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
priority=1
" "$test_update_repo" "$test_update_repo" "$test_update_repo" >>/etc/yum.repos.d/"${target_ver}".repo
printf "
[${target_ver}_source_%s]
name=${target_ver}_source_%s
baseurl=http://${service_ip}/repo.openeuler.org/${target_ver}/%s/source/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/${target_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
priority=1
" "$test_update_repo" "$test_update_repo" "$test_update_repo" >>/etc/yum.repos.d/"${target_ver}".repo
if [ "${target_ver}"x == "openEuler-20.03-LTS-SP1"x ]; then
if [ "${test_update_repo}"x == "${test_EPOL_update_repo}"x ]; then
printf "
[${target_ver}_EPOL_%s]
name=${target_ver}_EPOL_%s
baseurl=http://${service_ip}/repo.openeuler.org/${target_ver}/EPOL/%s/$(arch)/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/${target_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
priority=1
" "$test_EPOL_update_repo" "$test_EPOL_update_repo" "$test_EPOL_update_repo" >>/etc/yum.repos.d/"${target_ver}".repo
printf "
[${target_ver}_EPOL_source_%s]
name=${target_ver}_EPOL_source_%s
baseurl=http://${service_ip}/repo.openeuler.org/${target_ver}/EPOL/%s/source/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/${target_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
priority=1
" "$test_EPOL_update_repo" "$test_EPOL_update_repo" "$test_EPOL_update_repo" >>/etc/yum.repos.d/"${target_ver}".repo
else
printf "No ${target_ver}_EPOL_%s repo" "$test_update_repo"
fi
else
if [ "${test_update_repo}"x == "${test_EPOL_update_repo}"x ]; then
printf "
[${target_ver}_EPOL_%s]
name=${target_ver}_EPOL_%s
baseurl=http://${service_ip}/repo.openeuler.org/${target_ver}/EPOL/%s/main/$(arch)/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/${target_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
priority=1
" "$test_EPOL_update_repo" "$test_EPOL_update_repo" "$test_EPOL_update_repo" >>/etc/yum.repos.d/"${target_ver}".repo
printf "
[${target_ver}_EPOL_source_%s]
name=${target_ver}_EPOL_source_%s
baseurl=http://${service_ip}/repo.openeuler.org/${target_ver}/EPOL/%s/main/source/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/${target_ver}/OS/$(arch)/RPM-GPG-KEY-openEuler
priority=1
" "$test_EPOL_update_repo" "$test_EPOL_update_repo" "$test_EPOL_update_repo" >>/etc/yum.repos.d/"${target_ver}".repo
else
printf "No ${target_ver}_EPOL_%s repo" "$test_update_repo"
fi
fi
}
function get_related_lists() {
target_ver=${1-${openeulerversion}}
test -d /home/pkg_manager_folder || mkdir /home/pkg_manager_folder && cd /home/pkg_manager_folder || exit 1
dnf list --installed | grep "@anaconda" | grep "arch\|x86_64" | awk '{print $1}' | awk -F. 'OFS="."{$NF="";print}' | awk '{print substr($0, 1, length($0)-1)}' >anaconda_list
dnf list --available --repo="${target_ver}_${test_update_repo}" | grep "arch\|x86_64" | awk '{print $1}' | awk -F. 'OFS="."{$NF="";print}' | awk '{print substr($0, 1, length($0)-1)}' >update_dnf_list
dnf install -y rpm-build
exec_path=$(pwd)
dnf list --repo="${target_ver}_source_${test_update_repo}" --available|awk '{print $1}' |awk -F '.src' '{print $1}'|grep -v "Last\|Available\|${target_ver}" > source_list
dnf config-manager --disable "${target_ver}_source_${test_update_repo}"
test -d /home/src || mkdir /home/src && cd /home/src
yumdownloader --source $(cat ${exec_path}/source_list)
while read name
do
rpm -i ${name}*.src.rpm || echo "Source package ${name} install fail !" >>${exec_path}/check.log
rpm2cpio ${name}*.src.rpm |cpio -idmv --no-absolute-filenames "*.spec" || echo "${name} spec get fail !" >>${exec_path}/check.log
done < ${exec_path}/source_list
cd ${exec_path}
ls -l /home/src/*spec|awk '{print $9}' > spec.list
while read spec
do
rpm -q --specfile ${spec} --queryformat="%{NAME}\n" >> update_rpm_list || echo " ${spec} get the package name fail !" >>check.log
done < spec.list
cat update_dnf_list update_rpm_list |sort|uniq > update_list
if [ "${test_update_repo}"x == "${test_EPOL_update_repo}"x ]; then
dnf list --available --repo="${target_ver}_EPOL_${test_EPOL_update_repo}" | grep "arch\|x86_64" | awk '{print $1}' | awk -F. 'OFS="."{$NF="";print}' | awk '{print substr($0, 1, length($0)-1)}' >EPOL_update_dnf_list
dnf list --repo="${target_ver}_EPOL_source_${test_EPOL_update_repo}" --available|awk '{print $1}' |awk -F '.src' '{print $1}'|grep -v "Last\|Available\|${target_ver}" > epol_source_list
dnf config-manager --disable "${target_ver}_EPOL_source_${test_update_repo}"
test -d /home/src_epol || mkdir /home/src_epol && cd /home/src_epol
yumdownloader --source $(cat ${exec_path}/epol_source_list)
while read epol_name
do
rpm -i ${epol_name}*.src.rpm || echo "Source package ${epol_name} install fail !" >>${exec_path}/check.log
rpm2cpio ${epol_name}*.src.rpm |cpio -idmv --no-absolute-filenames "*.spec"
done < ${exec_path}/epol_source_list
cd ${exec_path}
ls -l /home/src_epol/*spec|awk '{print $9}' > epol_spec.list
while read epol_spec
do
rpm -q --specfile ${epol_spec} --queryformat="%{NAME}\n" >> EPOL_update_rpm_list || echo " ${epol_spec} get the package name fail !" >>check.log
done < epol_spec.list
cat EPOL_update_dnf_list EPOL_update_rpm_list |sort|uniq > EPOL_update_list
else
printf "No ${target_ver}_EPOL_%s pkg-lists" "$test_update_repo"
fi
}
function uninstall_pkg() {
cat >get_removeList.sh <<EOF1
while read -r pkg; do
cat anaconda_list | grep "^\${pkg}$" || echo "\${pkg}" >> removeList
done < update_list
EOF1
cat >delete_removeList.sh <<EOF2
while read -r pkg; do
dnf remove -y --skip-broken --nobest \${pkg}
done < removeList
EOF2
chmod +x get_removeList.sh delete_removeList.sh
./get_removeList.sh
bash -x delete_removeList.sh | tee remove_log
test -s EPOL_update_list && while read -r pkg; do
yum remove -y "$pkg" --skip-broken --nobest >>EPOL_remove_log 2>&1
done <EPOL_update_list
}