crear un overlay local en Gentoo

screenfetchEn una entrada anterior veíamos como gestionar overlays mediante Layman:

Overlays y Layman en Gentoo

veamos ahora como tener nuestro propio overlay local, en el que podremos meter los ebuilds que nosotros deseemos. La ventaja de esto es que no hay porqué aceptar todo lo que traiga un overlay externo, sino que podemos buscar por nuestra cuenta ebuilds que nos interesen para emergerlos con Portage.

El overlay local podemos tenerlo donde queramos, pero un buen sitio por defecto es:
/usr/local/portage/

Lo primero que hay que hacer es crear dos directorios necesarios dentro, que son: metadata y profiles:

sudo mkdir -p /usr/local/portage/{metadata,profiles}

ahora hay que crear dentro de la carpeta profiles un archivo con el nombre de nuestro propio overlay, y que contenga el nombre del overlay (en este caso “mi-overlay”):

sudo echo ‘mi-overlay’ > /usr/local/portage/profiles/mi-overlay

y creamos el archivo layout.conf dentro de metadata que contenga “masters = gentoo”:

sudo echo ‘masters = gentoo’ > /usr/local/portage/metadata/layout.conf

definimos a Portage como propietario para que pueda controlar el overlay:

sudo chown -R portage:portage /usr/local/portage

Pues ya sólo nos queda informar a Portage de dónde está nuestro nuevo overlay local para que pueda usarlo. Para ello agregamos en el famoso /etc/portage/make.conf la siguiente línea:

PORTDIR_OVERLAY=”/usr/local/portage ${PORTDIR_OVERLAY}”

Lógicamente si es esa la ruta en la que lo hemos instalado.

Con esto ya está instalado nuestro nuevo overlay local. Veamos ahora cómo añadirle un ebuild que nos interesa instalar y que no está en el árbol oficial de Portage o, tal vez simplemente, que hemos encontrado una versión más moderna.

Podemos buscar y descargar ebuilds por ejemplo aquí:

http://gpo.zugaina.org/

descargamos el ebuild que nos interesa (en nuestro ejemplo vamos a suponer que hemos encontrado una versión más moderna de programa screenfetch de la que tenemos en el árbol oficial de Portage. Nos la descargamos.

http://gpo.zugaina.org/app-misc/screenfetch

En nuestro overlay local hay que mantener el mismo sistema que en el árbol de Portage, por lo que cada ebuild debe estar en su directorio y este a su vez dentro del directorio de su grupo de programas, en este caso:

app-misc/screenfetch/

Creamos los directorios necesarios:

sudo mkdir -p /usr/local/portage/app-misc/screenfetch

Luego copiamos el ebuild que nos hemos descargado dentro de /usr/local/portage/app-misc/screenfetch

Entramos en el directorio:

pushd /usr/local/portage/app-misc/screenfetch/

Creamos el archivo manifest dentro mediante la orden:

sudo repoman manifest

salimos del directorio mediante el comando:

popd

y nos aseguramos de que Portage sea el propietario recursivo de todo el árbol de archivos de nuestro overlay local:

sudo chown -R portage:portage /usr/local/portage

Y ya está. Ahora podemos emerger el nuevo ebuild. Si era un paquete que no estaba en Portage veremos que ahora sí que está, y si, como es nuestro caso, hemos encontrado una versión más moderna, veremos que Portage nos la propone para instalar:

sudo emerge -a screenfetch

En muchos casos Portage nos informará al intentar instalar un ebuild desde nuestro overlay local que se necesita añadir la autorización en el /etc/portage/package.accept_keywords

# screenfetch (overlay local)
app-misc/screenfetch ~amd64

Pues ya está hecho, a Portage siempre se le obedece.

Overlays y Layman en Gentoo

estratos-pekDe igual manera que en otras distros GNU/Linux hay repositorios de programas además de los oficiales de la distro, en Gentoo tenemos para eso los llamados overlays. Un overlay es un árbol alternativo al árbol de programas disponibles en Portage. Se llaman “overlay”, capa superpuesta, pues se sitúan (normalmente) antes del árbol de Portage para disponer de otro software no “oficial”, o de versiones más modernas, beta o en pruebas.

Lógicamente, los overlays, al igual que el árbol de Portage que está en /usr/portage/, no contienen paquetes con binarios como las demás distros, sino los conocidos ebuils. Los ebuils no contienen binarios (ejecutables) y ni siquiera las fuentes, sino sólo unos sencillos documentos de texto plano que le indican a Portage-emerge donde están las fuentes, cuáles son sus dependencias y dónde están, y las instrucciones para configurar, compilar e instalarlo todo en tu sistema Gentoo.

Los overlays se pueden utilizar de manera manual, descargándolo y añadiendo la ruta a él en el archivo de configuración principal de Portage /etc/portage/make.conf añadimos:

# mi overlay:
PORTDIR_OVERLAY=”/home/usuario/overlay”

Pero la manera más cómoda de gestionar overlays en mediante Layman.

Layman nos permite gestionar fácilmente y de manera centralizada muchos repositorios, activarlos o desactivarlos, organizarlos, actualizarlos, etc.

Para emerger (descargar+compilar+instalar en lenguaje gentoo 🙂 Layman:

sudo emerge -a layman

Lo primero que hay que hacer es informar a Portage de que existe layman y sus overlays. Como siempre, en el archivo principal de Portage /etc/portage/make.conf añadimos:

# overlays de Layman:
source /var/lib/layman/make.conf

como vemos, le hemos informado a Portage de que a partir de ahora también tenga en cuenta lo que diga el archivo de configuración de Layman, que está en /var/lib/layman/make.conf. Después hablaremos de este archivo.
Uso de Layman:

lista de todos los overlays que nos permite administrar layman:

layman -L

añadir un overlay a tu sistema:

sudo layman -a nombre-overlay

lista los overlays ya descargados en el sistema:

layman -l (ele minúscula)

actualizar un overlay:

sudo layman -s nombre-overlay

actualizar todos los overlays instalados:

sudo layman -S

información sobre un overlay:

layman -i nombre-overlay

eliminar un overlay:

sudo layman -d nombre-overlay

Más información: man layman

Al añadir un overlay, Layman le crea un directorio con su nombre en /var/lib/layman/ y lo añade automáticamente en el archivo /var/lib/layman/make.conf

Layman asigna por defecto una prioridad 50 a todo overlay que instala, lo que se puede ver en /var/lib/layman/installed.xml. Por lo que como el árbol de Portage tiene por defecto una prioridad de -1000, los overlays de Layman tienen prioridad. Layman va instalando los más nuevos al final, por los que les da más prioridad.

Para manejar las prioridades de todos los overlays del sistema, lo mejor es utilizar el archivo /var/lib/layman/make.conf

Un ejemplo de este podría ser:

PORTDIR_OVERLAY=”
/var/lib/layman/mozilla
/var/lib/layman/xfce-dev
$PORTDIR_OVERLAY

Vemos que hay dos overlays añadidos con Layman, “xfce-dev” y “mozilla” y al final está la variable que apunta a un overlay personal que yo pueda tener, que sería como vimos antes:

# mi overlay:
PORTDIR_OVERLAY=”/home/usuario/overlay”

incluido en mi /etc/portage/make.conf

El orden en este archivo determina una prioridad inversa, o sea, que cuanto más abajo está el overlay, más prioridad tiene, por lo que en nuestro caso sería:

$PORTDIR_OVERLAY (el primero)
/var/lib/layman/xfce-dev (el segundo en prioridad)
/var/lib/layman/mozilla (el tercero)

Como en el archivo no se hace referencia al árbol de Portage, este sigue teniendo la última prioridad (la más baja, -1000).

Podemos consultar la prioridad de todos nuestros árboles (overlays) mediante el comando:

emerge --info --verbose

(*) Pero atención pues en la respuesta a este comando a mayor número mayor prioridad. Por lo que 3 tiene más prioridad que 2, y 2 más que 1, y 1 más que 0, y 0 más que -1000 (menos mil).

Para terminar, un truco que me parece interesante. Teniendo en cuenta que Portage, siempre instalará por defecto la versión más moderna de un paquete que encuentre en todos nuestros overlays (independientemente de las prioridades que estos tengan), es un buen consejo de seguridad darle la mayor prioridad al árbol de Portage. De esa manera, ante dos paquetes de la misma versión, Portage instalará siempre la versión oficial de Gentoo (la del árbol principal de Portage), y si hay una versión más moderna en otro overlay, instalará esta última.
Para ello:

en nuestro /var/lib/layman/make.conf

añadimos al final:

${PORTDIR}

con lo que en el ejemplo de antes quedaría:

PORTDIR_OVERLAY=”
/var/lib/layman/xfce-dev
/var/lib/layman/mozilla
/var/lib/layman/ubuntu
$PORTDIR_OVERLAY
${PORTDIR}

de esta manera, como ${PORTDIR} es la variable que en nuestro /etc/porteg/make.conf define el árbol principal de Portage, así:

PORTDIR=”/usr/portage”

lo que estamos haciendo es darle prioridad al árbol de Portage, luego a nuestro overlay personal si lo tenemos, y después a los overlays de Layman (cuanto más arriba, menos prioridad).

Un ejemplo práctico del uso de overlays con Layman:

Quiero instalar imagewriter, la excelente herramienta de OpenSuse para crear imágenes desde una ISO en un USB. Como no lo encuentro en Portage, busco aquí:
http://gpo.zugaina.org/

me informa de que está en el overlay gentoo-zh (layman).

Lo busco en Layman:

layman -L

y lo añado:

sudo layman -a gentoo-zh

y ya está. Ahora podré emergerlo con emerge: (previa operación de agregado en nuestro package.accept_keywords tal como nos pedirá nuestro amado Portage 🙂 siempre hay que obedecer a Portage.

sudo emerge -a imagewriter

con lo que ya podremos volcar fácilmente la última ISO de Ubuntu, para probarla en live-cd desde un lápiz USB, sin caer en el lamentable error de instalarla. Nosotros no somos ubunteros, sino gentooza 😛

gentoo_linux_wallpaper_art_masterpieces_to_color-otherz