J'ai un ordinateur portable et une copie locale de plusieurs référentiels sur un disque dur externe connecté à mon routeur. Mon routeur fournit un accès à ces fichiers (avec les informations d'identification) en tant que partages Samba et/ou serveur ftp.
Je voudrais configurer apt-get pour vérifier ces dépôts quand ils sont disponibles et télécharger les mises à jour à partir d’eux pour accélérer le processus lorsque cela est possible.
Pour être plus clair: je veux qu’apt-get puisse vérifier à la fois les dépôts classiques sur Internet et mon dépôt local lorsque mon ordinateur portable est connecté à mon réseau wifi. Si les fichiers des référentiels externes sont plus récents que ceux de mon miroir local ou si le miroir n'est pas disponible, apt-get doit télécharger les fichiers depuis Internet.
J'ai finalement réussi à résoudre ce problème et cela fonctionne plutôt bien. Je souhaite donc le partager avec des personnes qui souhaitent mettre en œuvre un système similaire.
Mon premier problème était que mon système prend en charge multi-Arch. Par conséquent, les référentiels en miroir doivent contenir les packages i386 et AMD64 (les sources ne sont pas en miroir) pour éviter les erreurs de téléchargement. Ceci est fait dans /etc/apt/mirror.list comme dans cet exemple:
deb-i386 http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
deb-AMD64 http://archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
Mon chemin_base défini dans ce fichier est /mnt/apt-mirrors , et je lance un script qui monte un disque dur externe connecté au port USB de mon routeur en tant que partage Samba (vous pouvez voir le script ici: comment utiliser apt-mirror pour sauvegarder des fichiers sur un disque dur connecté à un routeur LAN
Je souhaitais accéder aux référentiels en miroir à partir d’autres ordinateurs du réseau local. L’autre partie de la solution consiste donc à ajouter les définitions des référentiels FTP au début dans /etc/apt/sources.list . Cette configuration fait apt-get utiliser d’abord les référentiels FTP lors du téléchargement de fichiers, puis ceux définis dans /etc/apt/sources.list.d , à condition que les versions en miroir soient à jour.
Les référentiels locaux sont définis comme suit:
deb [Arch=AMD64,i386] ftp://user:password@lan-resource/apt-mirrors/mirror/archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
où vous remplacez utilisateur par le nom d'utilisateur autorisé à accéder au serveur FTP, : mot de passe avec son mot de passe si nécessaire pour se connecter (sinon supprimer), et lan-resource avec l'adresse du serveur FTP de votre réseau local ( J'ai décidé de modifier /etc/hosts pour éviter de répéter une adresse IP codée en dur, où j'ai défini 192.168.0.1 comme lanftpserver à utiliser dans ce champ).
Il y a 4 étapes pour configurer votre propre référentiel
dpkg-dev
apt-get update
peut liresources.list
pointant vers votre référentieldpkg-dev
Ouvrez un terminal:
Sudo apt-get install dpkg-dev
Créez un répertoire pour conserver vos paquets. Pour cet exemple, nous utiliserons /usr/local/lan-repo
.
Sudo mkdir -p /usr/local/lan-repo
Maintenant, déplacez tous vos paquets dans ce nouveau répertoire.
Les packages déjà téléchargés sont généralement stockés sur votre système dans /var/cache/apt/archives
. Si vous avez installé apt-cacher
, vous aurez probablement des packages supplémentaires stockés dans le répertoire apt-cacher/packages
.
update-lan-repo
C'est un script très simple de trois lignes:
#! /bin/bash
cd /usr/local/lan-repo
Sudo dpkg-scanpackages . /dev/null | gzip -9c > packages.gz
Copiez et collez ce qui précède dans votre éditeur de texte favori, puis enregistrez-le sous le nom update-lan-repo
dans ~/bin
. (~
désigne le répertoire de base. Si ~/bin
n'existe pas encore, créez-le. Ubuntu le mettra automatiquement dans votre PATH. Cela en fait un bon endroit pour mettre des scripts personnels.)
Rendons maintenant le script exécutable:
chmod u+x ~/bin/update-lan-repo
Voici comment fonctionne le script:
dpkg-scanpackages
examine tous les paquets contenus dans lan-repo
et le résultat est compressé et écrit dans le fichier packages.gz
, que apt-get update
peut lire (voir ci-dessous une référence expliquant cette en détail). /dev/null
est un fichier vide - c’est-à-dire - un fichier de substitution qui contient des informations supplémentaires sur les packages, ce qui dans notre cas n’est pas vraiment nécessaire. Voir deb-override(5)
si vous voulez en savoir plus à ce sujet.
Nous devons ajouter votre dépôt local à votre fichier sources.list
echo "deb file:/usr/local/lan-repo ./" >> /etc/apt/sources.list
et c'est ce que vous avez terminé.
Vous pouvez stocker le répertoire contenant le fichier .deb sur un CD/DVD et l'utiliser également comme référentiel (idéal pour le partage entre ordinateurs). Pour utiliser le CD en tant que référentiel:
lancez simplement la commande:
Sudo apt-cdrom add
en utilisant le nouveau référentiel.
Ensuite, chaque fois que vous stockez un nouveau paquet Debian dans le répertoire lan-repo, exécutez:
Sudo update-lan-repo
Sudo apt-get update
Maintenant, vos paquets locaux peuvent être manipulés avec Synaptic, aptitude et les commandes apt: apt-get
, apt-cache
, etc. Lorsque vous essayez d'installer apt-get, toutes les dépendances seront résolues pour vous, tant que ils peuvent être rencontrés.