Package maintainer guide (Español)

From ParabolaWiki
Jump to: navigation, search

Este artículo describe los pasos necesarios para comenzar a trabajar en nuestros repositorios. Si va a hacer un nuevo reempazo -libre para algún paquete consulte nuestra guía para crear reemplazos libres.

Nota: Conéctese al canal IRC #parabola y suscríbase a la lista de correos dev list


Si algo importante sucede, lo encontrará allí.

Además, regístrese en el seguimiento de incidencias, para que podamos asignarle una tarea o usted pueda elegir una.

Las directrices para empaquetadores están siendo discutidas desde febrero de 2012. ¡Participe! (Archive)

1 Herramientas

Instale libretools. También se instalarán ssh, rsync, git, y otras herramientas necesarias para empaquetar.

# pacman -S libretools
Advertencia: Necesitará configurar GPGKEY, y agregar repo a su archivo ~/.ssh/config antes de usar libretools.
Advertencia: Si actualiza libretools, necesitará fusionar a su /etc/libretools.conf.pacnew.

Y en el caso de que no uses Systemd (por ej. OpenRC or SystemV), véase #Compilando sin Systemd

2 Configurando todo

2.1 Configuración de GPGKEY

Creación de su clave GPG

Advertencia: Si usa un gestor de claves integrado (como el disponible en GNOME) omita esta sección ya que la clave privada no será recuperada correctamente. La clave será provista automáticamente cuando lo requieran los scripts de empaquetado.

Para firmar paquetes, deberá configurar la variable GPGKEY, ya sea que lo configure como una variable de entorno, en /etc/makepkg.conf, o en~/.makepkg.conf.

Es preferible configurarla como una variable de entorno poniendo lo siguiente en ~/.profile:

File: ~/.profile
if [ -z "$GPGKEY" ] && [ -f "${HOME}/.gnupg/gpg.conf" ]; then
	export GPGKEY=`sed -nr 's/^\s*default-key\s+//p' "${HOME}/.gnupg/gpg.conf"`
fi
Nota: La variable GPGKEY reemplaza a la variable SIGID seteada en /etc/libretools.conf.

2.2 Configuración de SSH

Agregue lo siguiente a su ~/.ssh/config

File: ~/.ssh/config
Host repo
        Port 1863
        HostName repo.parabola.nu
	user repo

Host repo.parabola.nu
        Port 1863
        HostName repo.parabola.nu
	IdentityFile ~/.ssh/''yourparabolapackagerskey''
	user repo

Host parabola.nu
        Port 1863
        HostName repo.parabola.nu
        IdentityFile ~/.ssh/''yourparabolapackagerskey''
        user repo
	
Host projects.parabola.nu
        Port 1863
        HostName projects.parabola.nu
	IdentityFile ~/.ssh/''yourparabolapackagerskey''
	User git

Y envíe su clave pública (~/.ssh/id_rsa.pub o nombre) a la lista de correo de Parabola.

Nota: La clave y el email deberían estar firmados con su clave GnuPG. De acuerdo al ejemplo anterior, debería usar gpg --armor --sign ~/.ssh/id_rsa.pub para firmar su clave SSH.
Nota: El host 'repo' reemplaza el antiguo host 'parabola'.

3 Entorno de empaquetado

El empaquetado puede ser desagradable y convertirse en una carga (como toda tarea repetitiva). Libretools existe para hacerlo más liviano.

3.1 Directorio de trabajo

Para minimizar errores en la subida de paquetes, hemos creado herramientas automáticas para el proceso, nuestro libretools usa la jerarquía de directorios de nuestros repositorios.

Existe un script que lo ayudará a generar un directorio de trabajo apropiado, maravillosamente denominado createworkdir. Ejecútelo, y el script creará todos los directorios necesarios, además git-clone hará un árbol ABSLibre para usted si envía su clave pública SSH a la lista de correos dev (ver más abajo).

$ createworkdir

Puede encontrar más información sobre el árbol de directorios en [1].

3.1.1 Actualización de ABSLibre

Cuando construya un paquete, necesitará una copia actualizada de la receta para el paquete. Actualice abslibre en su $WORKDIR mediante:

$ cd $WORKDIR/abslibre && git pull

3.2 Chroot

Necesitará un entorno de empaquetado limpio para asegurar que los paquetes que usted construya funcionarán correctamente en todos los sistemas de Parabola independientemente de su configuración y los paquetes que tenga instalados en su sistema. Esto es lo logrará con chroot.

Necesitará crear un directorio chroot para construir paquetes en su interior. Esto le ayudará a identificar dependencias perdidas y mantener su sistema habitual limpio. Cree un chroot ejecutando sudo librechroot -M /etc/makepkg.conf -C /etc/pacman.conf make, sin embargo, todos los comandos que requiera un chroot serán creados automáticamente si no existen.

Aemás, note que usamos sudo en forma explícita, en lugar del usual #, que significa que lo ejecutamos como root. Esto se debe a que parte de la ruta del chroot se basa en el nombre de usuario. Consulte librechroot help por más detalles.

Nota: Si ha modificado su /etc/makepkg.conf o /etc/pacman.conf deberá asegurarse de restaurar a los valores por defecto en su chroots o surgirán problemas. Cada vex que ejecuta librechroot o libremakepkg estos archivos se copian nuevamente. Si no desea que esto suceda intente configurar chattr +i [nombre de archivo] dentro del chroot.

3.2.1 Actualización de chroot

Ejecute

$ sudo librechroot update

4 Construcción de paquetes

Advertencia: No use ningún directorio en $WORKDIR/staging para construir

Antes de hacer un paquete, deberá actualizar ABSLibre y su chroot.

Asegúrese de tener configurado PKGDEST y SRCDEST en /etc/makepkg.conf.

Luego, cambie (cd) al directorio para el paquete en $WORKDIR/abslibre, y ejecute libremakepkg (tan sencillo como makepkg):

$ sudo libremakepkg

Después de construir el paquete, se agregará automáticamente al repositorio pacman local, y podrá ser usado como una dependencia para otros paquetes que desee construir.

Revise la página libremakepkg para una descripción de cómo trabaja.

5 Creación de paquetes

Siga esta guía: Creating -libre packages.

Además, eche una mirada a los errores más comunes en el empaquetado.

6 Subida de paquetes

6.1 Configuración de git

Todos los paquetes necesitarán incluir un PKGBUILD subido a abslibre.git. Configure su archivo ~/.gitconfig como sigue:

File: ~/.gitconfig
[color]
	ui = auto
[push]
	default = simple
[user]
	name = Your Name
	email = your@email.com
	signingkey = [Your GPG key fingerprint here]
[commit]
	gpgsign = true

Una vez configurado git simplemente envíe todas las actualizaciones:

$ git add [editedfile(s)]
$ git commit -m "I changed something, just letting everyone know"
$ git push

6.2 Subida de binarios

Para subir paquetes a nuestros repositorios:

$ librestage repo-en-donde-poner-el-paquete # prepara el paquete a ser subido
$ librerelease                          # sube todos los paquetes preparados

Por defecto, librerelease también limpiará el repositorio pacman local en su chroot (sudo librechroot clean-repo). Si no quiere que esto suceda, cambie el valor a HOOKPOSTRELEASE en /etc/libretools.conf.

7 Consejos y trucos

7.1 Construcción de paquetes i686 en un sistema x86_64

Consulte Building 32-bit packages on a 64-bit system

7.2 Construcción de paquetes armv7h en un sistema x86 (i686 y/o x86_64)

Consulte Building armv7h packages on a x86 system

7.3 Liberación de varios paquetes al mismo tiempo

Originalmente, librerelease debía decidir donde colocar un paquete y subirlo al servidor de repositorios de manera adecuada. En la actualidad, librestage hace la primera parte y librerelease la segunda, por lo tanto, usted puede empaquetar varios paquetes y prepararlos para subirlos más tarde. Antes de ejecutar librerelease, asegúrese de correr gpg-agent, de esta manera sólo deberá ingresar su contraseña una vez.

7.4 Preparación de un paquete para varios repositorios

Tome nota de que librestage acepta varios nombres de repositorios como argumento. Si lo hace, preparará los paquetes, permitiendo que suba paquetes en cualquier repo que desee. No es una característica de la que se deba abusar, pero es muy útil mientras migramos a los repositorios [libre] y [libre-testing]... tendrá qe liberar en [core] y [libre], o [testing] y [libre-testing] al mismo tiempo, por ejemplo.

7.5 Comprobación de MD5sum

Si cambia la matriz de fuentes en PKGBUILD, tendrá que cambiar la matriz de md5sums para que refleja esto. Extráigala de PKGBUILD y use este comando para generar md5sum para sus paquetes:

$ makepkg -g >> PKGBUILD

7.6 Construcción de paquetes desde el control de fuentes

Esta librefetch herramienta existe para ayudarle con la construcción de paquetes desde el control de fuentes. Si está familiarizado con el antiguo mksource o los sistemas SRCBUILD, eso funciona; solamente agregue https://repo.parabola.nu/other/$pkgname/$pkgname-$pkgver.tar.gz a su matriz de fuentes, y librefetch lo construirá automáticamente por usted. Entre mksource y SRCBUILD, se recoomienda mksource, es mucho más simple. Por ejemplo, aquí hay una porción de un PKGBUILD para construir una versión de vanguardia de wmii:

File: PKGBUILD
source=("https://repo.parabola.nu/other/~lukeshu/wmii/wmii-hg-${pkgver}.tar.gz")
md5sums=('1ab85d01467e5e53c9b16ca19cca9824')

mkdepends=("mercurial")
mksource=("wmii-hg${pkgver}::hg+https://code.google.com/p/wmii/#revision=${pkgver}")
mkmd5sums=('SKIP')
mksource() {
	# don't include this precompiled binary (probably included by accident)
	rm "${srcdir}/wmii-hg${pkgver}/lib/libutf/libutf.a"
}

Use librefetch -g para generar la matriz de mkmd5sums, y makepkg -g para generar la matriz plana md5sums.

librestage/librerelease subirá el tarball generado por usted.

7.7 Conexión SSH a Parabola

Asegúrese de poner los permisos de su ~/.ssh en 700:

$ chmod 700 ~/.ssh

Además, asegúrese de poner los permisos de su clave ~/.ssh/id_ecdsa en 600:

$ chmod 600 ~/.ssh

Si agregó el servidor del repositorio a su configuración ssh, solo haga:

$ ssh repo@repo

y copie los archivos usando scp:

$ scp local-file repo@repo:remote-path

7.8 Compilando sin Systemd

librechroot usa chroot-nspawn para compilar en los chroots.

Chroot-nspawn es un wrapper de systemd-nspawn wrapper para chroot. Combina características de chroot y unshared. Para usarlo, simplemente instala el paquete chroot.

# pacman -S chroot-nspawn

7.9 ¡El mantenimiento de paquetes a tiempo se mantiene actualizando!

ESTO ES CON AUR3 ... TENEMOS QUE HALLAR LA FORMA CON AUR4!!!

En este punto tiene instalado libretools y puede comenzar a construir paquetes el paso próximo es mantenerlo actualizado.


¡Para hacer esto más fácil existe un script que le dirá cuando su paquete se encuentre desactualizado!


(en este momento no recuerdo quien fue el autor de este script, sólo se que ha sido escrito por alguien de la lista de hackers de Parabola. ¡Gracias a él!)


Primero clone aur-git


git clone git://pkgbuild.com/aur-mirror.git


Luego instale expac

pacman -S expac

entonces copie el script con un nombre de archivo que desee por ejemplo out-of-date


pattern="$1"
cd aur-mirror
expac -S '%r/%n %v %b %p' -t '%F %T %z' | grep "^pcr" | cut -b 5- | awk -v pattern="$pattern" "\$1 ~ pattern" | while IFS= read -r line
do
  set -- ${line}
  if [[ -e ${1}/PKGBUILD ]] ; then
    # Skip plowshare because its pkgver is too long
    [[ ${1} =~ plowshare ]] && continue
    source ${1}/PKGBUILD && [[ "${2}" < "${pkgver}-${pkgrel}" ]] && {
      printf "%-40s%15s   %-20s   %-50s\n" "${1}" "${2}" "${3} ${4} ${5}" "${*: 6}"
      date="$(git log -1 --format='%ci' -- "${1}/PKGBUILD")"
      printf "%-40s%15s   %-50s\n" "${pkgname}" "${pkgver}-${pkgrel}" "${date}"
      echo --
    }
  else
    echo "${1} is not in AUR"
    echo --
  fi
done


grábelo y cambie los permisos


chmod +x out-of-date


Ahora solo tendrá que ejecutarlo usando ^a para listar todos los paquetes alfabéticamente


./out-of-date ^a


¡Ya es un mantenedor actualizado!