以下脚本实际运行中应该会碰到一些未知问题,需要自己分析解决。
#!/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)
[root@bclinux8 ~]# yum install openssl-devel
服务器检查结果:
告警您的授权码是无效的,请获得正确的授权码来注册大云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 已经安装]
安装可能成功