Cette page n'a pas encore d'étiquettes.
Apportez votre aide…

Ceci est une ancienne révision du document !



Administration Système : Comment créer un miroir de dépôt local ?

La création d'un miroir pour les paquets va vous permettre de créer et de maintenir la copie conforme de dépôts (officiels ou non) en local. La raison principale est de ne plus avoir besoin de connexion vers le net pour pouvoir installer un paquet ou bien faire des mises à jour. C'est donc une solution pratique et efficace pour une install party, la mise à jour d'un parc de machine (dans ce cas le miroir peut être couplé avec un serveur, un proxy, etc.) ou, pour en finir, la mise à jour ou l'installation chez une personne ne disposant pas d'une connexion vers le net, ou dont la connexion est trop lente (RTC).

Ce n'est donc pas une procédure à prendre à la légère, car vous allez aspirer complètement le contenu d'un ou plusieurs dépôts et les stocker dans un répertoire. Ce répertoire peut être sur un disque dur interne ou externe et il vous faudra une connexion internet conséquente. Pour l'exemple, j'ai mis dans les 16 heures pour aspirer les 15 Gio (sans les sources) des dépôts officiels pour la 7.04 avec une connexion à 8 Mbps. Je peux donc maintenant installer une Ubuntu 7.04 sur un PC sans accès à Internet, le mettre à jour et ajouter n'importe quel paquet et ses dépendances du moment qu'il existe sur les dépôts officiels.

Si votre but n'est que de partager des paquets que vous avez déjà téléchargés, il vous faut regarder du coté de apt-cacher ou bien sur ce guide : Mettre en place un dépôt local.

C'est très simple : il suffit d'installer le paquet « apt-mirror. ».

Dans mon exemple, je vais configurer un disque dur externe. Mais un autre emplacement est possible tant que vous en connaissez le chemin complet. Cela peut donc être un simple répertoire dans votre compte utilisateur.

Le cas du disque externe est celui que j'utilise. Mon disque dur se balade de mon boulot où j'ai un gros accès internet, à mon chez moi où la connexion est plus modeste et jusqu'à mes parents (sans internet) ou mes amis.

Mon disque dur est automatiquement monté sous « /media/DDPortable ». Nous allons donc créer un répertoire nommé « miroir » qui contiendra le miroir complet :

mkdir /media/DDPortable/miroir

Dans celui-ci, nous avons besoin de créer 3 sous-répertoires afin que apt-mirror puisse fonctionner :

mkdir /media/DDPortable/miroir/mirror
mkdir /media/DDPortable/miroir/skel
mkdir /media/DDPortable/miroir/var

Ces répertoires peuvent être tout aussi bien créés en utilisant Nautilus et sa possibilité de créer des dossiers

Pour les puristes :

mkdir -p /media/DDPortable/miroir/{mirror,skel,var}

Par défaut, apt-mirror utilise son propre fichier de configuration : /etc/apt/mirror.list.

Soit vous modifiez ce fichier, ce qui me semble être la bonne solution dans le cas d'un serveur, soit vous en créez un nouveau que vous sauvegarderez dans votre miroir.

Je vais donc prendre cette dernière solution. Il vous faudra néanmoins dans ce cas spécifier à apt-mirror d'utiliser votre propre fichier de configuration comme ceci :

apt-mirror /media/DDPortable/miroir/apt-mirror-configuration

Création du fichier de configuration

Tout d'abord copiez le fichier original dans votre répertoire :

cp /etc/apt/mirror.list /media/DDPortable/miroir/apt-mirror-configuration

Éditez le fichier « /media/DDPortable/miroir/apt-mirror-configuration » (votre fichier de configuration) afin que celui-ci contienne :

set base_path /media/DDPortable/miroir
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 i386 
set nthreads     4
set tilde 0

deb http://archive.ubuntu.com/ubuntu/ hardy main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ hardy-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ hardy-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ hardy main/debian-installer

clean http://archive.ubuntu.com/ubuntu

Les lignes dont vous devez vous soucier sont :

set base_path /media/DDPortable/miroir

Elle est à adapter à votre cas.

set defaultarch i386

Cette ligne précise que je ne désire récupérer que les paquets pour l'architecture i386.

Si vous voulez avoir plusieurs architectures dans votre miroir il suffit de le préciser dans les dépôts comme ceci

############# config ##################
#
set base_path /media/Backup/apt-mirror
#
# if you change the base path you must create the directories below with write privileges
#
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 xxxx (votre architecture i386/hppa/powerPC/ia64...)
set defaultarch i386 
set nthreads     2
set tilde 0
#
############# end config ##############
deb http://archive.ubuntu.com/ubuntu/ hardy main restricted
deb http://archive.ubuntu.com/ubuntu/ hardy-updates main restricted
deb http://archive.ubuntu.com/ubuntu/ hardy-security main restricted
deb http://archive.ubuntu.com/ubuntu/ hardy universe multiverse
deb http://archive.ubuntu.com/ubuntu/ hardy-updates universe multiverse
deb http://archive.ubuntu.com/ubuntu/ hardy-security universe multiverse
deb http://archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse
deb http://packages.medibuntu.org/ hardy free non-free
deb-amd64 http://packages.medibuntu.org/ hardy free non-free
deb-amd64 http://archive.ubuntu.com/ubuntu/ hardy main restricted
deb-amd64 http://archive.ubuntu.com/ubuntu/ hardy-updates main restricted
deb-amd64 http://archive.ubuntu.com/ubuntu/ hardy-security main restricted
deb-amd64 http://archive.ubuntu.com/ubuntu/ hardy universe multiverse
deb-amd64 http://archive.ubuntu.com/ubuntu/ hardy-updates universe multiverse
deb-amd64 http://archive.ubuntu.com/ubuntu/ hardy-security universe multiverse
deb-amd64 http://archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse

############# clean ##############

clean http://archive.ubuntu.com/ubuntu/ hardy
etc...

Explication : deb seul revient a dire deb-i386, car c'est l'architecture de base dans la configuration, tandis que pour les autres il faut le déclarer avec deb-amd64 deb-'autre-architecture' (trouvé sur le forum de apt-mirror)

Viennent ensuite 4 lignes qui précisent quels sont les dépôts dont je souhaite faire une copie. Ces 4 lignes sont ceux par défaut pour l'installation d'une Feisty, libre à vous de les modifier et/ou d'en ajouter. Il faudra cependant en tenir compte lors de l'intégration de votre miroir (voir la section « Utilisation de votre miroir »).

Les lignes qui suivent la section "clean" vous permettrons de supprimer les paquets obsolètes de votre miroir, ils faut les rentrer pour chaque adresse voulu (idealement toutes). Il faudra par la suite lancer le script clean.sh présent dans le répertoire chemin/du/miroir/var/ pour la suppression, ou bien passer par le script postmirror.sh (a créer). Toutes ces informations sont détaillées sur la sortie du terminal.

Sauvegardez votre fichier. Dans mon cas il se nomme « apt-mirror-configuration » et il est sauvé dans « /media/DDPortable/miroir/ ».

Lancez la création de votre miroir par :

apt-mirror /media/DDPortable/miroir/apt-mirror-configuration

Note : je rappelle que si vous ne passez pas de fichier de configuration à la commande apt-mirror, c'est celui par défaut qui sera utilisé (« /etc/apt/mirror.list »).

  • Dans un premier temps apt-mirror récupère la liste du contenu des miroirs demandés.
  • Dans un second temps apt-mirror vous indique la taille totale des paquets qu'il lui faut télécharger (dans notre fichier d'exemple cela représente environ 15 Gio).
  • Vous pouvez aller boire plusieurs cafés, même manger, fumer (beaucoup) et dormir… à moins de disposer d'une connexion de folie. ;-)
A titre indicatif, le contenu du miroir d'Ubuntu 10.04 LTS i386 avec les dépôts main, security et updates, sans sources prend 37.5Gio (au 23/09/11).

Si vous voulez surfer sur le net en même temps vous devriez installer wondershaper sur votre miroir.

Si vous passez par un proxy et que vous obtenez le message :

Proceed indexes: [Psh: cannot open archive.ubuntu.com/ubuntu//dists/jaunty/main/binary-i386/Packages.gz: No such file
apt-mirror: can't open index in proceed_index_gz at /usr/bin/apt-mirror line 390.

Veuillez vérifier les lignes suivantes dans le fichier wgetrc

vi /etc/wgetrc
http_proxy = http://user:passwd@proxy:port
use_proxy = on

Directement

Nous avons donc un disque dur externe contenant un miroir de nos dépôts préférés. Comment le faire prendre en compte par le système afin que celui-ci utilise notre miroir plutôt qu'en passant par le net ?

Il faut modifier temporairement le fichier de configuration des sources du système (« /etc/apt/sources.list ») afin de lui indiquer d'utiliser notre miroir.

Pour ce faire nous allons ouvrir un terminal et :

  • Faire une sauvegarde de ce fichier :
    sudo cp /etc/apt/sources.list /etc/apt/sources.list.ORIGINAL
  • Ouvrir le fichier « /etc/apt/sources.list ».
  • Supprimez-en tout le contenu.
  • Ajoutez :
    deb file:/media/DDPortable/miroir/mirror/archive.ubuntu.com/ubuntu/ hardy main restricted multiverse universe
    deb file:/media/DDPortable/miroir/mirror/archive.ubuntu.com/ubuntu/ hardy-updates main restricted multiverse universe
    deb file:/media/DDPortable/miroir/mirror/archive.ubuntu.com/ubuntu/ hardy-security main restricted multiverse universe
    deb file:/media/DDPortable/miroir/mirror/archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse

    Ces 4 lignes reflètent les 4 lignes se trouvant dans le fichier de configuration de apt-mirror (« /media/DDPortable/miroir/apt-mirror-configuration ») que je vous ai données. Attention donc aux chemins que vous avez utilisés, ainsi qu'aux dépôts supplémentaires dont vous avez fait la copie.

  • Sauvegardez votre fichier.
  • Mettez à jour votre système de gestion de paquet :
    sudo apt-get update
  • Désormais votre système utilise uniquement votre miroir. Vous pouvez donc faire vos manipulations, installations ou mises à jour de la manière dont vous le souhaitez.

À distance, en passant par un serveur

Côté serveur

Un petit serveur HTTP nous suffit pour ce que nous avons à faire, inutile d'installer et configurer une artillerie lourde comme Apache2. Python est notre ami !

Ouvrez une console, placez-vous dans le dossier qui sera la racine de votre serveur :

cd /media/DDPortable/miroir/

puis entrez la commande magique :

python -m SimpleHTTPServer 80 &

Le numéro en fin de commande (ici 80) est le port sur lequel tournera notre mini-serveur HTTP. Ce port doit être modifié (par exemple remplacé par 1234) si un autre serveur HTTP tourne sur la machine.

On peut tester son bon fonctionnement en se rendant sur http://localhost/ si le port choisi est 80, ou sur http://localhost:1234/ si le port choisi est 1234.

On y découvre un nouveau répertoire « ubuntu ».

Côté client

On sauvegarde le fichier de configuration :

sudo cp /etc/apt/sources.list /etc/apt/sources.list.ORIGINAL

On va éditer le fichier « /etc/apt/sources.list » afin de le faire pointer vers notre serveur.

sudo gedit /etc/apt/sources.list

Là où vous avez une ligne du style

deb http://archive.ubuntu.com/ubuntu/ hardy-updates main restricted multiverse universe

vous allez devoir remplacer l'adresse internet du serveur original par celui que vous avez spécialement installé. Si mon serveur est sur l'adresse 192.168.1.101 je modifie ma ligne et j'obtiens :

deb http://192.168.1.101/ubuntu/ hardy-updates main restricted multiverse universe

On fait cette manipulation pour chaque entrée ou ligne et on sauvegarde.

Remplacez 192.168.1.101 par 192.168.1.101:1234 si votre serveur HTTP tourne sur le port 1234.

On fait prendre en compte le nouveau fichier de configuration par un :

sudo apt-get update

et vous voilà prêt à utiliser votre miroir et serveur local.

Avant de partir il vous faut restaurer la configuration initiale du système de paquet. Nous allons donc remettre en état le système.

  • Sauvegarde de votre fichier modifié :
    sudo cp /etc/apt/sources.list /etc/apt/sources.list.MIROIR
  • Remise en place du fichier original :
    sudo rm /etc/apt/sources.list
    sudo cp /etc/apt/sources.list.ORIGINAL /etc/apt/sources.list
  • Prise en compte de celui-ci par le système :
    sudo apt-get update

Manuellement

Il suffit pour cela de relancer apt-mirror avec votre fichier de configuration et votre disque dur externe en place (ou votre miroir accessible selon le chemin indiqué dans la configuration de apt-mirror) :

apt-mirror /media/DDPortable/miroir/apt-mirror-configuration

Automatiquement

Tout est prêt. Il suffit juste de décommenter une ligne dans le fichier « /etc/cron.d/apt-mirror »

sudo gedit /etc/cron.d/apt-mirror

On enlève le « # » de la ligne :

#0 4	* * *	apt-mirror	/usr/bin/apt-mirror > /var/spool/apt-mirror/var/cron.log

On ajoute le fichier de configuration si celui-ci n'est pas celui par défaut et on en profite pour modifier l'heure afin d'obtenir :

0 13	* * *	apt-mirror	/usr/bin/apt-mirror /media/DDPortable/miroir/apt-mirror-configuration > /var/spool/apt-mirror/var/cron.log

On sauvegarde et c'est tout. Tous les jours, à 13 heures, le miroir se mettra à jour. :-)

Dans cet exemple, comme /usr/bin/apt-mirror est lancé en tant qu'utilisateur apt-mirror il faut que les répertoires du miroir soient modifiables par cet utilisateur :

sudo chown -R apt-mirror /media/DDPortable/miroir/{mirror,skel,var}

Plus d'informations sur Cron...

Problèmes

  • apt-mirror is already running, exiting at /usr/bin/apt-mirror line 187.

La solution est de supprimer le fichier apt-mirror.lock

rm -f /media/DDPortable/mirror/var/apt-mirror.lock

Dans le cas d'une Install Party, pensez a ajouter aussi les dépôts nécessaires pour une netinstall :

deb http://archive.ubuntu.com/ubuntu hardy              main/debian-installer restricted/debian-installer universe/debian-installer multiverse/debian-installer
deb http://archive.ubuntu.com/ubuntu hardy-updates      main/debian-installer restricted/debian-installer universe/debian-installer
deb http://archive.ubuntu.com/ubuntu hardy-backports    main/debian-installer
deb http://archive.ubuntu.com/ubuntu hardy-security     main/debian-installer restricted/debian-installer universe/debian-installer
# deb http://archive.ubuntu.com/ubuntu hardy-proposed     main/debian-installer restricted/debian-installer universe/debian-installer

Apt-mirror génère des fichiers de log. Ils se trouvent dans /var à la racine du dossier de votre dépot. (dans le chemin que vous avez paramétré dans votre mirror.list : set base_path /media/DDPortable/miroir, dans le début du tuto).

Nota : Il existe d'autres logiciels pour accomplir cette tâche : Debmirror et d'autres encore.

Mon mirroirLa dernière version de Ubuntu est téléchargée sur le miroir, mais je ne comprends pas mon(mes) poste(s) client(s) ne voi(en)t pas qu´il y a à disposition une version de mise à jour de la distribution (Mise à jour pour de Hardy à Lucid par exemple).

Avec une connexion permanente à internet, le logiciel de mise à jour (update-manager) propose la mise à disposition de la nouvelle version d'ubuntu disponible mais pas avec un dépot local sans connexion à internet.

Pourquoi et comment puis-je faire pour le faire fonctionner?

Explications

Le logiciel d´installation des paquets update-manager consulte les fichiers meta-release et meta-release-lts situés à l'adresse http://changelogs.ubuntu.com/ et affiche une fenêtre de mise à jour si une nouvelle version est disponible.

Dans le cas de notre miroir ces fichiers ne sont pas téléchargées lors des opérations précédentes, voilà pourquoi update-manager ne dit rien! Nous allons devoir récupérer les bons fichiers et configuré l´environnement de update-manager pour notre miroir.

Les fichiers utilisés

Voici le contenu du fichier meta-release-lts (au 28/11/2011):

....
Dist: hardy 
Name: Hardy Heron
Version: 8.04.1 LTS
Date: Thu, 24 Apr 2008 12:00:00 UTC
Supported: 1
Description: This is the 8.04.1 LTS release
Release-File: http://archive.ubuntu.com/ubuntu/dists/hardy/Release
ReleaseNotes: http://archive.ubuntu.com/ubuntu/dists/hardy-proposed/main/dist-upgrader-  all/0.87.31/ReleaseAnnouncement
UpgradeTool: http://archive.ubuntu.com/ubuntu/dists/hardy-proposed/main/dist-upgrader-all/0.87.31/hardy.tar.gz
UpgradeToolSignature: http://archive.ubuntu.com/ubuntu/dists/hardy-proposed/main/dist-upgrader-all/0.87.31/hardy.tar.gz.gpg

Dist: lucid
Name: Lucid Lynx
Version: 10.04.3 LTS
Date: Thu, 29 Apr 2010 12:00:00 UTC
Supported: 1
Description: This is the 10.04.3 LTS release
Release-File: http://archive.ubuntu.com/ubuntu/dists/lucid/Release
ReleaseNotes: http://archive.ubuntu.com/ubuntu/dists/lucid-proposed/main/dist-upgrader-all/current/ReleaseAnnouncement
ReleaseNotesHtml: http://archive.ubuntu.com/ubuntu/dists/lucid-proposed/main/dist-upgrader-all/current/ReleaseAnnouncement
UpgradeTool: http://archive.ubuntu.com/ubuntu/dists/lucid-proposed/main/dist-upgrader-all/current/lucid.tar.gz
UpgradeToolSignature: http://archive.ubuntu.com/ubuntu/dists/lucid-proposed/main/dist-upgrader-all/current/lucid.tar.gz.gpg
...

Concernant le fichier meta-release, le même principe est utilisé mais il contient en plus toutes les version intermédiaires aux versions LST. Ces fichiers indiquent pour chaque version de Ubuntu, le nom, la version et où sont stockés les éléments de cette version.

Si une nouvelle mise à jour de Ubuntu est disponible ces fichier seront mis à jour.

Paramétrage de l´outil update-manager

Le logiciel de mise à jour utilise les données indiquées par le champ UpgradeTool.

Exemple: pour la distribution Lucid on a http://archive.ubuntu.com/ubuntu/dists/lucid-proposed/main/dist-upgrader-all/current/ et pour la version francaise http://fr.archive.ubuntu.com/ubuntu/dists/lucid-proposed/main/dist-upgrader-all/current/.

De plus, le logiciel de mise à jour contient dans son code cette adresse par défaut http://changelogs.ubuntu.com/.

Il est possible de préciser dans le fichier « /etc/update-manager/meta-release » un nouveau chemin en renseignant les lignes des champs : URI et URI_LTS.

Dans le cas du dépot local nous ferons la même chose voir ci-dessous.

Réalisation

Pré-requis

Le miroir a déjà été mis à jour comme décrit par les chapitres ci-dessus.

Créer un répertoire temporaire pour accueillir nos fichiers avant modifications et entrer dedans:

mkdir mon_tmp
cd mon_tmp

Télécharger les fichiers meta-release et meta-release-lts dans le répertoire temporaire:

wget http://changelogs.ubuntu.com/meta-release 
wget http://changelogs.ubuntu.com/meta-release-lts

Mettre à jour les fichiers meta-release*: En éditant les fichiers meta-release et meta-release-lts afin de modifier l'adresse internet par l'adresse du dépot local (dans notre cas http://archive.ubuntu.com/ubuntu par http://192.168.1.101/ubuntu 192.168.1.101 étant l´adresse de notre serveur embarquant le miroir)

Télécharger le répertoire indiqué par la ligne ReleaseNotes de la version correspondante du fichier meta-release :

...
Dist: hardy 
Name: Hardy Heron
Version: 8.04 LTS
Date: Thu, 24 Apr 2008 12:00:00 UTC
Supported: 1
Description: This is the 8.04 LTS release
Release-File: http://archive.ubuntu.com/ubuntu/dists/hardy/Release
ReleaseNotes: http://archive.ubuntu.com/ubuntu/dists/hardy-proposed/main/dist-upgrader-all/0.87.30/ReleaseAnnouncement
UpgradeTool: http://archive.ubuntu.com/ubuntu/dists/hardy-proposed/main/dist-upgrader-all/0.87.30/hardy.tar.gz
UpgradeToolSignature: http://archive.ubuntu.com/ubuntu/dists/hardy-proposed/main/dist-upgrader-all/0.87.30/hardy.tar.gz.gpg
...

Pour la hardy ReleaseNotes: http://archive.ubuntu.com/ubuntu/dists/hardy-proposed/main/dist-upgrader-all/0.87.30/ReleaseAnnouncement le répertoire à télécharger sera 0.87.30 et le répertoire cible dans le miroir sera hardy-proposed/main/dist-upgrader-all/.

Récupérons tout d´abord le répertoire:

wget -r http://fr.archive.ubuntu.com/ubuntu/dists/hardy-proposed/main/dist-upgrader-all/0.87.30

Maintenant vous devez avoir :

 truc@machine:~$ ls mon_tmp
 meta-release  meta-release-lts 0.87.30

Voilà nous avons maintenant toutes les données pour mettre à jour notre miroir.

Mise à jour du dépot

Mettre en place l´environnement de mise à jour dans le miroir, pour cela:

Créer le répertoire de description de la mise à jour (Dist-proposed/main/dist-upgrader-all) dans notre miroir:

mkdir -p  /media/DDPortable/miroir/mirror/archive.ubuntu.com/ubuntu/dists/hardy-proposed/main/dist-upgrader-all

Copier dans le dépot le répertoire dist-upgrader-all en remplacant « Votre-Distrib » par la version ubuntu cible ici hardy:

cp -r 0.87.30  /media/DDPortable/miroir/mirror/archive.ubuntu.com/ubuntu/dists/hardy-proposed/main/dist-upgrader-all/.

Créer dans le dépot un nouveau répertoire changelogs visible par le client:

mkdir /media/DDPortable/miroir/mirror/archive.ubuntu.com/ubuntu/dists/changelogs

Copier les fichiers meta-release*:

cp -r meta-release* /media/DDPortable/miroir/mirror/archive.ubuntu.com/ubuntu/dists/changelogs/.

Voilà c'est terminé pour le dépôt.

Configuration du logiciel de mise à jour (update-manager)

Il faut maintenant indiquer au logiciel de mise à jour où récupérer les informations de mise à jour.

éditez le fichier /etc/update-manager/meta-release

# default location for the meta-release file
[METARELEASE]
URI = http://changelogs.ubuntu.com/meta-release
URI_LTS = http://changelogs.ubuntu.com/meta-release-lts
URI_UNSTABLE_POSTFIX = -development
URI_PROPOSED_POSTFIX = -proposed

Les lignes à modifier sont :

URI = http://changelogs.ubuntu.com/meta-release 
URI_LTS = http://changelogs.ubuntu.com/meta-release-lts

Dans le cas de l'exemple remplacer ces deux lignes par :

URI = http://192.168.1.101/ubuntu/dists/changelogs/meta-release
URI_LTS = http://192.168.1.101/ubuntu/dists/changelogs/meta-release-lts

Et voilà votre dépot est prêt il ne reste plus qu'a mettre à jour le fichier «/etc/update-manager/meta-release » sur tout les postes clients afin qu'il profite des mise à niveau au travers du logiciel update-manager comme avec une connexion à internet permanente.

  • tutoriel/creer_un_miroir_de_depot_local.1322492326.txt.gz
  • Dernière modification: Le 15/12/2011, 15:21
  • (modification externe)