[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: ¿Utilidad para desinstalar librerías sin usar?



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


Reply to: