Meilleur moyen de mettre en cache les téléchargements apt sur un réseau local?

147

J'ai plusieurs machines Ubuntu à la maison et une connexion Internet assez lente, et parfois plusieurs machines doivent être mises à jour à la fois (en particulier lors des nouvelles versions d'Ubuntu).

Existe-t-il un moyen par lequel une seule de mes machines a besoin de télécharger les paquets, et les autres machines peuvent utiliser la première machine pour obtenir les debs? Cela implique-t-il de créer mon propre miroir local? Ou un serveur proxy? Ou peut-il être simplifié?

    
posée Ken Simon 03.09.2010 - 01:34
la source

6 réponses

126

J'ai fait quelques recherches sur un certain nombre de solutions et certains développeurs Ubuntu ont proposé une configuration proxy (basée sur Squid) pour la version 10.04 et ultérieure. Il s'appelle squid-deb-proxy . Il ne nécessite qu'une machine pour agir en tant que serveur. Les grandes organisations utilisent généralement leurs propres miroirs, mais pour la plupart des gens, la mise en miroir à la demande est suffisante.

Pourquoi squid-deb-proxy?

  • Pas de modification de fichiers du côté client.
  • Utilisez zeroconf pour que les clients soient "zéro config"
  • Utilisez une solution proxy existante et solide au lieu d’écrire un nouvel outil.
  • Facile à configurer pour un administrateur Linux typique.

Configuration du serveur

Sur l’ordinateur que vous souhaitez utiliser comme serveur, installez l’outil avec:

sudo apt-get install squid-deb-proxy avahi-utils

Commencez maintenant les bits de service:

 sudo start squid-deb-proxy

Et les bits avahi (vous n'en avez pas besoin si vous êtes sur 12.04 +):

 sudo start squid-deb-proxy-avahi

Cela va installer le serveur proxy (qui écoute le port 8000 par défaut) et les outils avahi nécessaires pour que le serveur puisse s’annoncer sur votre réseau via zeroconf.

Configuration du client

Sur chacun des ordinateurs que vous souhaitez utiliser le cache (les clients et le serveur lui-même pour pouvoir utiliser le cache), vous devez installer l’outil côté client permettant recherchez le serveur automatiquement, faites-les cliquer ici:

ou via la ligne de commande:

sudo apt-get install squid-deb-proxy-client

Facultatif : pour une efficacité maximale, vous devez configurer une machine pour télécharger automatiquement les mises à jour, de sorte que lorsque vos autres machines en ont besoin, elles se trouvent déjà dans le cache. Vous pouvez le faire en allant dans System- & gt; Administration- & gt; Update Manager, puis cliquez sur le bouton "Paramètres ...", dans l'onglet Mise à jour, configurez-le pour télécharger automatiquement toutes les mises à jour.

Caching des sources tierces

Par défaut, le cache est configuré pour ne mettre en cache que les dépôts officiels Ubuntu. Pour en ajouter d'autres, vous devez les ajouter à la liste des sources à /etc/squid-deb-proxy/mirror-dstdomain.acl . C'est ici que vous pouvez ajouter ppa.launchpad.net ou d'autres services que vous pourriez utiliser. Après avoir apporté des modifications à ce fichier, vous devez exécuter sudo restart squid-deb-proxy pour que les modifications soient effectives.

Configuration manuelle

Si pour une raison quelconque vous ne souhaitez pas utiliser zeroconf (pour des raisons de réseau ou autres), vous pouvez définir manuellement un client pour utiliser le proxy en modifiant /etc/apt/apt.conf et en ajoutant la strophe suivante (remplacez le 0.0.0.0 par l'adresse IP du serveur):

 Acquire { 
   Retries "0"; 
   HTTP { Proxy "http://0.0.0.0:8000"; };
 };

Pare-feu

Si vous utilisez un pare-feu, avahi utilise 5353 sur les adresses 224.0.0.0/4 et requiert une règle qui ressemble à ceci:

# Specifically port 5353 which avahi uses
-A INPUT -i eth2 -d 224.0.0.0/4 --dport 5353 -j ACCEPT

# OR

# Wide open so all local broadcasting works
-A INPUT -i eth2 -d 224.0.0.0/4 -j ACCEPT

Ensuite, vous devez ouvrir le port TCP 8000 pour la communication réelle via le proxy. Quelque chose de plus ou moins comme ça:

-A INPUT -i eth2 -p tcp -m tcp --dport 8000 -d 192.168.0.1 -s 192.168.0.0/24 --syn -j ACCEPT

Ces règles ne sont que pour vous aider. Ils ne correspondront probablement pas à votre configuration individuelle. (c.-à-d. une mauvaise interface, des adresses IP de réseau privé incorrectes, etc.)

Confirmation du fonctionnement

Commencez par afficher le journal sur le serveur afin de pouvoir le consulter: tail -F /var/log/squid-deb-proxy/access.log , puis exécutez une mise à jour sur toute machine sur laquelle le client est installé; le journal devrait commencer à défiler avec des entrées comme ceci:

1307310795.647     32 192.168.1.106 TCP_MISS/302 768 GET http://us.archive.ubuntu.com/ubuntu/dists/natty-proposed/universe/i18n/Translation-en.xz - DIRECT/141.210.26.10 text/html
1307310795.683     34 192.168.1.106 TCP_MISS/302 752 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/main/i18n/Translation-en_US.lzma - DIRECT/141.210.26.10 text/html
1307310795.716     32 192.168.1.106 TCP_MISS/302 746 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/main/i18n/Translation-en.lzma - DIRECT/141.210.26.10 text/html
1307310795.750     32 192.168.1.106 TCP_MISS/302 764 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/multiverse/i18n/Translation-en_US.lzma - DIRECT/141.210.26.10 text/html
1307310795.784     32 192.168.1.106 TCP_MISS/302 758 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/multiverse/i18n/Translation-en.lzma - DIRECT/141.210.26.10 text/html
1307310795.817     32 192.168.1.106 TCP_MISS/404 657 GET http://us.archive.ubuntu.com/dists/natty-proposed/multiverse/i18n/Translation-en_US.xz - DIRECT/141.210.26.10 text/html

Ce qui signifie que les clients voient le cache mais qu’il le manque, ce qui est attendu car il n’a encore rien mis en cache. Chaque exécution suivante devrait apparaître sous la forme TCP_HIT. Vous pouvez trouver les fichiers cache du calmar eux-mêmes dans /var/cache/squid-deb-proxy .

L’utiliser

À partir de ce moment-là, toutes les machines de votre réseau vérifieront le cache avant de toucher le réseau externe pour récupérer les packages. Si de nouveaux paquets sont disponibles, le premier ordinateur le téléchargera à partir du net, après que les demandes ultérieures pour ce paquet proviendront du serveur pour les clients.

TODO

Nous devons toujours activer apt pour utiliser simplement un cache annoncé sur le réseau et par défaut, vous n'avez donc pas besoin d'installer le composant client. Nous avons également besoin de corriger le bogue que les deb 403 ne contiennent pas. la liste des miroirs.

    
réponse donnée Jorge Castro 03.09.2010 - 01:52
la source
37

apt-cacher-ng est la réponse pour moi - je n'ai rencontré aucun problèmes dans de petits environnements (environ 20 clients), donc je suppose que les problèmes @ MagicFab ont été résolues dans la version actuelle (installée sur Ubuntu 10.04 et 10.10). Il n'y a pas de configuration nécessaire pour le serveur et il suffit de demander à vos clients d'utiliser le serveur comme proxy de gestionnaire de paquets.

Le serveur est complètement installé et configuré en installant le package apt-cacher-ng .

Les clients doivent être configurés en configurant le proxy APT - en ajoutant le fichier /etc/apt/apt.conf.d/01proxy , contenant ceci (où "your-apt-server" est le nom ou l'adresse IP de votre serveur):

Acquire::http { Proxy "http://your-apt-server:3142"; };

Terminé : les paquets seront désormais mis en cache par le serveur, quelles que soient les sources utilisées ou la version du système (par exemple, un serveur 10.04 peut être utilisé par les clients 9.10,10.04 et 11.04 sans tout problème ou conflit).

Si vous avez un ou plusieurs ordinateurs portables clients qui se déplacent entre les réseaux, cela devient un peu plus complexe - j'ai créé un script qui définit le bon proxy en fonction de l'adresse réseau; le script est exécutable et en /etc/network/if-up.d/apt-proxy . À la réception d’une adresse IPv4 d’un serveur DHCP, le script définira le bon serveur apt-cacher pour le réseau respectif:

#!/bin/sh

set -e
# Don't bother when lo is configured.
if [ "$IFACE" = lo ]; then
    exit 0
fi
# Only run from ifup.
if [ "$MODE" != start ]; then
    exit 0
fi
# currently only cares about IPv4
if [ "$ADDRFAM" != inet ] && [ "$ADDRFAM" != NetworkManager ]; then
    exit 0
fi
# only run for DHCP-assigned addresses
if [ "$DHCP4_IP_ADDRESS" = "" ]; then
    exit 0
fi

# we're matching on network *broadcast* address,
#  not the specific IP address we were assigned
case "$DHCP4_BROADCAST_ADDRESS" in
    10.3.141.255)
        PROXY='Acquire::http::Proxy "http://my-home-server:3142";';
        ;;
    192.168.154.255)
        PROXY='Acquire::http::Proxy "http://work-server.foo.bar.example.com:3142";';
        ;;
    # add as needed
    *)
        # unknown, no proxying
        PROXY=""
        ;;
esac

# set the proxy
FNAME="/etc/apt/apt.conf.d/01proxy"
echo -n "$PROXY">$FNAME

exit 0
    
réponse donnée Piskvor 12.02.2011 - 11:45
la source
6

L'une des solutions les plus simples consiste à configurer apt-proxy.

Lisez la documentation ubuntu ici: lien

    
réponse donnée sandaru1 03.09.2010 - 01:51
la source
6

Je préfère de beaucoup configurer un miroir local en utilisant l'utilitaire debmirror .

Voici un exemple d’incantation.

debmirror --progress --verbose --nosource --method=ftp --passive \
 --host=ftp.osuosl.org --root=pub/ubuntu \
 --dist=lucid,lucid-updates,lucid-security,lucid-backports \
 --section=main,restricted,universe,multiverse --arch=amd64 \
 /d2/ftp/mirror/ubuntu-lucid

Je cours ceci environ une fois par semaine et je l’utilise comme base pour établir un ou plusieurs "niveaux de patch". Par exemple ...

 cd /d2/ftp/mirror/
 cp -al ubuntu-lucid ubuntu-lucid-20100908

Cela crée une copie liée de l’arborescence (utilise presque aucun espace disque) sur laquelle je peux diriger chacun de mes serveurs locaux dans apt sources.list

    
réponse donnée delimiter 08.09.2010 - 17:07
la source
2

Dans les petits réseaux (tels que home / small office), j'ai utilisé apt-cacher-ng avec de bons résultats. Je n'ai pas vérifié les dernières versions, mais je sais que cela nécessite une configuration minutieuse du serveur et des clients, et qu'il convient mieux aux clients qui n'obtiendront que des mises à jour à partir de votre réseau local.

J'ai essayé la solution basée sur le squid ci-dessus, mais il fallait appliquer plusieurs solutions de contournement et plus de configuration client que je ne le souhaiterais, de sorte que ng dans de petites configurations.

    
réponse donnée MagicFab 29.11.2010 - 03:35
la source
1

apt-cacher n'était pas le plus facile à configurer et ne survivrait pas à une mise à niveau distante.

Installez squid-deb-proxy sur le serveur, squid-deb-proxy-client sur les clients. Il utilise zeroconf Avahi, donc aucune configuration nécessaire.

Si vous cherchez à mettre plus de cache que debs, je ne m'embêterais pas avec Squid. Apache Traffic Server est la prochaine grande chose. lien

    
réponse donnée caduceus 19.12.2013 - 13:19
la source

Lire d'autres questions sur les étiquettes