Provided by: emdebian-grip-server_3.0.7_all bug

NOM

       Emdebian::Grip - Module interne de Emdebian pour les depots Emdebian
       Grip

Description

       Il est utile d'etre familier avec "reprepro" (1) pour travailler avec
       ce module.

       Emdebian::Grip permet la gestion de depots pour l'ecriture de scripts
       em_autogrip permettant de gerer une hierarchie de depots a trois
       niveaux (stable, testing et unstable) pour Emdebian Grip, incluant la
       gestion de la migration de paquets de unstable vers testing.

       En considerant seulement "unstable" initialement, la hierarchie est
       comme suit :

       Debian unstable est filtree en utilisant
       ${base}${filter_name}/conf/pkglist qui est elle-meme basee sur la
       sortie de dpkg --get-selections. Seuls les paquets qui sont reellement
       installes sur la machine faisant tourner Emdebian Grip sont ajoutes a
       la liste de paquets (pkglist). "reprepro" met alors a jour
       ${filter_name} a partir du miroir Debian selectionne, telechargeant
       seulement les binaires et les paquets source specifies dans pkglist,
       pour creer un miroir local partiel pour la liste des architectures
       disponibles.

       Grip unstable est compile a partir du miroir filtre par un processus
       combine de conversion de paquets source et ensuite d'identification des
       paquets binaires manquants provenant de la pkglist. Durant le processus
       "emgrip", les TDebs Emdebian sont crees et sont inclus dans le depot
       locale :

       Locale (parametres regionaux) est un depot tres specifique qui est
       concu pour les paquets source Debian et les TDebs Emdebian seulement,
       classe par ordre alphabetique de la langue. Par exemple la gestion de
       en_GB fait partie du composant en. Bien que Debian possede trois
       composants (main, contrib et non-free), le depot local en a 97
       (incluant main pour les paquets source). Dans le pool locale, les
       paquets sont organises par composant, ainsi, bien que dans le depot
       filtre ou dans le depot grip, les paquets "apt" sont sous
       pool/main/a/apt, dans le depot locale les TDebs en d'apt sont dans
       pool/en/a/apt/, les francais sont dans pool/fr/a/apt/, etc. La liste
       des racines locales gerees par le depot locale est retournee par
       &get_locale_roots, appartenant au module "Debian::Packages::Compare".
       Pour plus d'informations sur les racines locales en tant que
       composants, consultez
       <http://www.emdebian.org/emdebian/langupdate.html>

       Tant que la version testing est concernee, la hierarchie fonctionne de
       facon similaire a Debian mais avec une gestion additionnelle pour les
       depots qui ont debute apres que les paquets aient migre vers Debian
       testing et dont une version plus recente existe dans Debian unstable.

       Notez que les donnees du depot testing necessitent d'etre installees
       manuellement dans de nombreux cas X en editant conf/distributions pour
       chaque depot. Les fichiers de configuration actuels d'Emdebian
       trouveront leur place dans le Wiki Debian en temps voulu.

       Avec une version pleinement peuplee de Debian unstable, de Grip
       unstable et de locale unstable, &grip_britney peut migrer des paquets
       dans Grip testing en utilisant les criteres implementes dans
       &get_britney_list a partir de "Debian::Packages::Compare" et de la
       commande "reprepro copysrc". Comme la plupart, sinon tous, des depots
       Grip demarreront au moment ou quelques paquets Debian auront deja
       migres vers testing et auront une version plus recente telechargee dans
       unstable, "Emdebian::Grip" inclut aussi une gestion catch-up via
       &migrate_missing qui inclut les paquets appropries provenant de Debian
       testing comme si cette version avait ete directement telechargee dans
       Grip testing (ce qui, en fait, est ce qui se passe).

       Le processus emgrip peut prendre  un temps consequent (pensez en heures
       et pas en minutes) principalement en raison du cout general de la
       production des TDebs : un par source, par language et par architecture.
       La creation d'un ensemble complet d'unstable et testing peut
       probablement prendre un jour ou plus mais elle est grandement
       automatisee.

       Les problemes restants sont lies a des points de dependances. La
       fonction &edos dans "Emdebian::Grip" a des problemes en essayant de
       calculer la solution pour les problemes de dependances identifies par
       "edos-debcheck" et ces problemes deviennent particulierement aigus si
       le depot lui-meme n'est pas dans un bon etat au depart. Donc, &edos
       n'est pas executee automatiquement par les outils actuels. Le depot
       doit etre totalement a jour et tous les paquets appropries doivent
       exister dans le filtre et dans Grip avant d'utiliser la gestion &edos.
       Initialement, utiliser "edos-debcheck" directement afin d'identifier
       les problemes majeurs :

        edos-debcheck -explain -failures < ${base}${grip_name}/dists/sid/main/binary-i386/Packages

       Les paquets qui sont NOT AVAILABLE necessitent d'etre saisis comme
       paquets source ou binaires suivant le cas mais de la prudence est
       necessaire pour interpreter correctement la sortie de "edos-debcheck"
       pour identifier le lien correct dans la chaine.

       Deux problemes majeurs existent a propos de l'automatisation de ce
       processus, voir "em_autogrip" (1) pour des informations specifiques,
       mais il suffit de dire ici qu'il existe dans Debian unstable des
       paquets qui vont apparaitre dans la liste des paquets NOT AVAILABLE,
       l'action correcte serait de SUPPRIMER le paquet qui depend du paquet
       indisponible. Ces points sont en discussion au sein de Debian.

Copyright et Licence

        Copyright (C) 2007-2009  Neil Williams <codehelp@debian.org>

       Ce logiciel est libre; vous pouvez le redistribuer selon les termes de
       la licence GNU General Public License telle que publiee par la Free
       Software Foundation; en prenant la version 3 de la licence ou (selon
       votre choix) n'importe quelle version subsequente.

       Ce logiciel est distribue dans l'espoir qu'il soit utile, mais AUCUNE
       GARANTIE n'est donnee tant pour des raisons COMMERCIALES que pour
       REPONDRE A UN BESOIN PARTICULIER. Consulter la Licence Publique
       Generale GNU pour plus de details.

       Vous devriez avoir recu une copie de la Licence Publique Generale de
       GNU avec ce programme. Sinon, voir <http://www.gnu.org/licenses/>.

Exemple

        use strict;
        use warnings;
        use Emdebian::Grip;
        use Debian::Packages::Compare;

        use vars qw/ $filter_name $grip_name $suite $base $verbose
         $noskip @archlist @locroots @lines $line %pkg @filter $have
         %debianunstable %gripunstable %tdebunstable /;

       my $mirror='http://ftp.uk.debian.org/debian'; # default
        $filter_name = 'filter';
        $grip_name = 'grip';
        $suite = "unstable"; # at first
        $base = '/opt/reprepro/';
        $verbose = 0;

        &set_base($base);
        &set_repo_names ($filter_name, $grip_name);
        my $a = &get_archlist ($suite, $filter_name);
        @archlist = (not defined $a or not @$a) ?
          qw/i386 amd64 arm armel powerpc mips mipsel/ : @$a;
        my $l = &get_locale_roots ($suite, 'locale');
        @locroots = (not defined $l or not @$l) ? qw/ af am ang ar as ast az be bg
         bn br bs ca cs cy da de dz el en eo es et eu fa fi fr ga gl gu he hi hr
         hu hy ia id io is it ja ka kn km ko ku ky lg li lt lv mai mg mi mk ml mn mr
         ms nb ne nl nn no ns nso oc or pa pl ps pt rm ro ru rw si sk sl sq sr sv
         ta te th tk tl tr tt ug uk ur uz vi wa wo xh yi zh zu / : @$l;

        &setup_repos if ( not -f "${base}${filter_name}/conf/pkglist" );

        my $debu  = &read_packages ('unstable', $filter_name);
        my $gripu = &read_packages ('unstable', $grip_name);
        my $tdebu = &read_locale   ('unstable', 'locale');
        %debianunstable = %$debu   if (defined $debu);
        %gripunstable   = %$gripu  if (defined $gripu);
        %tdebunstable   = %$tdebu  if (defined $tdebu);
        &update_filter;
        &update_repo($verbose);

        # begin the work.

set_repo_names

       Copie les noms par defaut ou ceux specifies par l'utilisateur pour les
       depots filtre et grip dans le module interne.

set_noskip

       Copie l'option --noskipold specifiee par l'utilisateur dans le module
       interne pour etre utilisee lors de l'appel de reprepro.

set_dry_run

       Configure un essai a blanc ou les commandes externes sont affichees au
       lieu d'etre executees.

print_missing

       Produit la liste retournee par
       "Debian::Package::Compare::get_missing_sources" dans un format simple

print_build_deps

       Produit la liste retournee par
       "Debian::Package::Compare::get_missing_builddeps" dans un format simple

print_testing_status

       Produit une sortie detaillee de l'etat du depot testing de Grip,
       comparant Debian unstable (filter) a Debian testing (filter) et
       identifiant quels paquets source d'Emdebian Grip testing sont derriere
       Debian.

       Cette liste est ensuite decoupee entre les paquets ou la version de la
       source dans Debian unstable est exactement la meme que la version de la
       source dans Debian testing (paquets qui doivent etre migres vers Grip
       testing) et ceux dont la version de la source dans testing differe.

grip_britney

       Version Grip du script Britney qui migre les paquets dans Debian
       testing. Voir "Debian::Packages::Compare" (3) pour des details sur les
       criteres de get_britney_list.

       En outre, afin de permettre a de nouveaux depots de rattraper leur
       retard sur Debian, les paquets dans Grip unstable qui sont deja plus
       avances que Debian testing doivent etre saisis directement depuis
       Debian testing.

       Ceci peut egalement se produire quand des paquets sont mis directement
       dans testing en utilisant testing-proposed-updates durant un gel de
       publication dans Debian.

       Notez que grip_britney migre seulement les paquets dont la version dans
       Debian unstable est la meme que celle dans Debian testing, c'est-a-dire
       ou la migration a deja eu lieu dans Debian. Les paquets qui arrivent
       dans testing via testing-proposed-updates ou qui migrent dans testing
       avant que le depot Grip soit demarre et qui ont desormais une version
       plus recente dans unstable, peuvent etre migres en utilisant
       migrate_missing.

       Si vous utilisez grip_britney et migrate_missing ensemble, lancer
       d'abord grip_britney puis recharger toutes les donnees en utilisant
       read_packages avant d'essayer de lancer migrate_missing. Voir
       migrate_missing pour plus d'informations.

migrate_missing

       Corollaire de grip_britney qui termine le processus en incluant dans
       testing, les paquets qui ont une version differente dans Debian
       unstable.

       Des paquets manquants dans testing sont inclus en utilisant grip_source
       et grip_binary comme s'ils etaient telecharges directement vers testing
       (ce qui, en effet, est ce qui se produit). Cela signifie que
       migrate_missing prendra autant de temps pour traiter le paquet dans
       testing qu'il l'a fait pour la derniere version qui est entree dans
       unstable. En fonction du nombre de paquets affectes, migrate_missing
       peut prendre beaucoup plus de temps que grip_britney mais il devrait
       etre necessaire moins frequemment une fois que le depot sera complet.

edos

       Seulement un framework de base a ce stade, cette fonction doit
       assembler par la suite les resultats par architecture et par depot et
       essayer de presenter une solution.

       Voir "em_autogrip" (1) en cas de problemes avec recursion edos.

       Si $mode est X edos X, produit simplement les donnees de controle pour
       chacun des depots de filtre et de saisie (grip).

clean_incoming

       Appel par intermittence pendant de longues executions.

cleanup

       Simple appel avant de sortir.

update_filter

       Remplit la FilterList de sorte que les mises a jour automatiques
       puissent s'executer X sans filtre, l'archive entiere est ajoutee.
       Cependant, la mise a jour dure un temps considerable, ne l'appeler donc
       que si necessaire.

extend_filter

       Ajoute un (des) paquet(s) a la liste de filtre, une liste separee par
       des espaces est acceptable.

update_repo

       Une fois que le fichier pkglist filter est correct, appellez reprepro
       pour recuperer les paquets mis a jour.

incoming_locale

       Examine le repertoire entrant pour les Emdebian TDebs et les inclut
       dans reprepro.

       Jusqu'a ce que l'extension .tdeb soit geree, reprepro doit etre
       persuade d'autoriser ce type de fichiers en utilisant l'option
       "--ignore=extension".

       Parmi tous les messages d'error prevus, quelques messages de sortie
       utiles sont envoyes a "STDERR" par reprepro en manipulant les TDebs
       ainsi les erreurs ne sont pas redirigees vers /dev/null.

check_dirs

       Verifie que les repertoires critiques dans la hierarchie de depot a
       trois niveaux (stable, testing, unstable) existent et cree ceux qui
       sont manquants.

setup_repos

       Note : en installant votre propre depot, souvenez-vous qu'inclure les
       conditions Contents: dans reprepro coute beaucoup de temps durant
       chacune des operations sur le depot. Contents n'est pas active par
       "setup_repos" et il est fortement recommande de ne pas le reactiver
       dans les changements futurs.

       Il est necessaire de decider si ceci fera face aux suites multiples ou
       imposera seulement que suite=unstable.

       Locale est partage avec Crush. Il n'est pas particulierement facile
       d'ajouter une nouvelle racine locale car les scripts et les depots
       doivent etre modifies en meme temps.

       donnees necessaires de reprepro (necessite une gestion de config) : ces
       fichiers doivent etre crees pour reprepro, les depots finaux auront
       aussi besoin de "SignWith: 0x97BB3B58" sauf stable qui doit etre signe
       manuellement pour etablir le lien de securite entre Grip et Debian.

convert_prefix

       Les depots de Debian utilisent le premier caractere du nom du paquet
       source dans le chemin vers le repertoire du paquet sous la pool afin de
       ramener le nombre de listes par repertoire a un niveau gerable, a
       l'exception des paquets source commencant par X "lib" X, car ils sont
       tellement nombreux que la section X "l" X serait trop grande. Tant que
       X "l" X demeure, tout paquet source qui commence par X "lib" X est
       place dans un ensemble separe de repertoires utilisant les quatre
       premieres lettres a la place de seulement X "l" X, par exemple "libaa"
       se trouvera sous "pool/main/liba/libaa/" et "libfoo" sous
       "pool/main/libf/libfoo/" mais "limpet" sera sous "pool/main/l/limpet/"

       convert_prefix est une fonction rapide pour determiner le prefixe
       correct suivant ces regles.

grip_source

       Emballage pour emgrip qui prend un seul paquet source Debian, saisit le
       paquet binaire dont le nom correspond a celui du paquet source (a cause
       d'un incident dans la facon dont "reprepro" fonctionne), genere tous
       les TDebs Emdebian, inclut les paquets source non modifies dans Grip,
       inclut tous les paquets binaires saisis dans Grip et inclut tous les
       TDebs Emdebian generes dans locale.

       Une fois que le paquet source a ete traite, execute &clean_incoming.

grip_binary

       Emballage pour emgrip qui prend un seul paquet binaire Debian, le
       saisit, genere tous les TDebs Emdebian, inclut le paquet binaire saisi
       dans Grip et inclut tous les TDebs Emdebian generes dans locale.

       Une fois que le paquet binaire a ete traite, execute &clean_incoming.

   Composants et Sections
       Chaque paquet binaire appartient a une "Section" qui decrit largement
       le type de fonctionnalite dans le paquet. Si un composant existe dans
       le depot avec le meme nom que la <Section>, le paquet sera place dans
       ce composant. De plus, si le nom de paquet se termine par "-dev" ou la
       "Section" est devel, le composant "dev" est selectionne. Si le nom de
       paquet se termine par "-doc" ou la "Section" est "doc", le composant
       "doc" est selectionne. Si aucun composant configure pour le depot Grip
       ne correspond, "main" est utilise. Les noms de section eux-memes sont
       lus depuis le depot filtre X c'est-a-dire definis par les redefinitions
       du ftp-master Debian.

switch_component

       Seule routine a determiner quels composants devraient etre utilises
       pour quelles sections.

AUTEUR

       Neil Williams, "<codehelp@debian.org>"

BUGS

       Veuillez signaler tous les bogues ou demandes d'ameliorations via le
       systeme de suivi des bogues Debian (BTS) en utilisant "reportbug
       emdebian-tools".

Bogues connus

       (Connu aussi en tant que liste ToDo.)

       L'etat des TDebs dans le depot locale doit etre verifie avant d'en
       generer plus, mais cela signifie que des changements dans emgrip
       doivent etre effectues aussi, ainsi les tdebs peuvent etre ignores avec
       une option de ligne de commande. Cependant, dans les conditions
       normales d'operation, le paquet est seulement traite parce qu'il n'est
       pas a jour ainsi les TDebs et autres fichiers doivent etre remplaces de
       toute facon.

       "Architecture: all" sont des paquets qui sont continuellement retraites
       pour de nombreuses architectures. A l'origine c'etait parce que le
       paquet pouvait contenir des traductions ce qui aurait necessite d'etre
       dependant de l'architecture dans Emdebian. Cependant, les TDebs ne
       doivent etre generes qu'a partir des paquets source et ce point doit
       probablement etre resolu. "reprepro" gere correctement ce genre de
       duplication, il est juste un peu bruyant quand il le fait et augmente
       le temps requis par le processus dans son ensemble.

       Necessite aussi une fonction de vue d'ensemble qui resume l'etat des
       trois depots.