Cargando...
 

Gestión de los metapaquetes

Introducción

 

Anteriormente en LliureX, Luis Garcia creó un sistema derivado de germinate. Este sistema era una extensión de germinate, que se tenia que preprocesar antes. De esta forma se tenía unos ficheros similares a las semillas de germinate, pero con la posibilidad de preprocesado de gpp.

Todo este sistema se llamó Transgenic y el paquete lliurex-cdd-toolbox. Angel empezó realizando unas semillas que reutilizaran las de ubuntu y nosotros extendieramos la funcionalidad. Para ello creó múltiples ficheros con todas las catalogaciones que se puedieran requerir.

Él finalmente utilizaba el comando lliurex-meta-pkg update para generar todas las semillas y todos los ficheros necesarios para el metapaquete y acababa subiendo el meta. En trusty, y posiblemente en alguna version anterior, se construyeron las semillas totalmente desde 0 (a excepcion de las mas básicas), de forma que nosotros creamos la versión totalmente personalizada.

Esto creó a veces la confusión de que a nosotros nos faltaban paquetes que el escritorio de Ubuntu sí que tenía y que parecía que funcionara bien. Este es el mecanismo que funciona para trusty y para todas las versiones anteriores.

Desde xenial se optó por cambiar al mecanismo oficial además de volver al origen de basarnos en las semillas de los sabores oficiales.

Este nuevo mecanismo tiene sus ventajas y sus incovenientes, pero se pueden ir utilizando todo lo que desarrolla la comunidad de Debian y de Ubuntu e intentar colaborar con ellos. A continuación pasaré a comentar todo lo relacionado con el nuevo mecanismo. Al final de todo adjuntaré los documentos que dejó Angel para toda la gestioón de las semillas, ya que si se tuviera que modificar algo de trusty o anterior, o incluso si se quisiera valorar el volver a ese mecanismo, se podría partir de toda esa documentancion como guia.

 

Funcionamiento de las semillas

 

Para el funcionamiento de los metapaquetes se tienen que tener en cuenta los distintos paquetes:

  • germinate ( modificado por nosotros para extender funcionalidad )
  • lliurex-meta ( Contiene todas nuestras semillas )
  • lliurex-meta-maker ( Utilidad para crear los metapaquetes, puede ser útil para nuevas versiones o para actualizar los metas actuales )

 

Semillas

 

Las semillas básicamente es un fichero en un formato tipo wiki-media. Dentro de este fichero se indican todos aquellos paquete que se quieran incluir en la distribución, ya sea algo que va por defecto instalado en algún sabor (desktop, cliente, etc), como en el live o aquellos que se quieren que esten disponibles en el pool. Un ejemplo de semilla podria ser este:

Task-Per-Derivative: 1
Task-Section: user
Task-Description: Ubuntu MATE minimal installation
Task-Extended-Description: This task provides minimal packages for Ubuntu MATE desktop environment.
Task-Key: ubuntu-mate-core
Task-Name: ubuntu-mate-core
Task-Seeds: desktop-common

 * Feature: no-follow-recommends

== Core ==

 * accountsservice
 * acpid [!armhf !arm64 !powerpc !ppc64el]
 * colord
 * dconf-cli
 * dialog
 * gdisk
 * hwdata
 * libnotify-bin
 * ntp
 * pm-utils
 * policykit-desktop-privileges
 * rtkit
 * syslinux-utils [!armhf !arm64 !powerpc !ppc64el]
 * toshset [!armhf !arm64 !powerpc !ppc64el]
 * vbetool [!armhf !arm64 !powerpc !ppc64el]

== X11 ==



En el formato wiki los elementos son como una lista se escriben de la siguiente forma : un espacio , un * y otro espacio. Solo aquellas líneas que estén escritas como listas serán interpretadas por germinate como paquetes que se desean incluir. Además, cuando se indican paquetes se pueden especificar de la siguiente forma:

  • vim
  • (vim)
  • !vim

Aquellos que no contienen nada son paquetes que serán "Depends", los que van entre paréntesis serán "recomends", y aquellos que van con una exclamación delante son paquetes que se desean quitar de las posibles listas que vengan heredadas mediante algun Task-Seeds o mediante el fichero STRUCTURE.

Hay también algunas líneas especiales que son aquellas que empiezan por Task. Estas Task serán explicadas más tarde.

El resto de líneas será interpretados como comentarios.

Normalmente, todo un set de semillas se agrupan dentro de una carpeta en la cual tiene que haber otro fichero llamado STRUCTURE.

 

STRUCTURE

 

En la carpeta de las semillas hay un fichero especial llamado STRUCTURE. Este fichero es el encargado de definir la relación que tienen unas semillas con otras. En este fichero se han de indicar todas las semillas que hay en la carpeta, ya que de otra forma germinate no podra encontrarlas. Por ejemplo, el structure de la carpeta platforms.xenial es el siguiente:

 

feature follow-recommends
feature no-follow-build-depends
required:
minimal: required
boot:
standard: minimal
desktop-common: standard
d-i-requirements: minimal
installer:
installer-gtk: installer
build-essential: required
language-packs: desktop-common
live-common: standard
supported-development-common: standard
supported-development-desktop: standard
supported-kernel-common: standard
supported-kernel-desktop: standard
supported-misc-servers: standard
supported-hardware-common: standard
supported-hardware-desktop: standard
supported-installer-common: standard installer
supported-installer-desktop: standard
supported-network-common: standard
supported-network-client: standard
supported-sysadmin-common: standard
supported-sysadmin-desktop: standard
supported-server: supported-misc-servers supported-hardware-common supported-installer-common supported-network-common supported-sysadmin-common build-essential supported-development-common supported-kernel-common
supported-desktop: supported-hardware-desktop supported-installer-desktop supported-sysadmin-desktop supported-hardware-common supported-installer-common supported-network-common supported-network-client supported-sysadmin-common build-essential supported-development-common supported-development-desktop supported-kernel-common supported-kernel-desktop
supported-common: supported-server supported-desktop



Las semillas se definen de la siguiente forma:

NOMBREDELASEMILLA: SEMILLAS QUE HEREDA

El nombre de la semilla y los dos puntos son obligatorios, sin embargo no es necesario indicar semillas de las que hereda. El resto de líneas son opciones para el germinate. Entre estas opciones una importante es la de include, ya que ayuda a incluir otros packs de semillas.

 

Task

 

Cuando se están escribiendo las semillas se pueden añadir ciertas palabras clave que extienden el funcionamiento. Estas empiezan con la palabra Task. Una de las extensiones que nosotros hemos realizado sobre germinate es la de añadir una task llamada Task-Recursive.

  • Task-Recursive: Esta tarea sirve para que el comando germinate-update-metapackage (que es el utilizado por nosotros para generar los metapaquetes) , incluya todo el contenido de las herencias definidas en el fichero STRUCTURE. Este comportamiento no es el que tiene por defecto germinate-update-metapackage.
  • Task-Seeds: Esta es una forma de incluir paquetes otras semillas. El comportamiento es similar al hacer un import en programación. Dentro de la semilla que defina esta directiva contendrá todo el contenido de las semillas indicadas detrás de Task-Seeds. Si se utiliza esta directiva se tiene que añadir la dependencia en el fichero STRUCTURE.

 

Acabando de enlazar todas las cosas

 

Una vez se ha leído lo anterior se puede acabar de encajar todas las piezas. Cada vez que ubuntu crea una nueva version (lucid, precise, trusty , ...), crea un listado de semillas que seran básicas para todas aquellas versiones oficiales. A esto lo denomina platform. Este platform incluye cosas que son básicas para un sistema, básicas para un escritorio, básicos para un arranque, etc. A partir de ahi, cada una de los sabores oficiales de Ubuntu crean sus semillas, incluida la misma ubuntu. Por ejemplo, si ubuntu saca xenial se creara una carpeta llamada platform.xenial que contendra todas las semillas básicas de las cuales se derivaran; entonces kubuntu creará una carpeta llamada kubuntu.xenial en la cual estaran todas sus semillas con las que se crearan las isos. Todas las semillas de ubuntu se encuentran en la siguiente url :

http://people.canonical.com/~ubuntu-archive/seeds/

Kubuntu utiliza el platform para crear sus semillas, por lo que tiene que añadir en el fichero STRUCTURE "include platform.xenial", de esta forma cuando crea su semilla core puede incluir de forma rápida en el STRUCTURE que hereda de desktop-common y así solo se tienen que preocupar de añadir las cosas que ellos consideran necesarias.

Siguiendo la metodología que siguen todos los sabores oficiales de ubuntu, LliureX crea una carpeta llamada lliurex en la cual se crean todas las semillas y en el fichero STRUCTURE añade un include del sabor que desea. Por ejemplo, si se quiere hacer una version basada en ubuntu-mate se descargara las carpetas con las semillas de platform y las de ubuntu-mate; se creará una carpeta llamada lliurex; se añadira "include ubuntu-mate" en el STRUCTURE de la carpeta lliurex; finalmente se definiran en el fichero STRUCTURE toda la relación entre las semillas de lliurex y las de ubuntu-mate.

 

Lliurex-meta

 

Una vez entendido como funciona la definición de las semillas se procede a realizar el paquete con el que se generaran los metapaquetes de lliurex. Inicialmente se crea una carpeta, por ejemplo 'seeds', donde se guardaran todas las semillas (platform, ubuntu-mate, lliurex). Al mismo nivel que dicha carpeta se genera un fichero llamado update.cfg, que será el utilizado por el comando germinate-update-metapackage para generar los metapaquetes. Ademas de eso se tiene que generar el directorio debian con sus correspondientes ficheros y un fichero 'metapackage-map'. A continuacion se explica el contenido de cada uno:

update.cfg

[DEFAULT]
dist: xenial

[xenial] 
seeds: meta-server meta-client meta-desktop meta-infantil meta-music meta-pime meta-live meta-supported
architectures: i386 amd64
seed_base: seeds 
seed_dist: lliurex
archive_base/default: http://archive.ubuntu.com/ubuntu http://ppa.launchpad.net/llxdev/xenial/ubuntu  http://lliurex.net/xenial http://ppa.launchpad.net/llxdev/xenial-external-ppa/ubuntu http://ppa.launchpad.net/llxdev/recursos/ubuntu  
components: main restricted universe multiverse



El formato de este fichero es similar a un ini file. Las dos primeras líneas marcan por defecto qué configuración tiene que utilizar germinate-update-metapackage. A partir de xenial es donde empieza la configuración.

  • seeds: aquellas semillas que queremos utilizar como metapaquetes. Pueden haber muchas semillas, pero solo unas pocas serán las que se utilicen como metapaquetes.
  • architectures: las arquitecturas que se quieren utilizar para construir los metapaquetes.
  • seed_base: nombre de la ruta donde se encuentras las carpetas de todas las semillas.
  • seed_dist: nombre de la carpeta a partir de seed_base donde se encuentran las semillas que seran los metapaquetes.
  • archive_base/default: urls de los repositorios donde se encuentran todos los paquetes indicados en las semillas. Si hubiera algún paquete indicado en las semillas que no se encuentre en alguna de estas url's no se añadirán a los metapaquetes, por lo que hay que vigilar si se quiere algún paquete que esté disponible en dichos repositorios.
  • components: los componentes que se utilizaran del anterior listado de repositorios para obtener los paquetes

 

metapackage-map

 

Este fichero hace una correlación de los nombres de las semillas que se quieren utilizar como metapaquetes que están en el directorio seeds y el nombre que tendrá al final, que se define en el fichero control. Por ejemplo :

 

meta-desktop lliurex-meta-desktop
meta-client  lliurex-meta-client

 

debian/control

 

Source: lliurex-meta
Section: admin
Priority: optional
Maintainer: Lliurex Team <lliurex@gva.es>
Build-Depends: debhelper (>= 8.0.0), germinate, lliurex-meta-tools
Standards-Version: 3.9.4
Homepage: http://lliurex.net 

Package: lliurex-meta-server
Architecture: any
Lliurex-Flavours: server, edu
Depends: ${shlibs:Depends}, ${misc:Depends}, ${germinate:Depends}
Recommends: ${germinate:Recommends}
Description: MetaPackage of Lliurex
 List of all packages for lliurex

 

Aquí hay que ir creando tantas entradas como las semillas que hemos definido como metapaquetes en el fichero update.cfg y en el fichero metapackage-map. Cada entrada tiene que tener el campo Depends y Recommends, añadiendo a cada una correspondientemente ${germinate:Depends} y ${germinate:Recommends}, ya que sin esto no se autocompletarán los paquetes definidos en las semillas

Hay un campo llamado Lliurex-Flavours. Este campo es el encargado de definir qué devolverá el comando lliurex-version. Para que funcione se tiene que añadir en el build-depends lliurex-meta-tools y en el rules el helper correspondiente.

 

debian/rules

 

En este fichero es importante añadir los correspondientes helpers:

 

%:
    dh $@ --with germinate 
override_dh_install:
    dh_install
    dh_llxmeta



En la segunda línea aparece que se tiene que utilizar el helper germinate para que se generen todos los paquetes con sus depends y sus recomends. El override que se añade es para asegurarse que se crearán los ficheros necesarios para que lliurex-version devuelva el contenido correspondiente.

 

Paso final

 

Una vez se ha realizado todo lo anterior es importante ejecutar el comando germinate-update-metapackage. Para ello se define la diferencia entre germinate y germinate-update-metapackage. El comando germinate se encarga de recorrer todas las semillas y generar otros ficheros indicando todos los paquetes que entrarán y cuál será el paquete que entrará. Este comando genera una infinidad de ficheros, que realmente no son útiles para los metapaquetes, aunque sí que podrían llegar a ser útiles para el pool. Germinate-update-metapackage se encarga de realizar unos ficheros con los nombres de la semilla indicada con terminaciones de arquitectura y si son depends o recomends.

El helper de empaquetado indicado en el rules 'germinate' utilizará estos ficheros generados por germinate-update-metapackage para sustituir las variables indicadas en el fichero control (${germinate:Depends} y ${germinate:Recommends}) con su contenido.

Por lo tanto, cada vez que se realize cualquier cambio en alguna semilla y se quiera actualizar los metapaquetes hay que lanzar el comando germinate-update-metapackage al nivel donde estáel fichero update.cfg.

 

Utilidades para la gestión/creación de los metapaquetes

 

Otro de los paquetes que se ha comentado anteriormente es lliurex-meta-maker. Este es una utilidad para crear el contenido de la carpeta llamada seeds. Si se ejecuta el comando lliurex-meta-maker se entrará en una consola interactiva desde la cual la función más importante es la de create. Si se escribe create y se presiona tab, aparecera un listado con todas las carpetas disponibles para bajar de semillas. Mediante esto se pueden crear carpetas seeds de cualquier sabor de ubuntu oficial disponible en la url http://people.canonical.com/~ubuntu-archive/seeds/, y a partir de esta crear todas las semillas de lliurex.

Por ejemplo si se quisiera sacar una version de Lliurex basada en zetsy zapus, solo habría que ejecutar la herramienta y ejecutar create xubuntu.zetsy, y esto generaría una carpeta llamada seeds, que contendrá platforms y xubuntu.zetsy.

También serviría para actualizar el contenido de la carpeta seeds de los metapaquetes ya creados, ya que descargaría las últimas semillas de dicho sabor.

Paginas de interes