XBPS_SRC.md: Correcciones de redacción y formato de código
This commit is contained in:
parent
f8907e0c06
commit
657f1c2bb7
|
@ -20,6 +20,7 @@ Es el generador de paquetes XBPS, escrito desde cero, que crea el software en co
|
|||
|
||||
Además, `xbps-src` puede compilar de forma nativa o realizar una compilación cruzada para la máquina de destino y admite varias bibliotecas C (glibc y musl actualmente).
|
||||
|
||||
|
||||
### Inicio rápido
|
||||
|
||||
Clonar el repositorio git void-packages e instalar los paquetes bootstrap:
|
||||
|
@ -35,17 +36,18 @@ La configuración el entorno se establece en el archivo `etc/conf`
|
|||
|
||||
- `XBPS_CHROOT_CMD=uchroot` Utilidad XBPS que utiliza namespaces. Tu usuario debe estar en el grupo xbuilder y el ejecutable debe tener activado el permiso especial setgid.
|
||||
|
||||
- `XBPS_CFLAGS="-march=native -O2 -pipe"`
|
||||
- `XBPS_CFLAGS="-march=native -O2 -pipe"` Al añadir la opción `-march=native` se le indica al compilador que construya los binarios para la arquitectura en específico que se tiene en uso. Si se planea utilizar la compilación cruzada o construir binarios genéricos, entonces se recomienda no utilizar `-march=native`
|
||||
|
||||
- `XBPS_CXXFLAGS="${XBPS_CFLAGS}"`
|
||||
- `XBPS_CXXFLAGS="$XBPS_CFLAGS}"` Corresponde a las opciones de compilación para la construcción de código C++
|
||||
|
||||
- `XBPS_LDFLAGS="${XBPS_CFLAGS}"`
|
||||
- `XBPS_LDFLAGS="${XBPS_CFLAGS}"` Corresponde a las para opciones de compilación de construcción referentes a la vinculación de código del programa (vinculación dinámica [comparten librerías] o compilación estática [un binario con todas sus dependencias incluídas])
|
||||
|
||||
- `XBPS_MAKEJOBS=$(nproc)`
|
||||
- `XBPS_MAKEJOBS=$(nproc)` Con esta variable se le indica al compilador que utilice todos los *cores* disponibles. Con esta opción se ahorra significativamente tiempo en la construcción de binarios
|
||||
|
||||
- `XBPS_PKG_OPTIONS="alsa,vaapi,~dbus,~vdpau,~sndio,~jack,~libpulseaudio,~pulseaudio,~wayland"` Opciones globales de construcción, afecta a todos los paquetes que contenga dicha opción para la construcción
|
||||
- `XBPS_PKG_OPTIONS="alsa,vaapi,~dbus,~vdpau,~sndio,~jack,~libpulseaudio,~pulseaudio,~wayland"` Opciones globales de construcción, afecta a todos los paquetes que contenga dicha opción para su respectiva construcción
|
||||
|
||||
- `XBPS_PKG_OPTIONS_MKSH="static"` Opciones de construcción para un paquete en específico, siguiendo la nomenclatura XBPS_PKG_OPTIONS_<pkgname>. Esta variable tiene prioridad sobre la configuración global de paquetes
|
||||
|
||||
- `XBPS_PKG_OPTIONS_MKSH="static"` Ppciones de construcción de un paquete, siguiendo la nomenclatura XBPS_PKG_OPTIONS_<pkgname>
|
||||
|
||||
### Jerarquía de directorios
|
||||
|
||||
|
@ -71,7 +73,7 @@ La configuración el entorno se establece en el archivo `etc/conf`
|
|||
| |- void-packages -> bind mounted from <void-packages>
|
||||
```
|
||||
|
||||
- `masterdir`: directorio master para construir / instalar paquetes como rootfs.
|
||||
- `masterdir`: directorio master para construir / e instalar paquetes como rootfs.
|
||||
|
||||
- `builddir`: directorio donde se descomprimen las fuentes de los paquetes que se van a construir.
|
||||
|
||||
|
@ -90,7 +92,7 @@ La configuración el entorno se establece en el archivo `etc/conf`
|
|||
|
||||
### Consultar la ayuda de `XBPS-SRC`
|
||||
|
||||
Ejecutando `./xbps-src -h` obtenemos una lista con todas las opciones y tagets.
|
||||
Ejecutando `./xbps-src -h` obtenemos una lista con todas las opciones y targets.
|
||||
|
||||
Para construir un paquete ejecutamos el siguiente comando:
|
||||
|
||||
|
@ -110,13 +112,14 @@ $ ./xbps-src -o ~option,~option1 pkg <pkgname>
|
|||
$ ./xbps-src -o option,~option1,~option2 pkg <pkgname>
|
||||
```
|
||||
|
||||
Las opciones de construción de los binarios se puedes mostrar a través de `xbps-query`:
|
||||
Las opciones de construcción de los binarios se pueden mostrar a través de `xbps-query`:
|
||||
|
||||
$ xbps-query -R --property=build-options <pkgname>
|
||||
|
||||
> NOTA: si se ha construido un paquete con opciones personalizadas y queremos mantenerlo así, debemos congelar el paquete con `xbps-pkgdb -m hold <pkgname>`, si existe una actualización del paquete será ignorada. Una vez que el paquete está congelado, la única forma de actualizarlo será explicitarlo manualmente con `xbps-install -u <pkgname>`.
|
||||
|
||||
La lista de opciones de construción de los paquetes está definida en el archivo common/options.description o en la plantilla de cada paquete (template).
|
||||
La lista de opciones de construción de los paquetes está definida en el archivo `common/options.description` o en la plantilla de cada paquete (template).
|
||||
|
||||
|
||||
### Instalar un paquete:
|
||||
|
||||
|
@ -125,9 +128,10 @@ La lista de opciones de construción de los paquetes está definida en el archiv
|
|||
$ xbps-query --repository=hostdir/binpkgs <pkgname>
|
||||
```
|
||||
|
||||
Alternativamente podemos utilizar la herramienta xi, incluida en el paquete xtools, la cual tiene en cuenta el repositorio del directorio de trabajo actual.
|
||||
Alternativamente podemos utilizar la herramienta `xi`, incluida en el paquete `xtools` la cual tiene en cuenta el repositorio del directorio de trabajo actual.
|
||||
|
||||
$ xi <pkgname>
|
||||
|
||||
# xi <pkgname>
|
||||
|
||||
### Reconstruir y reinstalar paquetes locales
|
||||
|
||||
|
@ -135,22 +139,25 @@ Con el parámetro `-f` podemos forzar la reconstrucción y reinstalación de un
|
|||
|
||||
./xbps-src -f pkg <pkgname> && xi -f <pkgname>
|
||||
|
||||
|
||||
### Compilación cruzada para otras arquitecturas.
|
||||
|
||||
Los targets soportados se listan con `./xbps-src -h`. Con el parámetro `-a` explicitamos el target:
|
||||
|
||||
$ ./xbps-src -a <target> pkg <pkgname>
|
||||
|
||||
|
||||
### Construir paquetes nativos para Musl C library desde Glibc:
|
||||
|
||||
Preparamos el nuevo masterdir para Musl:
|
||||
Preparamos el nuevo `masterdir` para Musl:
|
||||
|
||||
$ ./xbps-src -m masterdir-x86_64-musl binary-bootstrap x86_64-musl
|
||||
|
||||
Este nuevo masterdir ya está preparado para construir paquete nativos para Musl:
|
||||
Este nuevo `masterdir` ya está preparado para construir paquete nativos para Musl:
|
||||
|
||||
$ ./xbps-src -m masterdir-x86_64-musl <pkgname>
|
||||
|
||||
|
||||
### Instalar un paquete local *.xbps:
|
||||
|
||||
Añadirlo a un repositorio local, por defecto `/path/void-packages/hostdir/binpkgs`
|
||||
|
@ -160,10 +167,20 @@ Añadirlo a un repositorio local, por defecto `/path/void-packages/hostdir/binpk
|
|||
Instalar un paquete
|
||||
|
||||
```
|
||||
# xbps-install --repository=$PWD <pkgname>
|
||||
# xbps-install --repository /path <pkgname>
|
||||
# xi <pkgname>
|
||||
```
|
||||
|
||||
> NOTA: Solo indicar el nombre del paquete.
|
||||
|
||||
Forma correcta:
|
||||
|
||||
# xbps-install --repository /path/repo/local dwm
|
||||
|
||||
Forma incorrecta
|
||||
|
||||
# xbps-install --repository /path/repo/local dwm-6.3_1.x86_64.xbps
|
||||
|
||||
Para eliminar versiones anteriores de los paquetes en tu repositorio local:
|
||||
|
||||
$ xbps-rindex -r /path/void-packages/hostdir/binpkgs
|
||||
|
@ -172,14 +189,16 @@ Para limpiar el índice del repositorio:
|
|||
|
||||
$ xbps-rindex -c
|
||||
|
||||
### Mantenimiento y limpieza del contedor void-packages:
|
||||
|
||||
### Mantenimiento y limpieza del contenedor void-packages:
|
||||
|
||||
$ ./xbps-src clean-repocache && ./xbps-src clean && ./xbps-src remove-autodeps && ./xbps-src purge-distfiles
|
||||
|
||||
- **clean-repocache**: Elimina paquetes obsoletos de `<hostdir>/repocache`.
|
||||
- **clean**: Elimina dependencias automáticas, limpia `<masterdir>/builddir` y `<masterdir>/destdir`.
|
||||
- **remove-autodeps**: Elimina todas las dependencias de paquetes que se instalaron automáticamente.
|
||||
- **purge-distfiles**: Elimina todos los distfiles obsoletos en `<hostdir>/sources`.
|
||||
- `clean-repocache`: Elimina paquetes obsoletos de `<hostdir>/repocache`.
|
||||
- `clean`: Elimina dependencias automáticas, limpia `<masterdir>/builddir` y `<masterdir>/destdir`.
|
||||
- `remove-autodeps`: Elimina todas las dependencias de paquetes que se instalaron automáticamente.
|
||||
- `purge-distfiles`: Elimina todos los distfiles obsoletos en `<hostdir>/sources`.
|
||||
|
||||
|
||||
### Compilar en RAM
|
||||
|
||||
|
@ -198,9 +217,10 @@ De forma permanente en /etc/fstab, añadiendo lo siguiente:
|
|||
|
||||
A modo de ejemplo vamos a compilar un kernel custom. Con este paquete debemos controlar varias acciones simultáneamente, desde extraer fuentes y configurarlas, hasta aplicar parches personalizados, construir el paquete e intalarlo.
|
||||
|
||||
Void gestiona el kernel de manera diferente, normalmente cuando vamos a compilar un kernel custom estamos acostumbrados a descargar el último tarball desde kernel.org, descompimir, configurar y compilar ... esto no siempre es así, vamos a ver con detalle como es el proceso en Void Linux y como gestionarlo con XBPS-SRC.
|
||||
Void gestiona el kernel de manera diferente, normalmente cuando vamos a compilar un kernel custom estamos acostumbrados a descargar el último tarball desde [kernel.org](https://kernel.org/), descompimir, configurar y compilar ... esto no siempre es así, vamos a ver con detalle cómo es el proceso en Void Linux y cómo gestionarlo con XBPS-SRC.
|
||||
|
||||
Tal y como podemos observar en la plantilla de construcción del kernel, vemos que descarga el tarball y los parches para la versión de punto en curso, es decir, para obtener el último kernel a fecha que escribo este texto, el 5.17.9, baja el tarball de la serie 5.17 y luego todos los parches hasta obtener la versión de punto. Veamos esto con detalle en el template:
|
||||
|
||||
```
|
||||
pkgname=linux5.17
|
||||
version=5.17.9
|
||||
|
@ -210,17 +230,23 @@ distfiles="https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-${version%.*}.tar.
|
|||
...
|
||||
skip_extraction="patch-${version}.xz"
|
||||
```
|
||||
Aquí tenemos la descarga de la versíón del tarball 5.17 (`linux-${version%.*}.tar.xz`) y los parches de la versión 5.17.9 (`patch-${version}.xz`). Es muy importante fijarse y tener en cuenta esto, al igual que el valor de la variable `skip_extraction="patch-${version}.xz"` la cual indica que los parches no serán aplicados con el comando `extract`, por lo que para extraer una fuente completa del kernel, aplicando los parches de la versión de punto, en este caso 5.17.9, debemos emplear `patch`, que extrae la fuente pero no sólo realizando el `fetch` como `extract`, sino que además aplica los parches llegando a la fase `patch`, es un paso más. Veamos un ejemplo:
|
||||
|
||||
Aquí tenemos la descarga de la versíón del tarball 5.17 (`_linux-${version%.*_}.tar.xz`) y los parches de la versión 5.17.9 (`patch-${version}.xz`). Es muy importante fijarse y tener en cuenta esto, al igual que el valor de la variable `skip_extraction="patch-${version}.xz"` la cual indica que los parches no serán aplicados con el comando `extract`, por lo que para extraer una fuente completa del kernel, aplicando los parches de la versión de punto, en este caso 5.17.9, debemos emplear `patch`, que extrae la fuente pero no sólo realizando el `fetch` como `extract`, sino que además aplica los parches llegando a la fase `patch`, es un paso más. Veamos un ejemplo:
|
||||
|
||||
|
||||
#### Extraer las fuentes del kernel:
|
||||
|
||||
- `./xbps-src -I extract linux5.17` => Aquí estamos extrayendo las fuentes del kernel 5.17.
|
||||
- `./xbps-src -I patch linux5.17` => Aquí estamos extrayendo el kernel 5.17 y además los parches de la versión 5.17.9, que será finalmente nuestra fuente.
|
||||
|
||||
NOTA: Con el flag -I va a ignorar las dependencias del paquete, extrayendo únicamente las fuentes del paquete.
|
||||
> NOTA: Con el flag `-I` se ignora descargar las dependencias del paquete, extrayendo únicamente sus respectivas fuentes.
|
||||
|
||||
|
||||
#### Configuración:
|
||||
Para configurar las fuentes del kernel el primer paso sería acceder la directorio temporal de construcción:
|
||||
`cd path/to/void-packages/materdir/buildir/linux5.17`
|
||||
|
||||
Para configurar las fuentes del kernel el primer paso es acceder la directorio temporal de construcción:
|
||||
|
||||
$ cd path/to/void-packages/materdir/buildir/linux5.17
|
||||
|
||||
Ahora podemos aplicar una configuración que ya tuvieramos o realizarla desde cero, os dejo los principales comandos:
|
||||
|
||||
|
@ -237,11 +263,10 @@ Ahora podemos aplicar una configuración que ya tuvieramos o realizarla desde ce
|
|||
- `make tinyconfig`: aplica una configuración mínima, apto para diversión extrema, requiere cierta experiencia, no para empezar.
|
||||
|
||||
|
||||
Una vez configurada la fuente, debemos copiar el archivo de configuración `.config` del directorio:
|
||||
- `void-packages/masterdir/buildir/linux5.17/.config` a
|
||||
- `void-packages/srcpkgs/linux5.17/files/x86_64-dotconfig-custom`
|
||||
Una vez configurada la fuente, debemos copiar el archivo de configuración `.config` del directorio `/path/void-packages/masterdir/buildir/linux5.17/.config` a `/path/void-packages/srcpkgs/linux5.17/files/x86_64-dotconfig-custom`
|
||||
|
||||
El nombre debe ser éste, ya que así está definido en la plantilla donde nos viene a decir que si encuentra el fichero de configuración con éste nombre, aplicará dicha configuración personalizada en el proceso de construcción:
|
||||
|
||||
El nombre debe ser éste, ya que así está definido en la plantilla, donde nos viene a decir que si encuentra el fichero de configuración con éste nombre aplicará dicha configuración personalizada en el proceso de construcción:
|
||||
```
|
||||
...
|
||||
if [ -f ${FILESDIR}/${subarch:-$arch}-dotconfig-custom ]; then
|
||||
|
@ -250,9 +275,11 @@ if [ -f ${FILESDIR}/${subarch:-$arch}-dotconfig-custom ]; then
|
|||
make ${makejobs} ARCH=$arch ${_cross} oldconfig
|
||||
...
|
||||
```
|
||||
|
||||
#### Parches personalizados
|
||||
|
||||
Además de los parches oficiales que ya hemos visto que aplica, podemos añadir parches personalizados a nuestra fuente, los cuales será aplicados automáticamente tras aplicar los parches definidos en la plantilla de construcción. Para ello deberán estar en el subdirecotrio `patches` dentro del directorio del paquete, en este caso `linux5.17`:
|
||||
Además de los parches oficiales que ya hemos visto que aplica, podemos añadir parches personalizados a nuestra fuente los cuales será aplicados automáticamente tras aplicar los parches definidos en la plantilla de construcción. Para ello deberán estar en el subdirecotrio `patches` dentro del directorio del paquete, en este caso `linux5.17`:
|
||||
|
||||
```
|
||||
linux5.17
|
||||
├── files
|
||||
|
@ -268,17 +295,21 @@ linux5.17
|
|||
│ └── more-uarches-for-kernel-5.17+.patch
|
||||
└── template
|
||||
```
|
||||
|
||||
|
||||
#### Construcción e instalación del Kernel
|
||||
|
||||
Llegamos a la etapa final del kernel, donde se va a compilar con todos los parches y configuraciones que se hayan aplicado y posteriormente instalarlo en el sistema. Si utilizamos `Grub` no debemos preocuparnos en ejecutar su actualización, ya que `xbps-src` ya activa los `hooks` necesarios para actualizarlo tras la instalación del kernel en `/boot`.
|
||||
- `$ ./xbps-src pkg linux5.17 && xi linux5.17`
|
||||
Llegamos a la etapa final del kernel donde se va a compilar con todos los parches y configuraciones que se hayan aplicado y posteriormente instalarlo en el sistema. Si utilizamos `Grub` no debemos preocuparnos en ejecutar su actualización, ya que `xbps-src` se encarga de activar los `hooks` necesarios para actualizarlo tras la instalación del kernel en `/boot`.
|
||||
|
||||
NOTA: para recompilar y/o reinstalar la misma versión de un paquete se debe forzar, mediante el flag `-f`:
|
||||
- `$ ./xbps-src -f pkg linux5.17 && xi -f linux5.17`
|
||||
$ ./xbps-src pkg linux5.17 && xi linux5.17
|
||||
|
||||
> NOTA: para recompilar y/o reinstalar la misma versión de un paquete se debe forzar, mediante el flag `-f`
|
||||
|
||||
$ ./xbps-src -f pkg linux5.17 && xi -f linux5.17
|
||||
|
||||
Llegados a este punto, con nuestra configuración ya depurada, podemos automatizar el proceso de actualización del kernel con una serie de comandos encadenados para una mayor comodidad:
|
||||
|
||||
`sed -i 's/5.17.7/5.17.8/g' srcpkgs/linux5.17/template && xgensum -i linux5.17 &&./xbps-src pkg linux5.17 && xi linux5.17`
|
||||
sed -i 's/5.17.7/5.17.8/g' srcpkgs/linux5.17/template && xgensum -i linux5.17 &&./xbps-src pkg linux5.17 && xi linux5.17
|
||||
|
||||
- `sed -i` nos cambiará la versión en la plantilla, debemos especificar el valor actual y el nuevo tal y como se indica en el ejemplo.
|
||||
- `xgensum -i` nos actualizará la suma de verficación de la nueva versión del paquete.
|
||||
|
|
Loading…
Reference in New Issue