Utiliser apt-mirror

De Wiki Dane (ex wikitice)
Aller à : navigation, rechercher

Installation de apt-mirror

Une fois votre serveur installé, l'installation du logiciel de gestion d'un dépot local se fait très simplement par la commande suivante :

aptitude install apt-mirror
sudo aptitude install apt-mirror


Création des répertoires qui hébergeront le dépôt

On peut placer le répertoire qui accueillera le dépot local où l'on veut. Ici, nous le placerons dans un répertoire nommé depot, à la racine du serveur. La commande est donc la suivante :

mkdir /depot


Configuration des paramètres de gestion

Une fois le paquet apt-mirror installé, il s'agit de modifier le fichier /etc/apt/mirror.list qui contient les paramètres de gestion du dépôt local.

nano /etc/apt/mirror.list


Voici un fichier /etc/apt/mirror.list qui contient les paramètres de configuration et les dépôts officiels qui seront dupliqués (à vous de modifier cette liste en fonction de vos besoins) :

############# config ##################
#
# indiquer le répertoire qui héberge le miroir local
set base_path    /depot
#
# des sous-répertoires seront créés lors de la 1ère utilisation de apt-mirror
set mirror_path  $base_path/mirror
set skel_path    $base_path/skel
set var_path     $base_path/var
# la commande clean.sh de nettoyage du miroir local pourra être intégrée au script postmirror.sh (à commenter dans ce cas)
set cleanscript $var_path/clean.sh
# l'architecture par défaut
set defaultarch  i386
# script lancé une fois la commande apt-mirror terminée si nécessaire
set postmirror_script $var_path/postmirror.sh
# 1 → lancement du script postmirror.sh ; 0 → pas de lancement
set run_postmirror 0
set nthreads     20
set _tilde 0
#
############# end config ##############

# dépots Squeeze deb → i386 32 bits
deb http://ftp.fr.debian.org/debian squeeze main main/debian-installer contrib non-free
deb http://ftp.fr.debian.org/debian squeeze-updates main contrib non-free
deb http://ftp.fr.debian.org/debian/ squeeze-proposed-updates main contrib non-free
deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free
deb http://security.debian.org squeeze/updates main contrib non-free
deb http://www.deb-multimedia.org squeeze main non-free

# dépots Squeeze deb-amd64 → 64 bits
deb-amd64 http://ftp.fr.debian.org/debian squeeze main main/debian-installer contrib non-free
deb-amd64 http://ftp.fr.debian.org/debian squeeze-updates main contrib non-free
deb-amd64 http://ftp.fr.debian.org/debian/ squeeze-proposed-updates main contrib non-free
deb-amd64 http://backports.debian.org/debian-backports squeeze-backports main contrib non-free
deb-amd64 http://security.debian.org squeeze/updates main contrib non-free
deb-amd64 http://www.deb-multimedia.org squeeze main non-free

# dépots Wheezy deb → i386 32 bits
deb http://ftp.fr.debian.org/debian wheezy main main/debian-installer contrib non-free
deb http://ftp.fr.debian.org/debian wheezy-updates main contrib non-free
deb http://ftp.fr.debian.org/debian/ wheezy-proposed-updates main contrib non-free
deb http://ftp.fr.debian.org/debian/ wheezy-backports main contrib non-free
deb http://security.debian.org wheezy/updates main contrib non-free
deb http://www.deb-multimedia.org wheezy main non-free

# dépots Wheezy deb-amd64 → 64 bits
deb-amd64 http://ftp.fr.debian.org/debian wheezy main main/debian-installer contrib non-free
deb-amd64 http://ftp.fr.debian.org/debian wheezy-updates main contrib non-free
deb-amd64 http://ftp.fr.debian.org/debian/ wheezy-proposed-updates main contrib non-free
deb-amd64 http://ftp.fr.debian.org/debian/ wheezy-backports main contrib non-free
deb-amd64 http://security.debian.org wheezy/updates main contrib non-free
deb-amd64 http://www.deb-multimedia.org wheezy main non-free

# dépots mozilla debian → 32 bits
deb http://mozilla.debian.net/ squeeze-backports iceweasel-esr
deb http://mozilla.debian.net/ wheezy-backports iceweasel-release

# dépots mozilla debian → 64 bits
deb-amd64 http://mozilla.debian.net/ squeeze-backports iceweasel-esr
deb-amd64 http://mozilla.debian.net/ wheezy-backports iceweasel-release

# dépots à nettoyer → suppression des paquets obsolètes
clean http://ftp.fr.debian.org
clean http://backports.debian.org
clean http://security.debian.org
clean http://www.deb-multimedia.org
clean http://mozilla.debian.net

Remarque 1 : Lors de la 1ère utilisation, je vous recommande de ne mettre qu'une seule ligne de la liste des dépôts et de commenter les autres. Ensuite, décommenter les lignes au fur et à mesure. Le téléchargement est très long (cela dépend du débit de votre connexion bien sûr) et sera fait dans la nuit pour ne pas gêner les utilisateurs.

Remarque 2 : Pour vous donner un ordre de grandeur de la place à prévoir, l'ensemble des sites listés ci-dessus donne un dépot local d'environ 140 Go.

Remarque 3 : Pour des détails sur le script postmirror.sh, voir ci-dessous en fin d'article.


Création du dépôt local

La création du miroir local ou de sa mise à jour se fait simplement par la commande suivante :

apt-mirror

Cependant, le téléchargement des différents éléments du dépôt est très long (plusieurs heures à gérer sur plusieurs jours) : il vaut donc mieux lancer cette commande en arrière plan et lorsqu'aucun utilisateur n'utlise la connexion Internet, que ce soit sur le réseau pédagogique ou le réseau administratif car ils utilisent la même connexion Internet.

nohup apt-mirror &

Et pour être bien tranquille et éviter des problèmes de gestion de l'interface de commande (et d'interruption intempestive comme une panne de l'alimentation), cette commande sera lancée à l'aide de screen. Pour comprendre comment gérer screen, reportez-vous à l'article de François Lafont qui vous donnera quelques éléments à ce sujet.

Là où la commande nohup apt-mirror & est lancée, un fichier nohup.out sera créé et il contiendra tout ce que la commande affiche. On peut lancer ça un vendredi soir par exemple et se déconnecter de la machine, le téléchargement continuera. On revient le lundi matin et on se connecte pour voir si le téléchargement est toujours en cours :

ps aux | grep apt-mirro[r]

Si on veut le mettre en pause, on repère le pid (le numéro tout à gauche qui identifie la tâche « apt-mirror » sur la machine à partir de la commande ps précédente) en supposant que 8678 est le pid :

kill -s STOP -8678

Puis quand on voudra redémarrer le téléchargement n'importe quand :

kill -s CONT -8678

vérifier que tous les téléchargements sont stoppés ("q" pour quitter la page qui s'affiche) :

iftop -nNP -i eth0 . 

Et pour consulter où en est la commande apt-mirror et obtenir quelques précisions sur le téléchargement :

nano nohup.out


Rendre disponible le dépôt local

Une fois le dépôt local bien rempli, il ne reste plus qu'à le rendre disponible via le web :

apt-get install apache2
ln -s /depot/mirror /var/www/miroir

La deuxième commande crée un lien symbolique (un raccourci) dans /var/www/ (c'est le répertoire racine du site Web sur ta machine) qui s'appelle "miroir" et qui pointera vers le dossier qui contient les dépôts téléchargés.


Programmer la mise à jour quotidienne du dépôt local

Pour la mise à jour du dépôt, les temps de téléchargement sont nettement plus cours et donc la commande apt-mirror peut être programmée à une heure où on est sûr que personne n'utilise le réseau (il faut bien se reposer de temps en temps, non ?).

Cette programmation se fait à l'aide de l'utilitaire crontab en lançant la commande suivante :

crontab -e

Pour une mise à jour chaque jour à 1h du matin  il suffit d'ajouter la ligne suivante :

0 1 * * * /usr/bin/apt-mirror > /depot/var/cron.log

Enregistrez puis quittez l'utilitaire crontab.

Vous pouvez ensuite vérifier que tout s'est bien passé en consultant les fichiers de log : /depot/var/cron.log et /var/log/syslog (ou éventuellement /var/log/syslog.1).

tail /var/log/syslog
tail /var/log/syslog.1


Le problème des fichiers de traduction i18n

Pour une raison que j'ignore, apt-mirror ne synchronise pas les répertoires i18n qui contiennent les paquets de traduction. Cela ne semble pas gêner l'utilisation du miroir local mais provoque une erreur lors d'un aptitude update, ce qui n'est pas acceptable ;-).

Voici 2 solutions qui permettent de contourner ce problème, problème qui est corrigé mais qui ne sera disponible que pour Jessie (en ce qui concerne Debian).

1ère solution

Cette solution consiste à modifier le fichier /usr/bin/apt-mirror pour incorporer les fichiers i18n.

nano /usr/bin/apt-mirror

La correction se trouve à écrire aux alentours de la ligne 355 : Ctrl+W suivi de Ctrl+T et du n°de la ligne, 355.

On rajoute les 6 lignes suivantes à la fin du foreach concernant @components :

my $lang;
foreach $lang ("ast", "bg", "bs", "ca", "cs", "da", "de", "el", "en", "en_AU", "en_CA", "en_GB", "eo", "es", "eu", "fa", "fi", "fr", "fr_FR", "gl", "hr", "hu", "id", "is", "it", "ja", "ka", "km", "ko", "lt", "ms", "my", "nb", "nl", "no_NB", "oc", "pl", "pt", "pt_BR", "ro", "ru", "si", "sk", "sl", "sq", "sr", "sv", "th", "tr", "uk", "vi", "zh_CN", "zh_HK", "zh_TW", "zh") {
      add_url_to_download($url . $_ . "/i18n/Translation-" . $lang);
      add_url_to_download($url . $_ . "/i18n/Translation-" . $lang . ".gz");
      add_url_to_download($url . $_ . "/i18n/Translation-" . $lang . ".bz2");
}

Voici l'endroit où rajouter ces 6 lignes : Vue fichier.png

Il ne sera pas nécessaire de mettre en œuvre le script postmirror.sh mais il faudra lancer le script clean.sh.

Pour cela, dans le fichier /etc/apt/mirror.list, on décommentera la ligne : set cleanscript $var_path/clean.sh et on mettra à 0 la ligne set run_postmirror 0.

Remarque : Cette solution est décrite sur le site Linux et Geekeries.


2ème solution

Cette solution consiste à télécharger ces répertoires à la fin du téléchargement en utilisant, par exemple, le script postmirror.sh . Voici un contenu possible pour ce script qui sera lancé automatiquement à la fin du téléchargement (voir le fichier de configuration /etc/apt/mirror.list) :

#!/bin/sh
bash /depot/var/clean.sh
#### squeeze
rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/squeeze/main/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/squeeze/main/i18n/
#### wheezy
rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy/main/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy/main/i18n/
rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy/contrib/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy/contrib/i18n/
rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy/non-free/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy/non-free/i18n/
#
rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy-proposed-updates/main/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy-proposed-updates/main/i18n/
rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy-proposed-updates/contrib/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy-proposed-updates/contrib/i18n/
rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy-proposed-updates/non-free/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy-proposed-updates/non-free/i18n/
#
rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy-backports/main/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy-backports/main/i18n/
rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy-backports/contrib/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy-backports/contrib/i18n/
rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy-backports/non-free/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy-backports/non-free/i18n/
#
rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy-updates/main/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy-updates/main/i18n/
rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy-updates/contrib/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy-updates/contrib/i18n/
rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy-updates/non-free/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy-updates/non-free/i18n/

Enfin, il faudra ouvrir le port 873 dans le pare-feu (par exemple un Slis) pour que rsync puisse accéder aux dépôts officiels. La règle de routage sera la suivante :

MASQ TCP IP_du_dépôt 255.255.255.255 all all all 873

Remarque : cette solution n°2 est proposée sur le blog Technoaddict



Problème avec le proxy

Si vous avez un problème de fonctionnement avec le proxy (ce qui est le cas si vous avez un Slis4 en proxy non transparent), il faudra modifier la configuration du fichier /etc/wgetrc.

nano /etc/wgetrc

Notamment, dans ce fichier, il faut décommenter (c'est-à-dire enlever le # qui est au début de la ligne) la ligne contenant "use_proxy = on" pour obtenir :

use_proxy = on 

Et rajouter la ligne suivante (remplacer IP_passerelle par l'IP de votre proxy) :

http_proxy = http://IP_passerelle:3128/ 

On pourra rajouter cette ligne à la suite des lignes semblables et commentées qui se trouvent au-dessus de la ligne "use_proxy = on".