def deplist(self, args):
"""cli wrapper method for findDeps method takes a list of packages and
returns a formatted deplist for that package"""
self.doRepoSetup()
for arg in args:
pkgs = []
ematch, match, umatch = self.pkgSack.matchPackageNames([arg])
for po in ematch + match:
pkgs.append(po)
results = self.findDeps(pkgs)
self.depListOutput(results)
return 0, []
pkgsとresultが何であるかが問題。で、resultはdepListOutをみてやればいい。
output.pyでこんな感じになっている。
def depListOutput(self, results):
"""take a list of findDeps results and 'pretty print' the output"""
for pkg in results.keys():
print "package: %s" % pkg.compactPrint()
if len(results[pkg].keys()) == 0:
print " No dependencies for this package"
continue
for req in results[pkg].keys():
reqlist = results[pkg][req]
print " dependency: %s" % prco_tuple_to_string(req)
if not reqlist:
print " Unsatisfied dependency"
continue
for po in reqlist:
print " provider: %s" % po.compactPrint()
んで、site-package/yum/__init__.pyの中で
def findDeps(self, pkgs):
"""Return the dependencies for a given package object list, as well
possible solutions for those dependencies.
Returns the deps as a dict of dicts:
packageobject = [reqs] = [list of satisfying pkgs]"""
results = {}
self.doRepoSetup()
for pkg in pkgs:
results[pkg] = {}
reqs = pkg.requires
reqs.sort()
pkgresults = results[pkg] # shorthand so we don't have to do the
# double bracket thing
for req in reqs:
(r,f,v) = req
if r.startswith('rpmlib('):
continue
satisfiers = []
for po in self.whatProvides(r, f, v):
satisfiers.append(po)
pkgresults[req] = satisfiers
return results
これらを参考にごにょごにょしてrdepなるコマンドを実装。
YUMBaseCli.__ini__ registerするコードを追加。
cli.py
self.registerCommand(yumcommands.DepListCommand())
self.registerCommand(yumcommands.RDepCommand())
def registerCommand(self, command):
本体
def rdep(self, args):
"""recursive define dependency list."""
self.doRepoSetup()
pkgs = []
for arg in args:
ematch, match, umatch = self.pkgSack.matchPackageNames([arg]
)
for po in ematch + match:
pkgs.append(po)
print 'pkgs:', pkgs
work = pkgs
results = {}
while work:
print len(work)
deps = self.findDeps(work)
work = []
for v in deps.values():
for x in v.values():
for po in x:
if po not in results:
results.update({po:None})
work.append(po)
results= self.findDeps(results.keys())
self.depListOutput(results)
return 0, []
yumcommands.py
コマンドの実装。rdepを呼ぶ。
class RDepCommand(YumCommand):
def getNames(self):
return ['rdep']
def doCheck(self, base, basecmd, extcmds):
checkPackageArg(base, basecmd, extcmds)
def doCommand(self, base, basecmd, extcmds):
base.verbose_logger.log(logginglevels.INFO_2, "Recursive dependen
cies: ")
try:
return base.rdep(extcmds)
except yum.Errors.YumBaseError, e:
return 1, [str(e)]
[nori@Asama]~/Desktop/work/custompackaging/tool% python yummain.py deplist busybox
Loading "installonlyn" plugin
Loading "fastestmirror" plugin
Finding dependencies:
Setting up repositories
Loading mirror speeds from cached hostfile
Reading repository metadata in from local files
package: busybox.x86_64 1:1.2.0-3.el5.centos
No dependencies for this package
[nori@Asama]~/Desktop/work/custompackaging/tool% python yummain.py rdep busybox
Loading "installonlyn" plugin
Loading "fastestmirror" plugin
Recursive dependencies:
Setting up repositories
Loading mirror speeds from cached hostfile
Reading repository metadata in from local files
pkgs: []
1
[nori@Asama]~/Desktop/work/custompackaging/tool% python yummain.py rdep bash | grep package:
package: tzdata.noarch 2006m-2.fc6
package: tzdata.noarch 2007c-1.el5
package: libgcc.i386 4.1.1-52.el5
package: glibc.i686 2.5-18.el5_1.1
package: bash.x86_64 3.1-16.1
package: filesystem.x86_64 2.4.0-1.el5.centos
package: libgcc.i386 4.1.2-14.el5
package: glibc-common.x86_64 2.5-12
package: basesystem.noarch 8.0-5.1.1.el5.centos
package: libtermcap.x86_64 2.0.8-46.1
package: tzdata.noarch 2007d-1.el5
package: tzdata.noarch 2007j-1.el5
package: glibc-common.x86_64 2.5-18.el5_1.1
package: glibc.x86_64 2.5-18.el5_1.1
package: mktemp.x86_64 3:1.5-23.2.2
package: setup.noarch 2.5.58-1.el5
package: glibc-common.x86_64 2.5-18
package: glibc.i686 2.5-12
package: libgcc.x86_64 4.1.2-14.el5
package: libgcc.x86_64 4.1.1-52.el5.2
package: tzdata.noarch 2007f-1.el5
package: glibc.i686 2.5-18
package: tzdata.noarch 2007d-1.el5
package: tzdata.noarch 2007h-1.el5
package: termcap.noarch 1:5.5-1.20060701.1
package: libgcc.x86_64 4.1.1-52.el5
package: glibc.x86_64 2.5-12
package: glibc.x86_64 2.5-18
package: libgcc.i386 4.1.1-52.el5.2
[nori@Asama]~/Desktop/work/custompackaging/tool% python yummain.py rdep python | grep package:
package: krb5-libs.x86_64 1.5-29
package: krb5-libs.i386 1.5-26
package: glib2.x86_64 2.12.3-2.fc6
package: libgcc.i386 4.1.1-52.el5
package: bash.x86_64 3.1-16.1
package: module-init-tools.x86_64 3.3-0.pre3.1.16.0.1.el5
package: cracklib.i386 2.8.9-3.3
package: krb5-libs.x86_64 1.5-23
package: grep.x86_64 2.5.1-54.2.el5
package: libtermcap.x86_64 2.0.8-46.1
package: net-tools.x86_64 1.60-73
package: tzdata.noarch 2007f-1.el5
package: findutils.x86_64 1:4.2.27-4.1
package: krb5-libs.x86_64 1.5-26
package: krb5-libs.i386 1.6.1-17.el5
package: e2fsprogs-libs.x86_64 1.39-8.el5
package: libstdc++.x86_64 4.1.2-14.el5
package: openssl.x86_64 0.9.8b-8.3.el5_0.2
package: krb5-libs.x86_64 1.5-28
package: setup.noarch 2.5.58-1.el5
package: libacl.x86_64 2.2.39-2.1.el5
package: initscripts.x86_64 8.45.14.EL-1.el5.centos.1
package: libgcc.x86_64 4.1.1-52.el5.2
package: device-mapper.i386 1.02.20-1.el5
package: pcre.x86_64 6.6-2.el5_1.7
package: e2fsprogs.x86_64 1.39-10.el5
package: mcstrans.x86_64 0.1.10-1.el5
package: chkconfig.x86_64 1.3.30.1-1
package: audit-libs.i386 1.5.5-7.el5
package: termcap.noarch 1:5.5-1.20060701.1
package: libgcc.x86_64 4.1.1-52.el5
package: krb5-libs.i386 1.5-29
package: openssl.i686 0.9.8b-8.3.el5_0.2
package: bzip2-libs.x86_64 1.0.3-3
package: tzdata.noarch 2007c-1.el5
package: openssl.i686 0.9.8b-8.3.el5_0.2
package: audit-libs.x86_64 1.5.5-7.el5
package: libselinux.x86_64 1.33.4-4.el5
package: device-mapper.x86_64 1.02.20-1.el5
package: glibc.i686 2.5-18.el5_1.1
package: pcre.x86_64 6.6-1.1
package: initscripts.x86_64 8.45.17.EL-1.el5.centos.1
package: libgcc.i386 4.1.2-14.el5
package: basesystem.noarch 8.0-5.1.1.el5.centos
package: centos-release.x86_64 10:5-1.0.el5.centos.1
package: krb5-libs.x86_64 1.5-17
package: keyutils-libs.i386 1.2-1.el5
package: python.x86_64 2.4.3-19.el5
package: tzdata.noarch 2007j-1.el5
package: psmisc.x86_64 22.2-5
package: ethtool.x86_64 5-1.el5
package: ncurses.x86_64 5.5-24.20060715
package: libgcc.x86_64 4.1.2-14.el5
package: procps.x86_64 3.2.7-8.1.el5
package: shadow-utils.x86_64 2:4.0.17-12.el5
package: libacl.x86_64 2.2.39-1.1
package: pam.x86_64 0.99.6.2-3.14.el5
package: db4.x86_64 4.3.29-9.fc6
package: audit-libs.i386 1.3.1-1.el5
package: libselinux.i386 1.33.4-4.el5
package: libselinux.i386 1.33.4-2.el5
package: openssl.x86_64 0.9.8b-8.3.el5_0.2
package: e2fsprogs-libs.i386 1.39-10.el5
package: popt.x86_64 1.10.2-47.el5
package: popt.x86_64 1.10.2-37.el5
package: glibc.x86_64 2.5-12
package: coreutils.x86_64 5.97-12.1.el5
package: gawk.x86_64 3.1.5-14.el5
package: libgcc.i386 4.1.1-52.el5.2
package: centos-release-notes.x86_64 5.1.0-2
package: tzdata.noarch 2006m-2.fc6
package: sed.x86_64 4.1.5-5.fc6
package: filesystem.x86_64 2.4.0-1.el5.centos
package: util-linux.x86_64 2.13-0.45.el5_1.1
package: cracklib.x86_64 2.8.9-3.3
package: sysklogd.x86_64 1.4.1-39.2
package: pam.i386 0.99.6.2-3.14.el5
package: zlib.i386 1.2.3-3
package: krb5-libs.x86_64 1.6.1-17.el5
package: device-mapper.i386 1.02.13-1.el5
package: krb5-libs.i386 1.5-23
package: iputils.x86_64 20020927-43.el5
package: krb5-libs.i386 1.5-28
package: pam.x86_64 0.99.6.2-3.26.el5
package: glibc-common.x86_64 2.5-18.el5_1.1
package: module-init-tools.x86_64 3.3-0.pre3.1.16.el5
package: util-linux.x86_64 2.13-0.44.el5
package: udev.x86_64 095-14.9.el5
package: glibc-common.x86_64 2.5-18
package: glibc.i686 2.5-12
package: openssl.i686 0.9.8b-8.3.el5
package: krb5-libs.i386 1.5-17
package: libstdc++.x86_64 4.1.1-52.el5.2
package: zlib.x86_64 1.2.3-3
package: libsepol.x86_64 1.15.2-1.el5
package: audit-libs.x86_64 1.3.1-1.el5
package: sysklogd.x86_64 1.4.1-40.el5
package: cracklib.x86_64 2.8.9-3.1
package: openssl.x86_64 0.9.8b-8.3.el5
package: mingetty.x86_64 1.07-5.2.2
package: readline.x86_64 5.1-1.1
package: glibc.i686 2.5-18
package: glibc.x86_64 2.5-18
package: gdbm.x86_64 1.8.0-26.2.1
package: tzdata.noarch 2007d-1.el5
package: tzdata.noarch 2007h-1.el5
package: keyutils-libs.x86_64 1.2-1.el5
package: centos-release.x86_64 10:5-0.0.el5.centos.2
package: pam.i386 0.99.6.2-3.26.el5
package: glibc-common.x86_64 2.5-12
package: mktemp.x86_64 3:1.5-23.2.2
package: centos-release-notes.x86_64 5.0.0-2
package: mcstrans.x86_64 0.2.6-1.el5
package: libselinux.x86_64 1.33.4-2.el5
package: e2fsprogs-libs.x86_64 1.39-10.el5
package: libattr.x86_64 2.4.32-1.1
package: iproute.x86_64 2.6.18-4.el5
package: tzdata.noarch 2007d-1.el5
package: info.x86_64 4.8-14.el5
package: pcre.x86_64 6.6-2.el5_1.1
package: device-mapper.x86_64 1.02.13-1.el5
package: SysVinit.x86_64 2.86-14
package: pcre.x86_64 6.6-2.el5_0.1
package: udev.x86_64 095-14.5.el5
package: e2fsprogs-libs.i386 1.39-8.el5
package: e2fsprogs.x86_64 1.39-8.el5
package: glibc.x86_64 2.5-18.el5_1.1
package: util-linux.x86_64 2.13-0.45.el5
package: module-init-tools.x86_64 3.3-0.pre3.1.34.el5
package: libstdc++.x86_64 4.1.1-52.el5
package: MAKEDEV.x86_64 3.23-1.2
package: libcap.x86_64 1.10-26
package: cracklib-dicts.x86_64 2.8.9-3.3
package: cracklib.i386 2.8.9-3.1
package: cracklib-dicts.x86_64 2.8.9-3.1
package: libsepol.i386 1.15.2-1.el5
1 件のコメント:
インストールしてないパッケージを調査するときは、makecacheしてからでないと動かないかもしれないです。
コメントを投稿