| Línia 8: | Línia 8: | ||
El primer pas és obtenir una copia actualitzada del codi que es troba en el servidor SVN (svn.cadt.com). | 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 | Això es pot fer des de sapo-builder@containers.cadt.com invocant l'script : | ||
<pre> | <pre> | ||
~/scripts/sapo_source_update <sapo_release> | ~/scripts/sapo_source_update <sapo_release>.<sapo_revision> | ||
</pre> | </pre> | ||
On '''<sapo_release>''' | On '''<sapo_release>''' i '''<sapo_revision>''' són , respectivament , la versió i la revisió del SAPO. | ||
L'script procedeix de la següent manera: | L'script procedeix de la següent manera: | ||
| Línia 26: | Línia 26: | ||
* actualitza/descarrega <nowiki>svn://svn.cadt.com/sapo-</nowiki>'''<sapo_release>''' a $SVN_BASE/sapo/'''<sapo_release>''' | * actualitza/descarrega <nowiki>svn://svn.cadt.com/sapo-</nowiki>'''<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 | ||
* genera un un fitxer .txt amb el llistat de tots els paquets i el desa a: | ** 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 | ||
l'auto-generació de documentació. | |||
** 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ó ==== | ==== Compilació ==== | ||
Revisió del 09:44, 2 feb 2017
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>