编辑:很明显我的安装没有工作。这指向了一个邮件列表Here,我在那里找出了我遗失的命令。我有以下更新的答案。现在我考虑一下,它确实有意义。我只是希望他们能够在开发页面上将它放在简单的地方。
yb = yum.YumBase()
yb.conf.assumeyes = True
yb.update(name='aws-cli')
yb.buildTransaction()
yb.processTransaction()
当服务器首次使用我的kickstart脚本启动时,我尝试使用yumbase执行更新。目前我有一个相当粗略的python子流程来做" yum update"并希望做得更好。
我试图加入Yumbase,但文档非常稀少。我已经查看了此页面上的源代码和文档:http://yum.baseurl.org/wiki/5MinuteExamples
我已经找到了如何列出所有软件包,但没有列出需要使用2008年的SO答案进行更新的软件包:Given an rpm package name, query the yum database for updates
我也发现它是一个非常简单的三线程序来安装新软件包:
yb = yum.YumBase()
yb.conf.assumeyes = True
yb.install(name='aws-cli')
但是以下内容并不适用于更新"包裹:
yb = yum.YumBase()
yb.conf.assumeyes = True
yb.update(name='aws-cli')
所以我需要的是:
1:列出需要更新的软件包的方法,就像" yum check-update"
2:使用" yum update"
安装上面的软件包答案 0 :(得分:0)
从我在yum
代码中看到的内容来看,似乎并没有被用作库。你提供的代码不是正确的方法,幕后还有很多其他事情发生。
基本上,从yum-3.4.3
开始,过程如下所示:
->yummain.__main__
<trap KeyboardInterrupt>
->yummain.user_main(sys.argv[1:], exit_code=True)
<check YUM_PROF,YUM_PDB envvars, wrap the following into debugger/profiler if set>
->yummain.main(args)
<set up locale, set up logging>
-><create a YumBaseCli (child of YumBase & YumOutput)>
<incl. fill a list field with YumCommand instances of known commands>
->cli.YumBaseCli.getOptionsConfig()
<parse args into the YumBaseCli instance, includes initializing plugins>
<obtain global yum lock>
<check write permissions for current dir>
->cli.YumBaseCli.doCommands()
<select a YumCommand from the list>
->YumCommand.needTs/needTsRemove if needed
->YumCommand.doCommand(self, self.basecmd, self.extcmds)
<handle errors & set error code if any>
'Resolving Dependencies'
->cli.YumBaseCli.buildTransaction()
<check for an unfinished transaction>
<resolve deps using the info written by the YumCommand into the object>
<honor clean_requirements_on_remove, protected_packages,
protected_multilib, perform some checks>
<handle errors & set error code if any>
'Dependencies Resolved'
->cli.YumBaseCli.doTransaction()
<download, transaction check, transaction test, transaction
using the info in the object>
<handle errors & set error code if any>
'Complete!'
<release global yum lock>
sys.exit(error_code)
如您所见,主要工作序列直接嵌入main
中,因此您只能通过直接运行来复制此逻辑:
yummain.main(<sequence of cmdline arguments>)
这与运行单独的进程减去进程隔离的情况相同。