Joan (discussió | contribucions)
Joan (discussió | contribucions)
Línia 43: Línia 43:
===== Compilació =====
===== Compilació =====


Un cop obtinguts el codi de tots els paquets i les seves dependències es procedeix a la 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í.


A diferència del pas anterior, aquest pas s'ha de repetir per cada arquitectura cosa que en el nostre cas
Per evitar els problemes de configurar un cross-compiler, s'ha optat per tenir diversos nodes de compilació: un per cada
implica fer un ssh a cada un dels containers següents per obtenir el sapo per totes les versions de linux que soporta:
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:


* centos3_devel (host:containers.cadt.com port:2203)
* Rendiment gairabé idèntic a usar una màquina real.


* centos6_devel (host:containers.cadt.com port:2206)
* Permet compartir directoris entre els diferents nodes. Això facilita compartir dades entre els nodes i també simplifica
la actualització de codi i scripts.


* centos7_devel (host:containers.cadt.com port:2207)
* Facilitat de manipular diverses versions del mateix node.


Per la compilació,  s'utilitza un script de bash enlloc de perl , ja que gairabé tot el processat de dades ja ha estat fet en el pas anterior
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ó
i ara només s'ha de anar invocant el make per cada un dels elements de la llista guardada en el fitxer build.csv .
utilitzat.


 
{|class=wikitable
l'script responsable de la compilació s'invoca normalment de la següent manera:
!Node||OS||Arquitectura||Hostatjat a||Port SSH
 
|-
<pre>
|centos3_devel||CentOS 3 (x86)||linux-rhel3||containers.cadt.com||2203
~/scripts/sapo_build <sapo_release> >/tmp/build.log 2>&1
|-
</pre>
|centos6_devel||CentOS 6 (x86)||linux-rhel6||containers.cadt.com||2206
 
|-
Aquest script procedeix de la següent manera per processar cada linia:
|centos7_devel||CentOS 7 (x86_64)||linux64-rhel7||containers.cadt.com||2207
 
|}
* entra al directori base de la versio del paquet/llibreria
* compila el programa executant: 'make'
* si és una llibreria l'instal.la executant: 'make install'
* si és un paquet :
** executa 'make program'
** executa 'make notes' en cas que sigui necessari
** executa 'make rpm' per generar el paquet, a menys que s'hagi desactivat amb l'opció 'nopkg' al fitxer .list corresponent


===== Copia al repositori =====
===== Copia al repositori =====

Revisió del 09:27, 2 feb 2017


Sistema de compilació automatitzat del SAPO

Pasos

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
Copia al repositori
~/scripts/sapo_build <sapo_release> <arch>