Par pure curiosité, et aussi parce que je ne trouve jamais les cd d'installation de debian lorsque je veux installer
un paquet, je me suis posé la question 'comment pourrais-je faire pour avoir toujours les paquets à portés de main...'.
Et quasi immédiatement, m'est venu l'idée d'un mirroir ftp local, puisque j'ai de la place sur mon disque dur, et aussi
car proftp tourne déjà sur mon serveur!
Il ne restait plus qu'à concrétiser. Comme il m'est impossible de récupérer le contenu d'un mirroir (avec un simple
modem... ), la seule solution a été de prendre le contenu des cd d'installation de woody (7 cd) et d'utiliser leur contenu.
Ensuite, vient l'idée de garder les paquets de mise à jour de mon portable, puis de les placer à disposition sur mon serveur ftp.
J'ai récupéré pour mes essai, deux images iso de woody, sur ftp://ftp.crans.org,
dans le répertoire
pub/Distribs-Linux/Debian/Debian-woody-iso/.
La connection était rapide, tant mieux! Ensuite, transfert sur le serveur dans /var/tmp. Pour la version final du 'projet',
je passerai par les cd, qu'un ami me gravera.
En premier lier, il faut configurer proftp pour un acces anonymous:
pour cela, il faut, en premier avoir un utilisateur ftp et un groupe ftp, valide, dont le shell est /bin/false, et que
ce shell soit référencé dans /etc/shells. Ensuite, suivre la doc de proftpd! Pour info, voila mon
fichier de configuration proftpd.conf
Ensuite, il faut monter les images comme si c'était un système de fichier 'normal':
J'ai modifié /etc/fstab:
puis je monte avec une boucle local, l'image iso qui se trouve dans /var/tmp/, dans /var/cache/ftp/iso-1 (pour le premièr cd). Comme
je ne veux pas que les images aient les autorisation root, j'utilise les options uid et gid de la commande mount:
# montage des images iso de debian woody:
# file system mount point type options dump pass
/var/tmp/debian-30r0-i386-binary-1.iso /var/cache/ftp/iso-1 auto ro,user,noauto 0 0
/var/tmp/debian-30r0-i386-binary-2.iso /var/cache/ftp/iso-2 auto ro,user,noauto 0 0
/var/tmp/debian-30r0-i386-binary-3.iso /var/cache/ftp/iso-3 auto ro,user,noauto 0 0
/var/tmp/debian-30r0-i386-binary-4.iso /var/cache/ftp/iso-4 auto ro,user,noauto 0 0
/var/tmp/debian-30r0-i386-binary-5.iso /var/cache/ftp/iso-5 auto ro,user,noauto 0 0
/var/tmp/debian-30r0-i386-binary-6.iso /var/cache/ftp/iso-6 auto ro,user,noauto 0 0
/var/tmp/debian-30r0-i386-binary-1_NONUS.iso /var/cache/ftp/iso-7 auto ro,user,noauto 0 0
A présent que je vois que cela fonctionne, je met ces commandes (sans le 'sudo' du début)dans le script de
démarrage qui monte tous les systemes de fichier (/etc/init.d/mountall.sh) pour que toutes les images iso soit
mountées dès la mise en route du serveur.
sudo mount -o loop -o uid=1004 -o gid=1004 /var/cache/ftp/iso-1
sudo mount -o loop -o uid=1004 -o gid=1004 /var/cache/ftp/iso-2
sudo mount -o loop -o uid=1004 -o gid=1004 /var/cache/ftp/iso-3
sudo mount -o loop -o uid=1004 -o gid=1004 /var/cache/ftp/iso-4
sudo mount -o loop -o uid=1004 -o gid=1004 /var/cache/ftp/iso-5
sudo mount -o loop -o uid=1004 -o gid=1004 /var/cache/ftp/iso-6
sudo mount -o loop -o uid=1004 -o gid=1004 /var/cache/ftp/iso-7
Après bien des déboires (il faut TOUJOURS lire les doc jusqu'au bout...), voila les lignes pour /etc/apt/sources.list:
# pour le cd binary-1
deb ftp://ftp.starfleet.home/iso-1 woody main contrib
deb ftp://ftp.starfleet.home/iso-1 woody/non-US main contrib
# pour le cd binary-2
deb ftp://ftp.starfleet.home/iso-2 woody main contrib
deb ftp://ftp.starfleet.home/iso-2 woody/non-US main contrib
# pour le cd binary-3
deb ftp://ftp.starfleet.home/iso-3 woody main contrib
deb ftp://ftp.starfleet.home/iso-3 woody/non-US main contrib
# pour le cd binary-4
deb ftp://ftp.starfleet.home/iso-4 woody main contrib
deb ftp://ftp.starfleet.home/iso-4 woody/non-US main contrib
# pour le cd binary-5
deb ftp://ftp.starfleet.home/iso-5 woody main contrib
deb ftp://ftp.starfleet.home/iso-5 woody/non-US main contrib
# pour le cd binary-6
deb ftp://ftp.starfleet.home/iso-6 woody main contrib
deb ftp://ftp.starfleet.home/iso-6 woody/non-US main contrib
# pour le cd binary-1_NONUS
deb ftp://ftp.starfleet.home/iso-7 woody main contrib
deb ftp://ftp.starfleet.home/iso-7 woody/non-US main contrib
15:25:00 admin /home/admin
$ sudo apt-get update
Hit ftp://ftp.starfleet.home woody/main Packages
Hit ftp://ftp.starfleet.home woody/main Release
Hit ftp://ftp.starfleet.home woody/contrib Packages
Hit ftp://ftp.starfleet.home woody/contrib Release
Hit ftp://ftp.starfleet.home woody/non-US/main Packages
Hit ftp://ftp.starfleet.home woody/non-US/main Release
Hit ftp://ftp.starfleet.home woody/non-US/contrib Packages
Hit ftp://ftp.starfleet.home woody/non-US/contrib Release
........
Reading Package Lists... Done
Building Dependency Tree... Done
15:25:09 admin /home/admin
Ce fut moins compliqué que je ne le pensais. Ce qui m'a causé le plus de problème, c'est la configuration du serveur ftp,
afin d'avoir un acces anonymous. Pour le reste, je me suis basé sur les messages d'erreurs d'apt, lorsqu'il n'arrivait pas à trouver
un fichier, ainsi que sur les documents des cd d'installation. Une fois bien compris le principe, c'est très facile à utiliser.
Je vais pouvoir installer la debian sur d'autres machine très facilement, à présent.
Attention à un petit problème: si vous avez les 7 cd, vérifiez que vous avez bien assez de périphérique loop sur votre machine! Pour le savoir,
faite un ls -l sur /dev/ :
Voila, il y en a 8 sur ma machine, si vous voulez monter plus de 8 images iso, vous êtes mal!
$ cd /dev/
$ ls -l loop*
brw-rw---- 1 root disk 7, 0 avr 15 2001 loop0
brw-rw---- 1 root disk 7, 1 avr 15 2001 loop1
brw-rw---- 1 root disk 7, 2 avr 15 2001 loop2
brw-rw---- 1 root disk 7, 3 avr 15 2001 loop3
brw-rw---- 1 root disk 7, 4 avr 15 2001 loop4
brw-rw---- 1 root disk 7, 5 avr 15 2001 loop5
brw-rw---- 1 root disk 7, 6 avr 15 2001 loop6
brw-rw---- 1 root disk 7, 7 avr 15 2001 loop7
A présent, les paquets récupérés sur le portable.
Pour les retrouver, je regarde dans le répertoire /var/cache/apt/archives. Là se trouve tous les paquets de mise à jour,
puis je les transferts sur mon serveur dans /var/cache/ftp/debian/ (avec accessoirement les archives que j'ai
récupéré à part). Une fois ceci fait, un petit tour sur la doc en français d'apt: le
apt-howto. Là,
j'apprend comment générer le fichier important pour un répertoire de paquet debian: Packages.gz:
Et pour utiliser le tout, LA ligne dans sources.list:
$ cd /var/tmp/
$ mkdir debian
$ touch override
$ dpkg-scanpackages debian override | gzip > debian/Packages.gz
A présent, je peux réutiliser le contenu du répertoire /var/cache/apt/archives/ présent sur mon portable,
sur mes autres machines!
# echo "# fichier locaux des mises a jours du portable" >> /etc/apt/sources.list
# echo "deb ftp://ftp.starfleet.home/debian ./" >> /etc/apt/sources.list
Bientôt, vous pourrez lire sur le site, le récit de l'installation de la woody sur mon Cyrix qui c'est très bien passée. Même kde 2.2.2 tourne mieux que la version de Mandrake 8.1
Gros problème lors d'une démonstration!!!!!!
J'ai installé Woody sur un machine, pas de gros problème, sauf que j'ai récupéré des mises à jours, copié le tout
dans un répertoire /var/cache/ftp (le nom n'est pas original, mais c'est pas grave...), généré le fichier Packages comme
ci dessus, puis copié la linge adéquat dans le sources.list:
Mais cela ne fonctionne pas! Et pour cause! La bonne entrée est:
deb file:/var/cache/ftp ./
Après, vous connaissez les commandes: apt-get update puis apt-get upgrade.
deb file:/var/cache/ ftp/
Je vais partir, pour mes explications, de mon cas personnel.
Récapitulations: je récupère les paquets (surtout les mises à jours) sur le portable, puis je copie le contenu du répertoire
'/var/cache/apt/archives/' sur mon serveur, dans '/var/cache/ftp/mise_a_jours/'.
Ensuite, il faut recréer le fichier Packages.gz, afin que le systeme de paquets debian sache qui est là et qui il dépend. Pour cela, la
commande utile est 'dpkg-scanpackages' (cf plus haut).
Seul problème, c'est lorsqu'il y a des paquets de version différente. La, dpkg-scanpackages ne prend en compte que les paquets
les moins récents, apparemment. J'ai donc créé un script, qui permet de faire un chekup du répertoire des paquets,
puis de copier dans un nouveau répertoire les paquets que dpkg veux bien prendre en compte, et uniquement ceux-la. Ce script devra,
à terme, faire récurcivement, des répertoires avec uniquement les paquets que dpkg voudra bien prendre en compte.
Voici une autre façon de faire:
Si vous avez une connection rapide à disposition de façon très pontuelle, commencez par
faire un apt-get update, avec dans votre sources.list les serveurs que vous désirez.
Ensuite, demandez à apt la liste des paquets à
mettre à jour:
A l'écran, vous disposez du listing des paquets à upgrader, mais cela ne vous aide pas, bien sur...! Bon, nous alons arranger cela. Que nous faut-il?
D'abord, l'adresse du site ou les récupérer:
$ su
# apt-get update
# apt-get upgrade -s | grep Inst | awk '{print $2}'
Comme vous l'aurez remarqué en testant la ligne ci dessus, la sortie des commandes présente des quote (des ' et ' en
début et fin de ligne). cela n'est pas très utile, nous allons donc continuer dans notre ligne à ralonge, afin de
supprimer ces indésirables, puis, ensuite, mettre le tout en fichier:
# apt-get upgrade -s | grep Inst | awk '{print $2}' | xargs apt-get --print-uris install | grep debian | awk '{print $1}'
La commande sed a une syntaxe un peu particulière. D'abord, notez les caractères avant la commande, et ceux en dernier.
Ce n'est pas une erreur, il y a bien deux caractères ` (Alt-gr 7 (hors pavé numérique) sur mon clavier) puis deux
caractères ' à la fin (touche 4 hors pavé numérique). Ceci, pour que les caractères de la commande
sed n'interfèrent pas avec le shell. Ensuite, nous indiquons 's' pour substituer les caractères parasites, puis
nous indiquons par quoi le remplacer (ici, je ne met rien), puis nous terminons en spécifiant que sed doit le faire sur tous les
caractères de chaque ligne (et non le premier rencontré uniquement). Une redirection en fichier, un café et l'addition!
# apt-get upgrade -s | grep Inst | awk '{print $2}' | xargs apt-get --print-uris install | grep debian | awk '{print $1}' | ``sed s/\'//g'' > debian.lst
Terminé!
Comment? J'entend quelqu'un dire: "oui, mais après?"... Bon d'accord.
Vous avez votre liste en fichier, servez vous en!
La suite du programme dépend de votre possibilité de connection:
$ wget -i debian.lst
Les paquets seront là ou vous avez exécuté la commande, après, vous
les rapatriez sur votre machine comme vous pouvez (CDROM, ....)