• [^] # Re: FC3 et entêtes YUM

    Posté par . En réponse à la dépêche La nouvelle Fedora Core 3 au banc d'essai. Évalué à 4.

    > je dois être particulièrement nul

    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.