# [ebuild]Cómo crear ebuilds? (cerrado)

## Magnum44

Hola, hoy he mirado un programa que usaba a veces en mi antiguo gentoo (antes de que se muriesen los discos duros de mi raid). El programa en cuestión está en portage, pero existen un montón de versiones nuevas que no están contempladas en portage. Mi duda es, ¿cómo creo un ebuild para poder instalar a través de portage estas nuevas versiones? y si todo va bien, ¿cómo contribuyo al árbol de portage para actualizar en el portage oficial?

Seguro que a muchos de nosotros se nos ha pasado esto más veces por la cabeza, he estado investigando por docs.gentoo.org pero es tan enorme la cantidad de información que me pierdo. ¿Alguien tiene algún howto legible en menos de 1 hora a mano   :Wink:   ?

EDITADO:

Ya me funciona el nuevo ebuild que he creado, muchas gracias a todos por las respuestas. Un saludo.

----------

## gringo

 *Quote:*   

> ¿cómo creo un ebuild para poder instalar a través de portage estas nuevas versiones?

 

antes de nada busca en el bugzilla y busca en otros overlays, que muchas veces no están en portage pero si en un overlay o en bug abierto. Incluso en los foros a veces se encuentra algún ebuild perdido.

En caso de que sea tan sólo instalar una versión superior de un mismo software, algunas veces cuela con simplemente renombrar el ebuild a la versión que interesa y revisar los parches que aplica portage al software ( líneas EPATCH en los ebuilds). Esto que puede sonar a chino mandarín es realmente trivial si miras con ojo y entiendes lo que hace el ebuild.

Si al final no funciona nada de eso, tan sólo queda empezar a leer y hacerlo tu mismo.

 *Quote:*   

> y si todo va bien, ¿cómo contribuyo al árbol de portage para actualizar en el portage oficial?

 

abre un bug en el bugzilla a ver si alguien lo revisa.

saluetes

----------

## i92guboj

 *Magnum44 wrote:*   

> Hola, hoy he mirado un programa que usaba a veces en mi antiguo gentoo (antes de que se muriesen los discos duros de mi raid). El programa en cuestión está en portage, pero existen un montón de versiones nuevas que no están contempladas en portage. Mi duda es, ¿cómo creo un ebuild para poder instalar a través de portage estas nuevas versiones? y si todo va bien, ¿cómo contribuyo al árbol de portage para actualizar en el portage oficial?
> 
> 

 

Comenzar en la tarea de crear ebuilds no es sencillo si no se tiene conocimiento de algunas cosillas. Pero tampoco es una tarea descabellada si se tienen paciencia y ganas de aprender. En primer lugar, tienes que saber lo que es un overlay, como crear y mantener tu overlay local. Este sencillo wiki nos indica como crear nuestro overlay local, donde podremos poner los ebuilds que creemos, para que no se vayan a la porra cuando hagamos el próximo sync.

http://es.gentoo-wiki.com/HOWTO_Instalar_Ebuilds_de_3ros

También deberías dar un repaso a algún manual de bash scripting. Los ebuilds, a fin de cuentas, no son más que scripts de bash. Ni más, ni menos. Por tanto, conocer las reglas sintácticas y el funcionamiento de sus construcciones básicas, no ayudará muchísimo.

Para ello, te recomiendo una serie en cuya traducción colaboré yo mismo, y que está dividida en tres capítulos. Te doy el link al primero, porque están conectados entre si, así que no te perderás al pasar de uno a otro.

http://www.gentoo.org/doc/es/articles/bash-by-example-p1.xml

Esta serie fue creada por Daniel Robbins, el creador original de Gentoo, y en ella da unas sencillas clases de programación en bash, en las que además, nos muestra como comenzar a crear un sistema de gestión de paquetes que no es más que una versión reducida de lo que portage es hoy día. En esos artículos, queda muy patente la relación entre ebuilds y bash. Algo muy a tener en cuenta si queremos profundiar en el tema de los ebuilds.

 *Quote:*   

> 
> 
> Seguro que a muchos de nosotros se nos ha pasado esto más veces por la cabeza, he estado investigando por docs.gentoo.org pero es tan enorme la cantidad de información que me pierdo. ¿Alguien tiene algún howto legible en menos de 1 hora a mano    ?

 

Tras todo lo anterior que te he dicho, la verdad es que en muchas ocasiones, la cosa es mucho más sencilla que todo eso. Normalmente basta con copiar el ebuild con nuevo número de versión y poco más. Para entenderlo, mejor un ejemplo que 500 palabras. Haremos un ebuild para una versión actualizada de conky, un ligero pero potente monitor de sistema capaz incluso de ejecutarse sobre el fondo del servidor X si así se lo decimos.

Conky está ahora mismo en su versión 1.4.7. Con algunos cambios interesantes. Pero en portage solo tenemos la 1.4.6. Así que haremos un ebuild para la nueva versión en nuestro overlay.

No voy a explicar como crear un overlay, para eso ya está el wiki de antes. Supondré que portage está en /usr/portage y el overlay local en /usr/local/portage. Entonces hacemos lo siguiente, como root:

```

mkdir -p /usr/local/portage/app-admin/conky

cd /usr/local/portage/app-admin/conky

cp /usr/portage/app-admin/conky/conky-1.4.6.ebuild .

mv conky-1.4.6.ebuild conky-1.4.7.ebuild

ebuild conky-1.4.7.ebuild manifest

```

Tras esto, y si al generar el manifest no hubo errores, podremos emerger la nueva versión del paquete.

La explicación de "por qué" esto es así, requiere entrar en temas de bash scripting. Digamos que está relacionado con la forma en que los ebuilds dan valor a ciertas variables que rellenan a partir del nombre del ebuild, y les permiten adaptarse, teniendo como único dato el nombre del ebuild y su versión, para descargar la versión correcta del paquete que se quiere instalar y compilarlo. No voy a entrar en detalles, porque si tienes conociemientos de bash lo verás en seguida en cuanto empieces a editar ebuilds. Y si no lo tienes, lo necesitarás, y hasta que no lo tengas cualquier explicación que te de te sonará medio a chino.

Por supuesto, no siempre es tan fácil. Hay paquetes más estándar que otros, y que casi nunca requieren ebuilds largos ni complicados. Estos tienes más posibilidades de poder actualizarse mediente el método descritor (simplemente renombrando y haciendo el manifest). Hay otros casos más complicados, por ejemplo, si un paquete migra de autotools a cmake de una versión para otra. Entonces no basta con el método anterior, y hay que editar el ebuild para cambiar más cosas.

Ahí te dejo algo de material para que te entretengas  :Razz: 

Los ejemplos no los he probado, así que si algo falla, dímelo porque puede que algo no esté 100% correcto.

PS. En cuanto a lo de integrarlos en el portage oficial, si has subido la versión de un ebuild de portage copiándolo a tu overlay local, y has comprobado que funciona, puedes ir a bugs.gentoo.org, y buscar "ALL <nombrepaquete>", mira en la lista que saldrá si hay algún título sobre el tema de la nueva versión que quieres introducir en portage. Si lo hay, usa ese hilo y no dupliques, que siempre mosquea. Si no lo hay, abre uno nuevo explicando que hay una nueva versión disponible (eso si, no lo hagas el mismo día que se libera dicha versión, mejor no meter prisas), y que simplemente renombrando el ebuild funciona. Conque indiques eso, ya están avisados. Normalmente eso suele bastar. Otra historia muy distintas es introducir ebuilds nuevos, que no tienen mantenedor.  :Razz: 

----------

## Magnum44

Mmmm... ok, ya he hecho el manifest y parece que todo ha ido bien, pero... ¿cómo instalo la nueva versión? simplemente emerge paquete no tira ya que intenta instalar la versión que hay en el portage oficial...

EDITADO:

Me respondo a mi mismo, sólo me hacía falta refrescar el árbol de portage para que apareciese mi versión   :Laughing: 

----------

## Magnum44

Eah! acabo de enviar mi primer ebuild a bugs.gentoo.org  :Cool: 

A ver si llega a buen puerto

----------

