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

Leave a reply:

Site Footer

Sliding Sidebar