Sistema automatitzat de generació i distribució del SAPO

Actualització/obtenció del codi

El primer pas és obtenir una copia actualitzada del codi que es troba en el servidor SVN (svn.cadt.com).

Això es pot fer des de sapo-builder@containers.cadt.com invocant l'script de perl :

~/scripts/sapo_source_update <sapo_release>

On <sapo_release> es la versió del sapo.

L'script procedeix de la següent manera:

  • Intenta determinar el directori base on es descarregarà el codi mirant la variable SVN_BASE. Si no existeix o no apaunta a un directori

intenta amb /svn/svn.cadt.com /svn ~/SVN

  • descarrega/actualtiza $SVN_BASE/Make.rules
  • crea el directori $SVN_BASE/sapo si no existeix
  • actualitza/descarrega svn://svn.cadt.com/sapo-<sapo_release> a $SVN_BASE/sapo/<sapo_release>
  • llegeix els fitxers de paquets (*.list) per totes les arquitectures que es troben a: $SVN_BASE/sapo/<sapo_release>/programs/
  • descarrega/actualitza tots els paquets llistats en els fixers *.list ,però només la versió indicada
  • inicialitza la llista de dependencies no resoltes a partir dels fitxers lib_versions.dep obtinguts del directori base de la versió del paquet que es vol compilar
  • descarrega/actualitza les llibreries necessaries per resoldre les dependències fins que s'han resolt totes les dependencies o no pot obtenir les llibreries necessaries del SVN
  • verifica que no hi hagin dependències circulars i genera la seqüència en que s'han de compilar i opcionalment instal·lar els diferents paquets i llibreries.
  • per cada arquitectura genera un fitxer que conté la seqüència de pasos per fer la compilació i el guarda a $SVN_BASE/sapo/<sapo_release>/programs/<arch>-build.csv
  • genera un un fitxer .txt amb el llistat de tots els paquets i el desa a: $SVN_BASE/sapo/<sapo_release>/programs/package_list.txt . Aquest fitxer s'utilitza més endavant per

l'auto-generació de documentació.

Compilació

Un cop obtingut/actualitat el codi de tots els paquets i dependències es pot procedir a la generació dels paquets.

A diferència del anterior, part del procés depèn de l'arquitectura per la se està generant el paquet i diverses accions s'hauran de repetir per cada una de les arquitectures destí.

Per evitar els problemes de configurar un cross-compiler, s'ha optat per tenir diversos nodes de compilació: un per cada arquitectura. Per evitar tenir un servidor dedicat a cada arquitectura s'ha optat per usar virtualització. En concret totes les arquitectures Linux s'han virtualitzat usant containers. S'ha optat per aquesta solució ja que:

  • Rendiment gairabé idèntic a usar una màquina real.
  • Permet compartir directoris entre els diferents nodes. Això facilita compartir dades entre els nodes i també simplifica la actualització de codi i scripts.
  • Facilitat de manipular diverses versions del mateix node.

També per evitar problemes en el futur s'ha optat per conectar-se als nodes via SSH cosa que ens aïlla del tipus de virtualització utilitzat.

Node OS Arquitectura Hostatjat a Port SSH
centos3_devel CentOS 3 (x86) linux-rhel3 containers.cadt.com 2203
centos6_devel CentOS 6 (x86) linux-rhel6 containers.cadt.com 2206
centos7_devel CentOS 7 (x86_64) linux64-rhel7 containers.cadt.com 2207

Distribució

~/scripts/sapo_build <sapo_release> <arch>