| 1 | {% extends "_layout_fr.html" %} |
|---|
| 2 | {% block title %}Spécification des greffons I2P{% endblock %} |
|---|
| 3 | {% block content %} |
|---|
| 4 | Traduction de mai 2011. <a href="plugin_spec.html">Version anglaise actuelle</a> |
|---|
| 5 | <h2> |
|---|
| 6 | Spécification Version 0.16 |
|---|
| 7 | 2010-07-26 |
|---|
| 8 | </h2> |
|---|
| 9 | <p> |
|---|
| 10 | Mise à jour de juillet 2010 pour le routeur version 0.8. |
|---|
| 11 | <h3>Aperçu</h3> |
|---|
| 12 | <p> |
|---|
| 13 | Ce document spécifie un format de fichier .xpi2p (comme le .xpi de Firefox), mais avec un simple fichier de description |
|---|
| 14 | plugin.config au lieu du fichier XML install.rdf. Ce fichier est utilisé pour l'installation initiale et pour les mises |
|---|
| 15 | Ã jour. |
|---|
| 16 | <p> |
|---|
| 17 | De plus, ce document présente un aperçu résumé de l'installation des greffons par le routeur, et les stratégies et les |
|---|
| 18 | grandes lignes de travail pour les développeurs. |
|---|
| 19 | <p> |
|---|
| 20 | Le format de base du fichier .xpi2p est le même que celui du fichier i2pupdate.sud (utilisé pour les mises à jour du |
|---|
| 21 | routeur), mais le programme d'installation laisse faire l'utilisateur même si la clé de signature n'est pas encore |
|---|
| 22 | connue. |
|---|
| 23 | <p> |
|---|
| 24 | La structure standard des répertoires permet l'installation des types de greffons suivants : |
|---|
| 25 | <ul> |
|---|
| 26 | <li> |
|---|
| 27 | applications web de console (webapps) |
|---|
| 28 | <li> |
|---|
| 29 | nouvel eepsite avec cgi-bin, webapps |
|---|
| 30 | <li> |
|---|
| 31 | thÚmes de console |
|---|
| 32 | <li> |
|---|
| 33 | traductions de console |
|---|
| 34 | <li> |
|---|
| 35 | programmes Java |
|---|
| 36 | <li> |
|---|
| 37 | programmes Java dans une JVM séparée |
|---|
| 38 | <li> |
|---|
| 39 | Tout script shell ou programme |
|---|
| 40 | </ul> |
|---|
| 41 | |
|---|
| 42 | <p> |
|---|
| 43 | Un greffon installe tous ses fichiers dans ~/.i2p/plugins/nom/ (%APPDIR%\I2P\plugins\nom\ sur Windows). Le programme |
|---|
| 44 | d'installation empêche l'installation ailleurs, bien que le greffon puisse accéder pour son fonctionnement à des |
|---|
| 45 | bibliothÚques situées en dehors de cette arborescence. |
|---|
| 46 | |
|---|
| 47 | <p> |
|---|
| 48 | Ceci doit seulement être considéré comme un moyen pour faciliter l'installation, la désinstallation, et les mises à |
|---|
| 49 | jour, ainsi que pour minimiser les conflits entre greffons. |
|---|
| 50 | |
|---|
| 51 | <p> |
|---|
| 52 | Cependant, il n'y a pas de modÚle de sécurité imposé lorsque le greffon est en cours d'exécution. Les greffons tournent |
|---|
| 53 | dans la même JVM et avec les même privilÚges que le routeur : ils ont l'accÚs total au systÚme de fichiers, au routeur, |
|---|
| 54 | à l'exécution de programmes etc… |
|---|
| 55 | <h3>Détails</h3> |
|---|
| 56 | <p> |
|---|
| 57 | foo.xpi2p est un fichier sud contenant les données suivantes : |
|---|
| 58 | <pre> |
|---|
| 59 | En-tête standard .sud au début du fichier zip, contenant : |
|---|
| 60 | La <a href="how_cryptography.html#DSA">signature DSA</a> Ã 40 octets |
|---|
| 61 | La version du greffon sur 16 octets en UTF-8, complétée par des zéros en fin si nécessaire |
|---|
| 62 | |
|---|
| 63 | Le fichier Zip contenant : |
|---|
| 64 | |
|---|
| 65 | (REQUIS) un fichier plugin.config : |
|---|
| 66 | (fichier standard de configuration I2P, en UTF-8, contenant des lignes clé=valeur, les commentaires commençant par #) |
|---|
| 67 | Contenant les propriétés suivantes : |
|---|
| 68 | |
|---|
| 69 | (* = requis) |
|---|
| 70 | Les trois premiÚres doivent être identiques à celles du greffon installé s'il s'agit d'une mise à jour. |
|---|
| 71 | |
|---|
| 72 | *name (le greffon sera installé dans ce dossier) |
|---|
| 73 | Pour les greffons spécifiques à un SE donné, vous pouvez séparer les noms pour des paquets différents, par exemple truc-windows et truc-linux. |
|---|
| 74 | *key (<a href="how_cryptography.html#DSA">clé publique DSA</a> sous forme Base64 de 172 caractÚres finissant '=') |
|---|
| 75 | *signer (votrenom@mail.i2p recommendé) |
|---|
| 76 | |
|---|
| 77 | *version (dans un format compatible avec VersionComparator, p.e. 1.2.3-4) |
|---|
| 78 | 16 octets maximum (doit correspondre à la version du sud) |
|---|
| 79 | Les séparateurs acceptés sont '.', '-', et '_' |
|---|
| 80 | Pour une mise à jour de greffon, doit être supérieure à celle actuellement installée. |
|---|
| 81 | |
|---|
| 82 | |
|---|
| 83 | configclients.jsp affichera les éléments suivants s'ils sont présents : |
|---|
| 84 | |
|---|
| 85 | date (temps Java - entier long) |
|---|
| 86 | author (votrenom@mail.i2p recommendé) |
|---|
| 87 | websiteURL (http://truc.i2p/) |
|---|
| 88 | updateURL (http://truc.i2p/truc.xpi2p) |
|---|
| 89 | Le vérificateur de mises à jour contrÎle les octets 41 à 56 à cette URL pour déterminer si une nouvelle version est disponible |
|---|
| 90 | (Le vérificateur va-t-il télécharger avec ?currentVersion=1.2.3?… Non. Si le développeur que l'URL contienne la version actuelle, il doit le préciser dans le fichier de configuration, et penser à le modifier à chaque nouvelle version) |
|---|
| 91 | description |
|---|
| 92 | description_xx (pour la langue xx) |
|---|
| 93 | license |
|---|
| 94 | disableStop=true |
|---|
| 95 | Par défault, false. |
|---|
| 96 | à true, le bouton "Arrêt" n'est pas affiché. à utiliser s'il n'y pas de client ni de |
|---|
| 97 | webapp avec des arguments d'arrêt. |
|---|
| 98 | |
|---|
| 99 | Les éléments suivants servent à l'affichage d'un lien dans le panneau de contrÎle de la console: |
|---|
| 100 | |
|---|
| 101 | consoleLinkName (nom affiché dans le panneau de contrÎle) |
|---|
| 102 | consoleLinkName_xx (pour la langue xx) |
|---|
| 103 | consoleLinkURL (/appname/index.jsp) |
|---|
| 104 | consoleLinkTooltip (supporté depuis la version 0.7.12-6) |
|---|
| 105 | consoleLinkTooltip_xx (idem, pour la langue xx) |
|---|
| 106 | |
|---|
| 107 | |
|---|
| 108 | Les éléments suivants concernent l'installeur du greffon : |
|---|
| 109 | |
|---|
| 110 | type (app/theme/locale/webapp/...) (non implémenté, probablement inutile) |
|---|
| 111 | min-i2p-version |
|---|
| 112 | max-i2p-version |
|---|
| 113 | min-java-version |
|---|
| 114 | min-jetty-version |
|---|
| 115 | max-jetty-version |
|---|
| 116 | required-platform-OS (non implémenté - sera peut-être seulement affiché, pas vérifié) |
|---|
| 117 | other-requirements (non implémenté p.e. python x.y - non vérifié par l'installeur, uniquement |
|---|
| 118 | affiché) |
|---|
| 119 | dont-start-at-install=true |
|---|
| 120 | false par défaut. |
|---|
| 121 | router-restart-required=true |
|---|
| 122 | false par défaut. |
|---|
| 123 | dont-start-at-install doit être positionné à true pour être actif. |
|---|
| 124 | Ceci ne redémarre pas le routeur, indique seulement la nécessité de redémarrer. |
|---|
| 125 | update-only=true |
|---|
| 126 | false par défaut. |
|---|
| 127 | à true, un échec se produira si le greffon n'est pas déjà installé. |
|---|
| 128 | install-only=true |
|---|
| 129 | false par défaut. |
|---|
| 130 | à true, si le greffon est déjà installé, l'installation échouera. |
|---|
| 131 | min-installed-version (version minimale requise pour la mise à jour) |
|---|
| 132 | max-installed-version (version maximale requise pour la mise à jour) |
|---|
| 133 | depends=plugin1,plugin2,plugin3 (non implémenté - trop difficile? proposé par sponge) |
|---|
| 134 | depends-version=0.3.4,,5.6.7 (non implémenté) |
|---|
| 135 | |
|---|
| 136 | Les éléments suivants sont pour les greffons de traduction : |
|---|
| 137 | langs=xx,yy,Klingon,... (non implémenté) (yy est le drapeau du pays) |
|---|
| 138 | |
|---|
| 139 | Tous les dossiers et fichiers suivants sont optionnels , mais il faut mettre quelque-chose, ou il ne se |
|---|
| 140 | passera rien : |
|---|
| 141 | |
|---|
| 142 | console/ |
|---|
| 143 | locale/ |
|---|
| 144 | Seulement des jars contenant de nouvelles ressources (traductions) pour les |
|---|
| 145 | applications de l'install de base I2P. |
|---|
| 146 | Les paquets de ce greffon vont dans console/webapp/truc.war ou lib/truc.jar |
|---|
| 147 | |
|---|
| 148 | themes/ |
|---|
| 149 | Nouveaux thÚmes pour la console |
|---|
| 150 | Copier chaque thÚme dans un sous dossier. |
|---|
| 151 | |
|---|
| 152 | webapps/ |
|---|
| 153 | (voir plus bas les remarques importantes sur les applications web) |
|---|
| 154 | .wars |
|---|
| 155 | Ils seront lancés à l'installation sauf si désactivés dans webapps.config |
|---|
| 156 | Le nom du .war ne doit pas nécessairement être le même que celui du greffon. |
|---|
| 157 | Ne pas utiliser plusieurs fois le même nom de .war dans l'installation de base. |
|---|
| 158 | |
|---|
| 159 | webapps.config |
|---|
| 160 | Même format que le webapps.config du routeur |
|---|
| 161 | Sert aussi à indiquer des .jars supplémentaires dans $PLUGIN/lib/ ou $I2P/lib pour le |
|---|
| 162 | classpath de la webapp, avec |
|---|
| 163 | webapps.warname.classpath=$PLUGIN/lib/foo.jar,$I2P/lib/bar.jar |
|---|
| 164 | NOTE : actuellement, la ligne classpath n'est chargée que si le nom du war est le même |
|---|
| 165 | que celui du greffon. |
|---|
| 166 | NOTE : avant sa version 0.7.12-9, le routeur cherchait plugin.warname.startOnLoad au |
|---|
| 167 | lieu de webapps.warname.startOnLoad. Pour la compatibilité avec les versions |
|---|
| 168 | antérieures, si un greffon doit désactiver un war, il doit comporter les deux lignes. |
|---|
| 169 | |
|---|
| 170 | eepsite/ |
|---|
| 171 | (Voir plus bas les remarques importantes sur les eepsites) |
|---|
| 172 | cgi-bin/ |
|---|
| 173 | docroot/ |
|---|
| 174 | logs/ |
|---|
| 175 | webapps/ |
|---|
| 176 | jetty.xml |
|---|
| 177 | L'installeur devra y substituer la variable pour définir le chemin |
|---|
| 178 | L'emplacement et le nom de ce fichier ne sont pas vraiment importants, tant qu'ils sont |
|---|
| 179 | définis dans clients.config - il peut être plus pratique d'être un niveau au dessus |
|---|
| 180 | dans l'arborescence (comme le fait le greffon zzzot) |
|---|
| 181 | |
|---|
| 182 | lib/ |
|---|
| 183 | Pour tous les jars. Les indiquer dans une ligne classpath de console/webapps.config et/ou clients.config |
|---|
| 184 | |
|---|
| 185 | clients.config (même format que le clients.config du routeur) |
|---|
| 186 | Ãléments lancés quand un greffon est démarré |
|---|
| 187 | Commence à client #0, en numérotation consécutive |
|---|
| 188 | New property clientApp.0.stopargs=truc machin stop bidule |
|---|
| 189 | Si présente, la classe sera appelée avec ces arguments pour arrêter le client |
|---|
| 190 | Toutes les tâches d'arrêt sont appelées avec un délais nul |
|---|
| 191 | Note: Le routeur ne peut pas dire si les clients tournent ou pas. Chacun doit pouvoir gérer une demande d'arrêt d'une application qui ne tourne pas sans faire d'histoires. |
|---|
| 192 | Idem pour le lancement d'un client déjà démarré. |
|---|
| 193 | New property clientApp.0.uninstallargs=truc machin uninstall bidule |
|---|
| 194 | Si présente, la classe sera appelée avec ces arguments juste avant la suppression de $PLUGIN |
|---|
| 195 | Toutes les tâches de désinstallation sont appelées avec un délais nul |
|---|
| 196 | New property clientApp.0.classpath=$I2P/lib/truc.muche,$PLUGIN/lib/bidule.jar |
|---|
| 197 | L'exécutable du greffon devra faire une substitution de variable dans les lignes des |
|---|
| 198 | les arguments et les stopargs de la façon suivante : |
|---|
| 199 | $I2P => dossier d'installation de base d'I2P; |
|---|
| 200 | $CONFIG => dossier de configuration d'i2p (habituellement ~/.i2p) |
|---|
| 201 | $PLUGIN => le dossier d'installation du greffon (habituellement ~/.i2p/plugins/appname) |
|---|
| 202 | (Voir les remarques importantes sur les scripts d'exécution shell ou les programmes externes) |
|---|
| 203 | </pre> |
|---|
| 204 | |
|---|
| 205 | |
|---|
| 206 | <h3>Tâches d'installation du greffon</h3> |
|---|
| 207 | Séquence d'installation. |
|---|
| 208 | <ul> |
|---|
| 209 | |
|---|
| 210 | <li>Téléchargement du fichier .xpi2p.</li> |
|---|
| 211 | <li>Vérification de la signature du .sud par rapport au clés connues. En l'absence de correspondance, le .sud est |
|---|
| 212 | extrait, la clé est chargée à partir des propriétés, vérifiée et enregistrée.</li> |
|---|
| 213 | <li>Vérification de l'intégrité du fichier zip.</li> |
|---|
| 214 | <li>Extraction du fichier plugin.config.</li> |
|---|
| 215 | <li>Vérification de la version d'I2P, pour assurer que le greffon peut fonctionner.</li> |
|---|
| 216 | <li>Vérification qu'il ne s'agit pas d'un doublon d'une des application $I2P.</li> |
|---|
| 217 | <li>Arrêt de l'éventuel greffon existant.</li> |
|---|
| 218 | <li>ContrÎle de l'inexistence du dossier d'installation si update=false, ou demande d'écrasement.</li> |
|---|
| 219 | <li>Vérification de l'existence du dossier d'installation update=true, ou demande de création.</li> |
|---|
| 220 | <li>Décompression du greffon dans appDir/plugins/name/</li> |
|---|
| 221 | <li>Ajout d'une référence au greffon dans plugins.config</li> |
|---|
| 222 | </ul> |
|---|
| 223 | |
|---|
| 224 | <h3> |
|---|
| 225 | Tâches du lanceur du greffon</h3> |
|---|
| 226 | Séquence de lancement du greffon. |
|---|
| 227 | tout d'abord, le fichier plugins.config est vérifié pour trouver quels greffons doivent être lancés. |
|---|
| 228 | Pour chacun : |
|---|
| 229 | <ul> |
|---|
| 230 | <li>Vérification de clients.config, chargement et lancement de chacun (ajout des jars configurés au classpath).</li> |
|---|
| 231 | <li>Vérification de console/webapp et console/webapp.config. chargement et lancement des éléments requis |
|---|
| 232 | (ajout des jars configurés au classpath).</li> |
|---|
| 233 | <li>Ajout de console/locale/truc.muche au classpath de traduction, si présent.</li> |
|---|
| 234 | <li>Ajout de console/theme au chemin de recherche de thÚmes, si présent.</li> |
|---|
| 235 | <li>Ajout du lien au panneau de contrÃŽle.</li> |
|---|
| 236 | </ul> |
|---|
| 237 | |
|---|
| 238 | <h3> |
|---|
| 239 | Remarques sur les applications web de console</h3> |
|---|
| 240 | <p> |
|---|
| 241 | Ces applications avec des tâches de fond doivent mettre en Åuvre un ServletContextListener |
|---|
| 242 | (voir les exemples de seedless ou i2pbote), ou écraser le destroy() dans le servlet, pour qu'elles puissent être |
|---|
| 243 | arrêtées. |
|---|
| 244 | à partir de la version 0.7.12-3 du routeur, les applications web de console sont toujours arrêtées avant d'être |
|---|
| 245 | redémarrées pour que le développeur n'ait pas à se soucier des instances multiples, si jamais il y en a. |
|---|
| 246 | à partir de cette même version, les webapps sont arrêtées lorsque le routeur est arrêté. |
|---|
| 247 | <p> |
|---|
| 248 | Ne fournissez pas de bibliothÚques jars dans les webapps ; placez-les dans lib/ avec un classpath dans webapps.config. |
|---|
| 249 | Vous pourrez ainsi faire des installations et des mises à jours séparées, où ces derniÚres ne contiendront pas de |
|---|
| 250 | bibliothÚques. |
|---|
| 251 | <p> |
|---|
| 252 | N'incluez pas de fichiers .java ou de .jsp ; sinon, jetty les recompilera à l'installation. |
|---|
| 253 | <p> |
|---|
| 254 | Pour l'instant, une webapp qui a besoin d'ajouter un des fichiers classpath dans $PLUGIN doivent avoir le même nom que |
|---|
| 255 | que le greffon. Par exemple, la webapp du greffon 'truc' doit s'appeler truc.war. |
|---|
| 256 | |
|---|
| 257 | |
|---|
| 258 | <h3> |
|---|
| 259 | Remarques sur les eepsite |
|---|
| 260 | </h3> |
|---|
| 261 | <p> |
|---|
| 262 | La façon d'ajouter un greffon à un site eep n'est pas trÚs claire. Le routeur n'a aucune jonction au site eep, l'état |
|---|
| 263 | démarré ou arrêté de celui-ci lui est inconnu, et il peut y en avoir plusieurs. Le mieux est de lancer vos propres |
|---|
| 264 | instances Jetty et I2PTunnel pour un nouvel eepsite. |
|---|
| 265 | <p> |
|---|
| 266 | Il peut instancier un nouvel I2PTunnel (comme comme le fait la ligne de commande i2ptunnel), mais bien sûr il ne sera |
|---|
| 267 | pas visible dans le GUI i2ptunnel, qui est une instance différente. Ãa n'est pas un problÚme. Vous pouvez ensuite |
|---|
| 268 | arrêter et démarrer i2ptunnel et Jetty ensemble. |
|---|
| 269 | <p> |
|---|
| 270 | Ne comptez donc pas sur le routeur pour fusionner ça avec un site eep préexistant. Ãa ne fonctionnera sûrement pas. |
|---|
| 271 | Démarrez un nouvel I2PTunnel et un nouveau Jetty depuis le fichier clients.config. Les meilleurs exemples sont ceux des |
|---|
| 272 | greffons zzzot et pebble, disponibles sur <a href="http://stats.i2p/i2p/plugins/">page greffons de zzz</a>. |
|---|
| 273 | <p> |
|---|
| 274 | Comment réaliser une substitution de path dans jetty.xml? Voir les exemples de zzzot et pebble. |
|---|
| 275 | |
|---|
| 276 | |
|---|
| 277 | <h3> |
|---|
| 278 | Remarques sur l'arrêt/démarrage du client |
|---|
| 279 | </h3> |
|---|
| 280 | <p> |
|---|
| 281 | Le routeur ne dispose d'aucun moyen de contrÎle de l'état des clients démarrés via clients.config. L'auteur du greffon |
|---|
| 282 | doit gérer de multiples arrêts/démarrages, de façon fiable si possible, en gardant une table de trace d'état, ou avec |
|---|
| 283 | les PID, etc… Ãvitez de tracer et de gérer les exceptions lors des multiples arrêts/démarrages, comme pour les |
|---|
| 284 | demandes d'arrêt sans démarrage préalable. Depuis la v0.7.12-3, les greffons sont arrêtés avec le routeurs, ce qui veut |
|---|
| 285 | dire que tous les clients avec des stopargs dans clients.config seront appelés, qu'il aient ou non été préalablement |
|---|
| 286 | démarrés. |
|---|
| 287 | |
|---|
| 288 | |
|---|
| 289 | <h3> |
|---|
| 290 | Remarques sur les scripts Shell et les programmes externes |
|---|
| 291 | </h3> |
|---|
| 292 | <p> |
|---|
| 293 | Pour exécuter des scripts shell ou d'autres programmes externes, voir <a href="http://zzz.i2p/topics/141">zzz.i2p</a> |
|---|
| 294 | <p> |
|---|
| 295 | Pour fonctionner sur Windows et Linux, écrivez une petite classe Java qui vérifie le type de SE, puis exécutez |
|---|
| 296 | ShellCommand sur un .bat ou un .sh que vous fournissez vous-même. |
|---|
| 297 | <p> |
|---|
| 298 | Quand le routeur s'arrête, il n'arrête pas les programmes externes, et à contrario, une seconde copie sera lancée au |
|---|
| 299 | démarrage du routeur. Pour empêcher ça, vous pourriez écrire une classe wrapper ou un script shell qui ferait le |
|---|
| 300 | classique enregistrement du PID dans un fichier de PID, et le vérifier au démarrage. |
|---|
| 301 | |
|---|
| 302 | |
|---|
| 303 | |
|---|
| 304 | |
|---|
| 305 | <h3> |
|---|
| 306 | Autres conseils pour les greffons |
|---|
| 307 | </h3> |
|---|
| 308 | <ul> |
|---|
| 309 | <li> |
|---|
| 310 | Pour développer facilement, voir un générateur de fichier xpi2p, dans monotone à la branche i2p.scripts, ou les échantillons d'exemples de greffons sur la page de zzz<li> |
|---|
| 311 | Pack200 est fortement recommandé pour les jars et les wars des greffons, cela réduit leur taille d'environ 60 à 65%. |
|---|
| 312 | Voir exemple sur la page de zzz. |
|---|
| 313 | La décompression Pack200 est supportée depuis le routeur version 0.7.11-5, c'est à dire quasiment tous les routeurs qui |
|---|
| 314 | supportent les greffons. |
|---|
| 315 | |
|---|
| 316 | <li> |
|---|
| 317 | Les greffons ne doivent pas tenter d'écrire dans le dossier $I2P car il est potentiellement en lecture seule, et |
|---|
| 318 | qu'en tous les cas ça n'est pas une bonne pratique. |
|---|
| 319 | <li> |
|---|
| 320 | Les greffons peuvent écrire dans le dossier $CONFIG, mais seul le stockage de fichiers dans $PLUGIN est |
|---|
| 321 | recommandé. Tous les fichiers de $PLUGIN sont supprimés à la désinstallation. Les fichiers situés ailleurs ne sont |
|---|
| 322 | pas supprimés, à moins que le greffon ne le spécifie explicitement par les 'uninstallargs' d'exécution d'un client |
|---|
| 323 | indiqués dans le fichier clients.config. Si l'utilisateur veut sauvegarder des données à la désinstallation, il |
|---|
| 324 | peut le faire avec les branchements des 'uninstallargs'. |
|---|
| 325 | <li> |
|---|
| 326 | Le dossier $CWD peut se trouver n'importe où ; ne considérez pas qu'il se trouve à un endroit particulier, |
|---|
| 327 | n'essayez pas de lire ou écrire des fichiers dans le chemin relatif $CWD. |
|---|
| 328 | <li> |
|---|
| 329 | Le programmes Java doivent pouvoir déterminer où ils se trouvent avec les 'getters' de I2PAppContext. |
|---|
| 330 | <li> |
|---|
| 331 | Le dossier des greffons est I2PAppContext.getGlobalContext().getAppDir().getAbsolutePath() + "/plugins/" + nom de |
|---|
| 332 | l'application, ou indiquez un argument $PLUGIN dans la ligne args du fichier clients.config. Il n'y a pas de moyen |
|---|
| 333 | fiable pour trouver les dossiers d'installation d'i2p, de configuration ou de greffons sans utiliser l'API de contexte |
|---|
| 334 | d'i2p.jar. |
|---|
| 335 | <li> |
|---|
| 336 | Voir <a href="http://zzz.i2p/topics/16">Comment faire</a> pour générer les clés de signature et les clés de |
|---|
| 337 | génération/vérification, et les fichiers .sud. |
|---|
| 338 | <li> |
|---|
| 339 | Tous les fichiers de configuration doivent être encodés en UTF-8. |
|---|
| 340 | <li> |
|---|
| 341 | Pour l'exécution dans une JVM séparée, utilisez ShellCommand avec java -cp truc:muche:bidule ma.pricipale.classe arg1 arg2 arg3. |
|---|
| 342 | Ãvidement, il sera alors bien plus difficile d'arrêter le greffon… |
|---|
| 343 | Mais cela reste possible en jouant avec les fichiers PID. |
|---|
| 344 | <li> |
|---|
| 345 | En tant qu'alternative aux stopargs dans clients.config, un client Java peut enregistrer un lien d'arrêt avec |
|---|
| 346 | I2PAppContext.addShutdownTask(). Mais ça n'arrêtera pas le greffon lors d'une mise à jour, donc les stopargs restent |
|---|
| 347 | préférables. De plus, définissez en mode service toutes les tâches créées. |
|---|
| 348 | <li> |
|---|
| 349 | N'incluez pas de classes dupliquant celles de l'installation standard. Améliorez les classes si nécessaire. |
|---|
| 350 | <li> |
|---|
| 351 | Faites attention aux définitions des divers classpath dans wrapper.config entre les installations anciennes et |
|---|
| 352 | nouvelles - voir la section 'classpath' plus bas. |
|---|
| 353 | <li> |
|---|
| 354 | Les clients rejetterons les clés dupliquées avec des noms de clé différents, des noms de clés dupliqués avec des clés |
|---|
| 355 | différentes, et des clés ou noms de clés différents dans les paquets de mises à jour. Sauvegardez vos clés de façon |
|---|
| 356 | maniaque et paranoïaque. Ne les générez qu'une seule fois. |
|---|
| 357 | <li> |
|---|
| 358 | Ne modifiez pas le fiichier plugin.config à l'exécution car il sera écrasé lors d'une mise à jour. Utilisez un fichier |
|---|
| 359 | de configuration différent dans le dossier pour enregistrer la configuration d'exécution. |
|---|
| 360 | <li> |
|---|
| 361 | En général, les greffons n'ont pas besoin d'accéder à $I2P/lib/router.jar. N'accédez pas aux classes du routeur, à |
|---|
| 362 | moins que vous ne fassiez quelque-chose de particulier. Dans l'avenir, le routeur pourrait implémenter un classpath |
|---|
| 363 | réservé pour les greffons, qui empêcherait l'accÚs à ses propres classes. |
|---|
| 364 | <li> |
|---|
| 365 | Comme chaque numéro de version doit être supérieur à celui de le version précédente, vous pouvez améliorer vos scripts |
|---|
| 366 | de développement en ajoutant un numéro de développement à la fin du numéro de version. C'est pratique pour les tests. |
|---|
| 367 | La plupart des greffons de zzz utilisent cette méthode : regardez build.xml à titre d'exemple. |
|---|
| 368 | <li> |
|---|
| 369 | Les greffons ne doivent jamais invoquer System.exit(). |
|---|
| 370 | <li> |
|---|
| 371 | Merci de respecter les licences en vous conformant aux exigences de licences pour tout logiciel que vous fournissez. |
|---|
| 372 | </ul> |
|---|
| 373 | |
|---|
| 374 | <h3> |
|---|
| 375 | Classpaths |
|---|
| 376 | </h3> |
|---|
| 377 | |
|---|
| 378 | Vous pouvez considérer que les jars suivants dans $I2P/lib sont dans le classpath standard pour toutes les |
|---|
| 379 | installations dI2P, quel que soit l'âge de l'installation d'origine : |
|---|
| 380 | <p> |
|---|
| 381 | i2p.jar, router.jar, jbigi.jar, sam.jar, mstreaming.jar, streaming.jar, i2ptunnel.jar, |
|---|
| 382 | org.mortbay.jetty.jar, javax.servlet.jar, jasper-compiler.jar, jasper-runtime.jar, |
|---|
| 383 | commons-logging.jar, commons-el.jar, wrapper.jar, systray.jar, systray4j.jar |
|---|
| 384 | <p> |
|---|
| 385 | |
|---|
| 386 | Rien de non listé ci-dessus ne devrait se trouver dans le classpath de personne, même si l'avez dans le classpath de |
|---|
| 387 | VOTRE version d'i2p. Si vous avez besoin d'un jar non listé ci-dessus, ajoutez $I2P/lib/truc.jar au classpath indiqué |
|---|
| 388 | dans les fichiers clients.config ou webapps.config de votre greffon. |
|---|
| 389 | <p> |
|---|
| 390 | Précédemment, une entrée classpath indiquée dans clients.config était ajoutée au classpath de la JVM. Cependant ceci à |
|---|
| 391 | été corrigé depuis la version 0.7.13-3 en utilisant les chargeurs de classes, et maintenant, conformément à ce qui |
|---|
| 392 | était prévu dÚs l'origine, le classpath indiqué dans clients.config ne concerne que la tâche spécifique. |
|---|
| 393 | Voir la section sur le plantage de la JVM plus bas, et <a href="http://zzz.i2p/topics/633">cette page sur zzz.i2p</a> |
|---|
| 394 | pour plus de détails. En conséquence, indiquez le classpath intégral requis pour chaque client. |
|---|
| 395 | |
|---|
| 396 | |
|---|
| 397 | <h3> |
|---|
| 398 | Notes sur les versions de Java |
|---|
| 399 | </h3> |
|---|
| 400 | Bien que la plupart des utilisateurs d'I2P utilisent une JVM 1.6 (6.0), nous prenons en charge la version 1.5 (5.0) et |
|---|
| 401 | les plus récentes. |
|---|
| 402 | à moins que vous n'ayez besoin de fonctionnalités de la v1.6, vous devriez créer vos greffons avec la v1.5 pour |
|---|
| 403 | garantir le fonctionnement à ceux qui l'utilisent. |
|---|
| 404 | <p> |
|---|
| 405 | Si votre greffon <b>n'a pas besoin de la 1.6</b> : |
|---|
| 406 | <ul> |
|---|
| 407 | <li> |
|---|
| 408 | Assurez-vous que tous les fichiers java et jsp sont compilés avec source="1.5" target="1.5". |
|---|
| 409 | <li> |
|---|
| 410 | Assurez-vous aussi que toutes les bibliothÚques jars fournies sont pour la v1.5 ou plus ancienne. |
|---|
| 411 | <li> |
|---|
| 412 | Si vous utilisez pack200, toute classe 1.6 dans un jar fera que pack200 créera un paquet au format 1.6 pack format, et |
|---|
| 413 | l'installation du greffon échouera sur un systÚme en v1.5 en générant le message erroné suivant : "Le greffon est |
|---|
| 414 | corrompu". |
|---|
| 415 | </ul> |
|---|
| 416 | |
|---|
| 417 | <p> |
|---|
| 418 | Si votre greffon <b>nécessite la v1.6</b>: |
|---|
| 419 | <ul> |
|---|
| 420 | <li> |
|---|
| 421 | Précisez-le expressément sur votre page de téléchargement. |
|---|
| 422 | <li> |
|---|
| 423 | Ajoutez min-java-version=1.6 dans votre ficher plugin.config |
|---|
| 424 | <li> |
|---|
| 425 | Si vous utilisez pack200, l'installation du greffon sur un systÚme en v1.5 échouera et retournera un message erroné "Le |
|---|
| 426 | greffon est corrompu". |
|---|
| 427 | </ul> |
|---|
| 428 | |
|---|
| 429 | |
|---|
| 430 | <h3> |
|---|
| 431 | La JVM se plante en mise à jour |
|---|
| 432 | </h3> |
|---|
| 433 | Note - tout devrait être résolu à l'heure actuelle. |
|---|
| 434 | <p> |
|---|
| 435 | La JVM a tendance à planter lors de mises à jour des jars d'un greffon si celui-ci était en cours d'exécution quand i2p |
|---|
| 436 | a été lancé (même si le greffon a été arrêté aprÚs). Ãa pourrait avoir été corrigé par l'utilisation du chargeur de |
|---|
| 437 | classes dans la version 0.7.13-3, mais peut-être pas. |
|---|
| 438 | à tester ultérieurement. |
|---|
| 439 | <p> |
|---|
| 440 | Le plus sûr est de concevoir votre greffon avec le jar dans le war (pour une application web), ou d'exiger un |
|---|
| 441 | redémarrage aprÚs la mise à jour, ou ne pas mettre à jour les jar de votre greffon. |
|---|
| 442 | <p> |
|---|
| 443 | De part le fonctionnement des class loaders dans une webapp, il _pourrait_ être sûr d'avoir des jars externes si vous |
|---|
| 444 | indiquez le classpath dans le fichier webapps.config. Plus de tests sont nécessaires pour vérifier ce point. N'indiquez |
|---|
| 445 | pas le classpath avec un client factice dans le fichier clients.config s'il n'est nécessaire que pour une webapp - |
|---|
| 446 | utilisez plutÃŽt webapps.config. |
|---|
| 447 | <p> |
|---|
| 448 | Le moins sûr, et apparemment source de la plupart des plantages, sont les clients avec les jars du greffon indiqués |
|---|
| 449 | dans le classpath du fichier clients.config. |
|---|
| 450 | |
|---|
| 451 | <p> |
|---|
| 452 | Rien de tout ceci ne devrait poser de problÚmes sur une installation initiale - vous ne devriez même jamais avoir à |
|---|
| 453 | demander un redémarrage pour une installation initiale d'un greffon. |
|---|
| 454 | |
|---|
| 455 | {% endblock %} |
|---|