I file che contengono i codici sorgenti di Squid possono essere prelevati direttamente dal sito ufficiale del progetto di Squid alla URL http://www.squid-cache.org/Versions/v2/, il formato dei file contenenti i sorgenti è un file in formato compresso. I file con estensione .bz2 sono stati trattati con bzip(8), bzip2 è un nuovo algoritmo per la compressione dei dati che generalmente crea file che sono pari al 60-70% della dimensione dei corrispondenti ottenuti usando gzip (http://www.digistar.com/bzip2/index.html)
squid-2.5.STABLE4.tar.bz2 |
oppure è possibile prelevare un file compresso con estensione .gz che è stato trattato con gzip(8), GNU zip è un programma destinato a rimpiazzare compress, ovvero il programma originario di compressione dei sistemi UNIX®, le specifiche applicative sono descritte nelle RFC 1951 e 1952 (http://www.ietf.org/rfc/rfc1951.txt - http://www.ietf.org/rfc/rfc1952.txt)
squid-2.5.STABLE4.tar.gz |
dove 2.5 indica la versione, STABLE4 indica la sottoversione della release STABLE. Seguendo lo standard appena descritto il file contenente l'archivio dei codici sorgenti per la versione squid-2.5STABLE6 sarà dunque
squid-2.5.STABLE6.tar.bz2 |
oppure
squid-2.5.STABLE6.tar.gz |
Il Cuncurrent Version System (CVS) è un sistema del tipo client/server che consente agli sviluppatori, seppur divisi da distanze geografiche rilevanti, di lavorare in un'unico team di sviluppo. Non è necessario che il progetto sia necessariamento legato allo sviluppo del software, anche un saggio come questo può essere elaborato nell'ambito di un progetto comune che prevede l'utilizzo di un repository CVS centrale. La storia delle versioni che vengono inserite dagli sviluppatori verrà memorizzata su un unico server centrale, le macchine client mantengono una copia di tutti i files sui quali, di fatto, tutti gli sviluppatori lavorano. La rete internet divide il client ed il server e consente di effettuare operazioni in CVS come i controlli sul codice sorgente e gli aggiornamenti del codice stesso
per eseguire un checkout per l'intero l'albero dei sorgenti di Squid che sono correntemente utilizzati da un server CVS
% touch .cvspass
% cvs -d :pserver:anoncvs@cvs.squid-cache.org:/squid login
CVS password:
|
a questo punto digitare anoncvs, subito dopo
% cvs -z3 -d :pserver:anoncvs@cvs.squid-cache.org:/squid co -P squid
|
per aggiornare i sorgenti digitare il comando cvs -z3 all'interno della directory squid
% cd squid
% cvs -z3 update -dP
|
questo tipo di ambiente è stato testato utilizzando bash come shell di sistema
per accedere alle vecchie versioni di Squid dovremmo utilizzare la stessa procedura di accesso al server CVS cvs.squid-cache.org ma dovremmo specificare le versioni specifiche per le quali si intendono sincronizzare i sorgenti
% cvs -d :pserver:anoncvs@cvs.squid-cache.org:/squid login
CVS password:
|
per Squid-2.5 dovremmo utilizzare il comando
% cvs -z3 -d :pserver:anoncvs@cvs.squid-cache.org:/squid co -r SQUID_2_5 squid
|
per aggiornare i sorgenti digitare il comando cvs -dP all'interno della directory squid
% cd squid
% cvs -z3 update -dP
|
per Squid-2.4 dovremmo utilizzare il comando
% cvs -z3 -d :pserver:anoncvs@cvs.squid-cache.org:/squid co -r SQUID_2_4 squid
|
per aggiornare i sorgenti digitare il comando cvs -dP all'interno della directory squid
% cd squid
% cvs -z3 update -dP
|
utilizzando il comando more(8) possiamo eseguire una pipe di interrogazione sul file di ./configure per verificare la versione di Squid appena prelevata da cvs.squid-cache.org
% cd squid
% more configure | grep VERSION
VERSION=2.5.STABLE7-RC3-CVS
|
non è possibile manipolare le versioni correnti e quelle passate dei files, i clients possono effettuare le stesse operazioni che sono anche disponibili localmente, maggiori informazioni per prelevare un sistema CVS possono essere reperite alla URLs https://www.cvshome.org/
Oltre che sul sito web il file contenente il codice sorgente di Squid è anche disponibile sul sito ftp del progetto Squid (ftp://ftp.squid-cache.org/pub/squid-2/STABLE/), per prelevare il file utilizziamo il comando fetch(8), l'implementazione originale di questo comando è di Jean-Marc Zucconi e viene incluso in tutti i sistemi FreeBSD, in alternativa potremmo utilizzare l'utility wget(8), per maggiori informazioni a riguardo consultare la URLs http://www.gnu.org/software/wget/wget.html
% fetch ftp://ftp.squid-cache.org/pub/squid-2/STABLE/squid-2.5.STABLE6.tar.gz Receiving squid-2.5.STABLE6.tar.gz (1355951 bytes): 100% 1355951 bytes transferred in 18.9 seconds (69.94 kBps) |
presso la home page del progetto Squid sono anche disponibili tutte le patch che consentono di aggiungere funzionalità o di aggiornare la versione di Squid (http://www.squid-cache.org/Versions/v2/).
Per compilare Squid è necessario disporre di un compilatore ANSI C[1], tutti i moderni sistemi UNIX® includono un compilatore con queste caratteristiche preinstallato. I vecchi Sistemi SunOS non dispongono di compilatori compatibili con lo standard ANSI C ed il compilatore per i Sistemi Sun Solaris deve essere acquistato a parte.
Il compilatore GNU C è disponibile presso il sito ftp del progetto GNU (ftp://ftp.gnu.org/), inoltre per compilare ed installare correttamente Squid sono anche necessarie le librerie gcc (ftp://ftp.gnu.org/gnu/gcc/), il package binutils (ftp://ftp.gnu.org/gnu/binutils/) ed i linguaggi Awk e Perl (http://www.perl.org/).A seconda delle opzioni di compilazione e dei moduli di Squid selezionati, possono inoltre essere necessarie le librerie OpenLDAP ed OpenSSL, nonché i Sorgenti di Samba 2.2.x o 3.0.x.
Dopo aver prelevato la distribuzione è necessario scompattarla, utilizzeremo in comando bunzip2(8) ed il comando tar(8), sono necessari almeno 20 MB liberi sul disco. In ogni caso, per compilare ed installare tutte le versioni di Squid, è necessario eseguire lo script di ./configure prima di lanciare il comando make
% bunzip2 squid-2.5.STABLE5.tar.bz2 % tar xvf squid-2.5.STABLE5.tar squid-2.5.STABLE5/ squid-2.5.STABLE5/CONTRIBUTORS ... % cd squid-2.5.STABLE5 % ./configure |
tutte le caratteristiche di Squid vengono attivate utilizzando lo script di configurazione (./configure), alcune di queste caratteristiche, per essere attivate, devono essere dichiarate specificatamente al momento della compilazione dei codici sorgenti, per ottenere una configurazione ottimale può anche rendersi necessario ricompilare ulteriormente e vedremo in seguito come procedere.
Una delle ragioni per le quali una specifica caratteristica di Squid possa non essere disponibile è determinata dal livello di compatibilità del sistema operativo con i codici sorgenti. Anche se Squid viene rilasciato con un codice sorgente valido per un'utilizzo generico e multipiattaforma, è comunque possibile che determinate funzioni, come async-IO o le ACL ARP-based, non siano disponibili per quel tipo di sistema operativo. Lo script di configurazione (./configure) può contenere alcune caratteristiche che informano gli utenti sullo stato delle opzioni di configurazione disponibili.
Alcuni Amministratori di Sistema disabilitano volutamente determinate caratteristiche di Squid per rendere sempre più performante e sicuro il funzionamento delle loro piattaforme, come abbiamo accennato prima, è possibile includere in Squid le funzionalità che oggi non sono richieste senza problemi o effetti collaterali ricompilando i sorgenti in un secondo momento.
Il programma di configurazione (./configure) ha inoltre una seconda funzione, infatti inserisce una sorta di intestazione che informa il compilatore C relativamente alle chiamate o alle funzioni di Sistema. Questo fatto, molto spesso, rende la compilazione del codice sorgente piuttosto difficile. Il compilatore GNU configura i controlli dello script per programmare le librerie e le chiamate di Sistema realmente disponibili sul sistema operativo che state utilizzando. Questa funzionalità del compilatore GNU facilita la messa a punto del codice.
Il file di configurazione (./configure) è generico, in particolare si tratta di uno script realizzato per la Bourne Shell[2] (/bin/sh), se avete sostituito il comando /bin/sh con una Shell non compatibile o con una Shell che effettua delle chiamate non conformi allo standard Posix, non potrete compilare ed installare Squid sul Vostro Sistema Operativo.
Tutte le opzioni di configurazione vengono regolate dunque dall'opzione ./configure. Nell'esempio che tratteremo in seguito, compileremo Squid con diverse caratteristiche tra le quali, il modello di autenticazione, lo schema di autenticazione con i relativi helpers, diskd come modello di Disk Storage utilizzato ed il supporto Simple Network Management Protocol (SNMP)
% ./configure --prefix=/usr/local/squid/ \ --bindir=/usr/local/sbin \ --sysconfdir=/usr/local/etc/squid \ --datadir=/usr/local/etc/squid \ --libexecdir=/usr/local/libexec/squid \ --localstatedir=/usr/local/squid \ --enable-removal-policies="lru heap" \ --enable-auth="basic ntlm digest" \ --enable-basic-auth-helpers="NCSA PAM YP MSNT winbind" \ --enable-digest-auth-helpers=password \ --enable-external-acl-helpers="ip_user unix_group wbinfo_group winbind_group" \ --enable-ntlm-auth-helpers="SMB winbind" \ --enable-async-io --with-pthreads \ --enable-storeio="ufs diskd null aufs" \ --enable-snmp \ --enable-ssl \ --enable-htcp \ --disable-http-violations \ --disable-ident-lookups \ --enable-useragent-log \ --enable-arp-acl \ --enable-err-languages="English Italian" \ --enable-default-err-language="Italian" \ --prefix=/usr/local |
molte di queste opzioni sono tra quelle che vengono più comunemente utilizzate.
Come abbiamo accennato in precedenza, molto spesso accade di avere la necessità di eseguire nuovamente lo script di ./configure, questo può accadere nel caso in cui si decida di modificare alcune caratteristiche. Per eseguire nuovamente lo script di configurazione con le stesse opzioni utilizzate in precedenza possiamo utilizzare lo script config.status
% cd squid-2.5.STABLE6 % ./config.status --recheck |
il file ./config.status viene generato automaticamente al momento della prima eseguzione dello script di ./configure. Per aggiungere o rimuovere le opzioni di ./configure è necessario eseguire nuovamente il comando, prima di mandarlo in esecuzione eseguiremo un make clean
% make clean % ./configure --enable-snmp |
Per eseguire questa operazione è richiesta la presenza del programma patch, questo programma è disponibile sul sito ftp del progetto GNU (ftp://ftp.gnu.org/gnu/patch/) e generalmente viene incluso in qualsiasi sistema operativo di classe UNIX®.
E' sempre una buona norma duplicare l'intera struttura della directory che contiene i codici sorgenti di Squid prima di applicare qualsiasi patch
% cd squid-2.5.STABLE5 % patch < /tmp/nome_file.patch |
dopo aver applicato la patch potremo finalmente eseguire il rebuild di Squid preparando i codici sorgenti alla piattaforma specifica
% make distclean % ./configure % make % make install |
se il programma patch(8) si dovesse rifiutare di funzionare è possibile che si stia utilizzando una versione troppo vecchia, possiamo prelevare una versione più recente dal repository ftp del progetto GNU (ftp://ftp.gnu.org/gnu/patch/).
Il daily snapshot dei codici sorgenti di Squid è il rilascio del codice sorgente più aggiornato per il branch corrente (attualmente squid-2.5). Dalla data di rilascio dell'ultima versione STABLE vengono rilasciate diverse patch che correggono gli errori rilevati dagli utenti e dagli sviluppatori. Questi aggiornamenti oltre ad altre correzioni minori, vengono incluse in una versione STABLE corrente di Squid, questa release prende il nome di "current Squid-2.5 snapshots" e viene rilasciata giornalmente. La versione current può essere considerata alla stregua della successiva release di Squid-STABLE. La procedura per installare e compilare la versione current è la medesima e la URLs dalla quale prelevare il codice sorgente è http://www.squid-cache.org/Versions/v2/2.5/, la sezione da consultare per procedere con il download è la "Daily auto-generated release"
% fetch http://www.squid-cache.org/Versions/v2/2.5/squid-2.5.STABLE6-20040926.tar.gz Receiving squid-2.5.STABLE6-20040926.tar.gz (1361403 bytes): 100% 1361403 bytes transferred in 19.2 seconds (69.40 kBps) |
ora scompattiamo l'archivio contenente i sorgenti e configuriamo il codice per la nostra piattaforma
% tar zxvf squid-2.5.STABLE6-20040926.tar.gz ... ... % cd squid-2.5.STABLE6-20040926 % ./configure --enable-removal-policies="lru heap" \ --enable-auth="basic ntlm digest" \ --enable-basic-auth-helpers="NCSA PAM YP MSNT winbind" \ --enable-digest-auth-helpers=password \ --enable-external-acl-helpers="ip_user unix_group wbinfo_group winbind_group" \ --enable-ntlm-auth-helpers="SMB winbind" \ --enable-async-io --with-pthreads \ --enable-storeio="ufs diskd null aufs" \ --enable-snmp \ --enable-ssl \ --enable-htcp \ --disable-http-violations \ --disable-ident-lookups \ --enable-useragent-log \ --enable-arp-acl \ --enable-err-languages="English Italian" \ --enable-default-err-language=Italian |
naturalmente, come detto in precedenza, dovremo scegliere delle opzioni di configurazione (./configure) mirate che ci consentiranno di definire la nostra migliore configurazione, ora compiliamo il codice ed installiamo i file binari
% make % make install % make clean |
Come abbiamo visto, lo script di ./configure può essere avviato con numerose opzioni, una di quelle più utilizzate è
% ./configure --prefix |
con questa opzione si definisce il percorso (path) nel quale verranno installati i file eseguibili di Squid, la directory che viene utilizzata come base di installazione nel file di configurazione incluso con la distribuzione è /usr/local/squid/.
Se si vuole installare Squid in un percorso diverso è quindi possibile modificare il valore standard eseguendo lo script di ./configure utilizzando le seguenti opzioni
% ./configure -exec-prefix=/usr/local/sbin |
questa opzione consente di modificare il percorso di installazione dei file binari dipendenti dalla architettura
% ./configure --prefix=/usr/local/squid |
questa opzione se utilizzata singolarmente imposterà la directory di default per gli eseguibili, i logs ed i files di configurazione, si tratta del valore standard
% ./configure --localstatedir=/var/log |
questa opzione consente di modificare il percorso della directory di var
% ./configure --sysconfdir=/usr/local/etc/squid |
questa opzione consente di modificare il percorso della directory etc
% ./configure --help |
questa opzione consente di visualizzare tutte le opzioni di ./configure attualmente disponibili, per abilitare o disabilitare alcune delle features di Squid, dovremo specificare diverse opzioni di configurazione. Mostriamo ora tutte le opzioni di ./configure, la lista è aggiornata a squid-2.5.STABLE10
Usage: configure [options] [host]
Options: [defaults in brackets after descriptions]
Configuration:
--cache-file=FILE cache test results in FILE
--help print this message
--no-create do not create output files
--quiet, --silent do not print `checking...' messages
--site-file=FILE use FILE as the site file
--version print the version of autoconf that created configure
Directory and file names:
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local/squid]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[same as prefix]
--bindir=DIR user executables in DIR [EPREFIX/bin]
--sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
--libexecdir=DIR program executables in DIR [EPREFIX/libexec]
--datadir=DIR read-only architecture-independent data in DIR
[PREFIX/share]
--sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data in DIR
[PREFIX/com]
--localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
--libdir=DIR object code libraries in DIR [EPREFIX/lib]
--includedir=DIR C header files in DIR [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
--infodir=DIR info documentation in DIR [PREFIX/info]
--mandir=DIR man documentation in DIR [PREFIX/man]
--srcdir=DIR find the sources in DIR [configure dir or ..]
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM
run sed PROGRAM on installed program names
Host type:
--build=BUILD configure for building on BUILD [BUILD=HOST]
--host=HOST configure for HOST [guessed]
--target=TARGET configure for TARGET [TARGET=HOST]
Features and packages:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--x-includes=DIR X include files are in DIR
--x-libraries=DIR X library files are in DIR
--enable and --with options recognized:
--disable-dependency-tracking Speeds up one-time builds
--enable-dependency-tracking Do not reject slow dependency extractors
--enable-maintainer-mode enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer
--enable-dlmalloc[=LIB] Compile & use the malloc package by Doug Lea
--enable-gnuregex Compile GNUregex
--enable-xmalloc-statistics
Show malloc statistics in status page
--enable-carp Enable CARP support
--enable-async-io[=N_THREADS]
Shorthand for
--with-aufs-threads=N_THREADS
--with-pthreads
--enable-storeio=ufs,aufs
--with-aufs-threads=N_THREADS
Tune the number of worker threads for the aufs object
store.
--with-pthreads Use POSIX Threads
--with-aio Use POSIX AIO
--with-dl Use dynamic linking
--enable-storeio="list of modules"
Build support for the list of store I/O modules.
The default is only to build the ufs module.
See src/fs for a list of available modules, or
Programmers Guide section <not yet written>
for details on how to build your custom store module
--enable-heap-replacement
Backwards compability option. Please use the
new --enable-removal-policies directive instead.
--enable-removal-policies="list of policies"
Build support for the list of removal policies.
The default is only to build the lru module.
See src/repl for a list of available modules, or
Programmers Guide section 9.9 for details on how
to build your custom policy
--enable-icmp Enable ICMP pinging
--enable-delay-pools Enable delay pools to limit bandwidth usage
--enable-useragent-log Enable logging of User-Agent header
--enable-referer-log Enable logging of Referer header
--disable-wccp Disable Web Cache Coordination Protocol
--enable-kill-parent-hack
Kill parent on shutdown
--enable-snmp Enable SNMP monitoring
--enable-cachemgr-hostname[=hostname]
Make cachemgr.cgi default to this host
--enable-arp-acl Enable use of ARP ACL lists (ether address)
--enable-htcp Enable HTCP protocol
--enable-ssl Enable ssl gatewaying support using OpenSSL
--with-openssl[=prefix]
Compile with the OpenSSL libraries. The path to
the OpenSSL development libraries and headers
installation can be specified if outside of the
system standard directories
--enable-forw-via-db Enable Forw/Via database
--enable-cache-digests Use Cache Digests
see http://www.squid-cache.org/FAQ/FAQ-16.html
--enable-default-err-language=lang
Select default language for Error pages (see
errors directory)
--enable-err-languages="lang1 lang2.."
Select languages to be installed. (All will be
installed by default)
--with-coss-membuf-size COSS membuf size (default 1048576 bytes)
--enable-poll Enable poll() instead of select(). Normally poll
is preferred over select, but configure knows poll
is broken on some platforms. If you think you are
smarter than the configure script, you may enable
poll with this option.
--disable-poll Disable the use of poll().
--disable-http-violations
This allows you to remove code which is known to
violate the HTTP protocol specification.
--enable-ipf-transparent
Enable Transparent Proxy support for systems
using IP-Filter network address redirection.
--enable-pf-transparent
Enable Transparent Proxy support for systems
using PF network address redirection.
--enable-linux-netfilter
Enable Transparent Proxy support for Linux 2.4.
--with-large-files Enable support for large files (logs etc).
--enable-large-cache-files
Enable support for large cache files (>2GB).
WARNING: on-disk cache format is changed by this option
--with-build-environment=model
The build environment to use. Normally one of
POSIX_V6_ILP32_OFF32 32 bits
POSIX_V6_ILP32_OFFBIG 32 bits with large file support
POSIX_V6_LP64_OFF64 64 bits
POSIX_V6_LPBIG_OFFBIG large pointers and files
XBS5_ILP32_OFF32 32 bits (legacy)
XBS5_ILP32_OFFBIG 32 bits with large file support (legacy)
XBS5_LP64_OFF64 64 bits (legacy)
XBS5_LPBIG_OFFBIG large pointers and files (legacy)
default The default for your OS
--enable-leakfinder
Enable Leak Finding code. Enabling this alone
does nothing; you also have to modify the source
code to use the leak finding functions. Probably
Useful for hackers only.
--disable-ident-lookups
This allows you to remove code that performs
Ident (RFC 931) lookups.
--disable-internal-dns This prevents Squid from directly sending and
receiving DNS messages, and instead enables the
old external 'dnsserver' processes.
--enable-truncate This uses truncate() instead of unlink() when
removing cache files. Truncate gives a little
performance improvement, but may cause problems
when used with async I/O. Truncate uses more
filesystem inodes than unlink..
--disable-hostname-checks
Squid by default rejects any host names with
odd characters in their name to conform with
internet standards. If you disagree with this
you may use this switch to turn off any such
checks, provided that the resolver used by
Squid does not reject such host names.. This
may be required to participate in testbeds for
international domain names.
--enable-underscores Squid by default rejects any host names with _
in their name to conform with internet standards.
If you disagree with this you may allow _ in
hostnames by using this switch, provided that
the resolver library on the host where Squid runs
does not reject _ in hostnames...
--enable-auth="list of auth scheme modules"
Build support for the list of authentication schemes.
The default is to build support for the Basic scheme.
See src/auth for a list of available modules, or
Programmers Guide section authentication schemes
for details on how to build your custom auth scheme
module
--enable-auth-modules="list of helpers"
Backwards compability alias for --enable-basic-auth-helpers
--enable-basic-auth-helpers="list of helpers"
This option selects which basic scheme proxy_auth
helpers to build and install as part of the normal
build process. For a list of available
helpers see the helpers/basic_auth directory.
--enable-ntlm-auth-helpers="list of helpers"
This option selects which proxy_auth ntlm helpers
to build and install as part of the normal build
process. For a list of available helpers see
the helpers/ntlm_auth directory.
--enable-digest-auth-helpers="list of helpers"
This option selects which digest scheme authentication
helpers to build and install as part of the normal build
process. For a list of available helpers see the
helpers/digest_auth directory.
--enable-ntlm-fail-open Enable NTLM fail open, where a helper that fails one of the
Authentication steps can allow squid to still authenticate
the user.
--enable-external-acl-helpers="list of helpers"
This option selects which external_acl helpers to
build and install as part of the normal build
process. For a list of available helpers see the
helpers/external_acl directory.
--with-samba-sources=/path/to/samba-source-tree
Path where the correct Samba source files can be
found while building winbind helpers. (defaults to
use internal copies of the headers from Samba-2.2.7)
--disable-unlinkd Do not use unlinkd
--enable-stacktraces Enable automatic call backtrace on fatal errors
--enable-x-accelerator-vary
Enable support for the X-Accelerator-Vary
HTTP header. Can be used to indicate
variance within an accelerator setup.
Typically used together with other code
that adds custom HTTP headers to the requests.
--with-maxfd=N Override maximum number of filedescriptors. Useful
if you build as another user who is not privileged
to use the number of filedescriptors you want the
resulting binary to support
|
| [1] |
ANSI C è un linguaggio di programmazione |
| [2] |
Bourne Shell (sh) è la più vecchia delle shell di sistema e prende il nome dal suo creatore, Stephen Bourne. Si tratta di una shell molto primitiva se paragonata con quelle più moderne e funzionali |