Newsgroup: it.comp.os.linux.debian
Titolo: Dipendenze di pacchetti

Esiste un comando che dato un pacchetto mi mostra tutti quelli
(installati) che dipendono da esso?

 (installati) che dipendono da esso?
Non so se esiste un "comando unico", ma ho fatto (su due piedi) questo
scriptino:
---8<---
#!/bin/bash
depends=$(apt-cache rdepends $1 | sed "s/^ |/  /g" | awk -F"  " '{print $2}' | sort | uniq)
for line in $depends
do
	[ -z $line ] && continue
	pkg=$(echo $line | sed "s/^|//g")
	dpkg -l $pkg 2>/dev/null | grep -q ^ii
	[ "$?" -eq "0" ] && echo $pkg
done
--->8---
Funziona -- ma è lento [1]. Si potrebbe migliorare penso, ma è proprio
"artigianale" al momento :)
[1]
Esempio:
$ time ./cerca.sh libc6 # non finisce più...
[..]
(dopo 2 minuti ho dato ^C)
Questo è già più ragionevole:
$ time ./cerca.sh bash
bash-completion
beagle
exim4-config
foomatic-db-engine
foomatic-filters
real	0m7.789s
user	0m6.764s
sys	0m0.892s
$ 
Se ti serve qualcosa di più "performante"... fa' un fischio :)
-- 
 . ''`.  Debian maintainer | 
http://wiki.debian.org/DavidPaleino
 : :'  : Linuxer #334216 --|-- 
http://www.hanskalabs.net/
 `. `'`  GPG: 1392B174 ----|---- 
http://snipr.com/qa_page
   `-   2BAB C625 4E66 E7B8 450A C3E1 E6AA 9017 1392 B174


Molto interessante, grazie! Grazie al tuo script ho scoperto il comando
'rdepends' di apt-cache. Cosa fa esattamente? Il man non è molto
escplicativo! Reverse-dependecies sembra proprio quello che chiedevo io,
ma il risultato è diverso da quello del tuo script...


Ok, ci sono arrivat: rdepends mostra tutti i pacchetti, non solo quelli
installati. Ho scritto questo in PHP, è veloce e funziona! Se qualcuno
vuole tradurlo in un linguaggio più comune per script di bash, per me va
bene:
#!/usr/bin/php -q
<?php
$packages = array();
$rdepends = array();
exec("apt-cache rdepends {$argv[1]} | sed 's/^ |/  /g' | awk -F'  '
'{print $2}' | sort | uniq", $rdepends);
exec("dpkg -l | tail -n +6 | cut -d' ' -f3", $packages);
foreach ($packages as $pkg) {
  if(in_array($pkg, $rdepends)) {
    print($pkg ."\n");
  }
}
?>
Per usarlo in php bisogna avere il pacchetto php-cli installato, poi basta:
$ ./rdepends <pacchetto>
Heruan

 ?>
Vabbè, qui usi gli array (che ci sono anche in bash, ma per me sono ostici).
Ehm... alla fine... non è uguale al mio? :)



Certo! È proprio uguale al tuo, ho solo cercato di trovare il modo per
ottimizzarlo un po'. Hai ragione per il "grep ^ii", ho anche ottimizzato
ulteriormente la ricerca nell'array:
#!/usr/bin/php -q
<?php
$packages = array();
$rdepends = array();
exec("apt-cache rdepends {$argv[1]} | sed 's/^ |/  /g' | awk -F'  '
'{print $2}' | sort | uniq", $rdepends);
exec("dpkg -l | grep '^ii' | cut -d' ' -f3", $packages);
foreach (array_intersect($packages, $rdepends) as $pkg) {


 Non so se esiste un "comando unico"
Io partirei da:
apt-cache --installed rdepends pacchetto
e
apt-cache --recurse --installed rdepends pacchetto
(questo per avere anche i pacchetti che dipendono da quelli che
dipendono da quelli che dipendono... dal pacchetto).
Ho scritto una scemenza?
Per pulire un po' l'output:
lem@HARDYCOMP:~$ time apt-cache --installed rdepends bash | sort | uniq | grep "^ "
  bash-completion
  exim4-config
  foomatic-db-engine
  foomatic-filters
  friendly-recovery
  ubuntu-minimal
real	0m0.017s
user	0m0.008s
sys	0m0.004s
-- 
Bye, Lem
Ceterum censeo ISLAM esse delendum
__________________________________
Combatti l'AIDS col tuo computer: 
http://fightaidsathome.scripps.edu/
Monitora gli asteroidi col tuo computer: 
http://orbit.psi.edu/

 apt-cache --recurse --installed rdepends pacchetto
Mi sarà sfuggito dal man :)
Comunque... <OT>aggiunto in bash-completion 20080617.3 :)</OT>
