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 :
~/scripts/sapo_source_update <sapo_release>.<sapo_revision>
On <sapo_release> i <sapo_revision> són , respectivament , la versió i la revisió 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>
- inicialitza les variables d'entorn necessaries per la compilació (SVN_BASE,PROGDIR i LIBDIR)
- va la directori base de la revisió del sapo: $SVN_BASE/sapo/<sapo_release>/<sapo_release>.<sapo_revision>
- executa make checkout_depends que procedeix a:
- llegir els fitxers de paquets (*.list) per totes les arquitectures que es troben a: ./programs/
- descarrega/actualitza a $SVN_BASE 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 ./programs/<arch>-build.csv
- genera un un fitxer .txt amb el llistat de tots els paquets i el desa a: ./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>