自动化rpm安装(检测依赖)

199 阅读4分钟

适用于“只有安装文件,没有yum配置时”

` #!/usr/bin/python

-- coding: utf-8 -

import sys import commands

falseKeyword="依赖检测失败:" needKeyWord="需要" #被 ... 需要 的 需要 byKeyWord="被" #被 ... 需要 的 被 verGapKeyword="=" # 等号右边是需要的版本,左边是库名称(可能包括x64信息) archGapKeyword="(" # 左括号 左边是lib的名称,右边(括号里)是64位或32位的 archGapKeywordEnd=")"

dvdPath=sys.argv[1] fileNamePre=sys.argv[2]

def installPkg(dvdPath, fileNamePre, archType = "x86_64"): print "Begin parsing for " + fileNamePre

findCmd='find ' + dvdPath +' -name ' + fileNamePre + '*'
if len(archType) > 0:
    findCmd = findCmd + ' |grep ' + archType
print findCmd

val = commands.getoutput(findCmd)

if len(val) == 0:
    print "can't find " + fileNamePre
else:
    print 'val=[' + val +']'

installCmd = "rpm -ivh " + val + " 2>&1"
valInstall = commands.getoutput(installCmd)

print 'valInstall=[' + valInstall +']'

posFailed = valInstall.find(falseKeyword)
if posFailed != -1:
    print "安装失败,因:" + falseKeyword
else:
    print "安装可能成功"
    return

dependsRows = valInstall[posFailed+len(falseKeyword):]
print 'dependsRows=[' + dependsRows + ']'

rowsList = dependsRows.splitlines()

for dependrow in rowsList:
    if dependrow.find(needKeyWord) == -1:
        continue
    dependrow = dependrow.strip()
    print 'dependrow=[' + dependrow + ']'
    libFullPos = dependrow.find(byKeyWord)        
    if libFullPos == -1:
        print "没有找到[" + byKeyWord + "]关键字,无法解析库信息"
        return
    libFull = dependrow[0:libFullPos].strip()
    print libFull
    libVerPos = libFull.find(verGapKeyword)
    if libVerPos == -1:
        print "没有找到[" + verGapKeyword + "]关键字,无法解析库版本"
        libNames=libFull
        #return
    else:
        libVer = libFull[libVerPos+len(verGapKeyword):]
        print libVer
        libNames = libFull[0:libVerPos].strip()
    print libNames
    libNamePos = libNames.find(archGapKeyword)
    if libNamePos == -1:
        print "开始安装:" + libNames
        installPkg(dvdPath, libNames)
    else:
        libName = libNames[0:libNamePos].strip()
        libArchRight=libNames.find(archGapKeywordEnd)
        libArch = libNames[libNamePos+len(archGapKeyword):libArchRight]
        print "libName[" + libName + "], libArch[" + libArch + "]"
        if libArch == "x86-64":
            libArch = "x86_64"
        elif libArch == "x86_64":
            libArch = "x86_64"
        elif len(libArch) == 0:
            print "无法处理这个库: " +libNames
        else:
            libName=libArch
            libArch = "x86_64"
        installPkg(dvdPath, libName, libArch)

installPkg(dvdPath, fileNamePre) `

下方为手动安装和此脚本解决的过程

服务器检查结果:\
***告警***您的授权码是无效的,请获得正确的授权码来注册大云Linux操作系统。您可以使用'bclinux-license -g'命令获得机器码,然后与我们联系帮您产生订阅从而获得正确的授权码。

 示例:

[root@bclinux8 ~]# rpm -ivh /mnt/dvd1/BaseOS/Packages/libselinux-devel-2.9-2.1.el8.x86_64.rpm\
警告:/mnt/dvd1/BaseOS/Packages/libselinux-devel-2.9-2.1.el8.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 06bfb671: NOKEY\
错误:依赖检测失败:\
        pkgconfig(libpcre2-8) 被 libselinux-devel-2.9-2.1.el8.x86_64 需要\
[root@bclinux8 ~]# rpm -qpR /mnt/dvd1/BaseOS/Packages/libselinux-devel-2.9-2.1.el8.x86_64.rpm\
警告:/mnt/dvd1/BaseOS/Packages/libselinux-devel-2.9-2.1.el8.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 06bfb671: NOKEY\
/usr/bin/pkg-config\
libselinux(x86-64) = 2.9-2.1.el8\
libselinux.so.1()(64bit)\
libsepol-devel(x86-64) >= 2.9-1\
pkgconfig(libpcre2-8)\
pkgconfig(libsepol)\
rpmlib(CompressedFileNames) <= 3.0.4-1\
rpmlib(FileDigests) <= 4.6.0-1\
rpmlib(PayloadFilesHavePrefix) <= 4.0-1\
rpmlib(PayloadIsXz) <= 5.2-1\
[root@bclinux8 ~]# rpm -qa |grep pcre2\
pcre2-utf32-10.32-1.el8.x86_64\
pcre2-10.32-1.el8.x86_64\
pcre2-utf16-10.32-1.el8.x86_64\
[root@bclinux8 ~]# ./py_install_rpm.py /mnt/dvd1/  pcre2-devel\
Begin parsing for pcre2-devel\
find /mnt/dvd1/ -name pcre2-devel* |grep x86_64\
val=[/mnt/dvd1/BaseOS/Packages/pcre2-devel-10.32-1.el8.x86_64.rpm]\
valInstall=[警告:/mnt/dvd1/BaseOS/Packages/pcre2-devel-10.32-1.el8.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 06bfb671: NOKEY\
Verifying...                          ########################################\
准备中...                          ########################################\
正在升级/安装...\
pcre2-devel-10.32-1.el8               ########################################]\
安装可能成功\
[root@bclinux8 ~]# rpm -qa |grep pcre2                        \
pcre2-utf32-10.32-1.el8.x86_64\
pcre2-10.32-1.el8.x86_64\
pcre2-utf16-10.32-1.el8.x86_64\
pcre2-devel-10.32-1.el8.x86_64\
[root@bclinux8 ~]# ./py_install_rpm.py /mnt/dvd1/  openssl-deve\
Begin parsing for openssl-deve\
find /mnt/dvd1/ -name openssl-deve* |grep x86_64\
val=[/mnt/dvd1/BaseOS/Packages/openssl-devel-1.1.1c-3.el8_1.x86_64.rpm]\
valInstall=[警告:/mnt/dvd1/BaseOS/Packages/openssl-devel-1.1.1c-3.el8_1.x86_64.rpm: 头V3 RSA/SHA1 Signature, 密钥 ID 06bfb671: NOKEY\
错误:依赖检测失败:\
        krb5-devel(x86-64) 被 openssl-devel-1:1.1.1c-3.el8_1.x86_64 需要]\
安装失败,因:依赖检测失败:\
dependsRows=[\
        krb5-devel(x86-64) 被 openssl-devel-1:1.1.1c-3.el8_1.x86_64 需要]\
dependrow=[krb5-devel(x86-64) 被 openssl-devel-1:1.1.1c-3.el8_1.x86_64 需要]\
krb5-devel(x86-64)\
没有找到[=]关键字,无法解析库版本\
krb5-devel(x86-64)\
libName[krb5-devel], libArch[x86-64]\
Begin parsing for krb5-devel\
find /mnt/dvd1/ -name krb5-devel* |grep x86_64\
val=[/mnt/dvd1/BaseOS/Packages/krb5-devel-1.17-9.el8.x86_64.rpm]\
valInstall=[警告:/mnt/dvd1/BaseOS/Packages/krb5-devel-1.17-9.el8.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 06bfb671: NOKEY\
错误:依赖检测失败:\
        libselinux-devel 被 krb5-devel-1.17-9.el8.x86_64 需要]\
安装失败,因:依赖检测失败:\
dependsRows=[\
        libselinux-devel 被 krb5-devel-1.17-9.el8.x86_64 需要]\
dependrow=[libselinux-devel 被 krb5-devel-1.17-9.el8.x86_64 需要]\
libselinux-devel\
没有找到[=]关键字,无法解析库版本\
libselinux-devel\
开始安装:libselinux-devel\
Begin parsing for libselinux-devel\
find /mnt/dvd1/ -name libselinux-devel* |grep x86_64\
val=[/mnt/dvd1/BaseOS/Packages/libselinux-devel-2.9-2.1.el8.x86_64.rpm]\
valInstall=[警告:/mnt/dvd1/BaseOS/Packages/libselinux-devel-2.9-2.1.el8.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 06bfb671: NOKEY\
Verifying...                          ########################################\
准备中...                          ########################################\
正在升级/安装...\
libselinux-devel-2.9-2.1.el8          ########################################]\
安装可能成功\
[root@bclinux8 ~]# ./py_install_rpm.py /mnt/dvd1/  openssl-deve\
Begin parsing for openssl-deve\
find /mnt/dvd1/ -name openssl-deve* |grep x86_64\
val=[/mnt/dvd1/BaseOS/Packages/openssl-devel-1.1.1c-3.el8_1.x86_64.rpm]\
valInstall=[警告:/mnt/dvd1/BaseOS/Packages/openssl-devel-1.1.1c-3.el8_1.x86_64.rpm: 头V3 RSA/SHA1 Signature, 密钥 ID 06bfb671: NOKEY\
错误:依赖检测失败:\
        krb5-devel(x86-64) 被 openssl-devel-1:1.1.1c-3.el8_1.x86_64 需要]\
安装失败,因:依赖检测失败:\
dependsRows=[\
        krb5-devel(x86-64) 被 openssl-devel-1:1.1.1c-3.el8_1.x86_64 需要]\
dependrow=[krb5-devel(x86-64) 被 openssl-devel-1:1.1.1c-3.el8_1.x86_64 需要]\
krb5-devel(x86-64)\
没有找到[=]关键字,无法解析库版本\
krb5-devel(x86-64)\
libName[krb5-devel], libArch[x86-64]\
Begin parsing for krb5-devel\
find /mnt/dvd1/ -name krb5-devel* |grep x86_64\
val=[/mnt/dvd1/BaseOS/Packages/krb5-devel-1.17-9.el8.x86_64.rpm]\
valInstall=[警告:/mnt/dvd1/BaseOS/Packages/krb5-devel-1.17-9.el8.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 06bfb671: NOKEY\
Verifying...                          ########################################\
准备中...                          ########################################\
正在升级/安装...\
krb5-devel-1.17-9.el8                 ########################################]\
安装可能成功\
[root@bclinux8 ~]# ./py_install_rpm.py /mnt/dvd1/  openssl-deve\
Begin parsing for openssl-deve\
find /mnt/dvd1/ -name openssl-deve* |grep x86_64\
val=[/mnt/dvd1/BaseOS/Packages/openssl-devel-1.1.1c-3.el8_1.x86_64.rpm]\
valInstall=[警告:/mnt/dvd1/BaseOS/Packages/openssl-devel-1.1.1c-3.el8_1.x86_64.rpm: 头V3 RSA/SHA1 Signature, 密钥 ID 06bfb671: NOKEY\
Verifying...                          ########################################\
准备中...                          ########################################\
正在升级/安装...\
openssl-devel-1:1.1.1c-3.el8_1        ########################################]\
安装可能成功\
[root@bclinux8 ~]# ./py_install_rpm.py /mnt/dvd1/  openssl-deve\
Begin parsing for openssl-deve\
find /mnt/dvd1/ -name openssl-deve* |grep x86_64\
val=[/mnt/dvd1/BaseOS/Packages/openssl-devel-1.1.1c-3.el8_1.x86_64.rpm]\
valInstall=[警告:/mnt/dvd1/BaseOS/Packages/openssl-devel-1.1.1c-3.el8_1.x86_64.rpm: 头V3 RSA/SHA1 Signature, 密钥 ID 06bfb671: NOKEY\
Verifying...                          ########################################\
准备中...                          ########################################\
        软件包 openssl-devel-1:1.1.1c-3.el8_1.x86_64 已经安装]\
安装可能成功