profundizando en Gentoo -> Portage -> emerge -> equery

VACA POLLOTal 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.

Si has llegado hasta aquí, es que eres todo un gentoocito.
A veces me pregunto cuántos seremos entre ese 2% escaso de usuarios GNU-LINUX, los usuarios de Gentoo, ¿tal vez un 1% de ese 2%?
Tú, yo, y alguno más.Pocos, pero los mejores siempre son pocos.

😉

emerge

Anuncios

desenmascarar paquetes en Portage Gentoo (package.unmask y package.accept.keywords)

desenmascararPortage permite una amplia gama de acciones para interactuar con los paquetes en Gentoo. Ningún otro gestor de paquetes (ni siquiera el magnífico Pacman de ARCH) permite tanta versatilidad y personalización de acciones con los paquetes. Veamos porqué.

El directorio principal de configuración de Portage está en:

/etc/portage/

este directorio contiene el principal archivo de configuración de Portage make.conf (que no trataremos ahora, mencionamos lo básico de él en “Manual (casi) fácil para instalar GENTOO paso a paso (2014)“, pero además contiene otros 4 archivos muy importantes para manejar Portage. Es este artículo trataremos dos de ellos.

**********************************************

package.unmask

por diferentes motivos, a veces aparecen en el árbol de Portage paquetes enmascarados. Esto lo hace el mantenedor del paquete pues puede determinar que no es un paquete completamente confiable, o tal vez porque es una versión preliminar y desea de este modo avisar al usuario de Gentoo etiquetándolo como [ Masked ] en color rojo. Al intentar instalarlo con emerge, Portage nos dirá que no puede pues está enmascarado.

Nota muy importante.- Portage es muy locuaz, debemos disciplinarnos, como buenos usuarios de Gentoo, a leer todo de lo que nos informa Portage mediante su fiel amigo emerge. Cada acción de emerge es comentada y nos responde siempre con información pertinente. Además en colorines que nos ayudan mucho a fijarnos en lo importante.

Portage siempre informa de la solución, tan sólo hay que hacerle caso.

ejemplo:

al intentar instalar el editor de vídeo OpenShot, Portage responde que está enmascarado y él mismo propone la solución:

sudo emerge -a openshot

añadir al archivo package.unmask la siguiente línea para desenmascararlo:

#OPENSHOT (editor de vídeo):
media-video/openshot

[sólo es necesaria la línea de abajo, pero es una excelente costumbre ponerle arriba un comentario (con su # delante) para saber qué es eso.]

y ahora al volver a intentar emerger openshot, Portage ya nos permitirá hacerlo.

sudo emerge -a openshot

**********************************************

package.accept.keywords

este archivo es parecido al anterior, pues también nos desbloquea paquetes que en principio no podemos instalar. Pero tiene sus peculiaridades. En general se usa mucho más que el otro, pues la mayoría de los paquetes que aparecerán enmascarados en Portage es porque pertenecen a la rama “inestable” o “testing” de Gentoo. Como lo prudente (al menos al principio) es estar en la rama estable, podemos instalar paquetes inestables simplemente desenmascarándolos en package.accept.keywords.

ejemplo:

supongamos que queremos instalar el Kernel CK, este: sys-kernel/ck-sources

sudo emerge -a ck-sources

Portage responde:
________________________________________________

The following keyword changes are necessary to proceed:
(see “package.accept_keywords” in the portage(5) man page for more details)
# required by sys-kernel/ck-sources (argument)
=sys-kernel/ck-sources-3.14.4 ~amd64
________________________________________________

Tan sólo hay que hacerle caso al dios Portage, o sea, agregar esa línea al archivo package.accept_keywords para que nos permita instalar las fuentes CK. Vemos que incluso la línea de arriba es ya un comentario, por lo que lo más cómodo será copiar y pegar las dos líneas a package.accept_keywords:

# required by sys-kernel/ck-sources (argument)
=sys-kernel/ck-sources-3.14.4 ~amd64

Como la línea empieza por el signo igual (=) eso quiere decir que tan sólo se autorizará la instalación de esa versión concreta, en este caso la 3.14.4, la cual debe de ser detallada. En el caso de que quisiésemos autorizar cualquier versión de ck-sources pondríamos:

sys-kernel/ck-sources ~amd64

lo que permitiría a Portage la actualización a una nueva versión de las CK. Es recomendable, por seguridad, y por control de versiones, sobre todo en paquetes tan importantes como kernels, autorizar sólo una versión concreta.

¿y qué significa eso de “~amd64” que hay al final de la línea? buena pregunta, (si es que la has hecho; en Linux en general, y en Gentoo en particular, siempre hay que preguntar (o preguntarse) todo, pues si no, no aprenderemos nada de nada y para eso te quedas en Ubuntu.

Pues ~amd64 significa que para mi arquitectura de microprocesador, en este caso la de 64 bits, el paquete en cuestión se considera inestable y por eso Portage (tan prudente él) no me permite instalarlo sin una autorización expresa por mi parte. Esa autorización es precisamente de la que se encarga el archivo package.accept_keywords. Para la arquitectura tradicional x86 de 32 bits sería “~x86

Tres entradas  típicas en el archivo package.accept_keywords:

Por defecto, la versión estable de Gentoo, instala un kernel más antiguo (en este momento el 3.14), si queremos que Gentoo nos permita instalar el último kernel (en este momento el 3.17), tan sólo añadimos:

# KERNEL inestable:
sys-kernel/gentoo-sources ~amd64

Si deseamos que Gentoo nos permita actualizar a las últimas versiones de Firefox y Thunderbird, en las versiones binarias, cosa que recomiendo, pues estos programas se actualizan con mucha frecuencia y puede resultar muy pesado estar compilándolos constantemente, tan sólo hay que incluir:

#FIREFOX-BIN:
www-client/firefox-bin ~amd64

#THUNDERBIRD-BIN:
mail-client/thunderbird-bin ~amd64

**********************************************

En el próximo artículo trataremos otros dos importantes archivos de /etc/portage/

package.mask

y

package.use

… * & * …

ya sabes, obedece a Portage, pues Portage es  el árbol de la sabiduría de Gentoo.

funny-gentoo-wallpaperz2

comandos emerge de Portage en Gentoo, explicados

potajeemerge es el comando para controlar Portage, el ya legendario sistema de administración de paquetes de Gentoo. Por eso en Gentoo hablamos de “emerger” un paquete de Portage, que significa: descargar sus fuentes, compilarlo e instalarlo en el sistema.

He aquí los principales comandos de emerge seguidos de una breve explicación.

El directorio principal de configuración de Portage está en: /etc/portage/

donde están sus archivos de configuración:

make.conf      (archivo de configuración principal de Portage)

package.use      (donde se pueden definir las “USE flags” para paquetes individuales)

package.mask      (donde se pueden “enmascarar” paquetes para que no se instalen o actualicen)

package.unmask     (donde de pueden desenmascarar paquetes enmascarados en Portage para permitir que se instalen)

package.accept keywords     (donde autorizar paquetes inestables)

*********************************************************

sincronizar Portage:

sudo emerge --sync      actualiza el árbol de Portage que está en: /usr/portage/

sudo emerge-webrsync      actualiza el árbol de Portage desde la última instantánea de la web de Gentoo
*********************************************************

buscar en Portage:

emerge -s paquete      busca el paquete --search

emerge -S palabra      busca también en las descripciones --searchdesc

*********************************************************

instalar paquetes:

emerge -p paquete      muestra las dependencias del paquete sin instalarlo --pretend

sudo emerge -a paquete      instala el paquete, (-a pide confirmación antes de hacerlo --ask)

sudo emerge -f paquete      descarga el paquete de fuentes pero no lo instala --fetchonly

Portage guarda las fuentes en: /usr/portage/distfiles/

*********************************************************

desinstalar paquetes:

sudo emerge -Ca paquete      desinstala el paquete y sus dependencias (Portage no mira si las dependencias las necesita otro paquete, tampoco desinstala los archivos de configuración (--unmerge --ask)

*********************************************************

actualización básica del sistema:

sudo emerge -ua world      actualiza el sistema (no necesariamente las dependencias (--update --ask @world)

sudo emerge -uaD world      actualiza el sistema incluidas todas las dependencias (--update -ask --deep @worl)

*********************************************************

actualización avanzada del sistema:

sudo emerge -uaD --with-bdeps=y world      actualiza el sistema incluidas todas las dependencias + (“build dependencies”) (--update --ask --deep --with-bdeps=y @world)

sudo emerge -uaDN --with-bdeps=y world      todo lo anterior + revisa por si hay cambios USE.
(--update --ask --deep --newuse --with-bdeps=y @world)

*********************************************************

desinstalar dependencias huérfanas en 3 pasos:

sudo emerge -uaDN world      (--update --aks --deep --newuse @world)
sudo emerge --depclean
sudo revdep-rebuild

*********************************************************

Emerge de tu mundo GNU-Linux con Gentoo.

gentoo-wallpaper-15z