旧源消失的rpm包安装-devtoolset-9引出

  装nvidia12.6驱动失败,以为是缺少devtoolset-9,找了一圈scl源无果,最后用豆包的脚本从另外一台centos7.6+devtoolset-9的主机上把rpm导出来装了,虽然仍然没有解决nvidia 12.6安装问题,但有必要记录这种应对源消失的包无法安装的变态应对方法。

1、导出已安装的包清单:

rpm -qa | grep devtoolset-9 > devtoolset-9-packages.txt

2、导出系统安装的rpm包,保存在/tmp/devtoolset-9-rpms目录

# 1. 创建存放目录
mkdir -p /tmp/devtoolset-9-rpms

# 2. 遍历包列表,正确使用 rpmrebuild
while read -r pkg; do
    # 提取纯包名(去掉版本号,避免匹配问题)
    pkg_name=$(echo "$pkg" | cut -d'-' -f1-$(echo "$pkg" | grep -o '-' | wc -l) | sed 's/-[0-9].*//')
    # 检查包是否真的安装
    rpm -q "$pkg" > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "Exporting $pkg..."
        # 核心修正:去掉 -p,直接用包名,-b 保持批量模式
        sudo rpmrebuild -b "$pkg" > /tmp/rpmrebuild_$pkg.log 2>&1
        
        # 查找生成的 RPM 包(默认路径)
        rpm_file=$(find /root/rpmbuild/RPMS/x86_64/ -name "$pkg_name*$(echo "$pkg" | cut -d'.' -f2-).rpm" | head -1)
        if [ -f "$rpm_file" ]; then
            mv "$rpm_file" /tmp/devtoolset-9-rpms/
            echo "✅ Success: $pkg -> /tmp/devtoolset-9-rpms/"
        else
            echo "❌ Failed to find RPM for $pkg"
        fi
        # 清理临时文件
        rm -rf /root/rpmbuild/RPMS/x86_64/"$pkg_name"*.rpm
    else
        echo "⚠️ Package $pkg not installed, skip..."
    fi
done < devtoolset-9-packages.txt

# 3. 查看结果
ls -l /tmp/devtoolset-9-rpms/

3、新机器上安装包

rpm -Uvh *.rpm --nodeps --force

 

posted @ 2026-01-13 11:25  badwood  阅读(4)  评论(0)    收藏  举报
Badwood's Blog