Woohoo... thanks por tomarte el tiempo quelcom.
overlay
overlay comenzó como una función en mi bash_profile que me permitiera firmar un 'paquete' antes de hacer un commit a mi CVS [ donde tengo mi overlay ]. Sin embargo esto es un problema porque los ebuilds tienen en la cabecera esto:
# $Header$
Que es una etiqueta especial de CVS, al hacer el commit el CVS modifica el ebuild y por tanto el Manifest queda roto. Hacía falta regenerar el Manifest una vez CVS ha modificado el ebuild, volver a firmarlo y hacer commit del Manifest. Esto es lo que en gentoo conocemos como 'Manifest recommit'.
Una vez que 'overlay' era capaz de firmar un paquete y mandarlo al CVS sin que nada se rompiera surgía la necesidad de compartir este overlay con todo el mundo. En mi caso además subirlo a mano es una pesadez dado que el servidor rsync (gentoo-es.org) no es el mismo que el servidor que lo 'muestra por web' (dev.gentoo.org).
Así que fui incrementando la función con más y más código hasta que se hizo imposible de mantener como función y la convertí en un script a parte.
¿Cómo funciona? No es dificil... aunque tampoco especialmente intuitivo. Lo primero configuramos nuestro .overlayrc. El mío es algo así:
# GPG key to sign manifests
OVERLAY_SIGN_KEY=0x47F5241D
# Where is it located
OVERLAY_DIR=/home/ferdy/gentoo/overlay/
# Use CVS or SVN or GIT?
OVERLAY_SCM=cvs
# CVS module name
OVERLAY_MODULE=overlay
## Servers section; synopsis and example
# server_identifier=("uri" "path/" "rm" "extracmds" ...)
server_toucan=("dev.gentoo.org" "public_html/" "1" "chmod a+r public_html/overlay")
server_pas=("gentoo-es.org" "" "1")
Quizá la parte más dificil sean los 'server_*'; sin embargo es realmentes simple. Imaginemos que queremos publicar nuestro overlay en otro servidor más que se llama perico. Y vamos a publicarlo en la ruta 'public_html/gentoo/overlay'. Además queremos notificar al servidor de que hemos actualizado nuestro overlay haciendo un 'touch updated/my-very-own-overlay' (esto puede ser util para un cron por ejemplo); pues hacemos:
server_perico=("perico.host.name.org" "public_html/gentoo/" "1" "touch updated/my-very-own-overlay")
Ese '1' que hay ahí es para que overlay borre el directorio antes de subir los archivos, es muy util y nadie debería tenerlo en '0' si no quiere que ebuilds que borre de su overlay sigan apareciendo por ahí.
¿Y cómo se usa? Pues lo primero es crearse un overlay y para eso necesitamos un sistema de control de versiones. Como poner un CVS/SVN es un poco pesado, vamos a usar GIT para el ejemplo:
[ $ ~ ] cat .overlayrc
# GPG key to sign manifests
OVERLAY_SIGN_KEY=0x47F5241D
# Where is it located
OVERLAY_DIR=/home/ferdy/git/overlay/
# Use CVS or SVN or GIT?
OVERLAY_SCM=git
Tenemos que crear el sistema de ficheros GIT antes:
[ $ ~ ] mkdir -p git/overlay
[ $ ~ ] cd git/overlay
[ $ ~/git/overlay ] git init-db
defaulting to local storage area
[ $ ~/git/overlay ] echo "initial commit" | git-commit-tree $(git-write-tree) > .git/HEAD
Para hacernos la vida más fácil y poder utilizar 'echangelog' [ parte de gentoolkit-dev ] vamos a copiar skel.ChangeLog y a añadirlo a nuestro overlay:
[ $ ~/git/overlay ] cp /usr/portage/skel.ChangeLog .
[ $ ~/git/overlay ] git add skel.ChangeLog
[ $ ~/git/overlay ] git commit -m "add ChangeLog skeleton to keep echangelog happy" skel.ChangeLog
Ahora empezaremos por crearnos un paquete chorra, en nuestro caso será el mismo gentoo-util-scripts:
[ $ ~/git/overlay ] mkdir -p app-portage/gentoo-util-scripts/files/
[ $ ~/git/overlay ] git add app-portage
[ $ ~/git/overlay ] git add app-portage/gentoo-util-scripts
[ $ ~/git/overlay ] git add app-portage/gentoo-util-scripts/files
[ $ ~/git/overlay ] cd app-portage/gentoo-util-scripts/
[ $ ~/git/overlay/app-portage/gentoo-util-scripts ] vim gentoo-util-scripts-0.4.ebuild
Una vez tenemos el ebuild creamos el 'digest' y añadimos ambos ficheros a GIT:
[ $ ~/git/overlay/app-portage/gentoo-util-scripts ] ebuild gentoo-util-scripts-0.4.ebuild digest
>>> Generating digest file...
<<< gentoo-util-scripts-0.4.tar.bz2
>>> Generating manifest file...
<<< gentoo-util-scripts-0.4.ebuild
<<< files/digest-gentoo-util-scripts-0.4
>>> Computed message digests.
[ $ ~/git/overlay/app-portage/gentoo-util-scripts ] git add gentoo-util-scripts-0.4.ebuild files/digest-gentoo-util-scripts-0.4
Ahora creamos el metadata.xml; luego creamos la primera entrada del ChangeLog y añadimos todos los ficheros al GIT. Para dejar las cosas bien regeneramos el Manifest:
[ $ ~/git/overlay/app-portage/gentoo-util-scripts ] vim metadata.xml
[ $ ~/git/overlay/app-portage/gentoo-util-scripts ] echangelog "initial import"
( Salida diciéndonos que hay cosas que no fueron bien, esto es porque echangelog solo sabe de CVS ; pero nos vale igual )
[ $ ~/git/overlay/app-portage/gentoo-util-scripts ] git add ChangeLog Manifest metadata.xml
Una vez que está todo listo, podemos hacer 'overlay commit' y pasarle un mensaje:
[ $ ~/git/overlay/app-portage/gentoo-util-scripts ] overlay commit -m "initial import"
(blablabla)
Siempre podemos comprobar el estado de las firmas de nuestros Manifests con 'overlay check'. Además podemos subir nuestro overlay a los servidores que especifiquemos con 'overlay upload'.
'overlay' funciona bien con CVS y GIT, con svn 'debería' pero quizá necesite tweakearlo. Habrá bugs y no es 'idiot-proof' así que si alguien quiere romper algo, será capaz de hacerlo, overlay no se lo va a impedir
ATENCIÓN: Con funciona significa que a MI me funciona... tiene mil bugs y estaré encantado de arreglarlos si alguien los reporta.
Un saludo a todos.
Ferdy
PD: Si usais git: Utilizad la versión ~arch de dev-util/git. La estable no vale para nada. Además 'gitk' es una 'cómoda' utilidad gráfica para ver repositorios GIT.