Carregant...
 

Gestió dels metapaquets

Introducció

 

Anteriorment, en LliureX, Luis García creà un sistema derivat de germinate. Aquest sistema era una extensió de germinate, que s'havia de reprocessar abans. D'aquesta forma es tenien uns fitxers similars a les llavors de germinate, però amb la possibilitat de reprocessat degpp.

Tot aquest sistema s'anomenà Transgenic i el paquet, lliurex-cdd-toolbox. Àngel començà realitzant unes llavors que reutilitzaven les d'Ubuntu  i de les quals nosaltres estenguérem la funcionalitat. Amb aquesta finalitat va crear múltiples fitxers amb totes les catalogacions que es poguera requerir.

Ell , finalment, va utilitzar l'orde lliurex-meta-pkg update per a generar totes les llavors i tots els fitxers necessaris per al metapaquet i va acabar pujant el meta. En trusty, i possiblement en alguna versió anterior, es van construir les llavors totalment des de 0 (a excepció de lés bàsiques), de forma que nosaltres vam crear una versió totalment personalitzada.

Aquest fet , de vegades, va crear la confusió que a nosaltres ens faltaven paquets que sí que es trobaven a l'escriptori d'ubuntu i que semblava que funcionaven bé. Aquest és el mecanisme que funciona per a trusty i per a totes les versions anteriors.

Des de xenial s'optà per canviar al mecanisme oficial , a més de tornar a l'origen, és a dir, a basar-nos en les llavors dels sabors oficials.

Aquest nou mecanisme té el seus avantatges i els seus inconvenients, però es pot anar utilitzant tot allò que desenvolupa la comunitat Debian i la d'Ubuntu i intentar col·laborar amb ells. A continuació passaré a comentar tot allò relacionat amb el nou mecanisme. A la fi de l'entrada adjuntaré els documents que deixà Àngel per a tota la gestió de les llavors, ja que si s'haguera de modificar alguna cosa de trusty o anterior, o fins i tot si es valorara tornar a aquest mecanisme, es podria partir de tota aquesta documentació com a guia.

Funcionament de les llavors

 

Per al funcionament dels metapaquets s'ha de tenir en compte els  paquets:

 

  • germinate (modificat per nosaltres per a estendre funcionalitat)
  • lliurex-meta ( Conté totes les nostres llavors)
  • lliurex-meta-maker (Utilitat per a crear els paquets, pot ser útil per a noves versions o per a actualitzar els meta actuals)   

 

Llavors

 

Les llavors són bàsicament un fitxer en un format tipus wiki-media. Dins d'aquest fitxer s'indica tots aquells paquets que es vulga incloure en la distribució, ja siga alguna cosa que va instal·lada per defecte en algun sabor (desktop, client, etc.), com en el live o aquells que es vol que estiguen disponibles en el pool. Aquest és un exemple de llavor:

 

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 ==


Al format wiki els elements són com una llista i s'escriuen de la forma següent: un espai , un* i altre espai. Sols aquelles línies que estiguen escrites com a llistes seran interpretades per germinate com paquets que es desitgen incloure. A més, quan s'indiquen paquets , es poden especificar de la següent forma:

  • vim
  • (vim)
  • !vim

Aquells que no contenen res, són paquets que seran "Depends", els que van entre parèntesi seran "recomends" i aquells que porten una exclamació davant són paquets que es desitgen llevar de les possibles llistes que vinguen heretades mitjançant algun Task-Seed o  el fitxer STRUCTURE.

Hi ha també algunes línies especials que són aquelles que comencen per Task. Aquestes Task seran explicades mès tard.

La resta de línies s'interpretaran com comentaris.

Normalment, tot un conjunt (set) de llavors s'agrupen dins d'una carpeta en la qual ha d'haver un altre fitxer anomenat STRUCTURE.

 

STRUCTURE

 

En la carpeta de llavors hi ha un fitxer especial anomenat STRUCTURE. Aquest fitxer és l'encarregat de definir la relació que tenen les llavors les unes amb les altres. En aquest fitxer s'ha d'indicar totes les llavors que hi ha a la carpeta ja que, d'altra forma, germinate no podrà trobar-les. Per exemple, l'structure de la capeta platforms.xenial és el següent:

 

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


Les llavors es defineixen de la següent forma:

NOMDELALLAVOR: LLAVOR QUE HERETA

 El nom de la llavor i els dos punts són obligatoris, no és necessari, però, indicar les llavors de les quals hereta. La resta de les línies són opcions per al germinate. Entre aquestes opcions , una de les importants és -+include+-, puix ajuda a incloure altres paquets de llavors.

Task

 

Quan s'estan escrivint les llavors, es poden afegir certes paraules clau que estenen el funcionament. Aquestes comencen amb la paraula Task. Una de les extensions que nosaltres hem realitzat sobre germinate és la d'afegir una tasca anomenada Task-Recursive.

  • Task-Recursive: Aquesta tasca s'utilitza perquè l'orde germinate-update-metapackage (que és la utilitzada per nosaltres per a generar els megapaquets) incloga tot el contingut de les herències definides en el fitxer STRUCTURE. Aquest comportament no és el que té per defecte germinate-update-metapackage.
  • Task-Seeds: Aquesta és una forma d'incloure paquets d'altres llavors. El comportament és similar al de realitzar una importació (import) en programació. Dins de la llavor que definisca aquesta directiva, es contindrà tot el contingut de les llavors indicades darrere de Task-Seeds. Si s'utilitza aquesta directiva, s'ha d'afegir la dependència al fitxer STRUCTURE.

 

Acabant d'enllaçar totes les coses

 

Una vegada llegida la informació anterior, es pot acabar d'encaixar totes les peces. Cada vegada que Ubuntu crea una nova versió (lucid, precise, trusty...) crea un llistat de llavors que seran bàsiques per a totes aquestes versions oficials. Açò es denomina platform. Aquesta platform inclou coses que són bàsiques per a un sistema , bàsiques per a un escriptori, bàsiques per a un arrancament, etc. A partir d'aquest punt, cadascun dels sabors oficials d'Ubuntu crea les seues llavors, inclosa la mateixa Ubuntu. Per exemple, si Ubuntu trau xenial, es crearà una carpeta anomenada platform.xenial que contindrà totes les llavors bàsiques de les quals es derivaran; aleshores kubuntu crearà una carpeta anomenada kubuntu.xenial on estaran totes les seues llavors, amb les quals es crearan les isos. Totes les llavors d'Ubuntu es troben en la següent url:

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

 

Kubuntu utilitza el platform per a crear les seues llavors , motiu pel qual ha d'afegir en el fitxer SRTUCTURE "include platformxenial", d'aquesta forma , en crear la seua llavor, core pot incloure de forma ràpida en l'STRUCTURE que hereta de desktop-common i així sols s'ha de preocupar d'afegir les coses que ells consideren necessàries.

Seguint la metodologia que segueixen tots els sabors oficials d'Ubuntu, LliureX crea una carpeta anomenada lliurex en la qual es creen totes les llavors i en el fitxer STRUCTURE afig un inclou (include) del sabor que es desitja. Per exemple, si es vol fer una versió basada en Ubuntu-mate, es descarregaran les carpetes amb les llavors de paltform i les d'Ubuntu-mate; es crearà una carpeta anomenada lliurex; s'afegirà "include ubuntu-mate" en l'STRUCTURE de la carpeta lliurex; finalment es definiran al fitxer STRUCTURE tota la relació entre les llavors de lliurex i les d'ubuntu-mate.

 

Lliurex-meta

 

Una vegada entés el funcionament de la definició de les llavors, es procedeix a realitzar el paquet amb què es generaran els metapaquets de LliureX. Inicialment es crea una carpeta, per exemple 'seeds', on es guardaran totes les llavors (paltform, ubuntu-mate, lliurex). Al mateix nivell que aquesta carpeta es genera un fitxer anomenat update.cfg, que serà utilitzat per l'orde germinate-update-metapackage per generar els metapaquets. A més, s'ha de generar el directori Debian amb els seus corresponents fitxers i un fitxer 'metapackage-map'. A continuació s'explica el contingut de cadascun d'ells:

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 format d'aquest fitxer és similar a un fitxer ini (ini file). Les dues primeres línies marquen per defecte quina configuració ha d'utilitzar germinate-update-metapackage. A partir de xenial és on comença la configuració:

  • seeds: les llavors que volem utilitzar com metapaquets. Pot haver moltes llavors, però sols unes poques seran les que s'utilitzen com a metapaquets.
  • architectures: Les arquitectures que es vol utilitzar per a construir els paquets.
  • seed_base: nom de la ruta on es troben les carpetes de totes les llavors.
  • seed_dist: nom de la carpeta a partir de seed_base on es troben les llavors que seran els metapaquets.
  • archive_base/default: urls dels repositoris on es troben tots els paquets indicats en les llavors. Si hi haguera algun paquet indicat en les llavors que no es trobara en alguna de les url's no s'afegirien als metapaquets, fet pel qual s'ha de vigilar si es vol algun paquet que estiga disponible en els repositoris esmentats.
  • components: els components que s'utilitzaran de l'anterior llistat de repositoris per a obtenir els paquets.

 

metapackage-map

 

Aquest fitxer realitza una correlació dels noms de les llavors que es volen utilitzar com metapaquets, que estan en el directori seeds i el nom que tindrà a la fi, que es defineix en el fitxer control. Per exemple:

 

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

 

Ací cal anar creant tantes entrades com llavors hem definit com metapaquets en el fitxer update.cfg i en el fixer metapackage-map. Cada entrada ha de tenir el camp Depends i Recommends, i cal afegir a cadascuna corresponentment ${germinate:Depends} i ${germinate:Recommends}, puix sense açò no es completaran automàticament els paquets definits en les llavors.

Hi ha un camp anomenat Lliurex-Flavours. Aquest camp és l'encarregat de definir què retornarà l'orde lliurex-version. Perquè funcione, s'ha d'afegir en el build-depends lliurex-meta-tools i en el rules el helper.

 

debian/rules

 

En aquest fitxer és important afegir els corresponents ajudants (helpers):

 

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


En la segona línia apareix que s'ha d'utilitzar el helper germinate perquè es generen tots els paquets amb els seus depends i els seus recomends. L'override que s'afegeix és per assegurar que es crearan els fitxers necesassaris  perquè lliurex-version retorne el contingut corresponent.

Pas final

Una vegada s'ha realitzat tot el que ja hem vist, és important executar l'orde germinat-update-metapackage. Per a realitzar açò, es defineix la diferència entre germinate i germinate-update-metapackage. L'orde germinate s'encarrega de recórrer totes les llavors i generar altres fitxers indicant tots els paquets que entraran i quin serà el paquet que entrarà. Aquesta orde genera una infinitat de fitxers, que realment no són útils per al metapaquets, encara que sí que podrien arribar a ser útils per a l'agrupament(pool). Derminate-update-metapackage  s'encarrega de realitzar uns fitxers amb els noms de la llavor indicada amb acabaments d'arquitectura i indicant si són depends o recomends.

L'ajudant (helper) d'empaquetat indicat en el rules 'germinate' utilitzarà aquests fitxers generats per germinate-update-metapackage per a substituir les variables indicades en el fitxer de control (${germinate:Depends} i ${germinate:Recommends}) amb el seu contingut.

Per tant, cada vegada que es realitze qualsevol canvi en alguna llavor i es vulga actualitzar els metapaquets, cal llançar l'orde   germinate-update-metapackage    al nivell on està el fitxer  update.cfg.

 

Utilitats per a la gestió/creació dels metapaquets

 

Altre dels paquets que s'ha comentat anteriorment és lliurex-meta-maker. Aquest és una utilitat per a crear el contingut de la carpeta anomenada seeds. Si s'executa l'orde lliurex-meta-maker s'entrarà en una consola interactiva des de la qual la funció més important és la de create. Si s'escriu create i es prem tab, apaixerà un llistat amb totes les carpetes disponibles per a baixar de llavors. Mitjançant açò es poden crear carpetes llavors (seeds) de qualsevol sabor Ubuntu oficial disponible en la url http://people.canonical.com/~ubuntu-archive/seeds/,  i a partir d'aquestes , crear totes les llavors de lliurex.

Per exemple, si es volguera traure una versió de LliureX basada en zetsy zapus, sols caldria executar l'eina i executar create xubuntu.zetsy, i açò generaria una carpeta anomenada seeds, que contindria platforms i xubuntu.zetsy.

També serviria per a actualitzar el contingut de la carpeta seeds dels metapaquets ja creats, puix descarregaria les últimes llavors de l'esmentat sabor.

Pàgines d'interés