doc/fr/projects/updater.sgml

244 lines
13 KiB
Text

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" [
<!ENTITY base CDATA "..">
<!ENTITY enbase "../&base;">
<!ENTITY date "$FreeBSD: www/fr/projects/updater.sgml,v 1.3 2004/01/08 00:26:46 stephane Exp $">
<!ENTITY title "Projet de Mise &agrave; jour Binaire pour FreeBSD (binup)">
<!ENTITY email 'freebsd-binup'>
<!ENTITY % includes SYSTEM "../includes.sgml"> %includes;
<!ENTITY done "<font color='green'>Fait</font>">
<!ENTITY inprogress "<font color='blue'>En progr&egrave;s</font>">
<!ENTITY notstarted "<font color='red'>Pas encore commenc&eacute;</font>">
]>
<!--
The FreeBSD French Documentation Project
Original revision: 1.8
Version francaise : Stephane Legrand <stephane@freebsd-fr.org>
-->
<html>
&header;
<h2>Contenu</h2>
<ul>
<li><a href="#goals">Objectifs</a></li>
<li><a href="#design">Conception</a></li>
<li><a href="#implementation">Impl&eacute;mentation</a></li>
<li><a href="#code">Code</a></li>
</ul>
<a name="goals"></a>
<h2>Objectifs</h2>
<p>Le projet de mise &agrave; jour binaire pour FreeBSD a pour objectif de fournir un m&eacute;canisme
s&eacute;curis&eacute; pour la distribution des mises &agrave; jour binaires sous FreeBSD.
Ce projet est compl&eacute;mentaire aux projets <a
href="http://www.openpackages.org">Open Packages</a> et
<a href="libh.html">libh</a> et n'empi&egrave;te pas sur ceux-ci.</p>
<p>Ce syst&egrave;me est un m&eacute;canisme client/serveur qui permet aux clients
d'installer n'importe quel "profil" ou version de FreeBSD via le
r&eacute;seau. Un profil peut contenir un ensemble sp&eacute;cifique de
logiciels FreeBSD &agrave; installer, des paquetages additionnels et
des actions de configuration de mani&egrave;re &agrave; l'adapter au mieux
&agrave; un environnement donn&eacute; (ie un profil de serveur web s&eacute;curis&eacute; sous FreeBSD 4.3)</p>
<p>Notre impl&eacute;mentation a pour but de faire abstraction de l'ontologie actuelle
des collections de logiciels FreeBSD de mani&egrave;re &agrave; pouvoir int&eacute;grer au mieux
les futurs d&eacute;veloppements visant &agrave; une plus grande modularit&eacute; du syst&egrave;me
de base.</p>
<a name="design"></a>
<h2>Conception</h2>
<h3>Les "profils"</h3>
<p>Ce que l'utilisateur voit en tant "qu'objets de plus haut niveau" dans le syst&egrave;me de mise &agrave; jour
sont des profils. Un profil peut repr&eacute;senter un syst&egrave;me de configuration
utilisateur donn&eacute; ou un mod&egrave;le g&eacute;n&eacute;rique (serveur web,
serveur de mail, etc) fourni par nous.</p>
<p>Chaque profil consiste en des fichiers et/ou des collections.
Une collection repr&eacute;sente un ensemble de fichiers tel qu'un
paquetage ou comme ce que le programme sysinstall appelle une "distribution".
Les profils existent sur le serveur mais le client peut aussi
choisir de mettre des copies en cache de mani&egrave;re &agrave; utiliser des services &agrave; la "tripwire".
Des profils typiques pourraient ressembler &agrave; cela :</p>
<pre>
[mysystem] [web-server]
bin 4.2 bin 4.2
bash 2.02 manpages 4.2
src 4.2 apache 2.1
xblaster 1.0
</pre>
<p>Une collection peut &eacute;galement avoir un num&eacute;ro de version sp&eacute;cifique associ&eacute;
ou bien un num&eacute;ro de version "flottant" ce qui signifie que la collection
utiliserait la plus r&eacute;cente version sup&eacute;rieure au num&eacute;ro indiqu&eacute;.</p>
<p>Identification</p>
<p>Les utilisateurs s'identifieront sur le serveur via un nom d'utilisateur
et un mot de passe ce qui leur permettra d'acc&eacute;der &agrave; leurs profils
personnalis&eacute;s ainsi qu'aux profils syst&egrave;mes.</p>
<p>Les paquetages binaires du serveur sont sign&eacute;s avec une clef
publique.</p>
<h3>Logiciel client de mise &agrave; jour</h3>
<p>Le client supporte la connexion &agrave; un serveur de mise &agrave; jour,
l'identification d'un utilisateur, la consultation des profils existants ou la cr&eacute;ation
des nouveaux profils ainsi que le t&eacute;l&eacute;chargement des fichiers de donn&eacute;es et "d'actions"
&agrave; partir du serveur. Les nouveaux fichiers de donn&eacute;es seront cr&eacute;&eacute;s de telle fa&ccedil;on
que les mises &agrave; jour partielles ne provoqueront pas de corruption de donn&eacute;es et les transactions
sont d&eacute;livr&eacute;es avec une atomicit&eacute; raisonnable.</p>
<p>Le client sera impl&eacute;ment&eacute; en 3 &eacute;tapes :</p>
<ul>
<li>Un ensemble de librairies qui impl&eacute;mentent le plus gros des
fonctions client <-> serveur.</li>
<li>Une version en ligne de commande du client qui supporte toutes
les fonctions disponibles dans la librairie.</li>
<li>Une version avec interface graphique du client qui utilise soit le
client version ligne de commande soit directement les routines de la librairie
selon ce qui est le plus adapt&eacute;.</li>
</ul>
<p>Etant donn&eacute; qu'un syst&egrave;me peut aussi &ecirc;tre "mis &agrave; jour" &agrave; partir d'une premi&egrave;re installation, la
prochaine g&eacute;n&eacute;ration de logiciel d'installation pourrait prendre en charge
le formatage du syst&egrave;me de fichier ainsi que la configuration r&eacute;seau puis utiliser
la librairie cliente pour proposer un menu permettant de faire une s&eacute;lection parmi les
logiciels disponibles et r&eacute;aliser l'installation.</p>
<h3>Logiciel serveur de mise &agrave; jour</h3>
<p>Le serveur supporte les connexions par un nombre arbitraire de clients
et l'authentification des utilisateurs (ou d'un utilisateur "anonyme" si le serveur est
configur&eacute; pour supporter les connexions anonymes) afin de d&eacute;terminer les
profils disponibles.</p>
<p>Une fois que le serveur re&ccedil;oit une demande (e.g. un jeu de collections)
de la part d'un client et un nom de profil c&ocirc;t&eacute; serveur pour faire la
correspondance, il fait une recherche sur chaque collection pour voir si une version
plus r&eacute;cente de cette collection existe sur le serveur ou s'il existe une
modification en attente concernant la collection qui serait
sup&eacute;rieure &agrave; la version de patch de la collection pr&eacute;sente dans
la demande du client.</p>
<p>Les diff&eacute;rences et/ou les collections enti&egrave;res sont envoy&eacute;es au client pour
&ecirc;tre d&eacute;compact&eacute;es en m&ecirc;me temps que toutes les pr&eacute;/post-actions pour chaque diff&eacute;rence ou
collection qui doivent &ecirc;tre ex&eacute;cut&eacute;es sur le client. Une fois que le
client a confirm&eacute; que toutes les pr&eacute;/post-actions et le
d&eacute;compactage de la collection concern&eacute;e ont &eacute;t&eacute; ex&eacute;cut&eacute;s avec succ&egrave;s, il
met &agrave; jour le profil stock&eacute; et passe &agrave; la suivante. Si le
transfert est interrompu en cours de route, le processus peut donc
reprendre d'o&ugrave; il s'est arr&ecirc;t&eacute;.</p>
<p>Le serveur de mise &agrave; jour fournit un espace de stockage local pour un certain nombre
de donn&eacute;es sur les profils suivant des contraintes d'espace disque et peut &eacute;galement
&ecirc;tre utilis&eacute; comme moyen de cloner des machines. L'utilisateur installe une seule
machine enti&egrave;rement adapt&eacute;e &agrave; ses besoins puis t&eacute;l&eacute;charge son profil sur le
serveur. Chaque machine suivante est install&eacute;e &agrave; partir de ce profil
et voil&agrave;, une arm&eacute;e de clones.</p>
<p>Le serveur ne conservera probablement pas les donn&eacute;es concernant uniquement le c&ocirc;t&eacute; client
tel que <tt>/etc/master.passwd</tt> ou plus largement tout ce qui est
en dehors de ces propres collections. Mais nous pouvons laisser cette d&eacute;cision
ouverte pour plus tard ou le proposer en tant qu'option de configuration.</p>
<a name="implementation"></a>
<h2>D&eacute;tails sur l'impl&eacute;mentation</h2>
<a name="update-server"></a>
<h3>Serveur de mise &agrave; jour</h3>
<p>Le serveur de mise &agrave; jour est en grande partie fonctionnel.
Les informations &agrave; propos des profils, des collections et des actions sont stock&eacute;es
dans une base de donn&eacute;es SQL. Une couche d'abstraction se charge d'appeler
les fonctions correspondantes (MySQL et PostgreSQL sont support&eacute;s pour le moment) afin de
r&eacute;pondre aux requ&ecirc;tes des clients. L'utilisation d'une base de donn&eacute;es relationnelles nous
a permis de modifier tr&egrave;s facilement l'organisation des donn&eacute;es
sans perdre du temps &agrave; r&eacute;&eacute;crire du code. Comme nos structures de donn&eacute;es
sont quasiment finalis&eacute;es, il pourrait &ecirc;tre plus efficace d'utiliser BerkeleyDB ou
une autre solution mais, pour l'instant, l'utilisation du SQL nous a permis de gagner
beaucoup de temps de d&eacute;veloppement.</p>
<p>Le serveur peut &ecirc;tre utilis&eacute; pour installer ou mettre &agrave; jour un
syst&egrave;me FreeBSD 4.X mais il reste beaucoup de finitions &agrave; faire
et de nombreuses fonctionnalit&eacute;s manquantes sont encore n&eacute;cessaires.</p>
<a name="update-server-todo"></a>
<p>Liste des choses &agrave; faire pour le serveur :</p>
<ul>
<li>Ajouter la possibilit&eacute; de g&eacute;rer les paquetages tel qu'ils sont actuellement d&eacute;finis
et utilis&eacute;s dans FreeBSD</li>
<li>Ajouter un m&eacute;canisme pour lire l'ontologie (N.d.T. : sic !) de l'arbre des sources FreeBSD
&agrave; partir d'un fichier XML au lieu de le coder en dur dans un script
Perl qui se charge de g&eacute;n&eacute;rer les tables SQL n&eacute;cessaires. Cela
permettra beaucoup plus de flexibilit&eacute; dans la cr&eacute;ation des
profils et des composants logiciels. Il devrait aussi fournir une
description pour des paquetages qui pourraient prendre le pas sur des sous-ensembles de ce que
sysinstall appelle actuellement le "syst&egrave;me de base" (par exemple, un profil
avec Postfix au lieu de Sendmail et toutes les d&eacute;pendances de configuration
qui vont avec).</li>
<li>Ajouter une information "somme de contr&ocirc;le" ("checksum") et offrir un service &agrave; la
"tripwire" aux clients.</li>
</ul>
<a name="update-client"></a>
<h3>Client de mise &agrave; jour</h3>
<p>Le client de mise &agrave; jour n'est pour le moment pas utilisable. Actuellement, il
existe du code pour r&eacute;aliser concr&egrave;tement les mises &agrave; jour ainsi que pour
tester les diverses fonctions de mise &agrave; jour. Par ailleurs,
le client ne g&egrave;re pas encore les paquetages. Une fois que
cette fonction aura &eacute;t&eacute; ajout&eacute;e, et que les bugs auront &eacute;t&eacute;
corrig&eacute;s, le code existant devra &ecirc;tre converti en
librairie.</p>
<p>A partir de l&agrave;, il sera ais&eacute;ment possible de cr&eacute;er un installeur ainsi
qu'un programme utilisateur de mise &agrave; jour en version texte,
X11 et peut-&ecirc;tre m&ecirc;me en version GNOME et KDE.</p>
<a name="update-client-todo"></a>
<p>Liste des choses &agrave; faire pour le client :</p>
<ul>
<li>ajouter les informations concernant le copyright/la licence pour tous
les fichiers sources</li>
<li>se mettre en conformit&eacute; avec style(9)</li>
<li>corriger les bugs les plus critiques</li>
<li>ajouter la fonction de gestion des paquetages</li>
<li>faire la conversion en librairie</li>
</ul>
<a name="code"></a>
<h2>O&ugrave; est le code ?</h2>
<p>Ce projet est actuellement d&eacute;velopp&eacute; au sein du d&eacute;p&ocirc;t CVS principal
de FreeBSD. Les sources sont disponibles dans <tt>projects/binup</tt>.
Vous pouvez utiliser les m&eacute;thodes habituelles pour r&eacute;cup&eacute;rer les sources FreeBSD
afin d'y acc&eacute;der. <b>NOTE :</b> les utilisateurs de cvsup doivent utiliser la
collection <tt>projects-all</tt> pour acc&eacute;der &agrave; la hi&eacute;rarchie <tt>projects/</tt></p>
<p>Une liste de diffusion a &eacute;t&eacute; mise en place pour ce projet. Vous pouvez poster
vos questions, patches, etc sur la liste de diffusion <a
href="mailto:freebsd-binup@FreeBSD.org">freebsd-binup@FreeBSD.org</a>
Pour savoir comment s'abonner &agrave; cette liste, veuillez consulter le <a
href="&enbase;/doc/&url.doc.langcode;/books/handbook/eresources.html#ERESOURCES-MAIL">Manuel de
R&eacute;f&eacute;rence FreeBSD</a></p>
&footer;
</body>
</html>