El viernes 04 de junio de 1999 a la(s) 12:42:32 +0100, [EMAIL PROTECTED] 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 <[EMAIL PROTECTED]> 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
pgp106kbHEVAo.pgp
Description: PGP signature