如何使用Yumbase Python模块执行“yum update”?

时间:2015-02-24 23:31:49

标签: python yum

编辑:很明显我的安装没有工作。这指向了一个邮件列表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"

安装上面的软件包

1 个答案:

答案 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>)

这与运行单独的进程减去进程隔离的情况相同。