# [HOWTO] Partager son répertoire distfiles via apache2

## PabOu

Bonjour,

Je viens de réaliser celà chez moi, et c'est tres pratique. 

1. Intro

Il y a plein d'avantages si vous avez plusieurs machines (virtuelles ou non) sous Gentoo en réseau local... On ne télécharge qu'une seule fois les paquets, et non pas une fois par machine. On évite de prendre de la bande passante aux mirroirs gentoo, mais également sur sa propre connexion. Et puis c'est beaucoup plus rapide de télécharger sur le réseau local plutôt que par Internet.

Un autre avantage, c'est que dans mon cas, ce partage pourrait ne pas etre actif 24h/24. Si c'est le cas (machine éteinte par exemple), alors il ira tout simplement rechercher les sources sur Internet, tout seul, comme un grand.

Il faut aussi savoir que cette machine proposant le partage ne dispose pas toujours des fichiers que j'ai besoin sur mes autres machines sur mon réseau local (mais ca fonctionne au moins pour les paquets importants qu'on à besoin partout, comme gcc, glibc, xorg, et tout ca). Dans ce cas, portage ira chercher ces fichiers sur Internet et pas sur mon petit serveur local.

Bien sur, il existe des methodes alternatives, avec des avantages et des inconvénients différents :

[*]NFS : un seul répertoire qui contient tout pour le réseau. On évite la duplication des fichiers sur chaque machine du réseau. Désavantage: le serveur NFS doit etre accessible (allumé) lorsque l'on souhaite installer ou faire une mise à jour sur une machine gentoo. Ce serveur doit disposer de suffisamment de place pour accueillir les fichiers pour chaque clients.

Pour ce howto, j'assume que vous avez déjà un serveur apache2 qui tourne correctement sur une machine Gentoo.

2. Serveur

Tout d'abord, on créée un nouveau vhost dans apache2. Ce vhost ne sera accessible que par les IP de votre réseau local :

```
touch /etc/apache2/vhosts.d/10_portage_distfiles_vhost.conf

nano -w /etc/apache2/vhosts.d/10_portage_distfiles_vhost.conf
```

Le contenu de ce fichier :

```
<VirtualHost *:80>

    # ServerName

    # Vous pouvez mettre ici l'adresse que vous voulez.

    # Souvenez vous en, vous en aurez besoin par la suite

    # Si elle n'est pas routable sur Internet, ce n'est pas

    # grave, on contournera ce problème plus loin sur les

    # machines clientes.

    ServerName portage.pabou.pabou.com

    DocumentRoot "/var/www/portage/htdocs"

    <Directory "/var/www/portage/htdocs">

        Options Indexes FollowSymLinks

        AllowOverride None

        Order deny,allow

        Deny from all

        # Remplacer l'ip par celle de votre sous reseau

        # Dans mon cas, il s'agit de 192.168.69.0/24

        Allow from 192.168.69

    </Directory>

    # Je ne suis pas bien sur de l'utilité des parametres de ce module ici

    # Et puis vous utilisez peut-etre un alternatif à peruser.. je ne sais pas

    # Chez moi, ca marche comme ca :

    <IfModule peruser.c>

        ServerEnvironment apache apache

    </IfModule>

</VirtualHost>
```

Ce fichier sera chargé automatiquement par apache2 grace à la ligne (copiée ici en dessous, mais déjà contenue dans la version de base du fichier fourni avec l'ebuild apache2) à la fin du fichier /etc/apache2/httpd.conf .. Vous n'avez donc rien à faire ici, mais je vous conseille de vérifier qu'il est bien chargé quelque part :

```
#

# Gentoo VHosts

#

# For Gentoo we include External Virtual Hosts Files.

# Please see vhosts.d/00_default_vhost.conf for the default virtual host.

#

Include /etc/apache2/vhosts.d/*.conf
```

Ensuite, nous allons créer tous les répertoires nécessaires pour le vhost :

```
mkdir -p /var/www/portage/htdocs

ln -s /var/www/localhost/icons /var/www/portage/icons

ln -s /var/www/localhost/errors /var/www/portage/errors

ln -s /usr/portage/distfiles /var/www/portage/htdocs/distfiles
```

Si vous avez déplacé votre répertoire distfiles (si vous ne savez pas si vous l'avez fait, c'est que vous ne l'avez pas fait), changez la cible du dernier lien ;)

Pareil pour les répértoires d'apache. ceux-ci sont les répertoires par défaut avec gentoo.

Vous pouvez maintenant redémarrer apache2 :

```
/etc/init.d/apache2 restart
```

3. Clients

Maintenant, passons à la configuration des clients (à répéter sur chaque client) :

dans le fichier /etc/make.conf, vous ajoutez votre serveur à la variable GENTOO_MIRRORS.. avec la syntaxe suivante : http://ServerName ou ServerName à été configuré sur le serveur

Voici un exemple chez moi :

```
GENTOO_MIRRORS="http://portage.pabou.pabou.com ftp://ftp.snt.utwente.nl/pub/os/linux/gentoo ftp://ftp.easynet.nl/mirror/gentoo/ ftp://ftp.belnet.be/pub/linux/gentoo"
```

Et si votre variable ServerName n'est pas routable ? Et bien si vous avec ce problème, voici comment le contourner :

```
echo "192.168.69.10 portage.pabou.pabou.com" >> /etc/hosts
```

Vous remplacez l'ip par celle du serveur web, et le nom d'hote, par le meme que ServerName.

4. Conclusion

Vous pouvez faire un essai ;)

Si vous devez mettre à jour toutes vos Gentoo, pensez à le faire en premier sur le serveur.

----------

## TGL

Une suggestion : plutôt que de déclarer le mirroir local en tête des GENTOO_MIRRORS, on peut utiliser /etc/portage/mirrors, avec le type de mirroir prévu à cet effet, "local". 

```
local   http://portage.pabou.pabou.com
```

 Cf. "man portage" pour les détails, mais en résumé, les mirroirs de type "local" sont systématiquement essayés avant les mirroirs habituels, et ont l'avantage de l'être aussi pour les paquets avec la restriction mirror. C'est à dire que si tu y as mis, par exemple, le binaire d'un quelconque gros FPS proprio, il sera bel et bien retrouvé, alors que les mirroirs habituels (GENTOO_MIRRORS) auraient eux été ignorés.

----------

## geekounet

Chez moi, j'ai plutôt fait ceci :

```
Alias /distfiles/ "/usr/portage/distfiles/"

<Directory "/usr/portage/distfiles/">

    Options Indexes FollowSymLinks

    AllowOverride None

    Order deny,allow

    Deny from all

    Allow from 192.168.0

</Directory>
```

Je ne sais pas si ça se vaut, je débute dans la configuration d'apache, mais ça marche  :Smile: 

----------

## PabOu

celà se vaut ;)

La différence avec ma méthode est dans l'utilisation d'un vhost. Je trouve cela plus propre, mais sans savoir expliquer pourquoi.

----------

