FreeBSD Creare repository custom con Poudriere

poudriere

Introduzione:

Poudriere ha come scopo quello di facilitare e migliorare la gestione dei ports su molteplici macchine, esso infatti permette di creare delle jail (con varie versioni di OS) e compilarsi i port creando dei pacchetti in modo da poter tener traccia e installare le stesse versioni di sowtware su server diversi.

 

Prepariamo la macchina:

– Aggiorniamo l’albero dei ports con portsnap fetch update

– Ci spostiamo nell port di Poudriere e lo compiliamo:

cd /usr/ports/ports-mgmt/poudrier

make install clean

(Vanno bele le opzioni di default)

– Installiamo portmaster per facilitare la gestione dei ports:

cd /usr/ports/ports-mgmt/portmaster

make install clean

– Infine ci serve un webserver per permettere alle macchine di scaricare i pacchetti, per visualizzare lo stato della compilazione e avere una visuale d’isime dei nostri alberi dei ports. A questo scopo useremo Nginx:

cd /usr/ports/www/nginx

make install clean

(Vanno bele le opzioni di default)

Ora bisogna ricaricare i PATH con il comando rehash

 

Certificati SSL

Quando creiamo i pacchetti con Poudriere, vogliamo essere in grado di firmarli con una chiave privata. Questo permetterà alle altre macchine di sapere con certezza che i pacchetti hanno una fonte legittima. Per prima cosa quindi creiamo le cartelle necessarie:

mkdir -p /usr/local/etc/ssl/{keys,certs}

Per sicurezza ulteriore modifichiamo i permessi con la sola lettura dell’utente:

chmod 0600 /usr/local/etc/ssl/keys

Ora non ci resta che generare una chiave, la chiameremo poudriere.key e sarà a 4096 bit:

openssl genrsa -out /usr/local/etc/ssl/keys/poudriere.key 4096

Creiamo il certificato:

openssl rsa -in /usr/local/etc/ssl/keys/poudriere.key -pubout -out /usr/local/etc/ssl/certs/poudriere.cert

Bene, ora che abbiamo tutto il necessario a firmare i pacchetti possiamo cominciare a configurare poudriere!

 

Configuriamo Poudriere


Il file di configurazione principale di Poudriere si trova in /usr/local/etc/poudriere.conf . Cominciamo quindi con l’editarlo:

ee /usr/local/etc/poudriere.conf

 

Il file di persé è molto ben commentato e non ci servirà fare troppe modifiche. Partiamo dal presupposto che avete ZFS come Filesystem.

Poudriere infatti usa ZFS a suo vantaggio creando delle jail ben distinte.

ZPOOL=tank
ZROOTFS=/poudriere

Dopo cerchiamo  la sezione dove diciamo da quale host possiamo scaricare i software che ci serviranno per creare le jails

FREEBSD_HOST=ftp://ftp.freebsd.org

Dopodichè decommentiamo l’opzione POUDRIERE_DATA per specificare la root di Poudriere

POUDRIERE_DATA=${BASEFS}/data

Le prossime opzioni che andremo a modificare sono CHECK_CHANGED_OPTIONS e CHECK_CHANGED_DEPS. La prima fa in modo che se cambiamo le opzioni di un port lo ricompila, l’altra invece dice a poudriere di ricompilare in caso le dipendenze siano cambiate. Quindi

CHECK_CHANGED_OPTIONS=verbose
CHECK_CHANGED_DEPS=yes

Sempre nel file di config, troviamo la parte in cui diciamo a Poudriere con cosa firmare i pacchetti:

PKG_REPO_SIGNING_KEY=/usr/local/etc/ssl/keys/poudriere.key

Per finire, settiamo l’url dove il server sarà raggiungibile:

URL_BASE=http://nome_server_o_IP/

Ora possiamo salvare il file.

 

Costruire l’ambiente di compilazione

Il prossimo passo è quello di creare l’ambiente dove effettivamente Poudriere compilerà. Come precedentemente accennato, Poudriere usa delle jail per isolare l’ambiente di compilazione permettendoci così una estrema flessibilità in quanto a multipli alberi dei ports, versioni di OS e pure se compilare a 32 o 64 bit. Le uniche limitazioni sono che La versione dell’os all’interno della jail non può essere maggiore di quella della macchina principale e chiaramente se l’os è a 32 bit non potremo compilare a 64.

Vediamo di scegliere un nome riconoscibile per la jail in quanto lo useremo in seguito nella configurazione dei repository sui clients, inoltre non usiamo i punti nel nome in quanto potrebbe causare dei problemi.

Veniamo quindi alla creazione in se, con l’opzione -j definiamo il nome e con il -v

esempio:   poudriere jail -c -j freebsd_10-1×64 -v 10.2-RELEASE

Il procedimento potrebbe parecchio tempo, quindi abbiate pazienza.

Una volta concluso grazie al comando poudriere jail -l avemo la lista di tutte le jail installate:

poudriere jail -l

JAILNAME        VERSION         ARCH  METHOD TIMESTAMP           PATH
freebsd_10-2×64 10.2-RELEASE-p3 amd64 ftp    2016-05-06 15:23:48 /usr/local/poudriere/jails/freebsd_10-2×64

Una volta creata una jail, dovemo installarci un albero dei ports, è possibile mantenerne più di uno conteporaneamente ma in questo caaso vedremo come installarne uno solo.

Useremo l’opzione -p per dare un nome che sia ben identificativo come “HEAD” (Per convenzione molto usato) in quanto cercheremo di tenerlo sempre aggiornato.

poudriere ports -c -p HEAD

Anche questa procedura impiegherà parecchio tempo perchè tutto l’albero dei ports dovrà essere scaricato e scompattato. Una volta finito potremo vederlo con il comando:

poudriere ports -l

A questo punto possiamo cominciare a compilare i ports, quindi per prima cosa creeremo una lista di tutti quelli che ci interessano, andiamo a creare il file /usr/local/etc/poudriere.d/port-list dove al suo interno scriveremo la lista dei ports che ci interessano nel formato:

categoria-port/nome-port  es   www/apahce24

Mettendone uno per riga, le dipendenze vengono risolte in automatico quindi non ci servirà segnare anche quelle.

Dopodichè andremo a creare il file make.conf specifico per facilitarci nella gestione delle opzioni:

ee /usr/local/etc/poudriere.d/freebsd_10-2×64-make.conf

All’interno andremo a scrivere le opzioni che vogliamo abilitare/disabilitare di default, ad esempio per disabilitare la documentazio, il supporto lingua nativa, gli esempi e il supporto a X11 andremo a scrivere:

OPTIONS_UNSET+= DOCS NLS X11 EXAMPLES

Per copiare le opzioni da un’altra macchina, creare la cartella:

mkdir /usr/local/etc/poudriere.d/freebsd_10-2×64-options

e copiarci dentro i files contenuti in /var/db/ports/*

Ora possiamo davvero cominciare a fare sul serio e avere un po’ d’azione!

Con il comando poudriere options -j freebsd_10-2×64 -p HEAD -f /usr/local/etc/poudriere.d/port-list configureremo le opzioni mancanti, se in futuro volessimo cambiare le opzioni, potremo farlo con il comando  poudriere options -c -j freebsd_10-2×64 -p HEAD -f /usr/local/etc/poudriere.d/port-list

Per avviare la compilazione:

poudriere bulk -j freebsd_10-2×64 -p HEAD -f /usr/local/etc/poudriere.d/port-list

A parte la prima volta, è cosa buona e giusta prima di lanciare la compilazione, aggiornare sia la jail che l’albero dei ports, procediamo quindi con  i seguenti comandi:

poudriere jail -u -j freebsd_10-2×64    —> Aggiorna la jail

poudriere ports -u -p HEAD              —> Aggiorna i ports

Notasi che la procedura di compilazione è un processo estremamente lungo, può durare tranquillamente diverse ore, se siete collegati via ssh considerate l’uso di screen (sysutils/screen)

 

Preparare Nginx

Nginx verrà usato per due distinti motivi:

– come repository per i nostri pacchetti

– come interfaccia web per Poudriere con cui monitorare lo stato della compilazione

Per prima cosa andiamo ad abilitare il server web aggiungendo nginx_enable=”YES” a /etc/rc.conf

Poi passiamo a editare il file di configurazione

ee /usr/local/etc/nginx/nginx.conf

Troviamo la sezione server modifichiamo come segue:

# http context

. . .

    server {
        listen 80 default;
        nome-server-o-IP;
        root /usr/local/share/poudriere/html;
    }

}

Dopodichè  aggiungiamo/modifichiamo queste Location:

location / {
            root   /usr/local/share/poudriere/html;
            index  index.html index.htm;
        }

      location /data {
            alias /usr/local/poudriere/data/logs/bulk;
            autoindex on;
        }

        location /packages {
            root /usr/local/poudriere/data;
            autoindex on;
        }
Una volta editato, salviamolo e passiamo a modificare il file di configurazione di mime.types per fare in modo che i nostri report dei log siano visibili nel browser. Quindi:

ee /usr/local/etc/nginx/mime.types

troviamo la sezione che specifica il testo/semplice e aggiungiamoci i log

text/mathml                         mml;
text/plain                          txt log;
text/vnd.sun.j2me.app-descriptor    jad;

Lanciamo il configtest per verificare di non aver fatto errori:

service nginx configtest

e poi

service nginx start

Se abbiamo un firewall attivo modifichiamolo i modo da permettere il traffico sulla porta 80

Ora se puntiamo il nostro server dovremmo vedere la pagina iniziale di Poudriere

poudrier-nginx

Configurare i repository

Per prima cosa dobbiamo copiare il certificato del server sui client, quindi colleghiamoci via ssh e creiamo le cartelle necessarie

mkdir -p /usr/local/etc/ssl/{keys,certs}

poi creiamo il file

/usr/local/etc/ssl/certs/poudriere.cert

incollandoci dentro il certificato preso dal nostro server (/usr/local/etc/ssl/certs/poudriere.cert)

Ora che abbiamo il certificato al suo posto possiamo procedere creando la cartella dove metteemo i dati dei repository

mkdir -p /usr/local/etc/pkg/repos

e poi creiamo il file

ee /usr/local/etc/pkg/repos/poudriere.conf

con dentro i seguenti dati:

poudriere: {
url: “http://nome_server_o_IP/packages/freebsd_10-2×64-HEAD/,
mirror_type: “http”,
signature_type: “pubkey”,
pubkey: “/usr/local/etc/ssl/certs/poudriere.cert”,
enabled: yes

}

Creiamo inoltre ancora un file per disabilitare i repo ufficiali in /usr/local/etc/pkg/repos/freebsd.conf

FreeBSD: {
enabled: no
}

 

Ora basta che lanciamo un pkg update e siamo a cavallo 😀

Finito! In questo modo le macchine useranno i nostri repo con i pacchetti configurati come vogliamo.

 

Per concludere una lista riassuntiva dei comandi utili:

 

#Il file dove stanno i port da compilare
/usr/local/etc/poudriere.d/port-list

# lista i port installati
portmaster –list-origins | sort -d | tee /usr/local/etc/poudriere.d/port-list

#Settare il make.conf per la specifica jail
/usr/local/etc/poudriere.d/nome-jail-make.conf

#Creare una jail
poudriere jail -c -j nome-jail -v 10.2-RELEASE

#Listare le jail
poudriere jail -l

#Creare l’albero dei port
poudriere ports -c -p NOME

#Listarlo
poudriere ports -l

#Cartella dove risiedono le opzionioni dei port
/usr/local/etc/poudriere.d/freebsd_10-2×64-options

#Configurare le opzionioni   -c per rifarlo in futuro
poudriere options -j nomejail -p nomeports -f /usr/local/etc/poudriere.d/port-list

#Update jail
poudriere jail -u -j nome-jail

#Update ports
poudriere ports -u -p nome-ports

#Ricompilare i port che sono cambiati dopo un aggiornamento
poudriere bulk -j nome-jail -p nome-ports -f /usr/local/etc/poudriere.d/port-list

Submit a Comment

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *