Graphische Darstellung installierter Ports

chaos

*nix'ler
Hallo

Ich wollt mal fragen, ob es ein Programm gibt, daß mir einen Graphen mit allen installierten Port/Packages zeichnen kann.
Ich stell mir einen Output in folgender Form vor:
Code:
         _____
        |     |
        | foo |
        |_____|
          /   \
         /     \
     ___/___   _\___
    |       | |     |  
    |   bar | | bla |
    |_______| |_____|
Dabei hängen bar und bla von foo ab.
Sicher sowas ist mit $Lieblingsskriptsprache und dotty sicher nicht schwer selber zu realisieren, aber man muß ja nicht unbedingt das Rad neu erfinden.

ciao
chaos
 
Zumindestens in die eine Richtung (Was wird für Paket foo gebraucht) ist das ganz schön.

Jetzt fehlt nur noch die andere Richtung: Was alles hängt von foo ab.

Aber vielen dank für den Tipp.

ciao
chaos
 
Aber in dem Thread ist auch auf ein ganz nettes Prog verwiesen, was ich noch nicht kannte: sysutils/pkg_cutleaves

Damit wird über allle Blattpakete iteriert (also Pakete, auf die keine anderen Pakete aufbauen).
 
Das geht doch sowieso nur bei bereits installierten paketen. also wofür brauch ich sowas? wenn ich das Paket löschen will schreibt er doch eh, das geht nicht, weil bar und bla das braucht.
Da schon lieber eines das komplett auflöst und nicht immer nur auf einen zweig weiter geht.
 
Hallo,

Ich hab jetzt dasselbe nochmal in python implementiert.

Die Ausgabe als dot-Quelltextdatei funktioniert problemlos, leider wird dot hier immer gekillt, (sowohl in der perl-, als auch in der python -Version und auch, wenn man dot mit der direkten Quelltextdatei füttert) beim verusch das ganze zu rendern (kurz vorm killen verbraucht der dot-Prozeß ~500MB RAM, ich hab 512 MB "echten" RAM (und genügend swap), kann es sein, daß FreeBSD Prozesse killt, die mehr Speiucher wollen, als physikalisch da ist?

Achso noch meine Quellcode:
Code:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
Description:    Zeichnet einen Graphen der Paketabhängigkeiten
Version:        0.1
Copyright:      2005 by Thomas Flaig t.gf@freenet.de
Created:        02.Feb.2005
Last modified:  03.Feb.2005
License:        BSD
Requirements:   pydot
"""


import os
import pydot as graph

pkg_root="/var/db/pkg"

class portgraph(object):
	def __init__(self):
		self.g=graph.Dot()
		for i in os.listdir(pkg_root):
			self.g.add_node(graph.Node('"'+ i + '" '))
			required=os.path.join(pkg_root,i,"+REQUIRED_BY")
			if os.path.isfile(required):
				depends=file(required,"r")
				for j in depends.readlines():
					j=j.replace("\n","")
					self.g.add_edge(graph.Edge('"' + j + '"','"' + i + '"'))
				depends.close()
	
	def dotfile(self,datei):
		"""
		Schreibt eine Dotty-Quelltext Datei der Portabhängigkeiten.
		"""
		output=file(datei,"w")
		output.write(self.g.to_string())
		output.close()
	
	def jpggraph(self,datei):
		"""
		Speichert den Graphen der Portabhängigkeiten in einem Jpeg-Bild
		"""
		self.g.write_jpeg(datei)
		
	def psgraph(self,datei):
		"""
		Speichert den Graphen der Portabhängigkeiten in einer PS-Datei
		"""
		self.g.write_ps(datei)
	
	def gifgraph(self,datei):
		"""
		Speichert den Graphen der Portabhängigkeiten in einem GIF-Bild
		"""
		self.g.write_gif(datei)
	
	def pnggraph(self,datei):
		"""
		Speichert den Graphen der Portabhängigkeiten in einem PNG-Bild
		"""
		self.g.write_png(datei)
		
	def diagraph(self,datei):
		"""
		Speichert den Graphen der Portabhängigkeiten in einer dia-Datei
		"""
		self.g.write_dia(datei)

if __name__ == "__main__":
	import sys
	g=portgraph()
	if len(sys.argv) == 2:
		dotfile(sys.argv[1])
	elif len(sys.argv) == 3:
		if sys.argv[1]=="-d":
			g.dotfile(sys.argv[2])
		elif sys.argv[1]=="-j":
			g.jpggraph(sys.argv[2])
		elif sys.argv[1]=="-p":
			g.psgraph(sys.argv[2])
		elif sys.argv[1]=="-g":
			g.gifgraph(sys.argv[2])
		elif sys.argv[1]=="-png":
			g.pnggraph(sys.argv[2])
		elif sys.argv[1]=="-dia":
			g.diagraph(sys.argv[2])
		else :
			print "Usage:"
			print sys.argv[0] 
			print "[-d|-j|-p|-g|-png|-dia] filename"
	else:
		print "Usage:"
		print sys.argv[0] 
		print "[-d|-j|-p|-g|-png|-dia] filename"
Ja, ich weiß, meine Klasse sollte eigentlich direkt von pydot.Dot erben.....

ciao
chaos
 
Du hast jetzt leider nicht gesagt worauf du dich beziehst, ich nehme mal an pkg_cutleaves.
SierraX said:
Das geht doch sowieso nur bei bereits installierten paketen.
Welche Pakete - wenn nicht die installierten - will man sonst entfernen?
also wofür brauch ich sowas?
Entfernen von unbenötigten Paketen, von denen kein anderes Paket abhängt.
wenn ich das Paket löschen will schreibt er doch eh, das geht nicht, weil bar und bla das braucht.
Da schon lieber eines das komplett auflöst und nicht immer nur auf einen zweig weiter geht.
Das hat doch nichts mit pkg_cutleaves zu tun.

Gruß Björn
 
Björn König said:
Du hast jetzt leider nicht gesagt worauf du dich beziehst, ich nehme mal an pkg_cutleaves.
Meinst du mich?

Nein ich hab mich auf das Perlskript in der Mailingliste bezogen.
 
Back
Top