出错提示“Command 'yum -y distro-sync' returned non-zero”

本文主要介绍在Linux操作系统迁移时,迁移任务出错提示“Command 'yum -y distro-sync' returned non-zero”信息时的问题描述、问题原因及其解决方案。

问题描述

在使用SMC操作系统迁移时,迁移任务出错提示“Command 'yum -y distro-sync' returned non-zero”信息。

问题原因

迁移至Anolis OS充分利用了yum distro-sync机制来实施迁移,该命令将当前系统中所有CentOS提供的软件包重装为Anolis OS源上的包,涉及到软件包的依赖解析、下载和安装。该命令执行耗时较长。如果该命令执行过程中意外中断,再次执行时会直接报错,导致迁移无法继续。

解决方案

  1. yum distro-sync意外中断时,需要按照命令执行的阶段来看问题现象。

    • 执行升级过程前中断

      如软件包依赖解析阶段,下载阶段,只要没有开始执行软件包的安装,此时再次执行yum distro-sync能够正常运行。

    • 软件包开始安装过程中意外中断

      软件包冲突问题,此时再次执行yum distro-sync会出现报错信息。yum distro-sync中断时机不同,涉及到的报错软件也会有所不同,本示例以下图报错信息为例。

      image

      1. 执行以下命令,查看报错的软件包nginx在系统中的安装情况。

        rpm -q nginx

        查询发现Nginx安装了第三方仓库的Nginx相关不兼容包,导致冲突。

      2. 执行以下命令,卸载第三方仓库的Nginx相关不兼容包。

        rpm -e nginx*

        卸载过程中如果出现依赖无法卸载,则可以将其依赖一起卸载。

      3. 执行yum distro-sync查看是否有报错。

        • 如果能正常执行,执行以下命令,继续迁移。

          • 当迁移到Anolis OS时

            python3 /usr/sbin/centos2anolis.py -c
          • 当迁移到Alibaba Cloud Linux时

            python3 /usr/sbin/centos2alinux.py -c
        • 如果还是报错,则需要继续解决报错问题。

  2. 问题排查解决后,可参考查看和运行SMC客户端,运行SMC客户端命令./go2aliyun_client --rerun --skipgrub来重试。