Como eu exibo uma cadeia de dependência de um pacote para outro?

2

Por exemplo, quero descobrir por que monodevelop depende de systemd .

apt-rdepends -r systemd mostra todos os pacotes que direta ou indiretamente dependem do systemd:

$ apt-rdepends --dotty -r systemd | grep monodevelop
"monodevelop" -> "libgnome2.24-cil";
...

debtree monodevelop mostra que todos os pacotes monodevelop dependem, direta ou indiretamente:

$ debtree monodevelop | grep -- '-> "systemd"'
"libpam-systemd" -> "systemd" [color=blue,label="(= 215-6)"];
...

Mas como mostro facilmente a cadeia de monodevelop a systemd ?

Exemplo de uma das cadeias:

monodevelop -> libgnome2.24-cil -> libgnome2-0 -> gvfs -> gvfs-daemons ->  udisks2 -> libpam-systemd -> systemd
    
por Vi. 20.11.2014 / 12:36

2 respostas

3

Desenvolvemos um oneliner para isso:

$ apt-rdepends --dot -r systemd | perl -ne 'our %chains; if(m!"([^"]+)" -> "([^"]+)"[^"]*;!) { my $c="$2 $chains{$2}"; $chains{$1}=$c; print "$1 $c\n" }'  | grep '^monodevelop '
Reading package lists... Done
Building dependency tree       
Reading state information... Done
monodevelop libgnome2.24-cil libgnomeui-0 libbonoboui2-0 libgnome2-0 gvfs gvfs-daemons udisks2 libpam-systemd systemd 
    
por 20.11.2014 / 16:36
0

awk equivalente para o seu perl one-liner:

apt-rdepends -dr systemd |
  awk -F\" '/->/{print $2,c[$2]=$4" "c[$4]}' |
  grep '^monodevelop'
    
por 21.11.2014 / 16:19