Modifications entre les versions 23 et 28 (s'étendant sur 5 versions)
Version 23 à la date du 2009-01-13 15:22:47
Taille: 8324
Éditeur: ThomasNoël
Commentaire: miroir de PPAs
Version 28 à la date du 2009-05-14 10:00:11
Taille: 7013
Éditeur: ThomasNoël
Commentaire: patch debmirror
Texte supprimé. Texte ajouté.
Ligne 1: Ligne 1:
<<TableOfContents>>
Ligne 5: Ligne 7:
 * Installer un miroir Debian sur son réseau local rend plus rapide l'installation et la mise à jour de paquets sur ses machines.  * Installer un miroir Ubuntu sur son réseau local rend plus rapide l'installation et la mise à jour de paquets sur ses machines.
 * Un miroir Debian permet d'installer et maintenir facilement son parc de serveur
Ligne 10: Ligne 13:
Il faut avoir une connection Internet correcte (256kbps minimum), stable, du courant la nuit et un disque dur d'au moins 60Go :
 * 14 Go pour [[Debian]] Etch i386 (double si vous avez aussi amd64)
 * XX Mo pour Debian "security" Etch i386
 * 16 Go pour [[Ubuntu]] Feisty i386 (amd64 non conseillée, trop de soucis avec les codecs et les plug-ins non libres)
 * 1 Go pour Ubuntu security Feisty i386
 * ... qui sait combien cela donne pour Gutsy i386 ?
Il faut avoir une connection Internet correcte (256kbps minimum), stable, du courant la nuit et un GROS disque dur :
 * 50Go pour [[Debian]] Etch+Lenny i386+amd64 (sans doute la moitié pour une seule architecture)
 * 10Go pour Debian "security" Etch+Lenny i386+amd64 (mesuré le 4 mai 2009)
 * 70Go pour [[Ubuntu]] Hardy+Intrepid+Jaunty i386
Ligne 19: Ligne 20:
= Solution 1 1 : utiliser debmirror = = Principe général =
Ligne 21: Ligne 22:
 1. Installer le logiciel prévu pour faire des miroirs :  1. Ecrire un script de mise à jour du miroir (par exemple dans /usr/local/bin/miroirs-debian.sn), voir des exemples ci-dessous
 1. Créer un utilisateur `miroir` dédié à cet usage, lui donner les droits `rwx` dans les répertoires où seront téléchargés les miroirs (et nulle part ailleurs)
 1. Tester le script en le lançant à la main, depuis cet utilisateur `miroir`
 1. Si tout va bien, placer le script dans un ''cron''. Par exemple :
Ligne 23: Ligne 27:
# aptitude install debmirror
}}}
 1. Ecrire un ou des scripts de mise à jour des miroirs (par exemple dans /usr/local/bin/miroirs-debian) : voir des exemples ci-dessous
 1. Tester votre/vos script(s) en les lançant à la main...
 1. Si tout va bien, le placer en cron, par exemple :
 {{{
# fichier /etc/cron.d/miroir-debian-ubuntu
# Lancement toutes les nuits à 2h du matin, par l'utilisateur "miroir" créée spécifiquement
0 2 * * * miroir /usr/local/bin/miroirs-debian
# 3 heures ensuite, on lance le miroir d'Ubuntu
0 5 * * * miroir /usr/local/bin/miroirs-ubuntu
# extrait du fichier /etc/cron.d/miroirs

# Lancement du miroir Debian tous les soirs à 20h, par l'utilisateur "miroir" créée spécifiquement :
0 20 * * * miroir /usr/local/bin/miroirs-debian.sh
# 4 heures plus tard, on lance le miroir d'Ubuntu :
0 0 * * * miroir /usr/local/bin/miroirs-ubuntu.sh
Ligne 36: Ligne 35:
== Scripts debmirror pour Debian et Ubuntu == == Solution 1 (recommandée) : scripts utilisant debmirror ==
Ligne 38: Ligne 37:
Un script pour faire ou mettre à jour un miroir Debian : Installer d'abord le logiciel `debmirror`. Lisez la documentation (`man debmirror` et `debmirror --help`) : elle est très bien faite.
Ligne 40: Ligne 39:
  {{{
#!/bin/sh
#!/bin/sh

# Repertoire cible et site source (prendre le plus proche au sens réseau Internet)
LOCALDEST=/srv/www/miroirs/debian
SERVSOURCE=ftp.fr.debian.org

# Choisir les options pour la création du miroir :
# man debmirror
# et/ou
# debmirror --help

debmirror $LOCALDEST --host=$SERVSOURCE \
        --arch=i386 --nosource --method=rsync \
        --root=:debian --dist=etch \
# --debug --progress # décommenter pour déboguer

debmirror $LOCALDEST-security --host=security.debian.org \
        --arch=i386 --nosource --method=rsync \
        --root=:debian-security --dist=etch/updates \
# --debug --progress # décommenter pour déboguer

exit 0
}}}

Exemples pour Ubuntu Feisty et Gutsy (à adapter aux versions plus actuelles) :

 {{{
#!/bin/bash
#!/bin/bash

# Repertoire cible et site source (prendre le plus proche au sens réseau Internet)
LOCALDEST=/srv/www/miroirs/ubuntu
SERVSOURCE=fr.archive.ubuntu.com

# Choisir les options pour la création du miroir :
# lire "man debmirror" et/ou "debmirror --help"

/usr/bin/debmirror $LOCALDEST --host=$SERVSOURCE \
        --arch=i386 --root=:ubuntu --nosource \
        --ignore-release-gpg --timeout=3600 --method=rsync \
        --dist=feisty,feisty-updates,feisty-backports,feisty-security,gutsy,gutsy-updates,gutsy-backports,gutsy-security \
        --section=main,restricted,multiverse,universe \
# --debug --progress # décommenter pour déboguer
Ces scripts permettent de créer puis de mettre à jour un miroir :
 * pour Debian : [[attachment:miroir-debian.sh]]
 * pour Ubuntu : [[attachment:miroir-ubuntu.sh]] (voir aussi le patch sur debmirror [[#Unprobl.2BAOg-meavecdebmirrorpourlesmiroirsUbuntu|ici]])
Ligne 87: Ligne 44:
exit 0
}}}
== Solution 2 (à valider) : apt-mirror ==
Ligne 90: Ligne 46:
= Solution 2 : avec apt-mirror = Solution actuellement utilisée pour les miroirs à Montréal. /* à confirmer */
Ligne 96: Ligne 52:
 
Ligne 98: Ligne 53:
= Solution 3 : avec reprepro = == Solution 3 (à tester) : reprepro ==
Ligne 100: Ligne 55:
A étudier : http://lostwebsite.wordpress.com/2008/10/21/partial-debian-mirrors/ Nous ne l'avons encore jamais mis en place, mais elle semble intéressante. Voir ici : http://lostwebsite.wordpress.com/2008/10/21/partial-debian-mirrors/
Ligne 102: Ligne 57:
= Vérifier la place occupée par distribution/section/architecture = = Faire le miroir d'un (ou plusieurs) PPA, avec debmirror =
Ligne 104: Ligne 59:
Voici un petit script permettant de calculer la place utilisée globalement ou par distribution, section ou architecture dans le miroir. ''PPA'' (Personal Package Archives) est un système qui permet à tout le monde de faire héberger ses paquets sur Launchpad, le système de Canonical/Ubuntu. Voici un script [[attachment:debmirror-ppa.sh]] qui appelle debmirror avec les bons paramètres pour faire le miroir d'un PPA donné.

----

= Annexes =


== Un problème avec debmirror pour les miroirs Ubuntu ==

Les sites d'Ubuntu ont un problème : ils ne possèdent pas de section "restricted/debian-installer" au niveau de *-security", *-updates ou *-backports... Ca fait planter les miroirs quand on veut y intégrer le système d'installation par réseau. C'est très génant.

Une façon de contourner ce problème est de modifier debmirror, afin qu'il ne copie pas la section dans certains cas. Pour cela, il faut ajouter une ligne dans `/usr/bin/debmirror` (la ligne 727 ci-dessous) :

 {{{
(... extrait de /usr/bin/debmirror avec ajout de la ligne 727 ...)
 718 foreach my $dist (@dists) {
 719 foreach my $section (@sections) {
 720 # no d-i in woody
 721 next if ($section =~ /debian-installer/ && $dist eq "woody");
 722 next if ($section =~ /debian-installer/ && $dist eq "experimental");
 723 next if ($section =~ /debian-installer/ && $dist =~ /.*-proposed-updates/);
 724 next if ($section =~ /debian-installer/ && $dist =~ /.*breezy-updates/ );
 725 next if ($section =~ /debian-installer/ && $dist eq "breezy-security" );
 726 # FIXME AUF (LIGNE A AJOUTER) : il n'y a pas de restricted/debian-installer dans les Ubuntu security & updates & backports
 727 next if ($section =~ /restricted\/debian-installer/ && $dist =~ /(dapper|hardy|intrepid|jaunty|karmic)-(security|updates|backports)/ );
 728
 729 foreach my $arch (@arches) {
 730 get_index("dists/$dist/$section/binary-$arch", "Packages");
 731 }
 732 get_index("dists/$dist/$section/source", "Sources") if ($do_source);
 733 }
 734 }
(...)
}}}

== Débuter un miroir à partir des cédéroms ==

Les DVD de Debian et Ubuntu alternate (etch, gutsy et hardy sont les distributions pour lesquels j'ai testé cette méthode) comporte une arborescence classique comprenant les répertoires pool et dists à la racine de chaque dvd. Pool contient les différents paquets de la distribution, et dists contient pour chaque distributions (en supposant qu'on dispose de dvd de plusieurs distributions de ubuntu par exemple) la liste des paquets et les versions correspondantes. Les paquets décrits dans les listes contenues dans les répertoires dists sont en principe dans le répertoire pool.

Pour copier le contenu de ces répertoires vers la racine de notre miroir, l'utilisation de rsync par exemple peut être envisagé de la façon suivante pour chaque DVD :

{{{
# mount /media/cdrom
$ rsync -av /media/cdrom/pool /srv/www/miroirs/ubuntu/pool
$ rsync -av /media/cdrom/dists /srv/www/miroirs/ubuntu/dists
# umount -l /media/cdrom
}}}

Une fois tous les dvd copiés, il suffit de mettre en marche les différents scripts présentés ci-dessus pour terminer la mise à jour du miroir et le téléchargement des dernières versions des fichiers Release, Packages et Contents.

== Vérifier la place occupée par distribution/section/architecture ==

Voici un petit script permettant de calculer la place utilisée globalement ou par distribution, section ou architecture dans le miroir : [[attachment:taille-miroir.sh]]
Ligne 107: Ligne 114:

  {{{
#!/bin/bash # ce n'est pas une faute de typo : le wiki mange cette première ligne... :-/
#!/bin/bash
# taille-miroir.sh - script de vérification de taille de miroir
# Copyright ©2008 Agence universitaire de la Francophonie
# Licence : GPL version 2
# Auteur : Progfou <jean-christophe.andre@auf.org>, Mai.2008
#
# Usage : taille-miroir.sh [sous-dossier [dist [section [arch]]]]
# Exemple : taille-miroir.sh ubuntu intrepid
#
DIR="/srv/www/miroirs"
SUBDIR="$1"
DIST="$2"
SECTION="$3"
ARCH="$4"

cd "$DIR" || exit 1
dirs=$(find "${SUBDIR:-.}" -name dists -printf "%h\n" | egrep -v '/.temp(/|$)')
grandtotal=0
for dir in $dirs
do
  dir="${dir#./}"
  printf " / Tailles pour $dir :\n"
  total=0
  pathes=$(find "$dir/dists" -name Packages -printf "%P\n" | sort -t/ -k1)
  for path in $pathes
  do
    dist="${path%%/*}" ; path="${path#*/}"
    [ "$DIST" ] && [ "${dist:0:${#DIST}}" != "$DIST" ] && continue
    test -d "$dir/dists/$dist" -a ! -L "$dir/dists/$dist" || continue
    file="${path##*/}" ; path="${path%/*}"
    arch="${path##*/}" ; section="${path%/*}"
    [ "$SECTION" ] && [ "$section" != "$SECTION" ] && continue
    [ "$ARCH" ] && [ "$arch" != "$ARCH" ] && continue
    size=$(awk 'BEGIN{s=0}/^Size:/{s+=$2}END{print int(s/1024/1024)}' $dir/dists/$dist/$section/$arch/$file)
    printf "| %-20s %-30s %10s : %5s Mio\n" "$dist" "$section" "$arch" "$size"
    total=$((total+size))
  done
  printf " \\ TOTAL pour $dir : %s Mio\n" "$total"
  grandtotal=$((grandtotal+total))
done
printf "GRAND TOTAL : %s Mio\n" "$grandtotal"
exit 0
}}}


= Débuter un miroir à partir des cédéroms =

Les dvd de debian et ubuntu (etch, gutsy et hardy sont les distributions pour lesquels j'ai testé cette méthode) comporte une arborescence classique comprenant les répertoires pool et dists à la racine de chaque dvd. Pool contient les différents paquets de la distribution, et dists contient pour chaque distributions (en supposant qu'on dispose de dvd de plusieurs distributions de ubuntu par exemple) la liste des paquets et les versions correspondantes. Les paquets décrits dans les listes contenues dans les répertoires dists sont en principe dans le répertoire pool.

Pour copier le contenu de ces répertoires vers la racine de notre miroir, l'utilisation de rsync par exemple peut être envisagé de la façon suivante pour chaque dvd:
{{{
mount /media/cdrom
rsync -av /media/cdrom/pool /srv/www/miroirs/ubuntu/pool
rsync -av /media/cdrom/dists /srv/www/miroirs/ubuntu/dists
umount -l /media/cdrom
}}}
Une fois tous les dvd copiés, il suffit de mettre en marche les différents scripts présentés ci-dessus pour terminer la mise à jour du miroir et le téléchargement des dernières versions des fichiers Release, Packages et Contents.

= Faire un ou plusieurs miroirs de PPA =


Voici un script qui appelle debmirror avec les bons paramètres pour faire le miroir d'un PPA donné (''PPA = Personal Package Archives, un système qui permet à tout le monde de faire héberger ses paquets sur Launchpad, le système de Canonical/Ubuntu'').

 {{{
#!/bin/sh
#!/bin/sh

# /usr/local/bin/ppamirror
# Exemple d'utilisation : # ppamirror openoffice-pkgs <-- PPA OpenOffice 3 pour Hardy & Intrepid
# ce qui donnera la source : deb http://miroir.xx.auf.org/ppa/ hardy openoffice-pkgs

if [ -z $1 ]; then
 echo "syntaxe: $0 nom-du-ppa"
 exit 1
fi

PPA=$1
shift

WWWROOT=/var/www/miroirs/ppa/
DISTS=hardy,intrepid
ARCHIS=i386,amd64

debmirror $* --nosource --ignore-release-gpg \
 --dist=${DISTS} --arch=${ARCHIS} --section=main \
 --host=ppa.launchpad.net --method=http --root=/${PPA}/ubuntu \
 ${WWWROOT}/${PPA}/
}}}

Cette page explique comment mettre en place et maintenir un miroir Debian/Ubuntu

Pourquoi avoir un miroir local ?

  • Installer un miroir Ubuntu sur son réseau local rend plus rapide l'installation et la mise à jour de paquets sur ses machines.
  • Un miroir Debian permet d'installer et maintenir facilement son parc de serveur
  • En effectuant les mises à jour des miroirs la nuit, cette méthode permet de libérer la bande passante le jour.

Contraintes

Il faut avoir une connection Internet correcte (256kbps minimum), stable, du courant la nuit et un GROS disque dur :

  • 50Go pour Debian Etch+Lenny i386+amd64 (sans doute la moitié pour une seule architecture)

  • 10Go pour Debian "security" Etch+Lenny i386+amd64 (mesuré le 4 mai 2009)
  • 70Go pour Ubuntu Hardy+Intrepid+Jaunty i386

Attention : sur une bande passante moyenne, commencer un miroir à partir de rien n'est absolument pas raisonnable. Il faut commencer avec une archive de base qui sera soit un miroir assez récent obtenu chez un collègue (sur un disque dur USB2 par exemple), soit un ensemble de cédéroms ou dévédéroms (opération assez complexe, voir en bas de la page).

Principe général

  1. Ecrire un script de mise à jour du miroir (par exemple dans /usr/local/bin/miroirs-debian.sn), voir des exemples ci-dessous
  2. Créer un utilisateur miroir dédié à cet usage, lui donner les droits rwx dans les répertoires où seront téléchargés les miroirs (et nulle part ailleurs)

  3. Tester le script en le lançant à la main, depuis cet utilisateur miroir

  4. Si tout va bien, placer le script dans un cron. Par exemple :

    # extrait du fichier /etc/cron.d/miroirs
    
    # Lancement du miroir Debian tous les soirs à 20h, par l'utilisateur "miroir" créée spécifiquement :
    0 20 * * * miroir /usr/local/bin/miroirs-debian.sh
    # 4 heures plus tard, on lance le miroir d'Ubuntu :
    0 0 * * * miroir /usr/local/bin/miroirs-ubuntu.sh

Solution 1 (recommandée) : scripts utilisant debmirror

Installer d'abord le logiciel debmirror. Lisez la documentation (man debmirror et debmirror --help) : elle est très bien faite.

Ces scripts permettent de créer puis de mettre à jour un miroir :

Solution 2 (à valider) : apt-mirror

Solution actuellement utilisée pour les miroirs à Montréal.

Solution 3 (à tester) : reprepro

Nous ne l'avons encore jamais mis en place, mais elle semble intéressante. Voir ici : http://lostwebsite.wordpress.com/2008/10/21/partial-debian-mirrors/

Faire le miroir d'un (ou plusieurs) PPA, avec debmirror

PPA (Personal Package Archives) est un système qui permet à tout le monde de faire héberger ses paquets sur Launchpad, le système de Canonical/Ubuntu. Voici un script debmirror-ppa.sh qui appelle debmirror avec les bons paramètres pour faire le miroir d'un PPA donné.


Annexes

Un problème avec debmirror pour les miroirs Ubuntu

Les sites d'Ubuntu ont un problème : ils ne possèdent pas de section "restricted/debian-installer" au niveau de *-security", *-updates ou *-backports... Ca fait planter les miroirs quand on veut y intégrer le système d'installation par réseau. C'est très génant.

Une façon de contourner ce problème est de modifier debmirror, afin qu'il ne copie pas la section dans certains cas. Pour cela, il faut ajouter une ligne dans /usr/bin/debmirror (la ligne 727 ci-dessous) :

  • (... extrait de /usr/bin/debmirror avec ajout de la ligne 727 ...)
     718 foreach my $dist (@dists) {
     719   foreach my $section (@sections) {
     720     # no d-i in woody
     721     next if ($section =~ /debian-installer/ && $dist eq "woody");
     722     next if ($section =~ /debian-installer/ && $dist eq "experimental");
     723     next if ($section =~ /debian-installer/ && $dist =~ /.*-proposed-updates/);
     724     next if ($section =~ /debian-installer/ && $dist =~ /.*breezy-updates/ );
     725     next if ($section =~ /debian-installer/ && $dist eq "breezy-security" );
     726     # FIXME AUF (LIGNE A AJOUTER) : il n'y a pas de restricted/debian-installer dans les Ubuntu security & updates & backports
     727     next if ($section =~ /restricted\/debian-installer/ && $dist =~ /(dapper|hardy|intrepid|jaunty|karmic)-(security|updates|backports)/ );
     728 
     729     foreach my $arch (@arches) {
     730       get_index("dists/$dist/$section/binary-$arch", "Packages");
     731     }
     732     get_index("dists/$dist/$section/source", "Sources") if ($do_source);
     733   }
     734 }
    (...)

Débuter un miroir à partir des cédéroms

Les DVD de Debian et Ubuntu alternate (etch, gutsy et hardy sont les distributions pour lesquels j'ai testé cette méthode) comporte une arborescence classique comprenant les répertoires pool et dists à la racine de chaque dvd. Pool contient les différents paquets de la distribution, et dists contient pour chaque distributions (en supposant qu'on dispose de dvd de plusieurs distributions de ubuntu par exemple) la liste des paquets et les versions correspondantes. Les paquets décrits dans les listes contenues dans les répertoires dists sont en principe dans le répertoire pool.

Pour copier le contenu de ces répertoires vers la racine de notre miroir, l'utilisation de rsync par exemple peut être envisagé de la façon suivante pour chaque DVD :

# mount /media/cdrom
$ rsync -av /media/cdrom/pool /srv/www/miroirs/ubuntu/pool
$ rsync -av /media/cdrom/dists /srv/www/miroirs/ubuntu/dists
# umount -l /media/cdrom

Une fois tous les dvd copiés, il suffit de mettre en marche les différents scripts présentés ci-dessus pour terminer la mise à jour du miroir et le téléchargement des dernières versions des fichiers Release, Packages et Contents.

Vérifier la place occupée par distribution/section/architecture

Voici un petit script permettant de calculer la place utilisée globalement ou par distribution, section ou architecture dans le miroir : taille-miroir.sh

/!\ Attention : vu que tout est mis en vrac dans un pool, il se base sur les informations déclarées dans les fichiers Packages, ce qui suppose donc un miroir en bon état faute de quoi les calculs ne refléteraient pas la réalité.

Miroir (dernière édition le 2011-02-02 19:33:19 par MoussaNombre)