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 lui-meme est base 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 sources 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 sources 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 and non-free), le depot local en a 97
(incluant main pour les paquets sources). 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
voir : <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 - 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, 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 pour 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 sources ou binaires suivant le cas mais de la prudence est
necessaire pour interpreter correctement la sortie de "edos-debcheck"
pour identifier les liens corrects 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 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
Outputs the list returned by
"Debian::Package::Compare::get_missing_builddeps" in a simple format
print_testing_status
Produit une sortie detaillee du statut du depot testing de Grip,
compare Debian unstable (filter) a Debian testing (filter) et identifie
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
release 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 eue 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 complete 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 va prendre autant de temps pour envoyer le paquet dans
testing qu’il l’a fait pour envoyer 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.
In $mode eq ’edos’, 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
Seulement appele avant de sortir.
update_filter
Complete la FilterList de sorte que les mises a jour automatiques
puissent s’executer - sans filtre, l’archive entiere est ajoutee.
Cependant, la mise a jour dure un temps considerable, ainsi ne
l’appeler 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 et toutes les 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 un support config) : ces
fichiers doivent etre crees pour reprepro, les depots finaux auront
aussi besoin de "SignWith: 0x97BB3B58" excepte stable qui doit etre
signe manuellement pour etablir le lien de securite entre Grip et
Debian.
convert_prefix
Les depots de Debian emploient le caractere d’index 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.
L’exception est les paquets source commencant par X "lib" X, car ils
sont tellement nombreux que la section X "l" X serait trop grande.
Tandis 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 binaire 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.
Components and Sections
Each binary package belongs to a "Section" that broadly describes the
type of functionality in the package. If a component exists in the
repository with the same name as the "Section", the package will be put
into that component. Additionally, if the package name ends in "-dev"
or the "Section" is devel, the "dev" component is selected. If the
package name ends in "-doc" or the "Section" is "doc", the "doc"
component is selected. If there is no matching component configured for
the Grip repository, "main" is used. Section names themselves are read
from the filter repository - i.e. set by the Debian ftp-master
overrides.
switch_component
Single routine to work out which components should be used for which
sections.
AUTEUR
Neil Williams, "<codehelp@debian.org>"
BUGS
Veuillez rapporter tous les bugs ou demandes d’ameliorations via le
systeme de suivi des bugs Debian (BTS) en utilisant "reportbug
emdebian-tools".
Bugs 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 sources 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.