diff --git a/script/tools/pkg_rpm_update.sh b/script/tools/pkg_rpm_update.sh index 0a7cc23434e0abf5a52dc42a64e73cf2ed98ef85..d80cbcd8d9b730262a9236232fae3fe1cbceaec2 100755 --- a/script/tools/pkg_rpm_update.sh +++ b/script/tools/pkg_rpm_update.sh @@ -44,6 +44,7 @@ function copy_rpm(){ update_key=$3 pkg_place=$4 up_dir=$5 + action=$6 if [ "x${up_dir}" == "x" ];then date_dir="update_"`date +%Y%m%d` else @@ -67,17 +68,18 @@ function copy_rpm(){ if [ ! -d ${update_path} ];then mkdir -p ${update_path} && cd ${update_path} mkdir -p aarch64/Packages x86_64/Packages source/Packages + touch pkglist fi " pkgs=${pkglist//,/ } for pkg in ${pkgs} do - osc getbinaries ${obs_proj} ${pkg} standard_aarch64 aarch64 --source --debug + osc getbinaries ${obs_proj} ${pkg} standard_aarch64 aarch64 --source --debug 2>/dev/null scp -i ${update_key} -o StrictHostKeyChecking=no binaries/*.src.rpm root@${update_ip}:${update_path}/source/Packages/ rm -f binaries/*.src.rpm scp -i ${update_key} -o StrictHostKeyChecking=no binaries/*.rpm root@${update_ip}:${update_path}/aarch64/Packages/ rm -rf binaries - osc getbinaries ${obs_proj} ${pkg} standard_x86_64 x86_64 --source --debug + osc getbinaries ${obs_proj} ${pkg} standard_x86_64 x86_64 --source --debug 2>/dev/null scp -i ${update_key} -o StrictHostKeyChecking=no binaries/*.src.rpm root@${update_ip}:${update_path}/source/Packages/ rm -f binaries/*.src.rpm scp -i ${update_key} -o StrictHostKeyChecking=no binaries/*.rpm root@${update_ip}:${update_path}/x86_64/Packages/ @@ -91,7 +93,19 @@ fi mv pkglist_bak pkglist scp -i ${update_key} -o StrictHostKeyChecking=no pkglist root@${update_ip}:${update_path}/ ssh -i ${update_key} -o StrictHostKeyChecking=no root@${update_ip} "cd ${update_path} && createrepo -d aarch64 && createrepo -d x86_64 && createrepo -d source" - + if [[ $? -eq 0 ]];then + if [[ ${action} == "update" ]];then + echo "更新软件包(${pkglist})的二进制成功!" + else + echo "新增软件包(${pkglist})的二进制到${update_path}目录成功!" + fi + else + if [[ ${action} == "update" ]];then + echo "更新软件包(${pkglist})的二进制失败!" + else + echo "新增软件包(${pkglist})的二进制到${update_path}目录失败!" + fi + fi json_file="${branch_name}-update.json" if [ ${pkg_place} == "standard" ];then branch_dir="/repo/openeuler/repo.openeuler.org/${branch_name}" @@ -101,7 +115,7 @@ fi scp -i ${update_key} -o StrictHostKeyChecking=no root@${update_ip}:${branch_dir}/${json_file} . update_json_file "create" ${date_dir} ${json_file} scp -i ${update_key} -o StrictHostKeyChecking=no ${json_file} root@${update_ip}:${branch_dir}/ - check_update_rpm ${obs_proj} ${date_dir} ${pkg_place} ${update_key} + check_update_rpm ${obs_proj} ${date_dir} ${pkg_place} ${update_key} ${pkglist} "create" } function release_rpm(){ @@ -134,7 +148,8 @@ if [ ! -d ${update_dir} ];then exit 1 fi " - for path in ${path_list} + echo "开始发布${update_dir}目录中的所有的二进制到194机器!" + for path in ${path_list} do mkdir $path ## backup update_xxxx dir rpm into update dir @@ -146,6 +161,7 @@ fi ssh -i ${update_key} -o StrictHostKeyChecking=no root@${release_ip} "cd ${repo_path} && createrepo -d ${path}" rm -rf $path done + echo "备份及发布${update_dir}成功!" if [ ${pkg_place} == "standard" ];then branch_dir="/repo/openeuler/repo.openeuler.org/${branch_name}" elif [ ${pkg_place} == "EPOL" ];then @@ -184,16 +200,17 @@ if [ ! -d ${update_path} ];then exit 2 fi " - del_pkg_rpm ${obs_proj} ${pkglist} ${up_dir} ${update_key} "update" ${pkg_place} - copy_rpm ${obs_proj} ${pkglist} ${update_key} ${pkg_place} ${up_dir} + echo "开始更新${update_path}目录中软件包(${pkglist})的二进制!" + del_pkg_rpm ${obs_proj} ${pkglist} ${update_key} ${up_dir} "update" ${pkg_place} + copy_rpm ${obs_proj} ${pkglist} ${update_key} ${pkg_place} ${up_dir} "update" } # delete update dir pkg binary rpm function del_pkg_rpm(){ obs_proj=$1 pkglist=$2 - up_dir=$3 - update_key=$4 + update_key=$3 + up_dir=$4 flag=$5 pkg_place=$6 if [[ ${obs_proj} =~ "Epol" ]];then @@ -250,7 +267,7 @@ function del_pkg_rpm(){ sed -i "/^$pkg$/d" pkglist done scp -i ${update_key} -o StrictHostKeyChecking=no pkglist root@${update_ip}:${update_path}/ - check_update_rpm ${obs_proj} ${up_dir} ${pkg_place} ${update_key} + check_update_rpm ${obs_proj} ${up_dir} ${pkg_place} ${update_key} ${pkglist} "delete" fi } @@ -272,15 +289,15 @@ function del_update_dir(){ update_dir="/repo/openeuler/repo.openeuler.org/${branch_name}/EPOL/${up_dir}" else echo "package family is error!" - exit 0 + exit 1 fi ssh -i ${update_key} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR root@${update_ip} " if [ ! -d ${update_dir} ];then - echo "${update_dir} is not exist..." + echo "删除${update_dir}目录失败!" exit 5 else rm -rf ${update_dir} - echo "rm ${update_dir} success!" + echo "删除${update_dir}目录成功!" fi " if [ ${pkg_place} == "standard" ];then @@ -300,6 +317,8 @@ function check_update_rpm(){ update_dir=$2 pkg_place=$3 update_key=$4 + pkglist=$5 + action=$6 if [[ ${obs_proj} =~ "Epol" ]];then bak=`echo ${obs_proj%%:Epol}` branch_name=`echo ${bak//:/-}` @@ -314,61 +333,65 @@ function check_update_rpm(){ pkg_aarch_path="${update_path}/aarch64/Packages" pkg_x86_path="${update_path}/x86_64/Packages" source_path="${update_path}/source/Packages" - rm -f pkglist - scp -i ${update_key} -o StrictHostKeyChecking=no root@${update_ip}:${update_path}/pkglist . - for pkg in `cat pkglist` + pkgs=${pkglist//,/ } + for pkg in ${pkgs} do - osc ls -b ${obs_proj} ${pkg} standard_aarch64 aarch64 2>/dev/null | grep -Ev "standard_|_buildenv|_statistics" >> arch_rpm_bak - osc ls -b ${obs_proj} ${pkg} standard_x86_64 x86_64 2>/dev/null | grep -Ev "standard_|_buildenv|_statistics" >> x86_rpm_bak + osc ls -b ${obs_proj} ${pkg} standard_aarch64 aarch64 2>/dev/null | grep -Ev "standard_|_buildenv|_statistics" >> arch_rpm_list + osc ls -b ${obs_proj} ${pkg} standard_x86_64 x86_64 2>/dev/null | grep -Ev "standard_|_buildenv|_statistics" >> x86_rpm_list done - cat arch_rpm_bak x86_rpm_bak | grep "src.rpm" >> src_rpm_bak - sed -i '/.src.rpm/d' arch_rpm_bak x86_rpm_bak - sed -i 's/^ *//g' arch_rpm_bak src_rpm_bak x86_rpm_bak - cat arch_rpm_bak | sort | uniq > arch_rpm_list - cat src_rpm_bak | sort | uniq > src_rpm_list - cat x86_rpm_bak | sort | uniq > x86_rpm_list - rm -f arch_rpm_bak src_rpm_bak x86_rpm_bak - ssh -i ${update_key} -o StrictHostKeyChecking=no root@${update_ip} "cd ${pkg_aarch_path} && ls *.rpm > arch_rpm_bak && cd ${pkg_x86_path} && ls *.rpm > x86_rpm_bak && cd ${source_path} && ls *.rpm > src_rpm_bak" - scp -i ${update_key} -o StrictHostKeyChecking=no root@${update_ip}:${pkg_aarch_path}/arch_rpm_bak . - scp -i ${update_key} -o StrictHostKeyChecking=no root@${update_ip}:${pkg_x86_path}/x86_rpm_bak . - scp -i ${update_key} -o StrictHostKeyChecking=no root@${update_ip}:${source_path}/src_rpm_bak . - ssh -i ${update_key} -o StrictHostKeyChecking=no root@${update_ip} "cd ${pkg_aarch_path} && rm -f arch_rpm_bak && cd ${pkg_x86_path} && rm -f x86_rpm_bak && cd ${source_path} && rm -f src_rpm_bak" - cat arch_rpm_bak | sort | uniq > update_arch_rpm - cat src_rpm_bak | sort | uniq > update_src_rpm - cat x86_rpm_bak | sort | uniq > update_x86_rpm - rm -f arch_rpm_bak src_rpm_bak x86_rpm_bak - diff -Nur update_arch_rpm arch_rpm_list > diff_arch_list - diff -Nur update_src_rpm src_rpm_list > diff_src_list - diff -Nur update_x86_rpm x86_rpm_list > diff_x86_list - sed -i '1,3d' diff_arch_list diff_src_list diff_x86_list - parse_patch_data diff_arch_list ${pkg_aarch_path} - parse_patch_data diff_src_list ${source_path} - parse_patch_data diff_x86_list ${pkg_x86_path} + cat arch_rpm_list x86_rpm_list | grep "src.rpm" | sort | uniq >> src_rpm_list + sed -i '/.src.rpm/d' arch_rpm_list x86_rpm_list + sed -i 's/^ *//g' arch_rpm_list src_rpm_list x86_rpm_list + ssh -i ${update_key} -o StrictHostKeyChecking=no root@${update_ip} "cd ${pkg_aarch_path} && ls *.rpm > update_arch_rpm && cd ${pkg_x86_path} && ls *.rpm > update_x86_rpm && cd ${source_path} && ls *.rpm > update_src_rpm" + scp -i ${update_key} -o StrictHostKeyChecking=no root@${update_ip}:${pkg_aarch_path}/update_arch_rpm . + scp -i ${update_key} -o StrictHostKeyChecking=no root@${update_ip}:${pkg_x86_path}/update_x86_rpm . + scp -i ${update_key} -o StrictHostKeyChecking=no root@${update_ip}:${source_path}/update_src_rpm . + ssh -i ${update_key} -o StrictHostKeyChecking=no root@${update_ip} "cd ${pkg_aarch_path} && rm -f update_arch_rpm && cd ${pkg_x86_path} && rm -f update_x86_rpm && cd ${source_path} && rm -f update_src_rpm" + parse_data arch_rpm_list update_arch_rpm ${pkg_aarch_path} ${action} + parse_data src_rpm_list update_src_rpm ${source_path} ${action} + parse_data x86_rpm_list update_x86_rpm ${pkg_x86_path} ${action} echo "======================检查结果汇总======================" if [ -s check_result ];then + if [[ ${action} == "delete" ]];then + echo "删除${update_path}目录中软件包(${pkglist})的二进制失败!" + rm -f update_*_rpm *_rpm_list check_result + exit 1 + fi cat check_result - rm -f update_*_rpm diff_*_list check_result pkglist + rm -f update_*_rpm *_rpm_list check_result exit 1 else - echo "经过检查后,${update_path}目录中二进制无缺失且无多余!" - rm -f update_*_rpm diff_*_list check_result pkglist + if [[ ${action} == "delete" ]];then + echo "删除${update_path}目录中软件包(${pkglist})的二进制成功!" + fi + echo "经过检查后,${update_path}目录中软件包(${pkglist})的二进制无缺失且无多余!" + rm -f update_*_rpm *_rpm_list check_result exit 0 fi } -function parse_patch_data(){ - diff_list=$1 - pkg_path=$2 - if [ -s ${diff_list} ];then - rdt=`grep "^-" ${diff_list} | sed 's/^-*//g' | sed ':a;N;s/\n/ /;ba;'` - miss=`grep "^+" ${diff_list} | sed 's/^+*//g' | sed ':a;N;s/\n/ /;ba;'` - if [ -n "${rdt}" ];then - echo "${pkg_path}目录中多余二进制:${rdt}" >> check_result - fi - if [ -n "${miss}" ];then - echo "${pkg_path}目录中缺少二进制:${miss}" >> check_result +function parse_data(){ + compare_file=$1 + base_file=$2 + pkg_path=$3 + action=$4 + for line in `cat ${compare_file}` + do + grep "^${line}$" ${base_file} + if [[ $? -eq 0 ]];then + if [[ ${action} == "delete" ]];then + echo "${pkg_path}目录中多余二进制:${line}" >> check_result + fi + else + if [[ ${action} != "delete" ]];then + echo "${pkg_path}目录中缺少二进制:${line}" >> check_result + fi fi - fi + done +} + +function prepare_env(){ + ssh -i $1 -o StrictHostKeyChecking=no root@${update_ip} "apt-get install -y createrepo &>/dev/null" } if [ $1 == "openEuler:Mainline" ];then @@ -376,6 +399,8 @@ if [ $1 == "openEuler:Mainline" ];then exit 3 fi +prepare_env $3 + if [ $# -eq 5 ];then if [ ${4} == "create" ];then copy_rpm $1 $2 $3 $5