> Tu pourrais ajouter des explications/commentaires (notamment sur les deux dernières lignes... createrepo ?)
Dans /var/fedora/iso/i386/disc1, il y a le CD1 :
ll /var/fedora/iso/i386/disc1/
total 180
-rwxr-xr-x 2 admin admin 248 nov 3 22:28 autorun
-rw-r--r-- 9 admin admin 5611 nov 3 22:28 eula.txt
drwxr-xr-x 4 admin admin 2048 nov 3 22:52 Fedora
-rw-r--r-- 9 admin admin 18385 nov 3 22:28 GPL
drwxr-xr-x 3 admin admin 2048 nov 3 22:52 images
drwxr-xr-x 2 admin admin 2048 nov 3 22:52 isolinux
-rw-r--r-- 2 admin admin 12667 nov 3 22:28 README-Accessibility
-rw-r--r-- 2 admin admin 5299 nov 3 22:28 README-en
-rw-r--r-- 2 admin admin 7465 nov 3 22:28 README-en.html
-rw-r--r-- 2 admin admin 44366 nov 3 22:28 RELEASE-NOTES-en
-rw-r--r-- 2 admin admin 68016 nov 3 22:28 RELEASE-NOTES-en.html
-rw-r--r-- 9 admin admin 1910 nov 3 22:28 RPM-GPG-KEY
-rw-r--r-- 9 admin admin 1706 nov 3 22:28 RPM-GPG-KEY-beta
-rw-r--r-- 9 admin admin 1519 nov 3 22:28 RPM-GPG-KEY-fedora
-rw-r--r-- 9 admin admin 1105 nov 3 22:28 RPM-GPG-KEY-fedora-rawhide
-rw-r--r-- 9 admin admin 1076 nov 3 22:28 RPM-GPG-KEY-fedora-test
-rw-r--r-- 9 admin admin 1232 nov 3 22:28 RPM-GPG-KEY-rawhide
-r--r--r-- 1 admin admin 4056 nov 3 23:04 TRANS.TBL
La même chose pour /var/fedora/iso/i386/disc2, etc...
On a l'arborescence :
$ cd /var/fedora/iso/i386/
$ find disc* -type d
disc1
disc1/Fedora
disc1/Fedora/base
disc1/Fedora/RPMS
disc1/images
disc1/images/pxeboot
disc1/isolinux
disc2
disc2/Fedora
disc2/Fedora/RPMS
disc3
disc3/Fedora
disc3/Fedora/RPMS
disc4
disc4/Fedora
disc4/Fedora/RPMS
Les paquets sont dans disc?/Fedora/RPMS/ (sauf pour comps.rpm mais c'est sans importance).
Je vais faire ce que j'ai proposé.
$ cd /var/fedora
$ mkdir i386
$ cd i386
$ find ../iso/i386/disc? -iname "*.rpm" -print0 | xargs -0 ln -s -v --target-directory=. --
J'ai ajouté "-v" à ln. La sortie donne :
création du lien symbolique `./comps.rpm' vers `../iso/i386/disc1/Fedora/base/comps.rpm'
création du lien symbolique `./4Suite-1.0-3.i386.rpm' vers `../iso/i386/disc1/Fedora/RPMS/4Suite-1.0-3.i386.rpm'
création du lien symbolique `./a2ps-4.13b-41.i386.rpm' vers `../iso/i386/disc1/Fedora/RPMS/a2ps-4.13b-41.i386.rpm'
[...]
création du lien symbolique `./splint-3.1.1-4.i386.rpm' vers `../iso/i386/disc2/Fedora/RPMS/splint-3.1.1-4.i386.rpm'
création du lien symbolique `./strace-4.5.8-1.i386.rpm' vers `../iso/i386/disc2/Fedora/RPMS/strace-4.5.8-1.i386.rpm'
création du lien symbolique `./swig-1.3.21-6.i386.rpm' vers `../iso/i386/disc2/Fedora/RPMS/swig-1.3.21-6.i386.rpm'
[...]
Comment ça marche ?
- find ../iso/i386/disc? -iname "*.rpm"
recherche tout les fichiers (et répertoires ici (c'est une erreur)) qui se termine par ".rpm".
../iso/i386/disc? sera remplacé par ../iso/i386/disc1 ../iso/i386/disc2 ../iso/i386/disc3 ../iso/i386/disc3 par le shell.
Exemple :
$ echo ../iso/i386/disc?
../iso/i386/disc1 ../iso/i386/disc2 ../iso/i386/disc3 ../iso/i386/disc4
- print0
Lorsque find trouve un fichier (ou répertoire) qui respecte les critères donnés, il imprime le fichier sur la sortie standard (en gros l'écran). Généalement les fichiers sont séparés par un retour chariot '\n'. Ici on demande de séparer avec le caractère null '0円'. Ainsi, un fichier peut avoir un retour chariot dedans. Il faut noter qu'un nom de fichier ne peut pas avoir de caractère '0円'.
Exemple (je reviens sur xargs plus tard) :
$ mkdir tmp
$ cd tmp
$ touch "nom de fichier avec un ligne"
$ touch "nom de fichier
> sur deux lignes"
$ ls --format=single-column --show-control-chars
nom de fichier avec un ligne
nom de fichier
sur deux lignes
Sans "print0" :
$ find . -type f -print | xargs -i echo fichier trouvé ---\> \"{}\"
fichier trouvé ---> "./nom de fichier avec un ligne"
fichier trouvé ---> "./nom de fichier"
fichier trouvé ---> "sur deux lignes"
xargs voit 3 noms (donc trois fichiers). C'est une erreur.
Avec "print0"
$ find . -type f -print0 | xargs -0 -i echo fichier trouvé ---\> \"{}\"
fichier trouvé ---> "./nom de fichier avec un ligne"
fichier trouvé ---> "./nom de fichier
sur deux lignes"
Xargs voit 2 fichiers. Parfait.
|
C'est le caratère 'pipe' (sexy, non ?). C'est un caractère spécial du shell. Il s'utilise dans ce contexte "process1 | process2". Lorsqu'on l'utilise on demande au shell de "connecter" la sortie standard de process1 sur l'entrée standard de process2.
xargs
xargs est un programme très pratique et très simple. Il lit son entrée standard et exécute des commandes avec les éléments trouvés dans l'entrée standard.
Exemple (-n 1 dit d'exécuter une commande par ligne lu dans l'entrée standard) :
$ cat | xargs -n 1 echo vous avez tapez :
coucou
vous avez tapez : coucou
^D (ctrl-D)
Par défaut xargs ajoute les arguments de la commande à la fin !. C'est en "strong" car ça justifie l'utilisation de "--target-directory". Sinon il faut utiliser "xargs -i" mais il y aura une commande "ln" par fichier alors que xargs permet de "grouper" les commandes (voir "man xargs").
ln -s -v --target-directory=. --
ln : crée un lien (voir "man ln")
-s : crée un lien symbolique (marche entre FS (c'est nécessaire ici car les paquets sont sur des FS séparés)).
-v : verbeux
--target-directory=. : indique la destination du lien à créer.
Ainsi, "ln ../i386/disc1/toto ../i386/disc2/tata ." est équivalent à "ln --target-directory=. ../i386/disc1/toto ../i386/disc2/tata".
-- : indique que les paramètres suivants sont des noms de fichier et pas des options.
Ainsi si j'ai le fichier "-toto" :
$ ln -s -toto toto
ln: option invalide -- t
Pour en savoir davantage, faites: « ln --help ».
$ ln -s -- -toto toto
$ ll
lrwxrwxr-x 1 admin admin 5 nov 10 20:26 toto -> -toto
-rw-rw-r-- 1 admin admin 0 nov 10 20:25 -toto
Si j'ai un paquet rpm qui commence avec un '-', je n'aurais pas de problème si j'utilise '--'. Ici c'est inutile car tout commence par "../i386/disc".
createrepo
$ rpm -q -i -f `which createrepo`
Name : createrepo Relocations: (not relocatable)
Version : 0.4.1 Vendor: Red Hat, Inc.
Release : 1 Build Date: jeu 21 oct 2004 10:15:13 CEST
Install Date: dim 24 oct 2004 23:23:22 CEST Build Host: tweety.build.redhat.com
Group : System Environment/Base Source RPM: createrepo-0.4.1-1.src.rpm
Size : 47641 License: GPL
Signature : DSA/SHA1, jeu 21 oct 2004 18:31:49 CEST, Key ID b44269d04f2a6fd2
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>(...)
URL : http://linux.duke.edu/metadata/(...)
Summary : Creates a common metadata repository
Description :
This utility will generate a common metadata repository from a directory of
rpm packages
createrepo est forni avec FC3.
> Est-ce que l'ajout des entêtes a été suggéré sur une liste Fedora officielle ?
Le problème est que yum ne supporte pas les périphériques amovible. Donc c'est sans intérêt. system-config-packages supporte les périphériques amovibles mais utilise une autre méthode.
[^] # Re: FC3 et entêtes YUM
Posté par 007 . En réponse à la dépêche La nouvelle Fedora Core 3 au banc d'essai. Évalué à 4.
C'est un bon début que de s'en rendre compte :-)
> Tu pourrais ajouter des explications/commentaires (notamment sur les deux dernières lignes... createrepo ?)
Dans /var/fedora/iso/i386/disc1, il y a le CD1 :
ll /var/fedora/iso/i386/disc1/
total 180
-rwxr-xr-x 2 admin admin 248 nov 3 22:28 autorun
-rw-r--r-- 9 admin admin 5611 nov 3 22:28 eula.txt
drwxr-xr-x 4 admin admin 2048 nov 3 22:52 Fedora
-rw-r--r-- 9 admin admin 18385 nov 3 22:28 GPL
drwxr-xr-x 3 admin admin 2048 nov 3 22:52 images
drwxr-xr-x 2 admin admin 2048 nov 3 22:52 isolinux
-rw-r--r-- 2 admin admin 12667 nov 3 22:28 README-Accessibility
-rw-r--r-- 2 admin admin 5299 nov 3 22:28 README-en
-rw-r--r-- 2 admin admin 7465 nov 3 22:28 README-en.html
-rw-r--r-- 2 admin admin 44366 nov 3 22:28 RELEASE-NOTES-en
-rw-r--r-- 2 admin admin 68016 nov 3 22:28 RELEASE-NOTES-en.html
-rw-r--r-- 9 admin admin 1910 nov 3 22:28 RPM-GPG-KEY
-rw-r--r-- 9 admin admin 1706 nov 3 22:28 RPM-GPG-KEY-beta
-rw-r--r-- 9 admin admin 1519 nov 3 22:28 RPM-GPG-KEY-fedora
-rw-r--r-- 9 admin admin 1105 nov 3 22:28 RPM-GPG-KEY-fedora-rawhide
-rw-r--r-- 9 admin admin 1076 nov 3 22:28 RPM-GPG-KEY-fedora-test
-rw-r--r-- 9 admin admin 1232 nov 3 22:28 RPM-GPG-KEY-rawhide
-r--r--r-- 1 admin admin 4056 nov 3 23:04 TRANS.TBL
La même chose pour /var/fedora/iso/i386/disc2, etc...
On a l'arborescence :
$ cd /var/fedora/iso/i386/
$ find disc* -type d
disc1
disc1/Fedora
disc1/Fedora/base
disc1/Fedora/RPMS
disc1/images
disc1/images/pxeboot
disc1/isolinux
disc2
disc2/Fedora
disc2/Fedora/RPMS
disc3
disc3/Fedora
disc3/Fedora/RPMS
disc4
disc4/Fedora
disc4/Fedora/RPMS
Les paquets sont dans disc?/Fedora/RPMS/ (sauf pour comps.rpm mais c'est sans importance).
Je vais faire ce que j'ai proposé.
$ cd /var/fedora
$ mkdir i386
$ cd i386
$ find ../iso/i386/disc? -iname "*.rpm" -print0 | xargs -0 ln -s -v --target-directory=. --
J'ai ajouté "-v" à ln. La sortie donne :
création du lien symbolique `./comps.rpm' vers `../iso/i386/disc1/Fedora/base/comps.rpm'
création du lien symbolique `./4Suite-1.0-3.i386.rpm' vers `../iso/i386/disc1/Fedora/RPMS/4Suite-1.0-3.i386.rpm'
création du lien symbolique `./a2ps-4.13b-41.i386.rpm' vers `../iso/i386/disc1/Fedora/RPMS/a2ps-4.13b-41.i386.rpm'
[...]
création du lien symbolique `./splint-3.1.1-4.i386.rpm' vers `../iso/i386/disc2/Fedora/RPMS/splint-3.1.1-4.i386.rpm'
création du lien symbolique `./strace-4.5.8-1.i386.rpm' vers `../iso/i386/disc2/Fedora/RPMS/strace-4.5.8-1.i386.rpm'
création du lien symbolique `./swig-1.3.21-6.i386.rpm' vers `../iso/i386/disc2/Fedora/RPMS/swig-1.3.21-6.i386.rpm'
[...]
Comment ça marche ?
- find ../iso/i386/disc? -iname "*.rpm"
recherche tout les fichiers (et répertoires ici (c'est une erreur)) qui se termine par ".rpm".
../iso/i386/disc? sera remplacé par ../iso/i386/disc1 ../iso/i386/disc2 ../iso/i386/disc3 ../iso/i386/disc3 par le shell.
Exemple :
$ echo ../iso/i386/disc?
../iso/i386/disc1 ../iso/i386/disc2 ../iso/i386/disc3 ../iso/i386/disc4
- print0
Lorsque find trouve un fichier (ou répertoire) qui respecte les critères donnés, il imprime le fichier sur la sortie standard (en gros l'écran). Généalement les fichiers sont séparés par un retour chariot '\n'. Ici on demande de séparer avec le caractère null '0円'. Ainsi, un fichier peut avoir un retour chariot dedans. Il faut noter qu'un nom de fichier ne peut pas avoir de caractère '0円'.
Exemple (je reviens sur xargs plus tard) :
$ mkdir tmp
$ cd tmp
$ touch "nom de fichier avec un ligne"
$ touch "nom de fichier
> sur deux lignes"
$ ls --format=single-column --show-control-chars
nom de fichier avec un ligne
nom de fichier
sur deux lignes
Sans "print0" :
$ find . -type f -print | xargs -i echo fichier trouvé ---\> \"{}\"
fichier trouvé ---> "./nom de fichier avec un ligne"
fichier trouvé ---> "./nom de fichier"
fichier trouvé ---> "sur deux lignes"
xargs voit 3 noms (donc trois fichiers). C'est une erreur.
Avec "print0"
$ find . -type f -print0 | xargs -0 -i echo fichier trouvé ---\> \"{}\"
fichier trouvé ---> "./nom de fichier avec un ligne"
fichier trouvé ---> "./nom de fichier
sur deux lignes"
Xargs voit 2 fichiers. Parfait.
|
C'est le caratère 'pipe' (sexy, non ?). C'est un caractère spécial du shell. Il s'utilise dans ce contexte "process1 | process2". Lorsqu'on l'utilise on demande au shell de "connecter" la sortie standard de process1 sur l'entrée standard de process2.
xargs
xargs est un programme très pratique et très simple. Il lit son entrée standard et exécute des commandes avec les éléments trouvés dans l'entrée standard.
Exemple (-n 1 dit d'exécuter une commande par ligne lu dans l'entrée standard) :
$ cat | xargs -n 1 echo vous avez tapez :
coucou
vous avez tapez : coucou
^D (ctrl-D)
Par défaut xargs ajoute les arguments de la commande à la fin !. C'est en "strong" car ça justifie l'utilisation de "--target-directory". Sinon il faut utiliser "xargs -i" mais il y aura une commande "ln" par fichier alors que xargs permet de "grouper" les commandes (voir "man xargs").
ln -s -v --target-directory=. --
ln : crée un lien (voir "man ln")
-s : crée un lien symbolique (marche entre FS (c'est nécessaire ici car les paquets sont sur des FS séparés)).
-v : verbeux
--target-directory=. : indique la destination du lien à créer.
Ainsi, "ln ../i386/disc1/toto ../i386/disc2/tata ." est équivalent à "ln --target-directory=. ../i386/disc1/toto ../i386/disc2/tata".
-- : indique que les paramètres suivants sont des noms de fichier et pas des options.
Ainsi si j'ai le fichier "-toto" :
$ ln -s -toto toto
ln: option invalide -- t
Pour en savoir davantage, faites: « ln --help ».
$ ln -s -- -toto toto
$ ll
lrwxrwxr-x 1 admin admin 5 nov 10 20:26 toto -> -toto
-rw-rw-r-- 1 admin admin 0 nov 10 20:25 -toto
Si j'ai un paquet rpm qui commence avec un '-', je n'aurais pas de problème si j'utilise '--'. Ici c'est inutile car tout commence par "../i386/disc".
createrepo
$ rpm -q -i -f `which createrepo`
Name : createrepo Relocations: (not relocatable)
Version : 0.4.1 Vendor: Red Hat, Inc.
Release : 1 Build Date: jeu 21 oct 2004 10:15:13 CEST
Install Date: dim 24 oct 2004 23:23:22 CEST Build Host: tweety.build.redhat.com
Group : System Environment/Base Source RPM: createrepo-0.4.1-1.src.rpm
Size : 47641 License: GPL
Signature : DSA/SHA1, jeu 21 oct 2004 18:31:49 CEST, Key ID b44269d04f2a6fd2
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>(...)
URL : http://linux.duke.edu/metadata/(...)
Summary : Creates a common metadata repository
Description :
This utility will generate a common metadata repository from a directory of
rpm packages
createrepo est forni avec FC3.
> Est-ce que l'ajout des entêtes a été suggéré sur une liste Fedora officielle ?
Je ne crois pas. Mais tu as tout sur les miroirs.
Exemple :
Pour createrepo (le nouveau) :
http://fr2.rpmfind.net/linux/fedora/core/3/i386/os/repodata/(...)
Pour yum-arch (l'ancien) :
http://fr2.rpmfind.net/linux/fedora/core/3/i386/os/headers/(...)
Le problème est que yum ne supporte pas les périphériques amovible. Donc c'est sans intérêt. system-config-packages supporte les périphériques amovibles mais utilise une autre méthode.