Portage -> emerge -> equery

Fuente: https://rootsudo.wordpress.com/2015/03/05/profundizando-en-gentoo-portage-emerge-equery/

Tal y como sabemos, Portage es el cerebro y el sistema nervioso de Gentoo. Ya publicamos una entrada con los comandos básicos de emerge para Portage, pero para sacarle todo el partido, tenemos que profundizar un poco en Portage.
Como todo en la vida, Portage se aprende usándolo, pero me voy a permitir aportar una lista de “tips” que he ido aprendiendo en mi gestión cotidiana de Gentoo.

tip 1.

Puede ocurrir, que al actualizar un día Gentoo, nos encontremos algún bloqueo de paquetes, siempre se resuelven trasteando un poco, normalmente enmascarando o desinstanlando alguno para permitir la actualización, pero si en ese momento no tenemos tiempo de ponernos a eso y queremos actualizar, siempre existe esta posibilidad:

Actualizar portage excluyendo un paquete o varios (ejemplo vlc):

sudo emerge -uaD world --exclude vlc

En este caso actualizaríamos todo el sistema excluyendo el paquete “vlc” (muy útil si algún paquete nos da problemas y queremos actualizar antes de resolverlos).


tip 2.

En Gentoo, cuando hacemos el famoso sudo emerge -ua world , lo que hacemos es comprobar si hay nuevas versiones en Portage de los paquetes que han sido explícitamente instalados por nosotros (no de manera indirecta como dependencias), por lo tanto, hay un archivo llamado world en algún sitio donde están listados todos esos paquetes.

¿dónde está el archivo world?

Pues lo encontramos aquí: /var/lib/portage/world

Lógicamente, como es un archivo de texto plano, podemos editarlo y eliminar a mano los paquetes que deseemos, pero existe una forma más elegante de hacerlo:

Eliminar paquetes del archivo world: (ejemplo conky)

sudo emerge conky --deselect

Con lo cual ya no tendremos “conky” en nuestro archivo world y no se actualizará en los updates. Siempre podremos actualizarlo manualmente “emergiendolo” de manera individual.


tip 3.

Relacionado con el anterior, si quiero instalar un paquete pero que no se incluya en el archivo world, tan sólo tengo que añadir la opción --oneshot (-1)

ejemplo:

sudo emerge -1 conky

(a partir de ahora “conky” no se actualizará en los emerges world).


tip 4.

Esto es extraño, pero me parece interesante. Emerge puede instalar todas las dependencias de un paquete, sin instalar el paquete mismo. Para ello se usa la opción --onlydeps (-o)

sudo emerge -o vlc

(lo que instalaría las dependencias que necesita “vlc” sin instalar el paquete “vlc”).


Veamos ahora algunos tips basados en equery, que es una herramienta muy potente para obtener información sobre paquetes de Portage. Para poder usar equery hay que instalar gentoolkit:

sudo emerge gentoolkit

tip 5.

Listar todos los paquetes que dependen de un paquete con “depends” (d):
Es importante darse cuenta de que esto no son las dependencias, sino todo lo contrario:

ejemplo “libav”

equery depends libav

o

equery d libav

Lo que nos dará todos los paquetes que necesitan a libav para funcionar (no las dependencias de libav)


tip 6.

Podemos saber justo lo contrario a depends, esto es, todos los paquetes de los que depende un paquete concreto con “depgraph” (g) sus dependencias (ahora sí)

O sea, a depgraph se le pasa un paquete y encontrará los paquetes de los que éste depende (no los que dependen de él). Cuando encuentre una dependencia, se buscará recursivamente todas las dependencias de ese nuevo paquete.

ejemplo “leafpad”

equery depgraph leafpad

o

equery g leafpad

Lo que nos listará todas los paquetes que necesita “leafpad”, o sea sus dependencias.

NOTA.- Para evitar confusiones entre “equery d” y “equery g”, hay que recordar que una dependencia en LINUX no es un paquete que depende del que estudiamos, sino un paquete que NECESITA el paquete en cuestión. Por lo que las dependencias del paquete “vlc” se buscan con “equery g vlc”.


tip 7.

Podemos listar todos los archivos instalados por un paquete con “files” (f)

equery files --tree vlc

(informa como árbol y con sus rutas de todos los archivos instalados por vlc)


tip 8.

Mostrar los metadatos de un paquete con “meta” (m)

equery meta vlc

(muestra todos los metadados, toda la información relevante de un paquete. Muy útil).


tip 9.

Si queremos encontrar el paquete al que pertenece un fichero concreto instalado en el sistema, podemos saberlo con “belongs” (b)

equery belongs -e /usr/bin/glxgears

nos responde que /usr/bin/glxgears ha sido instalado por el paquete mesa-progs:

  • Searching for /usr/bin/glxgears … x11-apps/mesa-progs-7.5.1 (/usr/bin/glxgears)

y para finalizar dos tips relacionados con las etiquetas USE (USE flags):

tip 10.

Podemos buscar paquetes que tienen un determinado ajuste USE con “hasuse” (h)

equery hasuse qt3 qt4

(lista todos los paquetes compilados con las etiquetas USE especificadas, en este caso nos informará de todos los paquetes compilados con las USE flags “qt3” y “qt4”)


y, tip 11.

Listar los ajustes USE de un paquete con “uses” (u)

equery uses vlc

(muestra y explica todos los posibles USE para un paquete, y nos muestra en rojo los activos, en azul los que no).

Estas son sólo algunas de la posibilidades de emerge y equery, tal vez las más interesantes, pero hay muchas más. Te animo a descubrirlas por ti mismo investigando sus páginas man:

man emerge

man equery

Si te apetece compartir algún truco que utilices con emerge o equery utiliza los comentarios.