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


J'ai plusieurs machines Ubuntu à la maison et une connexion Internet assez lente, et parfois plusieurs machines doivent être mises à jour en même temps (en particulier pendant les nouvelles versions d'Ubuntu).

Existe-t-il un moyen par lequel une seule de mes machines doit 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é?


147
2017-09-02 23:34


origine




Réponses:


J'ai fait des recherches sur un tas de solutions et certains développeurs Ubuntu ont proposé une configuration de proxy (basée sur Squid) pour la version 10.04 et ultérieure. C'est appelé 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 des fichiers du côté client.
  • Utilisez zeroconf pour que les clients soient "zéro config"
  • Utilisez une solution proxy solide existante 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

Maintenant, lancez 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 installera 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 voulez utiliser le cache (les clients et le serveur lui-même pour pouvoir utiliser le cache), vous devez installer l’outil côté client pour que nous puissions rechercher le serveur automatiquement, en cliquant ici:

Install via the software center

ou via la ligne de commande:

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

Optionnel: 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 soient déjà dans le cache. Vous pouvez le faire en allant dans Système-> Administration-> 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.

alt text

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 plus, 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 afin que les changements soient efficaces.

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 utiliser le proxy en éditant /etc/apt/apt.conf et en ajoutant la strophe suivante (remplacez la 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 sont juste pour vous aider. Ils ne correspondront probablement pas à votre configuration individuelle. (c'est-à-dire une mauvaise interface, des adresses IP de réseau privé incorrectes, etc.)

Le confirmer fonctionne

Commencez par afficher le journal sur le serveur pour pouvoir le consulter: tail -F /var/log/squid-deb-proxy/access.log puis exécutez une mise à jour sur tout ordinateur sur lequel 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 le manquent, 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.

En l'utilisant

À partir de ce moment, 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.

FAIRE

Nous devons toujours permettre à apt de simplement utiliser un cache annoncé sur le réseau hors de la boîte et par défaut afin de ne pas avoir à installer le composant client. Nous devons aussi corriger l'insecte ce deb 403 n'est pas dans la liste miroir.


126
2017-09-02 23:52



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 de swap, consultez 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 lancé pour la première fois. Squid Cache (Version 3.3.8): Terminé anormalement. - thumper
Vous devez également installer squid. - thumper
Il ressemble à la Configuration manuelle n'est plus valide. Il n'y a pas apt.conf déposer 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 à la place? - Alexis Wilke
En outre, il semble que le TODO a été résolu. C'est-à-dire que je n'ai rien eu à faire et que le cache a été utilisé en premier. Bien que le bogue ne semble pas avoir été marqué comme étant corrigé. - Alexis Wilke
Bien sûr, si apt.conf.d est comme cela est fait maintenant s'il vous plaît soumettre une modification à cette réponse, bravo! - Jorge Castro


apt-cacher-ng est la réponse pour moi - je n'ai rencontré aucun problème dans les environnements de petite taille (environ 20 clients), donc je suppose que les problèmes @MagicFab les mentions 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 vous suffit d'indiquer à vos clients d'utiliser le serveur comme proxy de gestionnaire de paquets.

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

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

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

Terminé - maintenant, les paquets seront mis en cache par le serveur, quelles que soient les sources que vous utilisez ou la version de votre système (par exemple, un serveur 10.04 peut être utilisé par les clients 9.10,10.04 et 11.04 sans aucun 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

37
2018-02-12 10:45



apt-cacher-ng supporte aussi IPv6 (je me souviens que certaines des autres solutions ne l'ont pas fait). - Azendale
Un an plus tard, je suis allé à squid-deb-proxy et 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 passe par défaut au téléchargement direct. - Piskvor
apt-cacher-ng est nul, c'est très buggé, se bloque sur le téléchargement des paquets. par exemple, je l'ai vu téléchargé 150 Mo juste pour un paquet de 30 Mo - pylover
apt-cacher-ng fonctionne parfaitement. Vous avez un problème avec votre système. Sur Precise, squid-deb-proxy veut installer Squid. Insiste dessus. - Ken Sharp
C'est la meilleure solution pour utiliser un cache avec pbuilder. Cela a fonctionné hors de la boîte. Il semble aussi 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


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

Lisez la documentation d'ubuntu ici: https://help.ubuntu.com/community/AptProxy


6
2017-09-02 23:51





Je préfère de beaucoup mettre en place un miroir local en utilisant le debmirror utilitaire.

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


6
2017-09-08 15:07



Vous devriez vérifier ubumirror, c'est un paquet de commodité dans l'archive qui contient tout ce qui est déjà configuré pour vous. C'est ce que les miroirs officiels utilisent. - Jorge Castro


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 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 a fallu appliquer plusieurs solutions de contournement et plus de configuration client que je ne le souhaiterais, de sorte encore comme il pourrait remplacer apt-cacher-ng dans les petites configurations.


2
2017-11-29 02:35





apt-cacher n'était pas la plus facile à configurer et ne survivrait pas à une dist-upgrade.

Installer squid-deb-proxy sur le serveur, squid-deb-proxy-client sur les clients. Il utilise zeroconf Avahi, donc pas de 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. http://trafficserver.readthedocs.org


1
2017-12-19 12:19



squid-deb-proxy insiste pour installer le squid. Et apt-cacher est mort depuis longtemps, apt-cacher-ng est là. - Ken Sharp