[Git][venenux/alpine-espanol][master] finalizacion de entorno de APK para usuarios, infrestructura y enmpaquetamiento

0 views
Skip to first unread message

VeGNUli (@vegnuli)

unread,
Mar 24, 2024, 3:01:49 AMMar 24
to venenux...@googlegroups.com

VeGNUli pushed to branch master at venenux / alpine-espanol

Commits:

  • 31c083c7
    by general at 2024-03-24T02:59:56-04:00
    finalizacion de entorno de APK para usuarios, infrestructura y enmpaquetamiento
    
    * separada las guia en dos versiones, una ampliada y una reducida
    * muchos comandos faltantes que sodomon no explico
    * publicacion de repos en servidor web agregado
    * tips de generacion de paquetes local o internet diferenciada
    

4 changed files:

Changes:

  • documentos/README.md
    ... ... @@ -17,8 +17,9 @@ en los repositorios de alpine y si estan en comunidad mucho mas desde antes.
    17 17
     
    
    18 18
     ## Documentos desarrollo:
    
    19 19
     
    
    20
    -* Entorno de desarrollo separado [alpine-packaging-chroot.md](alpine-packaging-chroot.md), 
    
    21
    -le permite usar alpine en cualqueir otro linux sin instalar paquetes de sobra o sin instalar en otra particion.
    
    20
    +* Entorno de desarrollo separado [alpine-paquetes-entorno.md](alpine-paquetes-entorno.md), 
    
    21
    +le permite entender, desarrollar y crear paquetes de programas para el formato de 
    
    22
    +manejo de software en alpine linux llamado APK!
    
    22 23
     
    
    23 24
     ## documentos servicios estandar
    
    24 25
     
    

  • documentos/alpine-paquetes-entorno.md
    1
    +# Alpine y sistema de paquetamiento
    
    2
    +
    
    3
    +El procedimiento implica tener cuatro cosas en tu linux alpine, que 
    
    4
    +son el navegador web, el programa git y las utilidades de compilacion.
    
    5
    +
    
    6
    +Este documento se divira en dos partes, la primera la informacion teorica, 
    
    7
    +y la segunda la forma practica y configuraciones que debera realizar.
    
    8
    +
    
    9
    +Una version reducida y directa de este documento esta en la guia
    
    10
    +[../recetas/alpine-recetas-hacer-paquetes-alpine-localmente.md](../recetas/alpine-recetas-hacer-paquetes-alpine-localmente.md)
    
    11
    +
    
    12
    +- [1 - Teoria - Sistema de paqueteria alpine linux](#1---teoria---sistema-de-paqueteria-alpine-linux)
    
    13
    +    - [empaquetar](#empaquetar)
    
    14
    +    - [formato APK](#formato-apk)
    
    15
    +    - [compilacion](#compilacion)
    
    16
    +    - [repositorios](#repositorios)
    
    17
    +    - [manejador de paquetes](#manejador-de-paquetes)
    
    18
    +- [2 - Practica - Hacer paquetes y repositorios](#2---practica---hacer-paquetes-y-repositorios)
    
    19
    +    - [Instalacion de los programas necesarios](#instalacion-de-los-programas-necesarios)
    
    20
    +    - [Creacion del usuario y entorno abuild](#creacion-del-usuario-y-entorno-abuild)
    
    21
    +    - [Iniciando sesion y configurando el entorno](#iniciando-sesion-y-configurando-el-entorno)
    
    22
    +    - [Ejercicio 1 crear un paquete nuevo con internet](#ejercicio-1-crear-un-paquete-nuevo-con-internet)
    
    23
    +    - [Ejercicio 2 crear un paquete nuevo con las fuentes local](#ejercicio-2-crear-un-paquete-nuevo-con-las-fuentes-local)
    
    24
    +    - [Generacion automatica de mi repositorio](#generacion-automatica-de-mi-repositorio)
    
    25
    +- [Anexos ](#anexos-)
    
    26
    +    - [Como se creaban los APKBUILD](#como-se-creaban-los-apkbuild)
    
    27
    +    - [sobre abuild-keygen](#sobre-abuild-keygen)
    
    28
    +    - [Generacion manual de repositorio](#generacion-manual-de-repositorio)
    
    29
    +- [mas informacion](#mas-informacion)
    
    30
    +- [LICENSE](#license)
    
    31
    +
    
    32
    +
    
    33
    +## 1 - Teoria - Sistema de paqueteria alpine linux
    
    34
    +
    
    35
    +El **sistema de paqueteria** de alpine consta de dos lados, la **fabricacion** 
    
    36
    +(empaquetar y compilar) y la **publicacion** (los repositorios). El sistema 
    
    37
    +de paqueteria **en realidad es enteramente usando bash**.
    
    38
    +
    
    39
    +#### empaquetar
    
    40
    +
    
    41
    +Se compilan programas usando versiones especificas, estos se comprimen en 
    
    42
    +archivos tar firmados digitalmente, se les agrega metadatos de informacion 
    
    43
    +que conteine las dependencias y los archivos de configuracion. A este 
    
    44
    +resultado se le denomina **formato de paquetes APK**.
    
    45
    +
    
    46
    +#### formato APK
    
    47
    +
    
    48
    +**APK** es el formato llamado "a-packs", su estructura consta de dos partes: 
    
    49
    +
    
    50
    +* **.PKGINFO** el archivo que contiene la metadata de informacion (la cual no es 
    
    51
    +mucha, por lo que es hackeable) por ejemplo el paquete "bash-4.0-r3" en la info 
    
    52
    +solo estara la parte "4.0" y el "r3" esta en el normbre del archivo del paquete. 
    
    53
    +Este archivo contiene tambien la arquitectura, el comit del repo alpine donde 
    
    54
    +se realizo el paquete (lamentablemente enlazado a aports), asi como la licensia 
    
    55
    +y la arquitectura de la compilacion de los archivos.
    
    56
    +* **TAR** el archivo que contiene el software compilado empaquetado, es un 
    
    57
    +archivo tar pero cadicionalmente se comprime, la extension/tipo compresion no 
    
    58
    +es especifica y puede variar, adentro esta la estructura exacta de donde estaria 
    
    59
    +colocado cada uno de los archivos en el sistema operativo. Solo estaran incluidos 
    
    60
    +los archivos relativos a la compilacion de lo que indica el archivo de informacion 
    
    61
    +de metadata descrito anteriormente.
    
    62
    +
    
    63
    +#### compilacion
    
    64
    +
    
    65
    +**APKBUILDS** es el formato y archivo que define como se creara los paquetes, 
    
    66
    +este **es simplemente un archivo bash que es usado en modo de inclusion**, 
    
    67
    +este es el unico necesario y todo lo demas es referenciado (local o desde internet) 
    
    68
    +desde direcciones en este. Este archivo es en realidad una secuencia de reglas, 
    
    69
    +que se ejecutan solo si estan depsues de uan cabecera, esta informacion tampoco 
    
    70
    +estan en la (ya muy porqueria) wiki oficial de alpine, sino que solo describen 
    
    71
    +los elementos tecnicos que lo caracterizan.
    
    72
    +
    
    73
    +La **estructura** una **cabecera informativa** (la base para generar el `.PKGINFO`, 
    
    74
    +son meras variables) y **algunas de funciones** (que se modifican segun el 
    
    75
    +software que se va empaquetar) haciendo de **secuencia de reglas**.
    
    76
    +
    
    77
    +La **secuencia de reglas**: revision (`sanitycheck() -> clean()-> fetch() -> verify()`) 
    
    78
    +depsues de corroborar se procede a desempaquetar y preparar la estructura del 
    
    79
    +softwaare segun las reglas (`-> unpack() -> prepare() -> mkusers()`), para poder 
    
    80
    +despues compenzar a compilar el programa (`-> build() -> check()`) si este compila 
    
    81
    +entonces procede a crear el archivo APK segun las indicaciones del APKBUILD y 
    
    82
    +si hay detalles extra (`-> package() -> subpackages() -> apk -> cleanup()`).
    
    83
    +
    
    84
    +La **aplicacion de empaquetado** se llama `abuild` y se encarga de ejecutar esta 
    
    85
    +secuencia de reglas y sus funcionalidades..
    
    86
    +
    
    87
    +Estos paquetes APK generados despues se colocan en **repositorios de paquetes**.
    
    88
    +
    
    89
    +#### repositorios
    
    90
    +
    
    91
    +Los paquetes se **agregan en un unico directorio** (sin organizacion, todos 
    
    92
    +directos en la raiz del directorio), y se aniade al mismo un **archivo indice**, 
    
    93
    +por lo que **cualquier directorio con una coleccion de archivos APK y un indice 
    
    94
    +es un repositorio alpine.**
    
    95
    +
    
    96
    +El **archivo indice** es llamado `APKINDEX` y contiene la misma informacion que 
    
    97
    +la que esta en `.PKGINFO` pero de todos los paquetes juntos, separadas por una 
    
    98
    +linea extra en blanco. Este archivo siempre esta comprimido generalmente tendra 
    
    99
    +el nombre de `APKINDEX.tar.gz`
    
    100
    +
    
    101
    +Los directorios del repositorio indican una **rama de paquetes**, alpine desde 
    
    102
    +la version 3 tiene dos ramas, la **main** y la **community**, los repositorios 
    
    103
    +tiene estos dos directorios y cada uno tiene todos los paquetes sin ningun 
    
    104
    +subdirectorio. En cada rama directorio esta un archivo indice `APKINDEX` compreso.
    
    105
    +
    
    106
    +En la actualidad cuando se construye localmente un paquete, un repositorio 
    
    107
    +se genera y se crea su indice autoatico en su home. Remitase a la configuracion 
    
    108
    +de `abuild` en la segunda seccion en la parte de construccion y repositorio 
    
    109
    +de paquetes.
    
    110
    +
    
    111
    +#### manejador de paquetes
    
    112
    +
    
    113
    +Para poder emplear estos se utiliza la utilidad de manejo de paquetes **apk** 
    
    114
    +el cual tiene el mismo nombre que el formato y que el tipo de paquetes.
    
    115
    +Para mayor informacion de como utilizarlo lea la pagina wiki [apk-tool.md](apk-tool.md)
    
    116
    +
    
    117
    +## 2 - Practica - Hacer paquetes y repositorios
    
    118
    +
    
    119
    +Aqui se aprendera crear y hacer un repositorio de `APKBUILD`s (recetas) 
    
    120
    +para hacer paquetes para [Alpine linux](../README.md)
    
    121
    +tambien para configurar `abuild` para que puedas crear los paquetes 
    
    122
    +a partir de los `APKBUILD`
    
    123
    +
    
    124
    +Una vez esto podras ejecutar estas recetas (los `APKBUILD`s) y entonces despues 
    
    125
    +publicar (en los `repositorios`) lo producido (los paquetes `apk`s binarios).
    
    126
    +
    
    127
    +**ADVERTENCIA** los "alpinistas" son fanaticos de no colocar nada, lo siendo, 
    
    128
    +aqui se va trabajar con las herramentas correctas, asi que instale lo que se 
    
    129
    +indica aqui! Que le quede claro.
    
    130
    +
    
    131
    +- [Instalacion de los programas necesarios](#instalacion-de-los-programas-necesarios)
    
    132
    +- [Creacion del usuario y entorno abuild](#creacion-del-usuario-y-entorno-abuild)
    
    133
    +- [Iniciando sesion y configurando el entorno](#iniciando-sesion-y-configurando-el-entorno)
    
    134
    +- [Ejercicio 1 crear un paquete nuevo con internet](#ejercicio-1-crear-un-paquete-nuevo-con-internet)
    
    135
    +- [Ejercicio 2 crear un paquete nuevo con las fuentes local](#ejercicio-2-crear-un-paquete-nuevo-con-las-fuentes-local)
    
    136
    +- [Generacion automatica de mi repositorio](#generacion-automatica-de-mi-repositorio)
    
    137
    +
    
    138
    +Cada linea es un comando que puede ejecutarse, si hay varias lineas seguidas, 
    
    139
    +se puede pegar todas estas lineas juntas en la consola y los comandos se ejecutaran
    
    140
    +pero, cada dos lineas en blanco significa que debe esperar a que termine el 
    
    141
    +comando para ejecutar el siguente, por ende si hay dos lineas separadas por una 
    
    142
    +linea en blanco o vacia, significa que debe pegar la primera y depsues la segunda 
    
    143
    +solo si la primera ya se ejecuto.
    
    144
    +
    
    145
    +### Instalacion de los programas necesarios
    
    146
    +
    
    147
    +Primero necesitamos el entorno base de empaquetamiento o desarrollo, implica:
    
    148
    +
    
    149
    +* utilidades base del sistema, entre ellas bash aunque no lo use y archivadores
    
    150
    +* programas de trabajo, entre ellos abuild, git, y gnu/compilers.
    
    151
    +
    
    152
    +```bash
    
    153
    +apk add shadow shadow-doc shadow-uidmap bash bash-doc bash-dev \
    
    154
    + doas doas-doc doas-sudo-shim coreutils coreutils-doc tree tree-doc \
    
    155
    + man-db man-pages zlib zlib-doc wget wget-doc curl curl-doc aria2 aria2-doc \
    
    156
    + sed sed-doc lsof lsof-doc less less-doc groff groff-doc gawk gawk-doc \
    
    157
    + zip zip-doc p7zip p7zip-doc xz xz-doc tar tar-doc file file-doc
    
    158
    + 
    
    159
    +apk add abuild abuild-rootbld abuild-doc build-base gcc-doc make-doc patch-doc \
    
    160
    + arch-install-scripts arch-install-scripts-doc lzip-doc tar-doc zlib-doc \
    
    161
    + apk-tools-doc alpine-sdk git git-doc
    
    162
    +```
    
    163
    +
    
    164
    +Tenga en claro, que entre los comandos, se agregan tambien los paquetes de 
    
    165
    +las paginas de manual ( los `xxx-doc` y el `man-db` y `man-pages`), esto es 
    
    166
    +imperativo porque lo va necesitar para corroborar las opciones de los programas 
    
    167
    +asi como datos del mismo, por ejemplo inclusion de ejemplos de los mismos.
    
    168
    +
    
    169
    +Algunos paquetes se incluyen **para evitar fallas en el software empaquetar**, 
    
    170
    +especialmente si ud no ha usado alpine antes o es la primera vez que empaquetara, 
    
    171
    +ya que todo programa que empaquete no tendra jamas en cuenta a la distro alpine.
    
    172
    +
    
    173
    +### Creacion del usuario y entorno abuild
    
    174
    +
    
    175
    +El entorno de creacion necesita realizarse sea con un usuario dedicado o desde 
    
    176
    +su usuario de uso normal, en VenenuX alpine no se permiten usuarios personalizados 
    
    177
    +ya que la diversidad que caracteriza linux es la misma que causa sus problemas, 
    
    178
    +usando el mismo usuario estandarizado todos nuestros scripts funcionaran.
    
    179
    +
    
    180
    +El entorno se realiza sin ser administrador (el usuario `root`) dado que si estos 
    
    181
    +programas que empaqueta realizan una instruccion asumiendo la maquina actual, 
    
    182
    +modificara su sistema con configuraciones no adecuadas o incluso las exportara 
    
    183
    +a el paquete que creara y publicara.
    
    184
    +
    
    185
    +Todos los comandos estan dise;ados de forma que puede siempre ejecutarlos asi 
    
    186
    +ya hayan realizado su funcion, no afectara volver ejecutarlos.
    
    187
    +
    
    188
    +* crear el usuario `general`, si ya esta creado este comando no afectara.
    
    189
    +* configurar el `doas` para que pueda ejecutar cualquier comando con su clave
    
    190
    +* agregar el usuario a los grupos para que funcione y permita manejar su entorno
    
    191
    +
    
    192
    +```bash
    
    193
    +useradd -m -U -c "" -G abuild,wheel,input,disk,floppy,cdrom,dialout,audio,video,lp,netdev,games,users,ping general
    
    194
    +
    
    195
    +cat >  /etc/doas.d/general.conf << EOF
    
    196
    +permit keepenv :general
    
    197
    +EOF
    
    198
    +
    
    199
    +for u in $(ls /home); do for g in abuild disk lp floppy audio cdrom dialout video lp netdev games users ping; do addgroup $u $g; done;done
    
    200
    +```
    
    201
    +
    
    202
    +El usuario `general` esta incluidos en distintos grupos para poder acceder a 
    
    203
    +discos, sonido, coneciones, video, jugar, y realizar operaciones de red. Note 
    
    204
    +que **el primer grupo se llama `abuild`** que es creado por cualqueir paquete de 
    
    205
    +alpine que implique trabajar con compilacion desde `abuild`. Si el usuario no 
    
    206
    +esta agregado a dicho grupo no podra trabajar completamente creando paquetes.
    
    207
    +
    
    208
    +Ahora cierre la sesión de la cuenta de root, e inicie sesión como `general`. 
    
    209
    +
    
    210
    +### Iniciando sesion y configurando el entorno
    
    211
    +
    
    212
    +A partir de aquí todo se debera hacer en una cuenta de usuario `general`, y las 
    
    213
    +operaciones que requieren privilegios de superusuario se pueden hacer con el 
    
    214
    +prefijo `doas` antes de cualqueir comando que desee que se ejecute. Ojo, solo 
    
    215
    +ejecute y prefija con el `doas` cuando sea necesario.
    
    216
    +
    
    217
    +* crear el directorio de trabajo estandar y asignar los permisos adecuados
    
    218
    +* configurar el tipo de integracion de cambios de git
    
    219
    +* configurar la capacidad de datos que se suben con git
    
    220
    +* Crear el directorio donde el proceso de compilacion reusara los archivos descargados
    
    221
    +* configurar abuild para que compile maxima optimizado y use las rutas correctas
    
    222
    +* Asignar permisos para correcta ejecucion del entorno en las rutas correctas
    
    223
    +* configurar la indicacion del usuario empaquetador en el git y el abuild
    
    224
    +* generar la llave privada para firmar los paquetes con una firma digital publica
    
    225
    +
    
    226
    +```
    
    227
    +mkdir -m 775 -p /home/general/Devel
    
    228
    +chown general:abuild /home/general/Devel
    
    229
    +
    
    230
    +git config --global pull.rebase=true
    
    231
    +git config --global ssh.postBuffer 2000000000
    
    232
    +git config --global http.postBuffer 2000000000
    
    233
    +git config --global http.lowSpeedLimit 0
    
    234
    +git config --global http.lowSpeedTime 999999
    
    235
    +git config --global https.postBuffer 2000000000
    
    236
    +git config --global https.lowSpeedLimit 0
    
    237
    +git config --global https.lowSpeedTime 999999
    
    238
    +
    
    239
    +doas mkdir -m 775 -p /var/cache/distfiles
    
    240
    +doas chgrp abuild /var/cache/distfiles
    
    241
    +doas sed -i 's|export CFLAGS\s*=.*|export CFLAGS="-O2"|g' /etc/abuild.conf
    
    242
    +doas sed -i 's|.*USE_CCACHE\s*=.*|USE_CCACHE=1|g' /etc/abuild.conf
    
    243
    +doas sed -i 's|SRCDEST\s*=.*|SRCDEST=/var/cache/distfiles|g' /etc/abuild.conf
    
    244
    +doas mkdir -m 775 -p /home/general/Devel/packages
    
    245
    +doas chown general:abuild /home/general/Devel
    
    246
    +doas sed -i 's|REPODEST\s*=.*|REPODEST=\$HOME/Devel/packages/|g' /etc/abuild.conf
    
    247
    +
    
    248
    +git config --global user.email "gen...@venenux.xxx"
    
    249
    +git config --global user.name "generalvenenux"
    
    250
    +doas sed -i 's|.*PACKAGER\s*=.*|PACKAGER="generalvenenux <gen...@venenux.xxx>"|g' /etc/abuild.conf
    
    251
    +doas sed -i 's|.*MAINTAINER\s*=.*|MAINTAINER="\$PACKAGER"|g' /etc/abuild.conf
    
    252
    +
    
    253
    +abuild-keygen -a -i -n
    
    254
    +```
    
    255
    +
    
    256
    +Notese que cada apartado de la lista anterior tiene un grupo de comandos que 
    
    257
    +estan separados por una linea vacia, significa que no solo explica cada grupo 
    
    258
    +y que hace sino que tambien indica que debe esperar que este grupo de comandos 
    
    259
    +se hayan ejecutado correctamente antes de "pegar" el siguente lote a ejecutar.
    
    260
    +
    
    261
    +### Ejercicio 1 crear un paquete nuevo con internet
    
    262
    +
    
    263
    +Esto es para cuando el programa no esta aun empaquetado en alpine, este no existe 
    
    264
    +y lo piensa empaquetar dede internet para alpine. Ejecute los siguientes 
    
    265
    +pasos descritos con sus comandos a continuacion:
    
    266
    +
    
    267
    +* Crear un directorio de trabajo y cambiarse a dicho directorio
    
    268
    +* Crear el archivo APKBUILD con la ayuda del sistema de desarrollo abuild
    
    269
    +    * El parametro `-f` asegura se creen archivos frescos para alpine empaquetar
    
    270
    +    * El parametro `-d` le asigna la descripcion `crea dialogos segun el entorno`
    
    271
    +    * El parametro `-n` le coloca el nombre del paquete a `easybashgui`
    
    272
    +    * El parametro `-l` la ha asignado la licencia `MIT` (para el APKBUILD solo)
    
    273
    +    * Se usa `-a` porque este programa emplea Makefile, asi generara las isntrucciones
    
    274
    +    * el ultimo parametro es la orden de descarga directa del programa empaquetar
    
    275
    +* Se creara el directorio con el nombre del paquete
    
    276
    +    * Internamente tendra el archivo `APKBUILD`
    
    277
    +    * Las fuentes del programa estaran descargadas en `/var/cache/distfiles`
    
    278
    +    * Despues edite el archivo `APKBUILD` segun las opciones, para que empaquete
    
    279
    +    * Se creara unos directorios, donde se realizara la compilacion
    
    280
    +    * El archivo `APKBUILD` no siempre detecta bien la url que se le paso de fuentes
    
    281
    +* Despues de ajustar se actualiza en checksum del `APKBUILD` para generarlo
    
    282
    +* Entonces ya se puede mandar a compilar y crear el paquete APK
    
    283
    +    * El resultado estara en el directorio `/home/general/Devel/packages/`
    
    284
    +
    
    285
    +```bash
    
    286
    +mkdir -p /home/general/Devel/alpine-apkbuilds/main
    
    287
    +
    
    288
    +cd /home/general/Devel/alpine-apkbuilds/main
    
    289
    +
    
    290
    +newapkbuild -f -d "crea dialogos segun el entorno" -n easybashgui -l MIT -a https://github.com/BashGui/easybashgui/archive/refs/tags/13.0.0.tar.gz
    
    291
    +
    
    292
    +cd /home/general/Devel/alpine-apkbuilds/main/easybashgui
    
    293
    +echo "aqui editar los archivos presentes y salvar"
    
    294
    +
    
    295
    +abuild checksum
    
    296
    +
    
    297
    +abuild -r
    
    298
    +```
    
    299
    +
    
    300
    +### Ejercicio 2 crear un paquete nuevo con las fuentes local
    
    301
    +
    
    302
    +Esto es para cuando el programa no esta aun empaquetado en alpine, este no existe 
    
    303
    +y usted lo tiene local o quiere la fuentes localmente. Ejecute los siguientes 
    
    304
    +pasos descritos con sus comandos a continuacion:
    
    305
    +
    
    306
    +* Crear un directorio de trabajo y cambiarse a dicho directorio
    
    307
    +* Crear el archivo APKBUILD con la ayuda del sistema de desarrollo abuild
    
    308
    +    * El parametro `-f` asegura se creen archivos frescos para alpine empaquetar
    
    309
    +    * El parametro `-d` le asigna la descripcion `crea dialogos segun el entorno`
    
    310
    +    * El parametro `-n` le coloca el nombre del paquete a `easybashgui`
    
    311
    +    * El parametro `-l` la ha asignado la licencia `MIT` (para el APKBUILD solo)
    
    312
    +    * Se usa `-a` porque este programa emplea Makefile, asi generara las isntrucciones
    
    313
    +    * el ultimo parametro es la orden de descarga directa del programa empaquetar
    
    314
    +* Se creara el directorio con el nombre del paquete
    
    315
    +    * Internamente tendra el archivo `APKBUILD`
    
    316
    +    * Descargar manualmente las fuentes en el directorio recien creado
    
    317
    +    * Despues edite el archivo `APKBUILD` segun las opciones, para que empaquete
    
    318
    +    * El archivo `APKBUILD` debe decirle que la fuente esta all mismo sin http 
    
    319
    +* Despues de ajustar se actualiza en checksum del `APKBUILD` para generarlo
    
    320
    +* Entonces ya se puede mandar a compilar y crear el paquete APK
    
    321
    +    * El resultado estara en el directorio `/home/general/Devel/packages/`
    
    322
    +
    
    323
    +```bash
    
    324
    +mkdir -p /home/general/Devel/alpine-apkbuilds/main
    
    325
    +
    
    326
    +cd /home/general/Devel/alpine-apkbuilds/main
    
    327
    +
    
    328
    +newapkbuild -f -d "crea dialogos segun el entorno" -n easybashgui -l MIT -c easybashgui-13.0.0
    
    329
    +
    
    330
    +cd /home/general/Devel/alpine-apkbuilds/main/easybashgui
    
    331
    +aria2c -o easybashgui-13.0.0.tar.gz https://github.com/BashGui/easybashgui/archive/refs/tags/13.0.0.tar.gz
    
    332
    +echo "aqui editar los archivos presentes y salvar"
    
    333
    +
    
    334
    +abuild checksum
    
    335
    +
    
    336
    +abuild -r
    
    337
    +```
    
    338
    +
    
    339
    +### Generacion automatica de mi repositorio
    
    340
    +
    
    341
    +Despues de crear su paquete nuevo existosamente si se compilo, el nuevo binario 
    
    342
    +estara en `/home/general/Devel/packages/main`, pero ojo se creara un directorio 
    
    343
    +por cada arquitectura, siendo estos `x86`, `x86_64`, `armv7` etc
    
    344
    +
    
    345
    +El archivo indice `APKINDEX.tar.gz` es actualizado y firmado automatico, 
    
    346
    +y este repositorio puede ser expuesto via web con apache o lighttp, pero 
    
    347
    +no directamente el directorio, sino empleando aliasing:
    
    348
    +
    
    349
    +Caso apache2:
    
    350
    +
    
    351
    +```
    
    352
    +Alias /packages /home/general/Devel/packages/
    
    353
    +<Directory /home/general/Devel/packages/>
    
    354
    +    Require all granted
    
    355
    +</Directory>
    
    356
    +```
    
    357
    +
    
    358
    +Caso lighttpd
    
    359
    +
    
    360
    +```
    
    361
    +alias.url += (
    
    362
    +     "/packages/"	    =>    "/home/general/Devel/packages/"
    
    363
    +)
    
    364
    +$HTTP["url"] =~ "^/packages/" {
    
    365
    +    dir-listing.activate = "enable"
    
    366
    +}
    
    367
    +EOF
    
    368
    +```
    
    369
    +
    
    370
    +## Anexos 
    
    371
    +
    
    372
    +### Como se creaban los APKBUILD
    
    373
    +
    
    374
    +En sistemas Alpine mas antiguos, `abuild -c -n easibashgui` era la forma de 
    
    375
    +crear archivos `APKBUILD`. El `easybashgui` era un parámetro de la opción `-n`, 
    
    376
    +por lo que el orden de `-c` y `-n` importaba.
    
    377
    +
    
    378
    +### sobre abuild-keygen
    
    379
    +
    
    380
    +Como anecdota, el comando `abuild-keygen` es una evolucion que en antiguas 
    
    381
    +versiones habria que hacer a mano asi:
    
    382
    +
    
    383
    +```
    
    384
    +openssl genrsa -out /home/general/.abuild/gen...@venenux.xxx.key.rsa 2048
    
    385
    +openssl rsa -in /home/general/Devel/gen...@venenux.xxx.key.rsa -pubout -out /etc/apk/keys/gen...@venenux.xxx.key.pub
    
    386
    +cat > /etc/abuild.conf << EOF
    
    387
    +PACKAGER_PRIVKEY="/home/general/.abuild/gen...@venenux.xxx.key.rsa"
    
    388
    +EOF
    
    389
    +```
    
    390
    +
    
    391
    +### Generacion manual de repositorio
    
    392
    +
    
    393
    +Puede que el paquete ya existe solo en binario, habra que agregar a mano, por 
    
    394
    +ende debe crear la rama y la arquitecturan dentro de el directorio de paquetes.
    
    395
    +
    
    396
    +Nuestro repositorio ha sido configurado en `/home/general/Devel/packages/main`, 
    
    397
    +pero ojo se creara un directorio por cada arquitectura, siendo estos `x86`, 
    
    398
    +`x86_64`, `armv7` etc, dentro de este.
    
    399
    +
    
    400
    +Despues colocar el paquete dentro del directorio de la arquitectura, si el 
    
    401
    +paquete es un script o no depende de arquitectura, colocarlo en todos los 
    
    402
    +directorios de arquitectura.
    
    403
    +
    
    404
    +Finalmente se crea el indice sin firma y despues se firma manualmente.
    
    405
    +
    
    406
    +* se crea un directorio de paquetes y dentro uno para cada arquitectura
    
    407
    +* se descarga un binario, aqui uno ficticio
    
    408
    +* se crea y agrega el mismo en el repositorio de paquetes en su arquitectura
    
    409
    +* se genera el indice de paquetes listando los APKs del directorio
    
    410
    +* se copia la llave sin firmar para que ofrezca los indices
    
    411
    +
    
    412
    +```
    
    413
    +mkdir -p /home/general/Devel/packages/main/x86
    
    414
    +
    
    415
    +cd /home/general/Devel/packages/main/x86
    
    416
    +
    
    417
    +wget https://www.google.com/alpinepackage-1-1.apk
    
    418
    +
    
    419
    +apk index -o /home/general/Devel/packages/main/x86/APKINDEX.unsigned.tar.gz /home/general/Devel/packages/main/x86/*.apk
    
    420
    +
    
    421
    +cp /home/general/Devel/packages/main/x86/APKINDEX.unsigned.tar.gz /home/general/Devel/packages/main/x86/APKINDEX.tar.gz
    
    422
    +```
    
    423
    +
    
    424
    +Estos paquetes deberan ser instalado o indicados usando `--allow-untrusted` en 
    
    425
    +el comando `apk`, tanto para la accion `update` asi como para instalar.
    
    426
    +
    
    427
    +Para firma el repositorio debe haber ejecutado todos los pasos de la configuracion 
    
    428
    +mencionados en la seccion 2 de este documento, y despues de tener las llaves 
    
    429
    +tanto publica como la privada poder firmarlos asi:
    
    430
    +
    
    431
    +```
    
    432
    +abuild-sign -k /home/general/.abuild/gen...@venenux.xxx-5629d7e6.rsa /home/general/Devel/packages/main/x86/APKINDEX.tar.gz
    
    433
    +```
    
    434
    +
    
    435
    +# mas informacion
    
    436
    +
    
    437
    +- Author
    
    438
    +  - Sodomon as https://t.me/alpine_linux_espanol/26413
    
    439
    +- 🗯 IRC
    
    440
    +  - 💬 `##alpine_telegram_english` (roto)
    
    441
    +- 📱 Telegram https://t.me/alpine_linux
    
    442
    +  - 🇨🇴 https://t.me/alpine_linux_espanol
    
    443
    +  - 📡 https://t.me/latam_programadores
    
    444
    +- Matrix
    
    445
    +  - 👥 https://matrix.to/#/#alpine-linux-espanol:matrix.org
    
    446
    +
    
    447
    +# LICENSE
    
    448
    +
    
    449
    +**CC BY-NC-SA** Sodomon 2020

  • recetas/alpine-recetas-hacer-paquetes-alpine-localmente.md
    1
    -Aqui se aprendera crear y hacer un repositorio de `APKBUILD` (recetas) 
    
    2
    -para hacer paquetes para [Alpine linux](../README.md)
    
    3
    -tambien para configurar `abuild` para que puedas crear los paquetes 
    
    4
    -a partir de los `APKBUILD`
    
    5
    -
    
    6
    -### Como instalar abuild
    
    7
    -
    
    8
    -Para hacer los paquetes necesitaremos abuild intalado
    
    9
    -abriremos una terminal y ejecutaremos el comando ,`doas apk add abuild`, debe tener configurado `doas`
    
    1
    +# Alpine y sistema de paquetamiento
    
    2
    +
    
    3
    +Este documento instruye como construir paquetes para alpine linux, 
    
    4
    +si desea amplia la informacion esta guia esta igual pero con explicaciones 
    
    5
    +en la seccion de documentos en [../documentos/alpine-paquetes-entorno.md](../documentos/alpine-paquetes-entorno.md).
    
    6
    +
    
    7
    +- [Instalacion y usuario del entorno abuild](#instalacion-y-usuario-del-entorno-abuild)
    
    8
    +- [Creacion del usuario y entorno abuild](#creacion-del-usuario-y-entorno-abuild)
    
    9
    +- [Iniciando sesion y configurando el entorno](#iniciando-sesion-y-configurando-el-entorno)
    
    10
    +- [Crear un paquete nuevo con internet](#crear-un-paquete-nuevo-con-internet)
    
    11
    +- [Mas informacion](#mas-informacion)
    
    12
    +
    
    13
    +1. Cada linea es un comando que puede ejecutarse, si hay varias lineas seguidas, 
    
    14
    +se puede pegar todas estas lineas juntas en la consola y los comandos se ejecutaran
    
    15
    +pero, cada dos lineas en blanco significa que debe esperar a que termine el 
    
    16
    +comando para ejecutar el siguente, por ende si hay dos lineas separadas por una 
    
    17
    +linea en blanco o vacia, significa que debe pegar la primera y depsues la segunda 
    
    18
    +solo si la primera ya se ejecuto.
    
    19
    +2. Todos los comandos estan diseniados de forma que puede siempre ejecutarlos asi 
    
    20
    +ya hayan realizado su funcion, no afectara volver ejecutarlos.
    
    21
    +3. Notese que cada apartado de las listas tiene un grupo de comandos que 
    
    22
    +estan separados por una linea vacia, significa que no solo explica cada grupo 
    
    23
    +y que hace sino que tambien indica que debe esperar que este grupo de comandos 
    
    24
    +se hayan ejecutado correctamente antes de "pegar" el siguente lote a ejecutar.
    
    25
    +
    
    26
    +
    
    27
    +### Instalacion y usuario del entorno abuild
    
    10 28
     
    
    11 29
     ```bash
    
    12
    -doas apk add abuild
    
    30
    +apk add shadow shadow-doc shadow-uidmap bash bash-doc bash-dev \
    
    31
    + doas doas-doc doas-sudo-shim coreutils coreutils-doc tree tree-doc \
    
    32
    + man-db man-pages zlib zlib-doc wget wget-doc curl curl-doc aria2 aria2-doc \
    
    33
    + sed sed-doc lsof lsof-doc less less-doc groff groff-doc gawk gawk-doc \
    
    34
    + zip zip-doc p7zip p7zip-doc xz xz-doc tar tar-doc file file-doc
    
    35
    + 
    
    36
    +apk add abuild abuild-rootbld abuild-doc build-base gcc-doc make-doc patch-doc \
    
    37
    + arch-install-scripts arch-install-scripts-doc lzip-doc tar-doc zlib-doc \
    
    38
    + apk-tools-doc alpine-sdk git git-doc
    
    13 39
     ```
    
    14 40
     
    
    15
    -**para hacerle la vida más fácil a la hora de empaquetar, es recomendable crear un nuevo usuario**
    
    16
    -
    
    17
    -`adduser general`
    
    41
    +La justificacion de estos paquetes puede leerla en 
    
    42
    +[../documentos/alpine-paquetes-entorno.md seccion paquetes y repositorios](../documentos/alpine-paquetes-entorno.md#2---practica---hacer-paquetes-y-repositorios).
    
    18 43
     
    
    19
    -luego de haber creado dicho usuario, debe darle permisos en `/etc/sudoers`, añadiendo la linea
    
    44
    +### Creacion del usuario y entorno abuild
    
    20 45
     
    
    21
    -`general ALL=(ALL) ALL`
    
    46
    +```bash
    
    47
    +useradd -m -U -c "" -G abuild,wheel,input,disk,floppy,cdrom,dialout,audio,video,lp,netdev,games,users,ping general
    
    22 48
     
    
    23
    -por debajo de
    
    49
    +cat >  /etc/doas.d/general.conf << EOF
    
    50
    +permit keepenv :general
    
    51
    +EOF
    
    24 52
     
    
    25
    -```
    
    26
    -## User privilege specification
    
    27
    -##
    
    28
    -root ALL=(ALL:ALL) ALL
    
    53
    +for u in $(ls /home); do for g in abuild disk lp floppy audio cdrom dialout video lp netdev games users ping; do addgroup $u $g; done;done
    
    29 54
     ```
    
    30 55
     
    
    31
    -**nota:** puede editar el archivo `/etc/sudoers` usando `visudo` o su editor de texto preferido.
    
    56
    +La explicacion de que hacen y el porque estos comandos puede leerla en 
    
    57
    +[../documentos/alpine-paquetes-entorno.md seccion creacion del usuario y entorno](../documentos/alpine-paquetes-entorno.md#creacion-del-usuario y-entorno-abuild).
    
    32 58
     
    
    33
    -Ahora cierre la sesión de la cuenta de root, e inicie sesión como `general`. A partir de aquí todo se puede hacer en una cuenta de usuario normal, y las operaciones que requieren privilegios de superusuario se pueden hacer con `doas`.
    
    59
    +Ahora **cierre la sesión de la cuenta de root, e inicie sesión como `general`**. 
    
    34 60
     
    
    35
    -Puede intentar iniciar sesion usando su.
    
    36
    -
    
    37
    -`su general`
    
    38
    -
    
    39
    -### Configurando git
    
    40
    -Debe configurar git en su nueva sesion de usuario
    
    61
    +### Iniciando sesion y configurando el entorno
    
    41 62
     
    
    42 63
     ```
    
    43
    -git config --global user.name "tu nombre como esta en gitlab"
    
    44
    -git config --global user.email "tuus...@tucorreoelectronico.com"
    
    64
    +mkdir -m 775 -p /home/general/Devel
    
    65
    +chown general:abuild /home/general/Devel
    
    66
    +
    
    67
    +git config --global pull.rebase=true
    
    68
    +git config --global ssh.postBuffer 2000000000
    
    69
    +git config --global http.postBuffer 2000000000
    
    70
    +git config --global http.lowSpeedLimit 0
    
    71
    +git config --global http.lowSpeedTime 999999
    
    72
    +git config --global https.postBuffer 2000000000
    
    73
    +git config --global https.lowSpeedLimit 0
    
    74
    +git config --global https.lowSpeedTime 999999
    
    75
    +
    
    76
    +doas mkdir -m 775 -p /var/cache/distfiles
    
    77
    +doas chgrp abuild /var/cache/distfiles
    
    78
    +doas sed -i 's|export CFLAGS\s*=.*|export CFLAGS="-O2"|g' /etc/abuild.conf
    
    79
    +doas sed -i 's|.*USE_CCACHE\s*=.*|USE_CCACHE=1|g' /etc/abuild.conf
    
    80
    +doas sed -i 's|SRCDEST\s*=.*|SRCDEST=/var/cache/distfiles|g' /etc/abuild.conf
    
    81
    +doas mkdir -m 775 -p /home/general/Devel/packages
    
    82
    +doas chown general:abuild /home/general/Devel
    
    83
    +doas sed -i 's|REPODEST\s*=.*|REPODEST=\$HOME/Devel/packages/|g' /etc/abuild.conf
    
    84
    +
    
    85
    +git config --global user.email "gen...@venenux.xxx"
    
    86
    +git config --global user.name "generalvenenux"
    
    87
    +doas sed -i 's|.*PACKAGER\s*=.*|PACKAGER="generalvenenux <gen...@venenux.xxx>"|g' /etc/abuild.conf
    
    88
    +doas sed -i 's|.*MAINTAINER\s*=.*|MAINTAINER="\$PACKAGER"|g' /etc/abuild.conf
    
    89
    +
    
    90
    +abuild-keygen -a -i -n
    
    45 91
     ```
    
    46 92
     
    
    47
    -Antes de empezar a crear o modificar archivos APKBUILD, necesitamos darle permisos de `abuild` al usuario creado.
    
    48
    -Edite el archivo `/etc/abuild.conf` según sus necesidades, desde la terminal:
    
    93
    +La explicacion de que hacen y el porque estos comandos puede leerla en 
    
    94
    +[../documentos/alpine-paquetes-entorno.md seccion inicio del usuario aqui](../documentos/alpine-paquetes-entorno.md#iniciando-sesion-y-configurando-el-entorno).
    
    49 95
     
    
    50
    -`doas addgroup general abuild`
    
    96
    +### Crear un paquete nuevo con internet
    
    51 97
     
    
    52
    -También necesitamos preparar la ubicación donde el proceso de compilación almacena
    
    53
    -en caché los archivos que se descargan, por defecto es `/var/cache/distfiles/`, para crear este directorio y asegurarse de 
    
    54
    -que tiene permisos de escritura, introduzca los siguientes comandos:
    
    98
    +* Crear un directorio de trabajo y cambiarse a dicho directorio
    
    99
    +* Crear el archivo APKBUILD con la ayuda del sistema de desarrollo abuild
    
    100
    +* Se creara el directorio con el nombre del paquete
    
    101
    +* Despues edite el archivo `APKBUILD` segun las opciones, para que empaquete
    
    102
    +* Despues de ajustar se actualiza en checksum del `APKBUILD` para generarlo
    
    103
    +* al compilar el resultado estara en el directorio `/home/general/Devel/packages/`
    
    55 104
     
    
    56 105
     ```bash
    
    57
    -doas mkdir -p /var/cache/distfiles
    
    58
    -doas chmod a+w /var/cache/distfiles
    
    59
    -doas chgrp abuild /var/cache/distfiles
    
    60
    -doas chmod g+w /var/cache/distfiles
    
    61
    -```
    
    62
    -
    
    63
    -El último paso es configurar las claves de seguridad con el script `abuild-keygen` para abuild con el comando: 
    
    64
    -
    
    65
    -`abuild-keygen -a -i`
    
    106
    +mkdir -p /home/general/Devel/alpine-apkbuilds/main
    
    66 107
     
    
    67
    -En versiones anteriores de Alpine, teníamos que crear manualmente claves para firmar paquetes e índices. Esto explica cómo, hoy en día se puede usar `abuild-keygen`.
    
    68
    -Dado que la clave pública debe ser única para cada desarrollador, la dirección de correo electrónico debe utilizarse como nombre de la clave pública si asi lo desea. 
    
    108
    +cd /home/general/Devel/alpine-apkbuilds/main
    
    69 109
     
    
    70
    -#### Creando una llave privada
    
    110
    +newapkbuild -f -d "crea dialogos segun el entorno" -n easybashgui -l MIT -a https://github.com/BashGui/easybashgui/archive/refs/tags/13.0.0.tar.gz
    
    71 111
     
    
    72
    -`openssl genrsa -out tucorreoelectronico.priv 2048`
    
    112
    +cd /home/general/Devel/alpine-apkbuilds/main/easybashgui
    
    113
    +echo "aqui editar los archivos presentes y salvar"
    
    73 114
     
    
    74
    -#### Creando una llave publica
    
    115
    +abuild checksum
    
    75 116
     
    
    76
    -`openssl rsa -in tucorreoelectronico.priv -pubout -out /etc/apk/keys/tucorreoelectronico`
    
    77
    -
    
    78
    -La llave pública debe ser distribuida e instalada en `/etc/apk/keys/` la caja de alpine 
    
    79
    -que instalará los paquetes, esto significa básicamente que las llaves públicas del desarrollador principal 
    
    80
    -deberían estar en `/etc/apk/keys/` en todas las cajas Alpine.
    
    117
    +abuild -r
    
    118
    +```
    
    81 119
     
    
    82
    -### Para crear los paquetes con abuild
    
    120
    +Si no tiene internet y ya tiene las fuentes en local en el mismo directorio, 
    
    121
    +lease el caso [Ejercicio 2 crear un paquete nuevo con las fuentes local](../documentos/alpine-paquetes-entorno.md#ejercicio-2-crear-un-paquete-nuevo-con-las-fuentes-local) 
    
    122
    +en la guia extendida de la documentacion donde se explica mucho mas detallado.
    
    83 123
     
    
    84
    -Entraremos en el directorio donde estan ubicados los paquetes con el comando `cd`.
    
    124
    +Si se compilo, el nuevo binario estara en `/home/general/Devel/packages/main`, 
    
    125
    +y se creara un directorio por cada arquitectura, siendo estos `x86`, `x86_64`, 
    
    126
    +`armv7` etc
    
    85 127
     
    
    86
    -Ya adentro de la carpeta del nombre del paquete ejecutaremos el comando `abuild -r`, el argumento `-r` se encargara de instalar las depencias de el paquete a la hora de la construccion y los desintalara al terminar la construccion del mismo, asegurandose asi de tener un sistema limpio de librerias y/o dependencias no usadas por el sistema.
    
    128
    +# Mas informacion
    
    87 129
     
    
    88
    -Terminando en algo como esto:
    
    89
    -```bash
    
    90
    -cd paquete
    
    91
    -abuild -r
    
    92
    -```
    
    130
    +Esta guia es una version resumida de el proceso de creacion de paquetes, si 
    
    131
    +necesita **mejores pasos o mas detallados** revise [../documentos/alpine-paquetes-entorno.md](../documentos/alpine-paquetes-entorno.md).
    
    93 132
     
    
    94
    -# mas informacion
    
    133
    +Quiere **publicar el repositorio en servidor web**, lease la guia extendida en 
    
    134
    +[../documentos/alpine-paquetes-entorno.md seccion anexos publicar el repositorio](../documentos/alpine-paquetes-entorno.md#generacion-automatica-de-mi-repositorio).
    
    95 135
     
    
    96 136
     - Author
    
    97 137
       - Sodomon as https://t.me/alpine_linux_espanol/26413
    
    138
    +  - mckaygerhar PICCORO Lenz McKAY
    
    98 139
     - 🗯 IRC
    
    99 140
       - 💬 `##alpine_telegram_english` (roto)
    
    100 141
     - 📱 Telegram https://t.me/alpine_linux
    

  • documentos/alpine-packaging-chroot.mdrecetas/apk-tool.md


View it on GitLab.
You're receiving this email because of your account on gitlab.com. Manage all notifications · Help

Reply all
Reply to author
Forward
0 new messages