Gestione della banda in Apache: differenze tra le versioni

m
nessun oggetto della modifica
mNessun oggetto della modifica
mNessun oggetto della modifica
Riga 1: Riga 1:
=Introduzione=
=Introduzione=
Questo articolo affronta il problema della gestione della banda in Apache (Ver. 1 e Ver. 2), mostrando come installare e configurare tre diversi moduli utilizzabili a tale fine:
[http://packages.debian.org/debarchiver Debarchiver] � uno strumento comodo e potente per poter gestire facilmente un repository Debian ben strutturato e suddiviso. Oltre a questo permette di mantenerlo in ordine (evitando il mantenimento di versioni vecchie) senza richiedere manutenzione da parte dell'amministratore.
==mod_bandwidth==
* HomePage: http://www.cohprog.com/mod_bandwidth.html
* Licenza: Apache Group licence
* Copyright: Yann Stettler and CohProg S�RL
* Versione Apache: 1
==bw_mod==
* HomePage: http://www.ivn.cl/apache/
* Licenza: Apache 2.0 License/[http://www.ivn.cl/apache/LICENSE.txt Ivn Project License]
* Copyright: Ivan Barrera A.
* Versione Apache: 2
==mod_bwshare==
* HomePage: http://www.topology.org/src/bwshare/README.html
* Licenza: [http://www.topology.org/src/bwshare/LICENCE Alan Kennington's modified Artistic Licence]
* Copyright: Alan Kennington
* Versione Apache: 1 e 2


=Installazione=
=Installazione=
L'installazione semplice, in quanto il programma incluso in debian:
<pre>
# apt-get install debarchiver
</pre>
Raccomando agli utenti di Sarge di installare la versione presente in testing, in quanto molto pi aggiornata e funzionale di quella inclusa nella release ''Stable''.
=Configurazione=
Tutta la configurazione di debarchiver racchiusa in un unico file: '''/etc/debarchiver.conf''', che analizziamo nel dettaglio:


==mod_bandwidth==
{{Box|Nota Bene:|le opzioni riportate nel file di configurazione sono inizialmente commentate in quanto i valori riportati sono quelli di default.}}
Il modulo '''mod_bandwidth''' � installato di default insieme al server apache; lo possiamo trovare in '''/usr/lib/apache/1.3/'''.
Se questo modulo dovesse dare problemi (esempi: non imposta correttamente la banda, ma sembra che i limiti che impostiamo siano visti come bit e non come byte, non accetta la direttiva MaxConnection), vi consiglio di reinstallarlo come descritto qui sotto.


* rechiamoci sul sito del produttore: http://www.cohprog.com/mod_bandwidth.html e scarichiamo l'ultima versione (link diretto:
ftp://ftp.cohprog.com/pub/apache/module/1.3.0/mod_bandwidth.c).<br/>
* per potre compilare questo modulo, abbiamo bisogno del pacchetto '''apache-dev'''. Per installarlo sufficiente dare:
<pre>
<pre>
# apt-get install apache-dev
$destdir = "/var/lib/debarchiver/dists";
$inputdir = "/var/lib/debarchiver/incoming";
</pre>
</pre>
* ora siamo pronti per compilare:
Dove verr� creato il repository (''destdir'') e dove vengono inseriti i pacchetti da aggiungere al repository (''inputdir'')
 
<pre>
<pre>
$ /usr/bin/apxs -c mod_bandwidth.c -o mod_bandwidth.so
# $copycmd = "cp -af";
# $movecmd = "mv";
# $rmcmd = "rm -f";
# $vrfycmd = "dscverify";
</pre>
</pre>
* una volta pronto il modulo, eseguiamo i seguenti comandi:
La lista dei comandi utilizzati nella gestione del repository... quelli di default, normalmente, sono corretti per la maggior parte delle situazioni.
 
<pre>
<pre>
# cd /usr/lib/apache/1.3/
# $cinstall = "installed";
# mv mod_bandwidth.so mod_bandwidth.so.bk
# mv /home/maxer/mod_bandwidth.so ./
</pre>
</pre>
Dove verranno messi i file ''.changes''.


in questo modo abbiamo creato una copia del modulo precedente, se presente, e poi abbiamo spostato il modulo appena compilato nella cartella dei moduli di apache.
<pre>
# $distinputcriteria = "^kernel.*\\.deb\$";
# $distinputdirs = "/path";
</pre>
Indica il criterio con il quale verranno accettati i pacchetti non aventi un file ''.changes'' e dove devono essere inseriti per essere ''presi'' dal sistema


<pre>
# $verifysignatures = 0;
</pre>
Attiva (1) o disattiva (0) la verifica della firma dei pacchetti inseriti nella ''inputdir''.


===Aggiornamento===
<pre>
# $verifysignaturesdistinput = 0;
</pre>
come sopra, ma riguarda la directory ''distinputdirs''


Il procedimento appena presentato, crea diversi problemi, soprattutto in fase di aggiornamento del sistema: ogni volta il pacchetto
apache viene aggiornato, infatti, il modulo appena creato verr sovrascritto con quello `vecchio`, e apache non si riavvier...
Una alternativa creare il modulo con un altro nome:
<pre>
<pre>
$ /usr/bin/apxs -c mod_bandwidth.c -o mod_bandwidth_new.so
# $bzip = 0;
# cp mod_bandwidth_new.so /usr/lib/apache/1.3/mod_bandwidth_new.so
# cd /usr/lib/apache/1.3/
# cp 500mod_bandwidth.info 500mod_bandwidth_new.info
</pre>
</pre>
Attiva la generazione di file compressi con bz2


Ora bisogna modificare il file '''500mod_bandwidth_new''' modificando il nome del
vecchio modulo con quello nuovo:
<pre>
<pre>
LoadModule: bandwidth_module /usr/lib/apache/1.3/mod_bandwidth-new.so
%distinputdirs =
Description: Bandwidth management on a per-connection basis
        (
        stable => 'stable',
        testing => 'testing',
        unstable => 'unstable'
        );
</pre>
</pre>
Permette di indicare i nomi delle directory contenute nella directory ''incoming'' che provvederanno a raccogliere i pacchetti di una deretminata release. In questo caso, nella release ''stable'' verranno inseriti i pacchetti presenti nella directory ''/var/lib/debarchiver/incoming/stable/''.


Ora necessario modificare il file '''/etc/apache/modules.conf''': la nuova direttiva da inserire, sostituendo eventualmente quella preesistente, la seguente:
<pre>
<pre>
LoadModule bandwidth_module /usr/lib/apache/1.3/mod_bandwidth_new.so
@distributions = ('stable', 'testing', 'unstable');
</pre>
</pre>
Questa lista indica le release presenti nel repository (in questo caso le 3 release ''stable'', ''testing'' e ''unstable'').


==bw_mod==
Come prima cosa procuriamoci il modulo dal [http://www.ivn.cl/apache/ sito dello sviluppatore]. A questo punto estraiamolo:
<pre># tar vzxf bw_mod-6.0.tgz</pre>
spostiamoci nella cartella appena creata (''bw_mod-6.0.tgz'') e verifichiamo che sia presente il file ''bw_mod-6.0.c''.


Ora, per poter compilare il nostro modulo, ci servono gli strumenti per farlo: nel nostro caso dovremo installare, tramite apt-get, il pacchetto '''apache2-dev''':
<pre>
<pre># apt-get install apache2-dev</pre>
%distmapping =
Bene, ora compiliamo tramite il comando ''/usr/bin/apsx2'':
        (
<pre># /usr/bin/apxs2 -i -a -c bw_mod-0.6.c</pre>
        stable => 'sarge',
Se non ci sono errori, possiamo procedere. Alla fine della compilazione sono state automaticamente aggiunte queste righe al file ''/etc/apache2/httpd.conf'':
        testing => 'etch',
<pre>Include /etc/apache2/sysconfig.d/loadmodule.conf
        unstable => 'sid'
LoadModule bw_module /usr/lib/apache2/bw_mod-0.6.so</pre>
        );
{{Box | Nota |Apache2 usa come file di configurazione ''/etc/apache2/apache2.conf''; tuttavia, per retrocompatibilit�, � presente anche un file ''/etc/apache2/httpd.conf'' in cui vengono inseriti solitamente gli "includes" dei moduli di terze parti laddove questi non usino il sistema '''mods-available/mods-enabled'''.
</pre>
Schema per la creazione di link tra i nomi delle release reali e i nomi dello stato delle release.


In questo caso non dobbiamo preoccuparci, in quanto nel file ''apache2.conf'' c'� un richiamo a ''httpd.conf''.}}
<pre>
# @architectures = ('i386');
</pre>
Permette di indicare la lista di archietture (racchiuse tra apici e separate da una virgola) presenti nel repository.


==mod_bwshare==
<pre>
@sections = ('main', 'contrib', 'non-free');
</pre>
Indica le sezioni in cui � suddiviso il repository. La sezione ''non-free'' non � pi� presente nelle release ufficiali Debian a partire dal rilascio di Sarge.


=Configurazione=
<pre>
@mailtos = ('Maintainer', 'Uploaders', '@knio.it', 'admin@dominio.it');
</pre>
Permette di indicare a chi verr� inviata una email di conferma dell'inserimento del pacchetto... � possibile specificare i seguenti parametri:
; Indirizzo Email : l'email verr� inviata a quel determinato indirizzo email
; Indirizzo email incompleto : l'email verr� inviata all'utente proprietario del file usando l'host specificato dopo il simbolo ''@''. Nel caso riportato, se l'utente proprietario del file � ''maxer'', l'email verr� inviata a ''maxer@knio.it''.
; Stringa senza @ : Verr� usato il valore del campo espresso (nell'esempio vengono utilizzati ''Maintainer'' e ''Uploader'') come indirizzo email.


==mod_bandwidth==
Ora configuriamo apache per utilizzare mod_bandwidth.<br/>
Aggiungiamo il modulo al file '''/etc/apache/modules.conf'''. Per fare questo abbiamo due possibilit:
* modificare a mano il file, aggiungendo la seguente riga, alla finedel file:
<pre>
<pre>
LoadModule bandwidth_module /usr/lib/apache/1.3/mod_bandwidth.so
%release = (  'origin' => "",
                'label' => "",
                'description' => "");
</pre>
</pre>
*utilizzare modules-config:
Informazioni aggiuntive da inserire nel file Release.
 
<pre>
<pre>
modules-config apache enable mod_bandwidth
# $cachedir = '/var/cache/debarchiver';
</pre>
</pre>
Nel caso venga usato ''apt-ftparchive'', indica la directory di cache da usare.


Creiamo le cartelle temporanee per mod_bandwidth:
<pre>
<pre>
# mkdir /tmp/apachebw
# $gpgkey = "";
# mkdir /tmp/apachebw/master
# mkdir /tmp/apachebw/link
# chown -R www-data:www-data /tmp/apachebw
# chmod -R 775 /tmp/apachebw
</pre>
</pre>
(ricordiamoci che � possibile che qualche script ripulica la directory '''/tmp''', quindi cambiamo la posizione di queste cartelle con la direttiva BandWidthDataDir).
Imposta la chiave GPG con cui firmare i pacchetti che vengono inseriti nel database.


Ecco fatto, ora con il seguente comando facciamo rileggere ad apache i file di configurazione:
<pre>
<pre>
# /etc/init.d/apache reload
# $gpgpassfile = "$ENV{HOME}/.gnupg/passphrase";
</pre>
</pre>
 
Indica il percorso del file contenente la password per l'utilizzo della chiave GPG citata nella spiegazione alla direttiva precedente. Trattandosi di un dato molto importante, � consigliabile usare dei permessi restrittivi, come ad esempio permettendone la lettura solo all'utente ''debarchiver'' (l'utente usato da debarchiver).
===Note per il corretto funzionamento===
Per ottenere risultati, � importante che non ci siano dei link morti nella directory '''link''' di mod_bandwidth, quando viene eseguito avviato il server con il modulo attivo.
 
Potrebbe essere una buona idea, a questo scopo, eseguire lo script '''cleanlink.pl''', che provvede a rimuovere automaticamente i link morti.
 
 
 
===Direttive globali di configurazione===
 
===='''BandWidthDataDir'''====
'''Sintassi''': BandWidthDataDir <directory><br/>
'''Default''': "/tmp/apachebw"<br/>
'''Contesto''': server config<br/>
Imposta la directory in cui mod_bandwidth conserve i suoi file temporanei. All'interno di questa directory devono essere presenti anche le directory link e master; tutte queste cartelle devono essere scrivibili da apache (che in debian utilizza l'utente ed il gruppo www-data)
 
 
===='''BandWidthModule'''====
'''Sintassi''': BandWidthModule <On|Off><br/>
'''Default''': Off<br/>
'''Contesto''': per server config<br/>
Abilita o disabilita il modulo.
 
'''NOTA:''' Per utilizzarlo all'interno di un virtual host, � necessario inserire la direttiva '''BandWidthModule On''' all'interno del blocco del virtual host. Se viene attivato globalmente (cio� all'interno del file httpd.conf, fuori da ogni blocco), il modulo � attivo automaticamente in tutti i sottoblocci (Virtual Host, etc..)




===='''BandWidthPulse'''====
==Permessi==
'''Sintassi''': BandWidthPulse <microseconds><br/>
Debarchiver � configurato per lavorare correttamente con i server ftp e web. � impostato, infatti, il permesso di lettura per tutti gli utenti.
'''Default''':<br/>
'''Contesto''': per server config<br/>


Modifica l'algoritmo usato per calcolare la larghezza di banda e per trasmettere i dati. Nella modalit� normale (obsoleta), il modulo cerca di tramettere i dati in pacchetti di 1Kb. Questo vuol dire che, se la banda disponibile � di 512B, il modulo trasmette 1Kb, aspetta 2 secondi, trasmette 1Kb e cos� via... Impostando questa direttiva, verr� cambiato l'algoritmo in modo che il server
Un po' pi� complessa �, invece, la situazione relativa all'utilizzo della directory ''incoming'' da parte degli utenti. La directory in questione � di propriet� dell'utente root e del gruppo ''debarchiver''. Per abilitare un utente ad utilizzare il sistema, quindi, � necessario aggiungerlo al gruppo:
aspetter� sempre lo stesso lasso di tempo, prima di trasmettere pacchetti, e la dimensione dei pacchetti varier� di conseguenza, cos� da rispettari i criteri indicati nelle altre direttive. Il valore in microsecondi.
 
'''Esempio:'''
<pre>
<pre>
BandWidthPulse 1000000 #1 secondo
# adduser nomeutente debarchiver
</pre>
</pre>
Se oltre a questa direttiva presente un limite a 512B, il server trasmetter 512B, aspetter un secondo, trametter 512B, aspetter un secondo e cos via.


=Utilizzo Reale=
Due esempi relativi alla configurazione di un server web (Apache) e di un server ftp anonimo (vsftpd) per l'accesso al repository.


===Direttive per la configurazione di Directory e/o VirtualServer===
==Server Web==
La configurazione di un server web � molto semplice e la si pu� ricondurre a due situazioni particolari:
* configurazione come dominio di 3� livello (Es. <nowiki>http://debian.dominio.it</nowiki>)
* configurazione come directory in un dominio esistente (Es. <nowiki>http://www.dominio.it/debian</nowiki>)


===='''BandWidth'''====
===Dominio di 3� livello===
'''Sintassi''': BandWidth <domain|ip|all> <rate><br/>
La configurazione di un dominio di 3� livello dedicato al repository � una scelta molto comoda, secondo me...
'''Default''': none<br/>
'''Contesto''': per directory, .htaccess<br/>


Limita la banda per i file contenuti nella directory e nelle sub-directory, in base alla provenienza (dominio, ip, all).
� sufficiente, infatti, creare un semplice VirtualHost (Dettagli [http://httpd.apache.org/docs/1.3/vhosts/examples.html Apache1.3] [http://httpd.apache.org/docs/2.0/vhosts/ Apache2.0]) in cui viene indicata come ''DocumentRoot'' la directory '''/var/lib/debarchiver'''.
Gli indirizzi IP possono essere specificati anche nel formato network/netmask (Es: 192.168.0.0/21) '''<rate>''' deve essere espresso in Byte/secondo. Impostato a "0" indica nessun limite di banda. Possono essere impostati pi� limiti per la stessa directory; in questo caso, �
importante l'ordine con cui vengono inserite le direttive, in quando mod_bandwidth li scorre dal primo all'ultimo, fermandosi a quello che
rispecchia la situazione


'''Esempio:'''
Esempio:
<pre>
<pre>
BandWidth ecp.fr 0
NameVirtualHost *:80
BandWidth 138.195 0
 
BandWidth all 1024
<VirtualHost *:80>
    ServerName repos.dominio.it
    DocumentRoot /var/lib/debarchiver
    <Directory />
        Options Indexes FollowSymLinks
    </Directory>
</VirtualHost>
</pre>
</pre>
In questo esempio, viene limitata la banda a:
* nessun limite per gli appartenenti al dominio .ecp.fr e alla rete 138.195. ;
* 1024Bytes/secondo per tutti gli altri.


ed abilitarlo (rimando alla documentazione ufficiale del proprio server web).


===='''LargeFileLimit'''====
===Directory in un Dominio===
'''Sintassi''': LargeFileLimit <filesize> <rate><br/>
Questa configurazione � senza dubbio la pi� semplice. Si fa uso della direttiva '''Alias''' (Documentazione Ufficiale [http://httpd.apache.org/docs/1.3/mod/mod_alias.html Apache1.3] - [http://httpd.apache.org/docs/2.0/mod/mod_alias.html Apache2.0]) nel modo seguente:
'''Default''': none<br/>
'''Contesto''': per directory, .htaccess<br/>


Imposta un limite '''<rate>''' da usare quando si trasferiscono file di dimensioni uguali o maggiori a <filesize>
Supponendo di voler rendere accessibile il repository in <nowiki>http://www.dominio.it/debian</nowiki> � sufficiente aggiungere, nella configurazione del VirtualHost in questione
E' possibile utilizzare pi� direttive per diverse dimensioni; anche in questo caso, se il parametro viene impostato a "0", non sar� impostato alcun limite (rimarr�, ovviamente, l'eventuale limite impostato in BandWidth). Se viene impostato a "-1", invece, saranno aboliti tutti i limiti (anche quelli impostati con la direttiva BandWidth) per i file la cui dimensione rispecchia quella direttiva.
 
'''Esempio:'''
<pre>
<pre>
LargeFileLimit 200 3072
Alias /debian /var/lib/debarchiver
LargeFileLimit 1024 2048
</pre>
</pre>
Queste direttive portano a questa situazione:
* i file pi piccoli di 200Kb, non verranno limitati da queste direttive (rimane attiva la direttiva BandWidth);
* i file di dimensione compresa tra 200Kb e 1023Kb, saranno limitati a 3072Kb/sec;
* i file di dimensione maggiore di 1024Kb, saranno limitati a 2048Kb/sec.


{{Box|Nota:|per rendere ''sfogliabile'' il repository consigliabile aggiungere, dopo la dichiarazione precedente, un pezzo di codice simile al seguente:
<pre>
<Directory /debian>
    Options Indexes FollowSymLinks
</Directory>
</pre> [http://httpd.apache.org/docs/2.0/mod/core.html#options qui] sono disponibili maggiori dettagli a rigaurdo}}


===='''MaxConnection'''====
==Server ftp==
'''Sintassi''': MaxConnection <connections><br/>
Come server ftp viene preso in considerazione [http://www.proftpd.org proftpd], visto che utilizza una configurazione molto simile a quella di Apache.
'''Default''': 0 (illimitate)<br/>
'''Contesto''': per directory, .htaccess<br/>


Imposta il numero di connessioni massime che possono avvenire  contemporaneamente.Una volta raggiunto il limite impostato, le nuove connessioni verranno rifiutate. Se impostato a "0" (valore di default) non saranno presenti delle limitazioni per quanto riguarda il numero di connessioni simultanee (se non quello impostato nelle direttive principali di Apache).
===Dominio di 3� livello===
Un esempio di configurazione (da inserire all'interno di '''/etc/proftpd.conf''') per l'accesso al repository tramite il protocollo ftp:
<pre>
<VirtualHost repos.dominio.it>
  ServerName "Repository di dominio.it"
  MaxClients 10
  MaxLoginAttempts 1


  DeferWelcome on


===='''MinBandWidth'''====
'''Sintassi''': MinBandWidth <domain|ip|all> <rate><br/>
'''Default''': all 256<br/>
'''Contesto''': per directory, .htaccess<br/>


Imposta una banda minima per il trasferimento dei dati. Questa direttiva pu� sovrascrivere le direttive BandWidth e LargeFileLimit, in quanto, in presenza di un numero elevato di connessioni, verr� garantita a tutte la larghezza indicata con questa direttiva, anche se il totale superer� i limiti. Il primo argomnto � da usarsi come per la direttiva BandWidth. deve essere espresso in Byte/Secondo; se viene impostato a 0, verr� usato il valore di default (256).
  <Limit LOGIN>
    DenyAll
  </Limit>


'''Esempio :'''
  <Directory />
<pre>
    <Limit WRITE DIRS>
BandWidth all 3072
      DenyAll
MinBandWidth all 1024
    </Limit>
  </Directory>
</Anonymous>
</VirtualHost>
</pre>
</pre>


Assumendo la presenza delle precedenti direttive analizziamo i casi in base
=Gestione del Repository=
alle connessioni:
==Upload dei pacchetti==
* una connessione: velocit� di trasferimento = 3072 Bytes/sec.
� utile ricordare che esistono dei tool per eseguire correttamente l'upload dei pacchetti.
* due connessioni: velocit� di trasferimento = 1536 Bytes/sec.
* tre o pi� connessioni: velocit� di trasferimento = 1024 Bytes/sec.


Se MinBandWidth � impostato a "-1" accade che:
� necessario, infatti, seguire una procedura particolare: il sistema utilizza i file con estensione ''changes'' come file di lock. Quando si caricano dei pacchetti, il file .changes deve essere l'ultimo ad essere caricato. L'analisi dei pacchetti, infatti, verr� eseguita solo quando questo file sar� presente.
* se c'� solo una connessione, il file viene trasferito a 3072 Bytes/sec.
* se ci sono una o pi� connessioni, ogni file viene trasferito a 3072 Bytes/sec. La velocit� non dipende pi� dal numero di connessioni, ma solo dai valori delle direttive.


Ovviamente, la velocit� di trasferimento totale non potr� mai superare la vostra larghezza di banda...
I tool disponibili sono:
* [[Dupload per l'upload dei pacchetti Debian | Dupload ]]
* dput


{{Box|NOTA:|Se ad una richiesta devono essere applicati sia un limite impostato nella direttiva "BandWidth" sia uno impostato nella direttiva "LargeFileLimit", verr� applicato il pi� piccolo (ma mai minore a quello eventialmente indicato nella direttiva "MinBandWidth")}}
==Rimozione di uno o pi� pacchetti==
Debarchiver non supporta la rimozione automatizzata di uno o pi� pacchetti, operazione che dovr� essere compiuta, quindi, a mano.
 
Supponendo di avere un pacchetto di nome ''kpakketto'' dovremo seguire questa procedura:
* Eliminazione manuale di tutte le occorrenze di ''kpakketto'': <pre> # rm -f `find /var/lib/debarchiver/dists/ -iname "kpakketto*"`</pre>
* Ricostruzione del repository: <pre>$ su debarchiver -c "debarchiver -so --autoscanall --dl 6" </pre>


==bw_mod==
==mod_bwshare==


=Conclusione=
=Conclusione=
Debarchiver offre un comodo e funzionale strumento per la gestione automatizzata di un repository Debian di tutto rispetto. Inoltre implementa correttamente la struttura di un repository Debian... una scelta obbligata, insomma, quando si devono gestire un numero di pacchetti maggiore di 3-4 senza dover preoccuparsi delle vecchie versioni (che vengono automaticamente rimosse). Inoltre la flessibilit e la possibilit di avere pi suddivisioni (oltre alle classiche ''stable'', ''testing'' e ''unstable'') lo rende perfetto per repository particolari (per i backport, ad esempio).


Con questi moduli � possibile, in breve tempo e con la massima semplicit�,
[[Categoria:Server]][[Categoria:Repository]]
ottimizzare la ripartizione della banda del proprio server web. Cosa
fondamentale per non arrivare alla saturazione della banda, che
comporterebbe lentezza nelle risposte dei vari servizi e della navigazione su
internet.
 
 
---- [[User:MaXeR|MaXeR]]
1 760

contributi