[fedora-java] JOnAS in FC5
Gary Benson
gbenson at redhat.com
Tue Jun 28 12:39:22 UTC 2005
Mark Wielaard wrote:
> On Mon, 2005-06-27 at 09:55 +0100, Gary Benson wrote:
> > Nicolas Mailhot wrote:
> > > Le lundi 27 juin 2005 à 09:36 +0100, Gary Benson a écrit :
> > > > The graphs get very messy. I've done them separately for ant,
> > > > tomcat and jonas, but never all together.
> > >
> > > Would be great to post them on jpackage-discuss - people often
> > > do not realise what a new release means (and a new release means
> > > getting at least ant and tomcat right)
> >
> > Ok, I'll post them next time I make a set...
>
> Could you post instructions on how to make such a set? It doesn't
> have to be some fancy graph. Just a list of all
> dependencies/packages would be nice. I assume yum/rpm actually has
> them. I hope there is some easy way to get a list starting from the
> jonas or eclipse-platform package.
I've generally written scripts to query the rpm database and/or a
directory full of rpms and emit graphviz files for printing.
Generally the scripts will start with a package at the top of the tree
(tomcat5-admin-webapps, for example, or lately jonas-examples) and
work their way down through whatever set of dependencies I was
interested in and ignoring whatever set of things I didn't want to
see.
I attached an example, so you can see what I mean. If I recall, it
draws a graph of the runtime dependencies of the packages I maintain
in FC4, with subpackages treated as separate entities.
Hope that helps,
Gary
-------------- next part --------------
import rpm
import os
class Package:
def __init__(self, name):
self.name = name
class PackageSet:
def __init__(self, path):
self.pkgs, self.requires, self.provides = {}, {}, {}
os.path.walk(path, PackageSet.__find_rpms, self)
for pkg in self.pkgs.values():
requires = {}
for require in self.requires[pkg.name]:
if self.provides.has_key(require):
if self.provides[require] == pkg.name:
continue
if self.provides[require] == "jpackage-utils":
continue
if self.provides[require] == "java-1.4.2-gcj-compat" and \
pkg.name not in ("java-1.4.2-gcj-compat-devel",
"eclipse-ecj"):
continue
requires[self.provides[require]] = 1
else:
assert is_ignorable(require)
requires = requires.keys()
requires.sort()
pkg.requires = requires
def __find_rpms(self, dir, items):
for item in items:
if item.endswith(".rpm") and not item.endswith(".src.rpm"):
self.__add_rpm(os.path.join(dir, item))
def __add_rpm(self, path):
fd = os.open(path, os.O_RDONLY)
try:
hdr = rpm.TransactionSet().hdrFromFdno(fd)
finally:
os.close(fd)
assert type(hdr) == rpm.hdr
name = hdr["name"]
assert not self.pkgs.has_key(name)
self.pkgs[name] = Package(name)
assert not self.requires.has_key(name)
self.requires[name] = hdr["requirename"]
if name in ("tomcat5", "tomcat5-jasper"):
self.requires[name].remove("jakarta-commons-daemon")
if name == "tomcat5":
self.requires[name].append("puretls")
for provide in hdr["providename"]:
if (name, provide) == ("xerces-j2", "jaxp_parser_impl"):
continue
assert not self.provides.has_key(provide)
self.provides[provide] = name
def graph(self, start):
nodes, edges = {}, []
for node in start:
nodes[node] = False
while True:
todo = [k for k, v in nodes.items() if not v]
if not todo:
break
for name in todo:
pkg = self.pkgs[name]
for require in pkg.requires:
edges.append((name, require))
if not nodes.has_key(require):
nodes[require] = False
nodes[name] = True
return edges
def is_ignorable(dep):
if dep.startswith("/"):
return True
if dep.startswith("rpmlib("):
return True
if dep.startswith("lib") and dep.find(".so") != -1:
return True
if dep in ("gcc-java", "gjdoc", "httpd-mmn", "libgcj", "libgcj-src"):
return True
return False
if __name__ == "__main__":
import glob, sys
[path] = glob.glob(os.path.join(os.path.split(
os.path.abspath( sys.argv[0]))[0], "pkgs-*"))
pkgs = PackageSet(path)
print "// Runtime dependencies for FC4 Java stack"
print "// dot -Tps graph.dot -o graph.ps"
print
print "digraph G {"
print ' page="8.27, 11.69";'
print ' ratio="fill";'
for requirer, provider in pkgs.graph(
("tomcat5",
"tomcat5-webapps",
"tomcat5-admin-webapps",
"avalon-logkit")):
print ' "%s" -> "%s";' % (requirer, provider)
print "}"
-------------- next part --------------
// Runtime dependencies for FC4 Java stack
// dot -Tps graph.dot -o graph.ps
digraph G {
page="8.27, 11.69";
ratio="fill";
"avalon-logkit" -> "avalon-framework";
"avalon-logkit" -> "tomcat5-servlet-2.4-api";
"tomcat5" -> "ant";
"tomcat5" -> "classpathx-jaf";
"tomcat5" -> "classpathx-mail";
"tomcat5" -> "jakarta-commons-beanutils";
"tomcat5" -> "jakarta-commons-collections";
"tomcat5" -> "jakarta-commons-dbcp";
"tomcat5" -> "jakarta-commons-digester";
"tomcat5" -> "jakarta-commons-el";
"tomcat5" -> "jakarta-commons-fileupload";
"tomcat5" -> "jakarta-commons-launcher";
"tomcat5" -> "jakarta-commons-logging";
"tomcat5" -> "jakarta-commons-modeler";
"tomcat5" -> "jakarta-commons-pool";
"tomcat5" -> "java-1.4.2-gcj-compat-devel";
"tomcat5" -> "ldapjdk";
"tomcat5" -> "mx4j";
"tomcat5" -> "puretls";
"tomcat5" -> "regexp";
"tomcat5" -> "tomcat5-jasper";
"tomcat5" -> "tomcat5-servlet-2.4-api";
"tomcat5" -> "xerces-j2";
"tomcat5" -> "xml-commons-apis";
"tomcat5-admin-webapps" -> "struts11";
"tomcat5-admin-webapps" -> "tomcat5";
"tomcat5-webapps" -> "jakarta-taglibs-standard";
"tomcat5-webapps" -> "tomcat5";
"jakarta-commons-beanutils" -> "jakarta-commons-collections";
"jakarta-commons-beanutils" -> "jakarta-commons-logging";
"jakarta-commons-pool" -> "jakarta-commons-collections";
"ant" -> "java-1.4.2-gcj-compat-devel";
"tomcat5-jasper" -> "ant";
"tomcat5-jasper" -> "jakarta-commons-collections";
"tomcat5-jasper" -> "jakarta-commons-el";
"tomcat5-jasper" -> "jakarta-commons-logging";
"tomcat5-jasper" -> "tomcat5-servlet-2.4-api";
"tomcat5-jasper" -> "xerces-j2";
"tomcat5-jasper" -> "xml-commons-apis";
"ldapjdk" -> "gnu-crypto-sasl-jdk1.4";
"ldapjdk" -> "oro";
"xerces-j2" -> "xml-commons-apis";
"xerces-j2" -> "xml-commons-resolver";
"jakarta-taglibs-standard" -> "tomcat5-servlet-2.4-api";
"avalon-framework" -> "xalan-j2";
"avalon-framework" -> "xml-commons-apis";
"jakarta-commons-fileupload" -> "tomcat5-servlet-2.4-api";
"xml-commons-apis" -> "xml-commons";
"mx4j" -> "bcel";
"mx4j" -> "classpathx-jaf";
"mx4j" -> "classpathx-mail";
"mx4j" -> "gnu-crypto-jce-jdk1.4";
"mx4j" -> "jakarta-commons-logging";
"mx4j" -> "junit";
"mx4j" -> "log4j";
"mx4j" -> "xml-commons";
"mx4j" -> "xml-commons-apis";
"mx4j" -> "xml-commons-resolver";
"jakarta-commons-digester" -> "jakarta-commons-beanutils";
"jakarta-commons-digester" -> "jakarta-commons-collections";
"jakarta-commons-digester" -> "jakarta-commons-logging";
"jakarta-commons-dbcp" -> "jakarta-commons-collections";
"jakarta-commons-dbcp" -> "jakarta-commons-pool";
"struts11" -> "jakarta-commons-beanutils";
"struts11" -> "jakarta-commons-digester";
"struts11" -> "jakarta-commons-fileupload";
"struts11" -> "jakarta-commons-validator";
"struts11" -> "oro";
"struts11" -> "tomcat5-servlet-2.4-api";
"jakarta-commons-modeler" -> "jakarta-commons-beanutils";
"jakarta-commons-modeler" -> "jakarta-commons-collections";
"jakarta-commons-modeler" -> "jakarta-commons-digester";
"jakarta-commons-modeler" -> "jakarta-commons-logging";
"jakarta-commons-modeler" -> "mx4j";
"jakarta-commons-modeler" -> "xalan-j2";
"jakarta-commons-modeler" -> "xml-commons-apis";
"java-1.4.2-gcj-compat-devel" -> "eclipse-ecj";
"java-1.4.2-gcj-compat-devel" -> "java-1.4.2-gcj-compat";
"classpathx-mail" -> "classpathx-jaf";
"classpathx-mail" -> "gnu-crypto-jce-jdk1.4";
"classpathx-mail" -> "gnu-crypto-sasl-jdk1.4";
"puretls" -> "cryptix";
"puretls" -> "cryptix-asn1";
"java-1.4.2-gcj-compat" -> "gnu-crypto";
"java-1.4.2-gcj-compat" -> "gnu-crypto-jce-jdk1.4";
"java-1.4.2-gcj-compat" -> "gnu-crypto-sasl-jdk1.4";
"java-1.4.2-gcj-compat" -> "jessie";
"xml-commons-resolver" -> "xml-commons-apis";
"cryptix-asn1" -> "cryptix";
"bcel" -> "regexp";
"eclipse-ecj" -> "java-1.4.2-gcj-compat";
"log4j" -> "xml-commons-apis";
"jakarta-commons-validator" -> "jakarta-commons-beanutils";
"jakarta-commons-validator" -> "jakarta-commons-collections";
"jakarta-commons-validator" -> "jakarta-commons-digester";
"jakarta-commons-validator" -> "jakarta-commons-logging";
"jakarta-commons-validator" -> "oro";
"jakarta-commons-validator" -> "xml-commons-apis";
"jessie" -> "gnu-crypto";
"jessie" -> "gnu-crypto-jce-jdk1.4";
"jessie" -> "gnu-crypto-sasl-jdk1.4";
"gnu-crypto" -> "gnu-crypto-jce-jdk1.4";
"gnu-crypto" -> "gnu-crypto-sasl-jdk1.4";
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: graph-2.ps.gz
Type: application/x-gzip
Size: 11273 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/fedora-devel-java-list/attachments/20050628/000f8f02/attachment.bin>
More information about the fedora-devel-java-list
mailing list