El viernes 04 de junio de 1999 a la(s) 12:42:32 +0100, jarregui@elasa.siemens.es contaba:
>
>Me pregunto si existe alguna utilidad que detecte las librerías instaladas
>en el sistema que no entran en las dependencias de ningún paquete de los
>actualmente instalados.
No sé, pero creo que no.
>Y si no existe, ni nadie ha pensado en ello, ... pues una ayudita para
>empezarlo, porque yo creo que es algo muy útil.
Veamos:
NUMPAQS=`dpkg -l|wc -l`
NUMPAQS=`expr $NUMPAQS \- 5`
LISTA=`dpkg -l|tail -$NUMPAQS|cut -f3 -d' '|grep "$1"|tr '\n' ' '|sed -e 's/\+/\\\+/g'|sed -e 's/\./\\\./g'`
Tras esto, tenemos en la variable $LISTA una lista de todos los
paquetes del sistema que están instalados. Os cuento lo del
$NUMPAQS. 'dpkg -l' pone al principio 5 líneas donde nos explica el
significado de la primera columna. Entonces primero almaceno en la
variable el número de líneas de 'dpkg -l', luego le resto 5 y con
ese valor ya obtengo luego, gracias a tail, la lista de paquetes
sin cabecera. Con cut recorto cada línea de la lista para obtener
los paquetes cuya columna "Error" está en blanco (fijaos en la
cabecera de 'dpkg -l' para ver lo de "Error"). Con el tr transformo
los retornos de carro en espacios. grep y sed los comento luego.
Bien, ahora la cosa sería algo como...
--
echo -n "Verificando "
for PAQUETE in $LISTA; do
echo -n "$PAQUETE "|tr -d '\\'
egrep "(^Depends|^Pre-Depends): .*$PAQUETE.*" /var/lib/dpkg/status > /dev/null;
ERR=$?;
[ $ERR -eq 1 ] && DEPENDS="$DEPENDS$PAQUETE ";
egrep "^Recommends: .*$PAQUETE.*" /var/lib/dpkg/status > /dev/null;
ERR=$?;
[ $ERR -eq 1 ] && RECOMMENDS="$RECOMMENDS$PAQUETE ";
egrep "^Suggests: .*$PAQUETE.*" /var/lib/dpkg/status > /dev/null;
ERR=$?;
[ $ERR -eq 1 ] && SUGGESTS="$SUGGESTS$PAQUETE ";
done
echo
echo;echo -e "Ningún paquete depende de los siguientes:\n$DEPENDS"|tr -d '\\'
echo;echo -e "Ningún paquete recomienda los siguientes:\n$RECOMMENDS"|tr -d '\\'
echo;echo -e "Ningún paquete sugiere los siguientes:\n$SUGGESTS"|tr -d '\\'
--
Bien, esto tiene pinta de funcionar aquí, y con mi P100 "sólo"
tarda cosa de dos minutos ;-). El caso es que esto nos escupe toda
la lista de paquetes "de primer nivel" como los llamo yo.
Evidentemente ningún paquete depende de bitchx, slrn, wget, lilo,
tin, joe, mutt, lynx... y todos aparecen en la lista. Mucho idem
para los Recommends y Suggests. Para evitar esto, le podemos pasar
un parámetro al script, tal que "^lib" y así procesará sólo los
paquetes cuyo nombre empiece por "lib" gracias al grep de la
tercera línea.
$ ./script.sh "^lib" # Por ejemplo
Otro fallito: Paquetes como libg++272 o libstdc++2.8 salen en
la lista de que ninguno depende de ellos, porque los "+" de su
nombre interfieren con el egrep. El par de sed's soluciona este
problema con los metacaracteres "+" y ".". Si aparece alguno más,
se soluciona de manera evidente. Como consecuencia de esto tuve que
poner un 'tr -d' en cada echo, para que las barras inversas no
salgan por la pantalla.
Probadlo, plis. En mi sistema tarda casi 2 minutos como ya
dije. Quiero saber cuánto tarda en 300 MHz por ejemplo. Además,
quién sabe los paquetes que tendréis instalados "inútilmente" ;-).
Bien, y ahora un poco de doc: Un paquete A "Recommends" otro B
cuando el mantenedor considera que la mayoría de los usuarios no
querrán tener el A sin tener también el B. Un paquete A "Suggests"
otro B si B contiene archivos relacionados a la funcionalidad de A,
y a veces aumentan ésta (traducido on-the-fly de la Debian-FAQ).
>Otra opción es tratar de desinstalar todas las librerías una a una. Las que
>no se dejen, es que hacen falta ;-) Pero me parece un método un poco
>bestia, la verdad.
Hombre, es el método rápido... 'dpkg -r lib*' ;-)
--
Just do it.
David Serrano <ctv.es@fserrano> Linux Registered User no. 87069
http://come.to/Hue-Bond.world In love with TuX. Linux 2.2.9
PGP Public key at http://www.ctv.es/USERS/fserrano/pgp_pubkey.asc
Attachment:
pgpdeoWaJNLQE.pgp
Description: PGP signature