« Apt-mirror » : différence entre les versions
(Page créée avec « Category:apt {{chantier}} ''Apt mirror'' est un outil qui permet de cloner des miroirs de dépôt APT. L’intérêt de cette solution est que cel... ») |
(Changement de catégorie + correction d'un lien vers la catégorie "apt".) |
||
(5 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Category: | [[Category:Miroir_apt]] | ||
''Apt mirror'' est un outil qui permet de cloner des miroirs de dépôt [[:Catégorie:Apt|APT]]. L’intérêt de cette solution est que cela met à disposition au sein de notre réseau local, l'ensemble des paquets des dépôts clonés. On se retrouve donc avec la bande passante de ce réseau pour nos installations (ce qui est fortement agréable si comme moi vous êtes encore à de l'ADSL...). De plus, en cas de coupure Internet, on ne se rendra compte de rien du tout puisque tout ce fait en local. L’inconvénient principal est la place qu'occupe un dépôt sur les disques durs de nos serveurs et le temps que la réplication prend (environ 26h dans mon cas pour le dépôt Debian stretch ftp.fr.debian.org en ''amd64'' sans les sources). | |||
{{astuce|Je le couple à une [[bind9#rpz|RPZ DNS]] sous [[Bind9]] afin de ne pas me faire chier à spécifier l'adresse de mon serveur à chaque machines voulant utiliser mon miroir. De ce fait, c'est totalement transparent !}} | |||
Je le couple à une | |||
=Installation= | =Installation= | ||
apt install apt-mirror apache2 | apt install apt-mirror cron apache2 | ||
=Configuration= | =Configuration= | ||
==Configuration d'Apt-miror== | ==Configuration d'Apt-miror== | ||
'''Dépôts à synchroniser''' | |||
vim /var/spool/apt-mirror/mirror.list | vim /var/spool/apt-mirror/mirror.list | ||
<source lang="bash"> | <source lang="bash"> | ||
############# Paramètres ################## | ############# Paramètres ################## | ||
Ligne 59 : | Ligne 59 : | ||
########### fin synchronisation ########### | ########### fin synchronisation ########### | ||
</source> | </source> | ||
'''Script de synchronisation''' | |||
vim /var/spool/apt-mirror/sync_mirror.sh | |||
<source lang="bash"> | |||
#!/bin/bash | |||
jourSemaine=$(date +%u) | |||
repTravail="/var/www/apt-mirror" | |||
repLog="/var/www/apt-mirror/log/" | |||
prefixeNomLog="apt-mirror.log." | |||
nomLog=$repLog$prefixeNomLog$jourSemaine | |||
nbLogs=$(ls -t $repLog | wc -l) | |||
if [ "$1" == "nv-jour" ]; then | |||
echo -e "\n--------------------------------------\n\nNouveau jour. Écrasement de l'ancien fichier journal...\n\n" > $nomLog | |||
date >> $nomLog | |||
else | |||
echo -e "\n--------------------------------------\n\nDeuxième passe de la journée, conservation du fichier journal...\n\n" >> $nomLog | |||
date >> $nomLog | |||
fi | |||
echo -e "\n--------------------------------------\n\nExécution de la synchronisation du miroir de dépôt...\n\n" >> $nomLog | |||
apt-mirror $repTravail/mirror.list >> $nomLog | |||
# Nettoyage des dépôts après synchronisation | |||
bash $repTravail/var/clean.sh >> $nomLog | |||
echo -e "\n\n--------------------------------------\n\nOpération terminé le" >> $nomLog | |||
date >> $nomLog | |||
</source> | |||
''Note: La structure conditionnelle (if) est faite pour ne pas écraser le fichier de journal lors de la deuxième passe de la journée (je recommande d'en faire deux avec les dépôts Debian Sid). Vous pouvez l'enlever si vous n'en avez pas l'utilité.'' | |||
'''Don des droits d'exécution''' | |||
chmod +x /var/spool/apt-mirror/sync_mirror.sh | |||
'''Création du répertoire d'accueil des journaux''' | |||
mkdir /var/spool/apt-mirror/log | |||
==Configuration de Cron== | |||
Nous allons exécuter le script de synchronisation tout les jours à 04h00 du matin | |||
conrtab -e | |||
0 4 * * * /var/spool/apt-mirror/sync_mirror.sh | |||
==Configuration d'Apache2== | ==Configuration d'Apache2== | ||
Ligne 66 : | Ligne 108 : | ||
===Première méthode=== | ===Première méthode=== | ||
La méthode du | La méthode du <source lang="bash" inline>mount --bind</source>. | ||
'''Création de l'arborescence''' | |||
mkdir -p /var/www/apt-mirror/{mirror,skel,var,log} && cp /var/spool/apt-mirror/mirror.list /var/www/apt-mirror/mirror/ | '''Création du point de montage''' | ||
mkdir /var/www/apt-mirror | |||
<!-- '''Création de l'arborescence''' | |||
mkdir -p /var/www/apt-mirror/{mirror,skel,var,log} && cp /var/spool/apt-mirror/mirror.list /var/www/apt-mirror/mirror/ --> | |||
'''Montage du répertoire''' | '''Montage du répertoire''' | ||
mount --bind /var/ | mount --bind /var/spool/apt-mirror/ /var/www/apt-mirror/ | ||
'''Ajout d'une entrée dans le ''fstab''''' | '''Ajout d'une entrée dans le ''fstab''''' | ||
echo '/var/ | echo '/var/spool/apt-mirror/ /var/www/apt-mirror/ none bind 0 0' >> /etc/fstab | ||
''Un <source lang="bash" inline>mount -a</source> permet de monter le répertoire si vous voulez tester votre entrée (pensez à démonter le répertoire que vous avez monté avec la commande <source lang="bash" inline>mount --bind</source> d'avant).'' | ''Un <source lang="bash" inline>mount -a</source> permet de monter le répertoire si vous voulez tester votre entrée (pensez à démonter le répertoire que vous avez monté avec la commande <source lang="bash" inline>mount --bind</source> d'avant).'' | ||
'''Création du vHost Apache''' | '''Création du vHost Apache''' | ||
vim /etc/apache2/sites- | vim /etc/apache2/sites-available/apt-mirror.conf | ||
<source lang="apache"> | <source lang="apache"> | ||
<VirtualHost *:80> | <VirtualHost *:80> | ||
Ligne 93 : | Ligne 138 : | ||
</source> | </source> | ||
'''Désactivation du vHost par défaut''' | |||
a2dissite 000-default.conf | |||
'''Activation du vHost d'Apt-mirror''' | |||
a2ensite apt-mirror.conf | |||
'''Rechargement de la configuration d'Apache''' | |||
systemctl reload apache2 | |||
==Deuxième méthode== | ==Deuxième méthode== | ||
La méthode ACL Apache | |||
Création du | '''Modifier le fichier de configuration d'Apache2''' | ||
vim /etc/apache2/apache2.conf | |||
Ajouter cette section dans le fichier: | |||
<source lang="apache"> | |||
<Directory /var/spool/apt-mirror> | |||
Options Indexes FollowSymLinks | |||
AllowOverride None | |||
Require all granted | |||
</Directory> | |||
</source> | |||
'''Création du vHost Apache''' | |||
vim /etc/apache2/sites-available/apt-mirror.conf | |||
<source lang="apache"> | |||
<VirtualHost *:80> | |||
ServerAdmin toto@foo.bar | |||
# --- Alias principal Debian --- | |||
Alias /debian /var/spool/apt-mirror/mirror/ftp.fr.debian.org/debian | |||
# --- Alias Security pour stretch (Jessie n'en a pas besoin) --- | |||
Alias /debian-security /var/spool/apt-mirror/mirror/security.debian.org/ | |||
# --- Alias Security pour Jessie --- | |||
Alias / /var/spool/apt-mirror/mirror/security.debian.org/ | |||
DocumentRoot /var/spool/apt-mirror/mirror | |||
ErrorLog ${APACHE_LOG_DIR}/error.log | |||
CustomLog ${APACHE_LOG_DIR}/access.log combined | |||
</VirtualHost> | |||
</source> | |||
'''Désactivation du vHost par défaut''' | |||
a2dissite 000-default.conf | |||
'''Activation du vHost d'Apt-mirror''' | |||
a2ensite apt-mirror.conf | |||
'''Rechargement de la configuration d'Apache''' | |||
systemctl reload apache2 | |||
=Synchronisation= | |||
Si vous n'avez rien oublié, vous pouvez commencer la synchronisation. | |||
{{attention|Cette étape est d'une lenteur anémique ! Je vous conseil d'exécuter ce qui va suivre dans un <source lang="bash" inline>tmux</source> ou un <source lang="bash" inline>screen</source> afin de pouvoir vous détacher du shell si vous êtes en SSH. De plus, si vous êtes derrière une connexion Internet mutualiser avec un collègue, proche, voisin en partage de connexion... prévenez-les que vous allez tout pomper pendant plus d'une journée. Sinon vous pouvez [[Limiter_bande_passante|limiter la bande passante]] afin d'éviter un conflit avec ces derniers...}} | |||
'''Lancer la synchronisation''' | |||
/var/spool/apt-mirror/sync_mirror.sh | |||
''Vous trouverez l'état de la duplication dans le répertoire de log définit plus haut'' | |||
{{astuce|Au vu du temps que met la réplication à d’effectuer, je vous conseil de réaliser une seconde synchronisation à la fin de la première afin d'être vraiment à jour.}} | |||
=Exploitation= | |||
À ce stade, notre miroir de dépôt est fonctionnel. Comme énoncé au début de ce document, vous avez deux possibilités pour exploiter votre serveur. Soit vous renseignez l'adresse de celui-ci dans toute vos machines et lors de l'installation des nouvelles (ce qui peut vite être chiant sur une bécane nomade quand vous ne serez plus dans votre réseau local), soit comme moi, vous utiliser un DNS menteur au sein de votre réseau via la fonctionnalité [[Bind9#rpz|RPZ de Bind9]]. L'idée va être de faire répondre votre DNS aux requêtes à destination de <source lang="bash" inline>ftp.fr.debian.org</source> sur l'adresse IP de votre miroir et non le vrai (comme le DNS de la Chine quoi). |
Dernière version du 20 décembre 2020 à 16:26
Apt mirror est un outil qui permet de cloner des miroirs de dépôt APT. L’intérêt de cette solution est que cela met à disposition au sein de notre réseau local, l'ensemble des paquets des dépôts clonés. On se retrouve donc avec la bande passante de ce réseau pour nos installations (ce qui est fortement agréable si comme moi vous êtes encore à de l'ADSL...). De plus, en cas de coupure Internet, on ne se rendra compte de rien du tout puisque tout ce fait en local. L’inconvénient principal est la place qu'occupe un dépôt sur les disques durs de nos serveurs et le temps que la réplication prend (environ 26h dans mon cas pour le dépôt Debian stretch ftp.fr.debian.org en amd64 sans les sources).
ASTUCE
Je le couple à une RPZ DNS sous Bind9 afin de ne pas me faire chier à spécifier l'adresse de mon serveur à chaque machines voulant utiliser mon miroir. De ce fait, c'est totalement transparent !Installation
apt install apt-mirror cron apache2
Configuration
Configuration d'Apt-miror
Dépôts à synchroniser
vim /var/spool/apt-mirror/mirror.list
############# Paramètres ##################
set base_path /var/spool/apt-mirror
set mirror_path $base_path/mirror
set skel_path $base_path/skel
set var_path $base_path/var
set cleanscript $var_path/clean.sh
set defaultarch amd64
#set defaultarch <architecture à définir par défaut>
#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
############# fin paramètres ###############
###########Dépôts à synchroniser ###########
# Dépôts Debian Jessie 8.0
deb http://ftp.fr.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ jessie main contrib
deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib
# Dépôts Debian Stretch 9.0
deb http://ftp.fr.debian.org/debian/ stretch main contrib non-free
deb http://ftp.fr.debian.org/debian/ stretch main main/debian-installer contrib non-free
deb-i386 http://ftp.fr.debian.org/debian/ stretch main contrib non-free
deb-i386 http://ftp.fr.debian.org/debian/ stretch main main/debian-installer contrib non-free
deb-src http://ftp.fr.debian.org/debian/ stretch main contrib
deb http://security.debian.org/ stretch/updates main contrib non-free
#deb-i386 http://security.debian.org/ stretch/updates main contrib non-free
#deb-src http://security.debian.org/ stretch/updates main contrib
deb http://ftp.fr.debian.org/debian/ stretch-updates main
# dépôts à nettoyer → suppression des paquets obsolètes
clean http://ftp.fr.debian.org
clean http://security.debian.org
########### fin synchronisation ###########
Script de synchronisation
vim /var/spool/apt-mirror/sync_mirror.sh
#!/bin/bash
jourSemaine=$(date +%u)
repTravail="/var/www/apt-mirror"
repLog="/var/www/apt-mirror/log/"
prefixeNomLog="apt-mirror.log."
nomLog=$repLog$prefixeNomLog$jourSemaine
nbLogs=$(ls -t $repLog | wc -l)
if [ "$1" == "nv-jour" ]; then
echo -e "\n--------------------------------------\n\nNouveau jour. Écrasement de l'ancien fichier journal...\n\n" > $nomLog
date >> $nomLog
else
echo -e "\n--------------------------------------\n\nDeuxième passe de la journée, conservation du fichier journal...\n\n" >> $nomLog
date >> $nomLog
fi
echo -e "\n--------------------------------------\n\nExécution de la synchronisation du miroir de dépôt...\n\n" >> $nomLog
apt-mirror $repTravail/mirror.list >> $nomLog
# Nettoyage des dépôts après synchronisation
bash $repTravail/var/clean.sh >> $nomLog
echo -e "\n\n--------------------------------------\n\nOpération terminé le" >> $nomLog
date >> $nomLog
Note: La structure conditionnelle (if) est faite pour ne pas écraser le fichier de journal lors de la deuxième passe de la journée (je recommande d'en faire deux avec les dépôts Debian Sid). Vous pouvez l'enlever si vous n'en avez pas l'utilité.
Don des droits d'exécution
chmod +x /var/spool/apt-mirror/sync_mirror.sh
Création du répertoire d'accueil des journaux
mkdir /var/spool/apt-mirror/log
Configuration de Cron
Nous allons exécuter le script de synchronisation tout les jours à 04h00 du matin
conrtab -e
0 4 * * * /var/spool/apt-mirror/sync_mirror.sh
Configuration d'Apache2
Par défaut, Apache2 n'autorise que le répertoire /var/www/
à contenir des sites WEB. Dans notre cas, Apt-mirror utilise /var/spool/apt-mirror/
comme dossier de travail. Deux choix s'offrent à nous. Soit nous créons un deuxième répertoire de travail dans /var/www/apt-mirror
et nous faisons un mount --bind
du répertoire originel vers le nouveau afin que le tout n'y voit que du feux ou soit nous configurons Apache2 pour qu'il autorise le dossier d'Apt-mirror.
Les deux méthode ont exactement la même finalité. Utilisez l'une ou l'autre selon vos préférences.
Première méthode
La méthode du mount --bind
.
Création du point de montage
mkdir /var/www/apt-mirror
Montage du répertoire
mount --bind /var/spool/apt-mirror/ /var/www/apt-mirror/
Ajout d'une entrée dans le fstab
echo '/var/spool/apt-mirror/ /var/www/apt-mirror/ none bind 0 0' >> /etc/fstab
Un mount -a
permet de monter le répertoire si vous voulez tester votre entrée (pensez à démonter le répertoire que vous avez monté avec la commande mount --bind
d'avant).
Création du vHost Apache
vim /etc/apache2/sites-available/apt-mirror.conf
<VirtualHost *:80>
ServerAdmin toto@foo.bar
# --- Alias principal Debian ---
Alias /debian /var/www/apt-mirror/mirror/ftp.fr.debian.org/debian
# --- Alias Security pour stretch (Jessie n'en a pas besoin) ---
Alias /debian-security /var/www/apt-mirror/mirror/security.debian.org/
# --- Alias Security pour Jessie ---
Alias / /var/www/apt-mirror/mirror/security.debian.org/
DocumentRoot /var/www/apt-mirror/mirror
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Désactivation du vHost par défaut
a2dissite 000-default.conf
Activation du vHost d'Apt-mirror
a2ensite apt-mirror.conf
Rechargement de la configuration d'Apache
systemctl reload apache2
Deuxième méthode
La méthode ACL Apache
Modifier le fichier de configuration d'Apache2
vim /etc/apache2/apache2.conf
Ajouter cette section dans le fichier:
<Directory /var/spool/apt-mirror>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Création du vHost Apache
vim /etc/apache2/sites-available/apt-mirror.conf
<VirtualHost *:80>
ServerAdmin toto@foo.bar
# --- Alias principal Debian ---
Alias /debian /var/spool/apt-mirror/mirror/ftp.fr.debian.org/debian
# --- Alias Security pour stretch (Jessie n'en a pas besoin) ---
Alias /debian-security /var/spool/apt-mirror/mirror/security.debian.org/
# --- Alias Security pour Jessie ---
Alias / /var/spool/apt-mirror/mirror/security.debian.org/
DocumentRoot /var/spool/apt-mirror/mirror
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Désactivation du vHost par défaut
a2dissite 000-default.conf
Activation du vHost d'Apt-mirror
a2ensite apt-mirror.conf
Rechargement de la configuration d'Apache
systemctl reload apache2
Synchronisation
Si vous n'avez rien oublié, vous pouvez commencer la synchronisation.
ATTENTION
Cette étape est d'une lenteur anémique ! Je vous conseil d'exécuter ce qui va suivre dans untmux
ou un screen
afin de pouvoir vous détacher du shell si vous êtes en SSH. De plus, si vous êtes derrière une connexion Internet mutualiser avec un collègue, proche, voisin en partage de connexion... prévenez-les que vous allez tout pomper pendant plus d'une journée. Sinon vous pouvez limiter la bande passante afin d'éviter un conflit avec ces derniers...Lancer la synchronisation
/var/spool/apt-mirror/sync_mirror.sh
Vous trouverez l'état de la duplication dans le répertoire de log définit plus haut
ASTUCE
Au vu du temps que met la réplication à d’effectuer, je vous conseil de réaliser une seconde synchronisation à la fin de la première afin d'être vraiment à jour.Exploitation
À ce stade, notre miroir de dépôt est fonctionnel. Comme énoncé au début de ce document, vous avez deux possibilités pour exploiter votre serveur. Soit vous renseignez l'adresse de celui-ci dans toute vos machines et lors de l'installation des nouvelles (ce qui peut vite être chiant sur une bécane nomade quand vous ne serez plus dans votre réseau local), soit comme moi, vous utiliser un DNS menteur au sein de votre réseau via la fonctionnalité RPZ de Bind9. L'idée va être de faire répondre votre DNS aux requêtes à destination de ftp.fr.debian.org
sur l'adresse IP de votre miroir et non le vrai (comme le DNS de la Chine quoi).