www.starend.org

TechNIX

Tags

mirroir debmirror deb apt apt-get aptitude dpkg synaptic debian ubuntu apache thttpd

Mirroir de packages Debian/Ubuntu

25/05/2007

25/03/2008 Ajout des exemples

1/ Introduction

Les cas typiques d'utilisation :
- on souhaite garder sous la main une copie 'locale' (donc rapide) et à jour des sources de programmes (repositories) pour Debian et/ou Ubuntu;
- on utilise un réseau isolé d'internet, ou fortement cloisonné, et il faut bien se résoudre à faire les mises à jours.

Plutot que de télécharger l'intégralité du repository à chaque mise à jour, nous allons utiliser 'debmirror'. Celui-ci permet de sychroniser et d'entretenir une copie parfaite du repository avec quelques avantages en plus.

La première fois, il télécharge l'intégralité du repository, prévoir de la place et du temps. Ensuite, les fois suivantes, il se contente de récupérer les nouveaux packages uniquement, et nettoye ceux qui sont périmés. Prévoir 10 à 15Go par distribution et par architecture.

On peut récupérer sur un même serveur distant plusieurs distributions (et architectures) différentes et les cumuler. On gagne la place de tous les packages communs qui ne sont stockés qu'en un seul exemplaire.

Dans d'autres cas, il vous sera peut-être préférable d'utiliser 'apt-proxy', beaucoup moins gourmand en espace disque, et disponible lui aussi dans toutes les bonnes crêmeries...

2/ Debian

Récupération des repositories pour Debian stable, testing, sarge, et etch. Pour l'architecture i386, sections main, contrib, et non-free. Et sans les sources.
Dans un shell, créer un répertoire debian/current, et lancer cette commande :

debmirror -v -p --method=http \
  --host=ftp.fr.debian.org \
  --root=debian \
  --dist=stable,testing,sarge,etch \
  --section=main,contrib,non-free \
  --arch=i386 \
  --nosource --postcleanup --ignore-release-gpg \
  ./debian/current

Idem pour les mises à jour de sécurité, créer un répertoire debian/security, et lancer cette commande :

debmirror -v -p --method=http \
  --host=security.debian.org \
  --root=debian-security \
  --dist=sarge/updates,stable/updates,testing/updates,sarge/updates,etch/updates \
  --section=main,contrib,non-free \
  --arch=i386 \
  --nosource --postcleanup --ignore-release-gpg \
  ./debian/security

Debian unstable ne propose pas de mises à jours de sécurité, on considère que ses packages les intègrent. De même, Debian ne propose pas de mises à jours de sécurité pour les programmes de tierces personnes contenus dans non-free.

Prévoir pas mal de place quand même, et du temps la première fois :-)

3/ Ubuntu

Récupération des repositories pour Ubuntu dapper, edgy, et feisty. Pour l'architecture i386, sections main, restricted, universe, et multiverse. Et sans les sources.
Dans un shell, créer un répertoire ubuntu/current, et lancer cette commande :

debmirror -v -p --method=http \
  --host=fr.archive.ubuntu.com \
  --dist=dapper,edgy,feisty \
  --root=ubuntu \
  --section=main,restricted,universe,multiverse \
  --arch=i386 \
  --nosource --postcleanup --ignore-release-gpg \
  ./ubuntu/current

Idem pour les mises à jour de sécurité, créer un répertoire ubuntu/security, et lancer cette commande :

debmirror -v -p --method=http \
  --host=security.ubuntu.com \
  --dist=dapper-security,edgy-security,feisty-security \
  --root=ubuntu \
  --section=main,restricted,universe \
  --arch=i386 \
  --nosource --postcleanup --ignore-release-gpg \
  ./ubuntu/security

Ubuntu ne propose pas de mises à jours de sécurité pour les programmes de tierces personnes contenus dans mutliverse.

Prévoir pas mal de place, et du temps la première fois :-)

4/ Redistribuer les packages

La distribution des packages aux postes clients se fait via les moyens supportés par ces postes. Le plus pratique est le (mini) serveur web, par exemple 'apache' ou 'thttpd'. Sur le serveur, on crée un site (virtuel ou par défaut) qui présente le répertoire contenant debian et ubuntu.

Et sur le poste client, on modifie le fichier '/etc/apt/sources.list' comme suit :

- Debian :

deb http://serveurweb/debian/current/ stable main contrib non-free
deb http://serveurweb/debian/security/ stable/updates main contrib

- Ubuntu :

deb http://serveurweb/ubuntu/current/ feisty main restricted universe multiverse
deb http://serveurweb/ubuntu/security/ feisty-security main restricted universe

Je vous conseille dans la foulée :

aptitude update 2>&-
aptitude update
aptitude clean
aptitude dist-upgrade

5/ Exemple : update.starend.dmz

Cette machine est destinée à récupérer et distribuer les mises à jours Debian stable main, avec les dépôt security.

Montage fait sur une machine virtuelle Xen, 32Mo de RAM, 1 carte réseau.

Installer une Debian 4.0r1 de base. Le réseau doit être opérationnel, notament vers internet. J'utilise les dépôts de paquets officiels sur internet.

Partitionnement :
1Go de /
64Mo de swap
15Go en /update/debian/debian
3Go en /update/debian/security
Les tailles de partitions sont juste juste aujourd'hui, voir à en mettre un peu plus...

Installer le nécessaire :

aptitude install debmirror thttpd postfix

La configuration de postfix est de type 'Système satellite'.

Modifier la configuration de thttpd dans le fichier /etc/thttpd/thttpd.conf :

port=80
chroot
user=www-data
logfile=/var/log/thttpd.log
throttles=/etc/thttpd/throttle.conf
urlpat=*
dir=/update/debian

Créer un utilisateur 'update' :

useradd -g 33 -s /bin/bash -d /update update

Le rendre propriétaire des répertoires dépôts (uniquement) :

chown -R update /update/debian/*

Créer le script de synchronisation des dépôts avec debmirror /update/update.sh :

#!/bin/bash

echo "    Serveur : update.starend.dmz"
echo "    Synchronisation des depots Debian en cours..."
echo " "

echo "                     __________ "
echo "          __________/  DEBIAN  \\________________________________________ "
date
uptime
debmirror --verbose --nosource --host=ftp.debian.org --method=http --root=debian --dist=stable \
          --section=main --arch=i386 --postcleanup /update/debian/debian/

echo " "
echo "                               __________ "
echo "          ____________________/ SECURITY \\______________________________ "
date
uptime
debmirror --verbose --nosource --host=security.debian.org --method=http --root=debian-security --dist=stable/updates \
          --section=main --arch=i386 --postcleanup /update/debian/security/

echo " "
echo "                                         __________ "
echo "          ______________________________/   FIN    \\____________________ "
date
uptime
free
df -h

Le user 'update' à juste besoin de pouvoir l'exécuter.

A ce stade, vous pouvez vérifier que le script fonctionne bien, en tant que 'update'...

Configurer le renvoie de mail. Postfix doit être configuré, de préférence en mode 'Système satellite'. Ajouter dans /etc/aliases :

update: webmaster@starend.org

Et faire prendre en compte ces alias par postfix :

postalias /etc/aliases

Ne reste que à automatiser les mises à jours régulièrement, via cron. Ajouter dans /etc/crontab :

30 */6  * * *   update  /update/update.sh

Ici c'est un exemple. Est lancé pour l'utilisateur 'update' la commande '/update/update.sh'. Elle est lancée à la 30ème minute de l'heure, toutes les 6 heures, tous les jours du mois, tous les mois, tous les jours de la semaine. En clair tous les jours à 0h30 6h30 12h30 et 18h30.

Et enfin, on redémarre cron :

/etc/init.d/cron reload

Les dépôts, une fois synchronisés sont accessibles à ces adresses :

deb http://update.starend.dmz/debian/ stable main
deb http://update.starend.dmz/security/ stable/updates main

6/ Exemple : update.starend.lan

Cette machine est destinée à faire mettre à jour tous les serveurs de façon centralisée. Avec renvoi du compte rendu sur une adresse email. Ce serveur pourrait aussi tout à fait piloter le déclenchement de la mise à jours des dépôts du serveur ci-dessus...

Montage fait sur une machine virtuelle Xen, 32Mo de RAM, 1 carte réseau.

Installer une Debian 4.0r1 de base. Le réseau doit être opérationnel. J'utilise les dépôts du serveur ci-dessus.

Partitionnement :
1Go de /
64Mo de swap

Installer le nécessaire :

aptitude install openssh-client postfix

La configuration de postfix est de type 'Système satellite'.

Créer un utilisateur 'update' :

useradd -s /bin/bash -m update

Créer une clé RSA pour la tâche de mise à jour, sans mot de passe :

ssh-keygen -b 1024 -t rsa -f /home/update/id_rsa

Vérifier que vous avez les fichiers id_rsa et id_rsa.pub .

Lui créer un script pour piloter les autres serveurs /home/update/maj_all.sh :

#!/bin/bash
for SRV in update.starend.lan update.starend.dmz www.starend.lan dns.starend.dmz ntp.starend.dmz
do
     ssh -i ~/id_rsa sysaptup@$SRV sudo /etc/apt-update.sh
done

Configurer le renvoie de mail. Postfix doit être configuré, de préférence en mode 'Système satellite'. Ajouter dans /etc/aliases :

update: webmaster@starend.org

Et faire prendre en compte ces alias par postfix :

postalias /etc/aliases

Automatiser les mises à jours régulièrement, via cron. Ajouter dans /etc/crontab :

30 10   * * *   update  /home/update/maj_all.sh


Sur tous les serveurs distants concernés par les mises à jours, faire :

Installer sudo

aptitude install sudo

Créer un user sysaptup

useradd -u 65000 -g 65534 -c "SYStem_APT_UPdate" -m -s /bin/bash sysaptup

Créer le script /etc/apt-update.sh :

#!/bin/bash

echo " "
echo "__________/ $(hostname).$(grep domain /etc/resolv.conf | cut -d ' ' -f 2) \\____________________________________________________________"
echo " > DATE : $(date) "
echo " > UPTIME : $(uptime) "
echo " > ID : $(id) "
echo " > IP : $(ifconfig | grep ' inet adr:' | grep -v '127.0.0.1 ' | cut -d ' ' -f 11-1000)"
echo " > GATEWAY : $(route -n | grep '^0.0.0.0 ' | cut -d ' ' -f 10)"
echo -n " > RAM : "
free | grep "cached" | cut -d ' ' -f 10-1000
free | grep -v "buffers"
echo " > DISKS : "
df -h | grep -v "^tmpfs " | grep -v "^udev "
echo " > UPDATE..."
aptitude update -q | grep "^Prendre"
echo " > UPGRADE..."
aptitude upgrade -q -y
echo " > CLEAN..."
aptitude clean >&-
echo " > FIN. "
echo " "

Le rendre exécutable :

chmod 755 /etc/apt-update.sh

Ajouter à la fin de /etc/sudoers :

sysaptup  ALL=NOPASSWD: /etc/apt-update.sh

Déployer la clé RSA précédement créée. Uniquement la partie publique 'pub'. Sur chaque serveur, créer le répertoire /home/sysaptup/.ssh/ et y copier le contenu de id_rsa.pub dans /home/sysaptup/.ssh/authorized_keys .

De retour sur update.starend.lan, si la commande vous renvoie quelque chose de positif (fait avec dns.starend.dmz) :

ssh -i ~/id_rsa sysaptup@dns.starend.dmz sudo /etc/apt-update.sh

__________/ dns.starend.dmz \____________________________________________________________
 > DATE : mardi 25 mars 2008, 10:13:56 (UTC+0000)
 > UPTIME :  10:13:56 up 2 days, 16:18,  0 users,  load average: 0.07, 0.06, 0.06
 > ID : uid=0(root) gid=0(root) groupes=0(root)
 > IP : inet adr:10.253.53.1  Bcast:10.253.53.255  Masque:255.255.255.0
 > GATEWAY : 10.253.53.254
 > RAM :     total       used       free     shared    buffers     cached
Mem:         32916      31464       1452          0        740      17456
Swap:        65528          0      65528
 > DISKS :
Sys. de fich.         Tail. Occ. Disp. %Occ. Monté sur
/dev/hda1            1008M  305M  653M  32% /
 > UPDATE...
Prendre : 1 http://update.starend.dmz stable Release.gpg [378B]
Prendre : 2 http://update.starend.dmz stable/updates Release.gpg [189B]
 > UPGRADE...
Lecture des listes de paquets...
Construction de l'arbre des dépendances...
Lecture de l'information d'état étendu...
Initialisation de l'état des paquets...
Lecture des descriptions de tâches...
Construction de la base de données des étiquettes...
Aucun paquet ne va être installé, mis à jour ou enlevé.
0 paquets mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de télécharger 0o d'archives. Après dépaquetage, 0o seront utilisés.
 > CLEAN...
 > FIN.

Alors, c'est fini :-)

Licence Creative Common 2007 :: BY-NC-SA :: Webdesign DENDIEVEL Stéphane