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/
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,
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/
Creiamo il certificato:
openssl rsa -in /usr/local/etc/ssl/keys/
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.
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/
Per finire, settiamo l’url dove il server sarà raggiungibile:
URL_BASE=http://nome_server_o_
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/
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/
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/
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/
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/
Per avviare la compilazione:
poudriere bulk -j freebsd_10-2×64 -p HEAD -f /usr/local/etc/poudriere.d/
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.
Troviamo la sezione server modifichiamo come segue:
# http context
. . .
server {
listen 80 default;
nome-server-o-IP;
root /usr/local/share/poudriere/
}
}
Dopodichè aggiungiamo/modifichiamo queste Location:
location / {
root /usr/local/share/poudriere/
index index.html index.htm;
}
location /data {
alias /usr/local/poudriere/data/
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.
troviamo la sezione che specifica il testo/semplice e aggiungiamoci i log
text/mathml
text/plain
text/vnd.sun.j2me.app-
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
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,
poi creiamo il file
/usr/local/etc/ssl/certs/
incollandoci dentro il certificato preso dal nostro server (/usr/local/etc/ssl/certs/
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/
con dentro i seguenti dati:
poudriere: {
url: “http://nome_server_o_IP/
mirror_type: “http”,
signature_type: “pubkey”,
pubkey: “/usr/local/etc/ssl/certs/
enabled: yes
}
Creiamo inoltre ancora un file per disabilitare i repo ufficiali in /usr/local/etc/pkg/repos/
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/
# lista i port installati
portmaster –list-origins | sort -d | tee /usr/local/etc/poudriere.d/
#Settare il make.conf per la specifica jail
/usr/local/etc/poudriere.d/
#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/
#Configurare le opzionioni -c per rifarlo in futuro
poudriere options -j nomejail -p nomeports -f /usr/local/etc/poudriere.d/
#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/
Lascia un commento
Devi essere connesso per inviare un commento.