Building armv7h packages on a x86 system (Español)

From ParabolaWiki
Jump to: navigation, search

Cómo crear paquetes armv7h en un sistema x86. Este artículo se centra en la configuración de herramientas de creación de paquetes en un sistema x86_64 o i686.

1 Libretools

libretools agregó soporte para la creación de paquetes armv7h en sistemas x86. Se encargará de la mayoría de los detalles que entran en la toma y el acceso a la chroot para usted. Si va a estar construyendo una gran cantidad de paquetes para el proyecto Parabola, se aconseja utilizar este método.

Primero, instale binfmt-qemu-static, lo que es sugerido por libretools como una dependencia opcional.

 # pacman -S binfmt-qemu-static
Nota: No se puede usar el qemu vinculado dinámicamente porque las bibliotecas de host no serán accesibles desde dentro del chroot.

Si utiliza Systemd, habilite e inicie el servicio systemd-binfmt.service.

 # systemctl enable --now systemd-binfmt.service

Y en el caso de OpenRC, haga lo mismo con el servicio binfmt. Comúnmente esto ya está hecho.

 # rc-update add binfmt boot && service binfmt start

Antes de descargar los paquetes armv7h se deben confiar algunas claves adicionales de firma. Cuando es posible, Parabola aprovecha los paquetes libres que originalmente vinieron de Arch ARM.

Primero asegúrese de que el keyring de pacman ha sido inicializado:

# pacman-key --init

Importe, firme localmente e instale el keyring de archlinuxarm por pasos. Esto hará que la confianza se arranque sin deshabilitar la verificación de la firma en pacman.conf:

# pacman -U https://www.parabola.nu/packages/core/any/archlinuxarm-keyring/download/
# pacman-key --esign-key builder@archlinuxarm.org
# pacman -U https://www.parabola.nu/packages/core/any/archlinuxarm-keyring/download/
Nota: En caso de que esas URL no estén disponibles, utilice cualquier otro mirror actualizado. Utilice las versiones de paquetes más recientes, por ejemplo:
# pacman -U https://repo.parabola.nu/core/os/armv7h/archlinuxarm-keyring-20140119-1-any.pkg.tar.xz
# pacman-key --esign-key builder@archlinuxarm.org
# pacman -U https://repo.parabola.nu/core/os/armv7h/archlinuxarm-keyring-20140119-1-any.pkg.tar.xz


A continuación, siga la guía de mantenimiento del paquete, agregando -A armv7h en el paso librechroot make para crear un chroot armv7h. ¡Estás listo!

2 QEMU y/o Proot

Si no tiene ganas de configurar un entorno para libretools, lo que sigue son dos métodos similares para usar QEMU directamente para emular una máquina ARM que se ejecuta en un directorio armro7h chroot. El primero usa el binfmt-qemu-static más rápido, como #libretools arriba; Mientras que el segundo pasa a través de proot para hacer uso del mismo truco binfmt-qemu que permite asociar binarios no nativos a un emulador dependiendo de su formato. En todos los casos, esto se asemeja a cómo shebangs se han utilizado tradicionalmente para pasar los scripts al intérprete adecuado sin que el usuario tenga que especificarlo. De cualquier manera, primero debe tener un directorio armv7h chroot:

2.1 Crear imagen de Parabola

Siga ARM_Installation_Guide # Create_Parabola_installation_image

2.2 QEMU estática (opción 1)

Para poder hacer chroot en un sistema de archivos de destino sin proot, el emulador qemu para la CPU de destino debe ser accesible desde dentro de la jaula de chroot.

Instale binfmt-qemu-static como se describe al principio de la sección #Libretools:

 # pacman -S binfmt-qemu-static
 # systemctl enable --now systemd-binfmt.service # En el caso de usar Systemd
 # rc-update add binfmt boot && service binfmt start # En el caso de usar OpenRC

A continuación, copie el emulador de la arquitectura de destino en la ruta registrada por binfmt-support. Debe hacer lo siguiente, sustituyendo parabola-arm-workdir/mnt/ para lo que su carpeta raíz de imagen armv7h pasa a ser llamado:

 # cp -a /usr/bin/qemu-arm-static parabola-arm-workdir/mnt/usr/bin

Preparar y entrar en el chroot:

 # mount -o rbind /dev parabola-arm-workdir/mnt/dev
 # mount -o bind /sys parabola-arm-workdir/mnt/sys
 # mount -o bind /tmp parabola-arm-workdir/mnt/tmp
 # mount -t proc none parabola-arm-workdir/mnt/proc
 # rm parabola-arm-workdir/mnt/etc/resolv.conf
 # cp -a /etc/resolv.conf parabola-arm-workdir/mnt/etc
 # mkdir parabola-arm-workdir/mnt/rootfs
 # mount -o bind / parabola-arm-workdir/mnt/rootfs
 # chroot parabola-arm-workdir/mnt/ /bin/bash
 # mount -o bind /rootfs/${DIRECTORIO A parabola-arm-workdir/mnt} /

2.3 PRoot (opción 2)

PRoot es una implementación de chroot, mount --bind, y binfmt_misc. Esto significa que los usuarios no necesitan privilegios ni configuración para hacer cosas como usar un directorio arbitrario como el nuevo sistema de archivos raíz, hacer que los archivos estén accesibles en algún otro lugar en la jerarquía del sistema de archivos o ejecutar programas construidos para otra arquitectura de CPU de forma transparente a través de QEMU user-mode . Además, los desarrolladores pueden usar PRoot como un motor genérico de instrumentación de procesos GNU/Linux gracias a su mecanismo de extensión, vea CARE como ejemplo. Técnicamente PRoot se basa en ptrace, una llamada de sistema no privilegiada disponible en cada kernel Linux.

Para instalar, ejecuta:

 # pacman -S proot

Instale qemu-arch-extra:

 # pacman -S qemu-arch-extra

Finalmente prepare y entre en el chroot, sustituyendo parabola-arm-workdir/mnt/ por el nombre de su carpeta raíz de la imagen armv7h:

 # mount -o rbind /dev parabola-arm-workdir/mnt/dev
 # mount -o bind /sys parabola-arm-workdir/mnt/sys
 # mount -o bind /tmp parabola-arm-workdir/mnt/tmp
 # mount -t proc none parabola-arm-workdir/mnt/proc
 # rm parabola-arm-workdir/mnt/etc/resolv.conf
 # cp -a /etc/resolv.conf parabola-arm-workdir/mnt/etc
 # cd /mnt
 # proot -0 -q /usr/bin/qemu-arm -r parabola-arm-workdir/mnt/

2.4 Configuración de chroot

2.4.1 Inicializar el keyring

# pacman-key --init
# pacman-key --populate archlinux archlinuxarm parabola
Nota: Este paso puede tomar bastante tiempo, sea paciente.

2.4.2 Generación de locales

Antes de que se pueda habilitar una configuración regional en el sistema, debe generarse. Las configuraciones regionales actuales generadas / disponibles se pueden ver con:

$ locale -a

Los locales que se pueden generar se enumeran en el archivo /etc/locale.gen: sus nombres se definen usando el formato [LENGUAJE][_TERRITORIO][.CODESET][@MODIFICADOR]. Para generar una configuración regional, primero descomente la línea correspondiente del archivo (o el comentario que desee eliminar); Al hacer esto, también considere las localizaciones requeridas por otros usuarios en el sistema y variables específicas. Por ejemplo, para el descomentado inglés-inglés en_US.UTF-8 UTF-8. Cuando haya terminado, guarde el archivo y genere la(s) configuración(es) desconocida(s) ejecutando:

# locale-gen
Nota: locale-gen también se ejecuta con todas las actualizaciones de glibc.

2.4.3 Agregar un usuario

Por último, agregue un usuario normal (por ejemplo, username)

# Useradd -m username
Nota: Será necesario construir paquetes con el comando makepkg

2.5 Generar el paquete

2.5.1 Configuración de Makepkg

Consulte https://wiki.archlinux.org/index.php/Makepkg#Configuration.

2.5.2 Compilar el paquete

Consulte https://wiki.archlinux.org/index.php/Makepkg#Usage.

2.6 Solución de problemas

2.6.1 Pacman y certificados

Al intentar usar pacman, si ves errores como:

 Error: no se pudo recuperar el archivo '$PACKAGE' desde $MIRROR: error setting certificate verify locations:
   Archivo de CA: /etc/ssl/certs/ca-certificates.crt
   CApath: ninguno
 Advertencia: no se han podido recuperar algunos archivos
 Error: no se pudo confirmar la transacción (error de biblioteca de descarga)
 Se produjeron errores, no se actualizaron los paquetes.

Trate de copiar los certificados necesarios de su máquina real:

 # sudo cp -a /etc/ssl/certs/ca-certificates.crt /mnt/chroot-armv7h/etc/ssl/certs/
 # sudo cp -a /etc/ca-certificates/extracted/tls-ca-bundle.pem /mnt/chroot-armv7h/etc/ca-certificates/extracted/

Eso o cambiar a un mirror HTTP (no HTTPS) en /etc/pacman.d/mirrorlist.

3 Compilador cruzado

This article or section is out of date.
Please help improve the wiki by updating the article and correcting mistakes.

Vea compilador cruzado.