Package maintainer guide (Español)
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.
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)
Contents
- 1 Herramientas
- 2 Configurando todo
- 3 Entorno de empaquetado
- 4 Construcción de paquetes
- 5 Creación de paquetes
- 6 Subida de paquetes
- 7 Consejos y trucos
- 7.1 Construcción de paquetes i686 en un sistema x86_64
- 7.2 Construcción de paquetes armv7h en un sistema x86 (i686 y/o x86_64)
- 7.3 Liberación de varios paquetes al mismo tiempo
- 7.4 Preparación de un paquete para varios repositorios
- 7.5 Comprobación de MD5sum
- 7.6 Construcción de paquetes desde el control de fuentes
- 7.7 Conexión SSH a Parabola
- 7.8 Compilando sin Systemd
- 7.9 ¡El mantenimiento de paquetes a tiempo se mantiene actualizando!
1 Herramientas
Instale libretools. También se instalarán ssh, rsync, git, y otras herramientas necesarias para empaquetar.
# pacman -S libretools
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
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:
if [ -z "$GPGKEY" ] && [ -f "${HOME}/.gnupg/gpg.conf" ]; then export GPGKEY=`sed -nr 's/^\s*default-key\s+//p' "${HOME}/.gnupg/gpg.conf"` fi
2.2 Configuración de SSH
Agregue lo siguiente a su ~/.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.
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.
3.2.1 Actualización de chroot
Ejecute
$ sudo librechroot update
4 Construcción de paquetes
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:
[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:
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!