Guida jail FreeBSD 12.1/GCC8 con CCACHE per compilare velocemente

4lphA

Utente Emerald
12 Dicembre 2009
792
90
105
358
Buonasera, dopo molti anni di inattivitá sul forum ho deciso di tornare con una guida che spero sará utile alla community.

Buona parte degli user della community probabilmente conoscerá giá i concetti ma mi sembra abbastanza comodo avere tutta la risorsa in un'unica guida.
Partiamo dunque con la creazione di una jail a 32 bit all'interno di FreeBSD per poi installare e configurare la funzionalita CCACHE che aiuterá a migliorare le performance di compilazione una volta compilata la prima volta la Source di gioco.
mkdir -p /home/jails/jailsrc
cd /home/jails/jailsrc
fetch http://ftp.freebsd.org/pub/FreeBSD/releases/i386/i386/12.1-RELEASE/base.txz
tar xpf base.txz;rm -rf boot;rm base.txz
Nel caso la connettivitá ad internet dovesse mancare all'interno della Jail copiare il file resolv.conf all'interno dell'etc della jail:
cp /etc/resolv.conf /home/jails/jailsrc/etc/resolv.conf
Creare un file jail.conf per indicare le configurazioni della jail all'interno della cartella /etc/ della propria VM:
ee /etc/jail.conf
#Incollare quindi il testo sottostante all'interno del file jail.conf dopodiche premere il tasto Esc della tastiera e quindi salvare dando invio.
allow.raw_sockets = 1;
exec.clean;
exec.system_user = "root";
exec.jail_user = "root";
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.consolelog = "/var/log/jail_${name}_console.log";
mount.devfs;
allow.mount;
allow.set_hostname = 0;
allow.sysvipc = 0;
path = "/home/jails/${name}";
jailsrc {
host.hostname = "jailsrc.freebsd.org";
ip6 = "inherit";
ip4 = "inherit";
}
Abilitare l'avvio della jail all'avvio della virtual machine:
sysrc jail_enable="YES"
# Avviare il servizio jail senza impostare enable="YES"
service jail onestart
# Avviare il servizio jail impostando enable="YES"
service jail start
# Visualizzare la lista delle jail in esecuzione
jls
# Accedere alla shell di una specifica jail <id>
jexec 1 tcsh
Per poter quindi continuare con la nostra guida sará necessario riavviare la VM ed entrare quindi nella jail per fare le prime configurazioni, avviamo quindi la jail
con il comando jexec 1 tcsh indicato sopra.
Come primi passaggi sará necessario andare quindi a impostare una password per la nostra jail e configurare gli accessi ssh.
passwd
ee /etc/ssh/sshd_config
Cambiare il parametro della porta rimuovendo il commento (#) e indicando quindi una porta a vostro piacimento per l'accesso in SSH (io utilizzo nello specifico la 223)
e in seguito permettere l'accesso come root:
Trovare
#Port 22
e renderla quindi
Port 223
Trovare in seguito:
#PermitRootLogin no
e sostituirlo con:
PermitRootLogin yes
Dopo essere usciti e aver salvato questo file sará necessario procedere ad installare tutti i pacchetti necessarii per la compilazione.
pkg install gmake && pkg install makedepend && pkg install subversion && pkg install devil && pkg install python27 && pkg install gcc8 && pkg install mysql55-client mysql55-server && pkg install ccache && pkg install gdb
Dopo aver fatto ció potremo andare ad impostare come avvio automatico i servizi sshd e mysql:
ee /etc/rc.conf
Inserire in questo file quanto segue dopo di che chiudere e salvare.
#Enable SSH
sshd_enable="YES"
#Enable Mysql
mysql_enable="YES"
Andiamo quindi a configurare il CCACHE che servirá a velocizzare la velocitá di compilazione della nostra sorgente una volta compilata la prima volta.
ee /etc/make.conf
#Inserire in questo file quanto segue: (L'if é uno screenshot perché attualmente non mi é stato possibile aggiungere la funzione nel post)
.if !defined(NO_CCACHE)
CC= /usr/local/libexec/ccache/world-cc
CXX= /usr/local/libexec/ccache/world-c++
.endif
currdir.png

NO_CCACHE= yes
.endif
#Salvare quindi e chiudere il file.
#Aprire in seguito CSHRC
ee /.cshrc
#Inserire all'interno del file:
# set ccache varibles
setenv PATH /usr/local/libexec/ccache:$PATH
setenv CCACHE_PATH /usr/bin:/usr/local/bin
setenv CCACHE_DIR /var/tmp/ccache
setenv CCACHE_LOGFILE /var/log/ccache.log
# set ccache temp size to 512MB (default 1GB)
if ( -x /usr/local/bin/ccache ) then
/usr/local/bin/ccache -M 512M > /dev/null
endif
#Per poter verificare l'utilizzo di memoria del CCACHE sará possibile utilizzare il comando sottostante.
ccache -s
Per poter utilizare la funzione CCACHE nel Makefile dovrete indicare dove indicata la versione GCC anche CCACHE, quindi:
#Stringa originale
CC = g++8
#Sostituirla con:
CC = ccache g++8
Una volta terminato il tutto potrete quindi riavviare la VM e collegarvi direttamente alla porta impostata, nel mio esempio la 223 in modo da accedere direttamente alla jail.
P.S. Se vorrete utilizzare il mysql all'interno della Jail dovrete disattivarlo dalla VM principale dal file /etc/rc.conf e spegnere il servizio mysql dalla VM (service mysql-server stop)

Spero di non aver saltato alcun passaggio, nel caso riscontraste un qualsiasi problema non esitate a farmelo notare.
Un cordiale saluto.

TOXZIK AkA RIOG
 
Da quando c'è la sezione guide qui...
Bella guida devo dire, per compilare non penso serva mysql-server per compilare a dir la verità.
Non ho mai provato ad usarlo con i src server, suppongo che i 512M li hai impostati in base a test dopo che hai verificato la grandezza della cache ? (Boh a me sembrano pochi)
 
  • Mi piace
Reazioni: 4lphA
Esattamente, ho fatto alcuni test ed anche in base alla memoria disponibile della mia VM ho scelto di impostare i 512Mb, dimensione cambiabile dalla config, ho lasciato anche un commento con alcuni esempi che spero possano tornare utili.

Io ho provato a compilare senza mysql ma mi é stato richiesto, quindi ho preferito aggiungere anche l'installazione di mysql, non fa mai male averla :D
potrebbe essere solamente la dep di mysql client/ libmysqlclient che è richiesta, però non so come FreeBSD lo distribuisce (non ho mai verificato) quindi non saprei se effettivamente distribuiscono qualcosa assieme al Server xD. Si ho visto i commenti, e grazie per averli lasciati non avendo mai usato ccache, sicuramente saranno utili da quei pochi pazzi che consulteranno la guida lmao.
 
  • Mi piace
Reazioni: 4lphA
Da quando c'è la sezione guide qui...
Bella guida devo dire, per compilare non penso serva mysql-server per compilare a dir la verità.
Non ho mai provato ad usarlo con i src server, suppongo che i 512M li hai impostati in base a test dopo che hai verificato la grandezza della cache ? (Boh a me sembrano pochi)
Esattamente, ho fatto alcuni test ed anche in base alla memoria disponibile della mia VM ho scelto di impostare i 512Mb, dimensione cambiabile dalla config, ho lasciato anche un commento con alcuni esempi che spero possano tornare utili.

Io ho provato a compilare senza mysql ma mi é stato richiesto, quindi ho preferito aggiungere anche l'installazione di mysql, non fa mai male averla :D