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

152

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

Est-il possible qu'une seule de mes machines ait besoin de télécharger les paquetages et que les autres machines puissent utiliser la première machine pour obtenir les debs? Est-ce que cela implique la création de mon propre miroir local? Ou un serveur proxy? Ou peut-il être simplifié?

Ken Simon
la source

Réponses:

129

J'ai fait des recherches sur plusieurs solutions et certains développeurs Ubuntu ont proposé une configuration de proxy (basée sur Squid) pour 10.04 et les versions ultérieures. Ça s'appelle squid-deb-proxy. Il suffit qu'une machine agisse en tant que serveur. Les grandes entreprises utilisent généralement leur propre miroir, mais pour la plupart des gens, la mise en miroir à la demande suffit.

Pourquoi squid-deb-proxy?

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

Configuration du serveur

Sur la machine que vous souhaitez utiliser en tant que serveur, installez l'outil avec:

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

Maintenant, démarrez les bits de service:

 sudo start squid-deb-proxy

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

 sudo start squid-deb-proxy-avahi

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

Configuration client

Sur chacun des ordinateurs sur lesquels vous souhaitez utiliser le cache (les clients et le serveur lui-même afin qu'il puisse également utiliser le cache), vous devez installer l'outil côté client qui permet de rechercher le serveur automatiquement, faites-les cliquer ici. :

Installer via le centre de logiciel

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. Ainsi, lorsque vos autres machines en ont besoin, elles sont déjà dans le cache. Vous pouvez le faire en allant dans Système-> Administration-> Gestionnaire de mises à jour, puis cliquez sur le bouton "Paramètres ...", dans l'onglet Mise à jour, configurez-le pour télécharger automatiquement toutes les mises à jour.

texte alternatif

Mettre en cache des sources tierces

Par défaut, le cache est configuré pour ne mettre en cache que les référentiels Ubuntu officiels. Pour en ajouter davantage, vous devez les ajouter à la liste des sources à l'adresse /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 modifié ce fichier, vous devez l'exécuter sudo restart squid-deb-proxypour 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 autre), vous pouvez configurer manuellement un client pour qu'il utilise le proxy en modifiant /etc/apt/apt.confet en ajoutant la strophe suivante (remplacez 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 l'adresse 5353 au-dessus des adresses 224.0.0.0/4 et requiert une règle ressemblant à 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 sont juste pour vous aider. Ils ne correspondront probablement pas à votre configuration. (c.-à-d. mauvaise interface, mauvaises adresses IP de réseau privé, etc.)

Confirmer cela fonctionne

Commencez par mettre le journal sur le serveur afin que vous puissiez le consulter: tail -F /var/log/squid-deb-proxy/access.logpuis 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 celle-ci:

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 le manquent, ce qui est attendu car il n'a encore rien mis en cache. Chaque exécution suivante devrait apparaître comme TCP_HIT. Vous pouvez trouver les fichiers de cache squid eux-mêmes dans /var/cache/squid-deb-proxy.

En l'utilisant

À partir de ce moment, toutes les machines de votre réseau vérifieront le cache avant de frapper le réseau extérieur pour récupérer les paquets. Si de nouveaux packages sont disponibles, le premier ordinateur le téléchargera du réseau, après quoi les demandes ultérieures pour ce package seront envoyées du serveur aux clients.

FAIRE

Nous devons encore permettre à apt d'utiliser simplement un cache annoncé sur le réseau immédiatement et par défaut, de sorte que vous n'avez pas besoin d'installer la pièce cliente. Nous devons également corriger le bogue selon lequel le fichier deb de 403 ne figure pas dans la liste des miroirs.

Jorge Castro
la source
2014/01/21 14: 56: 31 | ERREUR: / var / cache / squid-deb-proxy / 03: (2) Aucun fichier ou répertoire de ce type. FATAL: Échec de la vérification de l'un des répertoires d'échange. Vérifiez cache.log pour plus de détails. Exécutez 'squid -z' pour créer des répertoires d’échange si nécessaire, ou si Squid est exécuté pour la première fois. Cache Squid (Version 3.3.8): Terminé de manière anormale.
Thumper
1
Vous devez également installer des calmars.
Thumper
Il semble que la configuration manuelle n'est plus valide. Il n'y a pas de apt.conffichier sous /etc/apt. Cependant, il existe une pléthore de fichiers avec des paramètres sous /etc/apt/apt.conf.d. J'imagine que nous devrions maintenant créer un fichier là-bas?
Alexis Wilke
En outre, il semble que le TODO ait été résolu. C'est-à-dire que je n'avais rien à faire et que le cache était utilisé en premier. Bien que le bogue ne semble pas avoir été corrigé.
Alexis Wilke
Bien sûr, si apt.conf.d est comme cela maintenant, soumettez une modification à cette réponse, applaudissements!
Jorge Castro
37

apt-cacher-ngC’est la solution pour moi: je n’ai rencontré aucun problème dans les environnements de petite taille (environ 20 clients). Je suppose donc que les problèmes mentionnés par @MagicFab ont été résolus dans la version actuelle (installée sur Ubuntu 10.04 et 10.10). Aucune configuration n'est nécessaire pour le serveur et il vous suffit d'indiquer à vos clients d'utiliser le serveur en tant que proxy du gestionnaire de packages.

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

Les clients doivent être configurés en configurant le proxy APT - en ajoutant le fichier /etc/apt/apt.conf.d/01proxycontenant ce dernier (où "votre-apt-serveur" 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 de votre système (un serveur 10.04 peut par exemple être utilisé par les clients 9.10, 10.04 et 11.04 sans aucun problème ni conflit).


Si vous avez un ou plusieurs ordinateurs portables clients qui se déplacent entre réseaux, cela devient un peu plus complexe: j'ai créé un script qui définit le bon proxy en fonction de l'adresse du réseau; le script est exécutable et en /etc/network/if-up.d/apt-proxy. Lors de 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
Piskvor
la source
apt-cacher-ng prend également en charge IPv6 (certaines des solutions proposées ne le sont pas).
Azendale
11
Un an plus tard, je suis passé à squid-deb-proxyet squid-deb-proxy-client: zeroconf signifie en effet zéro configuration sur les clients, ce qui est extrêmement utile pour les utilisateurs nomades - et si un serveur ne répond pas, le client utilise par défaut le téléchargement direct.
Piskvor
apt-cacher-ng est nul, il est vraiment bogué, il se bloque lors du téléchargement de paquets. par exemple, je l'ai vu téléchargé 150 Mo pour seulement un paquet de 30 Mo
pylover
apt-cacher-ng fonctionne parfaitement. Vous avez quelque chose de très faux avec VOTRE système. Sur Precise, squid-deb-proxy veut installer Squid. Insiste dessus.
Ken Sharp
Voilà la meilleure solution pour faire fonctionner un cache pbuilder. Cela a fonctionné hors de la boîte. De plus, il semble qu'il y ait un soutien pour zeroconf(en 2016), mais je ne pouvais pas (encore) le faire fonctionner de mon côté.
Alexis Wilke
6

Je préfère de loin configurer un miroir local à l'aide de l' debmirrorutilitaire.

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 l’utilise 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) vers laquelle je peux diriger chacun de mes serveurs locaux dans apt sources.list

délimiteur
la source
5
Vous devriez jeter un œil à ubumirror, c’est un paquet pratique dans l’archive qui contient tout ce qui a déjà été configuré pour vous. C'est ce que les miroirs officiels utilisent.
Jorge Castro
2

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

J'ai essayé la solution à base de calmars au -dessus , mais il obligé d' appliquer plusieurs solution de contournement et plus la configuration du client que je ne voudrais, donc il ne se sent pas encore comme il pourrait remplacer apt-ng-en cacher les petites configurations.

MagicFab
la source
1

apt-cacher n’était pas la plus facile à configurer et il ne survivra pas à une mise à jour dist.

Installez squid-deb-proxysur le serveur, squid-deb-proxy-clientsur les clients. Il utilise zeroconf Avahi, aucune configuration n'est donc nécessaire.

Si vous cherchez à cacher plus que de simples debs, je ne m'embêterai pas avec Squid. Apache Traffic Server est la prochaine grande chose. http://trafficserver.readthedocs.org

caducée
la source
squid-deb-proxy insiste pour installer squid. Et apt-cacher est mort depuis longtemps, apt-cacher-ng est l'endroit où il se trouve.
Ken Sharp