« Debmirror » : différence entre les versions

De Wiki doc

(Page créée avec « Category:miroir_apt ''Debmirror'' permet de réaliser un miroir des dépôts ''Debian'' en utilisant le protocole Rsync à l'image de Ftpsync. La différence m... »)
 
(Remplacement de la balise "source" obsolète + ajout d'un chevron redirecteur dans le script de synchronisation des dépôts principaux afin de ne pas tronquer le début du journal)
 
(Une version intermédiaire par le même utilisateur non affichée)
Ligne 23 : Ligne 23 :
  vim /etc/apache2/sites-available/debmirror.conf
  vim /etc/apache2/sites-available/debmirror.conf


<source lang="apache">
<syntaxhighlight lang="apache">
<VirtualHost *:80>
<VirtualHost *:80>


Ligne 40 : Ligne 40 :


</VirtualHost>
</VirtualHost>
</source>
</syntaxhighlight>


'''Désactivation de l'hôte virtuel par défaut'''
'''Désactivation de l'hôte virtuel par défaut'''
Ligne 54 : Ligne 54 :
  vim /usr/local/bin/debmirror_debian
  vim /usr/local/bin/debmirror_debian


<source lang="bash">
<syntaxhighlight lang="bash">
#!/bin/bash
#!/bin/bash


Ligne 64 : Ligne 64 :
distributions="buster,buster-updates,sid"
distributions="buster,buster-updates,sid"
sections="main,contrib,non-free,main/debian-installer"
sections="main,contrib,non-free,main/debian-installer"
# « main/debian-installer » de « section »
# permet une installation de la distribution via un démarrage PXE.
cible="/var/www/dépôts/debian/"
cible="/var/www/dépôts/debian/"
architecture="amd64" # ajouter d'autres architectures séparées par des virgules si nécessaire
architecture="amd64" # « i386,amd64 »
# « i386,amd64 »
 
jour_semaine=$(date +%u)
 
echo "--- Début de la synchronisation le $(date +%x) à $(date +%T) ---" > /var/log/debmirror/debmirror."${jour_semaine}".log


# Commande pour synchroniser le miroir avec Debian
# Commande pour synchroniser le miroir avec Debian
Ligne 75 : Ligne 77 :
--section="${sections}" --arch="${architecture}" "${cible}" \
--section="${sections}" --arch="${architecture}" "${cible}" \
--getcontents --keyring /usr/share/keyrings/debian-archive-keyring.gpg \
--getcontents --keyring /usr/share/keyrings/debian-archive-keyring.gpg \
--i18n --postcleanup --progress --rsync-extra=doc,tools --diff=none  > /var/log/debmirror/debmirror.$(date +%u).log
--i18n --postcleanup --progress --rsync-extra=doc,tools --diff=none  >> /var/log/debmirror/debmirror."${jour_semaine}".log


# Commande pour obtenir le sous répertoire "installer-amd64" (facultatif). Je n'ai pas trouvé une autre façon de faire...
# Commande pour obtenir le sous répertoire "installer-amd64" (facultatif). Je n'ai pas trouvé une autre façon de faire...
rsync -a "${hote}"::debian/dists/buster/main/installer-amd64 "${cible}"/dists/buster/main/
rsync -a "${hote}"::debian/dists/buster/main/installer-amd64 "${cible}"/dists/buster/main/
</source>
 
echo "--- Fin de la synchronisation à $(date +%T) ---" >> /var/log/debmirror/debmirror."${jour_semaine}".log
</syntaxhighlight>


  vim /usr/local/bin/debmirror_debian-security
  vim /usr/local/bin/debmirror_debian-security


<source lang="bash">
<syntaxhighlight lang="bash">
#!/bin/bash
#!/bin/bash


# Définition des variables pour Debian
# Définition des variables pour Debian
hote="security.debian.org"
hote="ftp.fr.debian.org"
racine="debian-security"
racine="debian-security"
methode="rsync"
methode="rsync"
Ligne 96 : Ligne 100 :
cible="/var/www/dépôts/debian-security/"
cible="/var/www/dépôts/debian-security/"
architecture="amd64"
architecture="amd64"
jour_semaine=$(date +%u)
echo "--- Début de la synchronisation le $(date +%x) à $(date +%T) ---" > /var/log/debmirror/debmirror-security."${jour_semaine}".log


# Commande pour synchroniser le mirroir avec Debian
# Commande pour synchroniser le mirroir avec Debian
Ligne 102 : Ligne 110 :
--section="${sections}" --arch="${architecture}" "${cible}" \
--section="${sections}" --arch="${architecture}" "${cible}" \
--getcontents --keyring /usr/share/keyrings/debian-archive-keyring.gpg \
--getcontents --keyring /usr/share/keyrings/debian-archive-keyring.gpg \
--i18n --postcleanup --progress --diff=none  > /var/log/debmirror/debmirror-security.$(date +%u).log
--i18n --postcleanup --progress --diff=none  >> /var/log/debmirror/debmirror-security."${jour_semaine}".log
</source>
 
echo "--- Fin de la synchronisation à $(date +%T) ---" >> /var/log/debmirror/debmirror-security."${jour_semaine}".log
</syntaxhighlight>


'''Attribution des droits'''
'''Attribution des droits'''
Ligne 125 : Ligne 135 :
  crontab -e -u debmirror
  crontab -e -u debmirror


  00 4,10,16,22 * * * usr/local/bin/debmirror_debian 2>&1
  00 4,10,16,22 * * * /usr/local/bin/debmirror_debian 2>&1
  10 4,10,16,22 * * * /usr/local/bin/debmirror_debian-security 2>&1
  10 4,10,16,22 * * * /usr/local/bin/debmirror_debian-security 2>&1



Dernière version du 18 juillet 2023 à 22:19

Debmirror permet de réaliser un miroir des dépôts Debian en utilisant le protocole Rsync à l'image de Ftpsync. La différence majeure qui le distingue de celui-ci est sa capacité à sélectionner les branches à synchroniser. Il n'est donc pas destiné à faire un miroir complet du dépôt distant (même s'il le permet tout à fait). L'outil est plus adapté à la mise à disposition des paquets nécessaires au fonctionnement des machines de votre réseau local. Il leur permettra d'avoir accès aux paquets dont elles ont besoin sans avoir à interroger de serveur sur Internet. De par sa capacité à discriminer les branches à copier, il est plus économe en espace disque ainsi qu'en bande passante lors des opérations de synchronisation. À titre d'exemple, voici la place occupée par le résultat de ce document au 29/12/2020 :

root@debmirror:~# du -hs /var/www/dépôts/*
152G	/var/www/dépôts/debian
11G	/var/www/dépôts/debian-security

Installation et préparation

Comme à notre habitude lors de la mise en place de ce type d'outil, nous mettrons à disposition les paquets téléchargés via Apache2 et automatiserons la synchronisation avec Cron.

Préparation de l'environnement

Installation des dépendances

apt install --no-install-recommends apache2 debmirror debian-keyring cron

Création d'un utilisateur dédié à la synchronisation

useradd --system --home-dir /var/www/dépôts/ --user-group debmirror

Création des répertoires d'accueil

mkdir -p /var/www/dépôts/{debian,debian-security} /var/log/debmirror/

Configuration d'Apache

Création de l'hôte virtuel

vim /etc/apache2/sites-available/debmirror.conf
<VirtualHost *:80>

	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/dépôts/

	<Directory /> 
	      Options FollowSymLinks 
	      AllowOverride none 
	      Order allow,deny 
	      Allow from all
	</Directory>

	ErrorLog ${APACHE_LOG_DIR}/error-debmirror.log
	CustomLog ${APACHE_LOG_DIR}/access-debmirror.log combined

</VirtualHost>

Désactivation de l'hôte virtuel par défaut

a2dissite 000-default.conf

Activation du nouveau et rechargement du service

a2ensite debmirror.conf
systemctl reload apache2.service

Configuration de debmirror

L'outil a besoin d'un fichier de configuration par dépôt à synchroniser. Nous en créerons donc deux : un pour le dépôt debian, l'autre pour debian-security, le tout en amd64. Je ne synchroniserai que les branches main, contrib, non-free et main/debian-installer pour le premier dépôt ainsi que buster/updates pour le deuxième.

vim /usr/local/bin/debmirror_debian
#!/bin/bash

# Définition des variables pour Debian
hote="ftp.fr.debian.org"
racine="debian/"
methode="rsync"		# au choix ftp|http|https|rsync

distributions="buster,buster-updates,sid"
sections="main,contrib,non-free,main/debian-installer"
				 
cible="/var/www/dépôts/debian/"
architecture="amd64"	# « i386,amd64 »

jour_semaine=$(date +%u)

echo "--- Début de la synchronisation le $(date +%x) à $(date +%T) ---" > /var/log/debmirror/debmirror."${jour_semaine}".log

# Commande pour synchroniser le miroir avec Debian
/usr/bin/debmirror --nosource --passive --method="${methode}" \
--root="${racine}" --dist="${distributions}" --host="${hote}" \
--section="${sections}" --arch="${architecture}" "${cible}" \
--getcontents --keyring /usr/share/keyrings/debian-archive-keyring.gpg \
--i18n --postcleanup --progress --rsync-extra=doc,tools --diff=none  >> /var/log/debmirror/debmirror."${jour_semaine}".log

# Commande pour obtenir le sous répertoire "installer-amd64" (facultatif). Je n'ai pas trouvé une autre façon de faire...
rsync -a "${hote}"::debian/dists/buster/main/installer-amd64 "${cible}"/dists/buster/main/

echo "--- Fin de la synchronisation à $(date +%T) ---" >> /var/log/debmirror/debmirror."${jour_semaine}".log
vim /usr/local/bin/debmirror_debian-security
#!/bin/bash

# Définition des variables pour Debian
hote="ftp.fr.debian.org"
racine="debian-security"
methode="rsync"

distributions="buster/updates"
sections="main,contrib,non-free"

cible="/var/www/dépôts/debian-security/"
architecture="amd64"

jour_semaine=$(date +%u)

echo "--- Début de la synchronisation le $(date +%x) à $(date +%T) ---" > /var/log/debmirror/debmirror-security."${jour_semaine}".log

# Commande pour synchroniser le mirroir avec Debian
/usr/bin/debmirror --nosource --passive --method="${methode}" \
--root="${racine}" --dist="${distributions}" --host="${hote}" \
--section="${sections}" --arch="${architecture}" "${cible}" \
--getcontents --keyring /usr/share/keyrings/debian-archive-keyring.gpg \
--i18n --postcleanup --progress --diff=none  >> /var/log/debmirror/debmirror-security."${jour_semaine}".log

echo "--- Fin de la synchronisation à $(date +%T) ---" >> /var/log/debmirror/debmirror-security."${jour_semaine}".log

Attribution des droits

chmod ug+x /usr/local/bin/debmirror_debian /usr/local/bin/debmirror_debian-security
chown -R debmirror:debmirror /var/www/dépôts /var/log/debmirror /usr/local/bin/debmirror_debian*

Synchronisation du miroir

Il convient désormais de lancer une synchronisation. Prennez en compte que cette étape va prendre un certain temps au vu de la quantité de données à rappatrier. Sachez également que le serveur ftp.fr.debian.org limite les téléchargements aux environs de 10Mo/s.

Dépôt debian

su - debmirror -c '/usr/local/bin/debmirror_debian'

Dépôt debian-security

su - debmirror -c '/usr/local/bin/debmirror_debian-security'

Automatisation

Afin de maintenir un miroir à jour, la mise en place d'une synchronisation automatique et périodique s'impose. Les dépôts Debian se répliques quatres fois par jours. Nous en ferrons de même.

Création de la crontab

crontab -e -u debmirror
00 4,10,16,22 * * * /usr/local/bin/debmirror_debian 2>&1
10 4,10,16,22 * * * /usr/local/bin/debmirror_debian-security 2>&1

Sources