456 lines
23 KiB
HTML
456 lines
23 KiB
HTML
{% extends "_layout_fr.html" %}
|
|
{% block title %}Spécification des greffons I2P{% endblock %}
|
|
{% block content %}
|
|
Traduction de mai 2011. <a href="plugin_spec.html">Version anglaise actuelle</a>
|
|
<h2>
|
|
Spécification Version 0.16
|
|
2010-07-26
|
|
</h2>
|
|
<p>
|
|
Mise à jour de juillet 2010 pour le routeur version 0.8.
|
|
<h3>Aperçu</h3>
|
|
<p>
|
|
Ce document spécifie un format de fichier .xpi2p (comme le .xpi de Firefox), mais avec un simple fichier de description
|
|
plugin.config au lieu du fichier XML install.rdf. Ce fichier est utilisé pour l'installation initiale et pour les mises
|
|
à jour.
|
|
<p>
|
|
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
|
|
grandes lignes de travail pour les développeurs.
|
|
<p>
|
|
Le format de base du fichier .xpi2p est le même que celui du fichier i2pupdate.sud (utilisé pour les mises à jour du
|
|
routeur), mais le programme d'installation laisse faire l'utilisateur même si la clé de signature n'est pas encore
|
|
connue.
|
|
<p>
|
|
La structure standard des répertoires permet l'installation des types de greffons suivants :
|
|
<ul>
|
|
<li>
|
|
applications web de console (webapps)
|
|
<li>
|
|
nouvel eepsite avec cgi-bin, webapps
|
|
<li>
|
|
thèmes de console
|
|
<li>
|
|
traductions de console
|
|
<li>
|
|
programmes Java
|
|
<li>
|
|
programmes Java dans une JVM séparée
|
|
<li>
|
|
Tout script shell ou programme
|
|
</ul>
|
|
|
|
<p>
|
|
Un greffon installe tous ses fichiers dans ~/.i2p/plugins/nom/ (%APPDIR%\I2P\plugins\nom\ sur Windows). Le programme
|
|
d'installation empêche l'installation ailleurs, bien que le greffon puisse accéder pour son fonctionnement à des
|
|
bibliothèques situées en dehors de cette arborescence.
|
|
|
|
<p>
|
|
Ceci doit seulement être considéré comme un moyen pour faciliter l'installation, la désinstallation, et les mises à
|
|
jour, ainsi que pour minimiser les conflits entre greffons.
|
|
|
|
<p>
|
|
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
|
|
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,
|
|
à l'exécution de programmes etc…
|
|
<h3>Détails</h3>
|
|
<p>
|
|
foo.xpi2p est un fichier sud contenant les données suivantes :
|
|
<pre>
|
|
En-tête standard .sud au début du fichier zip, contenant :
|
|
La <a href="how_cryptography.html#DSA">signature DSA</a> à 40 octets
|
|
La version du greffon sur 16 octets en UTF-8, complétée par des zéros en fin si nécessaire
|
|
|
|
Le fichier Zip contenant :
|
|
|
|
(REQUIS) un fichier plugin.config :
|
|
(fichier standard de configuration I2P, en UTF-8, contenant des lignes clé=valeur, les commentaires commençant par #)
|
|
Contenant les propriétés suivantes :
|
|
|
|
(* = requis)
|
|
Les trois premières doivent être identiques à celles du greffon installé s'il s'agit d'une mise à jour.
|
|
|
|
*name (le greffon sera installé dans ce dossier)
|
|
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.
|
|
*key (<a href="how_cryptography.html#DSA">clé publique DSA</a> sous forme Base64 de 172 caractères finissant '=')
|
|
*signer (votrenom@mail.i2p recommendé)
|
|
|
|
*version (dans un format compatible avec VersionComparator, p.e. 1.2.3-4)
|
|
16 octets maximum (doit correspondre à la version du sud)
|
|
Les séparateurs acceptés sont '.', '-', et '_'
|
|
Pour une mise à jour de greffon, doit être supérieure à celle actuellement installée.
|
|
|
|
|
|
configclients.jsp affichera les éléments suivants s'ils sont présents :
|
|
|
|
date (temps Java - entier long)
|
|
author (votrenom@mail.i2p recommendé)
|
|
websiteURL (http://truc.i2p/)
|
|
updateURL (http://truc.i2p/truc.xpi2p)
|
|
Le vérificateur de mises à jour contrôle les octets 41 à 56 à cette URL pour déterminer si une nouvelle version est disponible
|
|
(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)
|
|
description
|
|
description_xx (pour la langue xx)
|
|
license
|
|
disableStop=true
|
|
Par défault, false.
|
|
À true, le bouton "Arrêt" n'est pas affiché. À utiliser s'il n'y pas de client ni de
|
|
webapp avec des arguments d'arrêt.
|
|
|
|
Les éléments suivants servent à l'affichage d'un lien dans le panneau de contrôle de la console:
|
|
|
|
consoleLinkName (nom affiché dans le panneau de contrôle)
|
|
consoleLinkName_xx (pour la langue xx)
|
|
consoleLinkURL (/appname/index.jsp)
|
|
consoleLinkTooltip (supporté depuis la version 0.7.12-6)
|
|
consoleLinkTooltip_xx (idem, pour la langue xx)
|
|
|
|
|
|
Les éléments suivants concernent l'installeur du greffon :
|
|
|
|
type (app/theme/locale/webapp/...) (non implémenté, probablement inutile)
|
|
min-i2p-version
|
|
max-i2p-version
|
|
min-java-version
|
|
min-jetty-version
|
|
max-jetty-version
|
|
required-platform-OS (non implémenté - sera peut-être seulement affiché, pas vérifié)
|
|
other-requirements (non implémenté p.e. python x.y - non vérifié par l'installeur, uniquement
|
|
affiché)
|
|
dont-start-at-install=true
|
|
false par défaut.
|
|
router-restart-required=true
|
|
false par défaut.
|
|
dont-start-at-install doit être positionné à true pour être actif.
|
|
Ceci ne redémarre pas le routeur, indique seulement la nécessité de redémarrer.
|
|
update-only=true
|
|
false par défaut.
|
|
À true, un échec se produira si le greffon n'est pas déjà installé.
|
|
install-only=true
|
|
false par défaut.
|
|
À true, si le greffon est déjà installé, l'installation échouera.
|
|
min-installed-version (version minimale requise pour la mise à jour)
|
|
max-installed-version (version maximale requise pour la mise à jour)
|
|
depends=plugin1,plugin2,plugin3 (non implémenté - trop difficile? proposé par sponge)
|
|
depends-version=0.3.4,,5.6.7 (non implémenté)
|
|
|
|
Les éléments suivants sont pour les greffons de traduction :
|
|
langs=xx,yy,Klingon,... (non implémenté) (yy est le drapeau du pays)
|
|
|
|
Tous les dossiers et fichiers suivants sont optionnels , mais il faut mettre quelque-chose, ou il ne se
|
|
passera rien :
|
|
|
|
console/
|
|
locale/
|
|
Seulement des jars contenant de nouvelles ressources (traductions) pour les
|
|
applications de l'install de base I2P.
|
|
Les paquets de ce greffon vont dans console/webapp/truc.war ou lib/truc.jar
|
|
|
|
themes/
|
|
Nouveaux thèmes pour la console
|
|
Copier chaque thème dans un sous dossier.
|
|
|
|
webapps/
|
|
(voir plus bas les remarques importantes sur les applications web)
|
|
.wars
|
|
Ils seront lancés à l'installation sauf si désactivés dans webapps.config
|
|
Le nom du .war ne doit pas nécessairement être le même que celui du greffon.
|
|
Ne pas utiliser plusieurs fois le même nom de .war dans l'installation de base.
|
|
|
|
webapps.config
|
|
Même format que le webapps.config du routeur
|
|
Sert aussi à indiquer des .jars supplémentaires dans $PLUGIN/lib/ ou $I2P/lib pour le
|
|
classpath de la webapp, avec
|
|
webapps.warname.classpath=$PLUGIN/lib/foo.jar,$I2P/lib/bar.jar
|
|
NOTE : actuellement, la ligne classpath n'est chargée que si le nom du war est le même
|
|
que celui du greffon.
|
|
NOTE : avant sa version 0.7.12-9, le routeur cherchait plugin.warname.startOnLoad au
|
|
lieu de webapps.warname.startOnLoad. Pour la compatibilité avec les versions
|
|
antérieures, si un greffon doit désactiver un war, il doit comporter les deux lignes.
|
|
|
|
eepsite/
|
|
(Voir plus bas les remarques importantes sur les eepsites)
|
|
cgi-bin/
|
|
docroot/
|
|
logs/
|
|
webapps/
|
|
jetty.xml
|
|
L'installeur devra y substituer la variable pour définir le chemin
|
|
L'emplacement et le nom de ce fichier ne sont pas vraiment importants, tant qu'ils sont
|
|
définis dans clients.config - il peut être plus pratique d'être un niveau au dessus
|
|
dans l'arborescence (comme le fait le greffon zzzot)
|
|
|
|
lib/
|
|
Pour tous les jars. Les indiquer dans une ligne classpath de console/webapps.config et/ou clients.config
|
|
|
|
clients.config (même format que le clients.config du routeur)
|
|
Éléments lancés quand un greffon est démarré
|
|
Commence à client #0, en numérotation consécutive
|
|
New property clientApp.0.stopargs=truc machin stop bidule
|
|
Si présente, la classe sera appelée avec ces arguments pour arrêter le client
|
|
Toutes les tâches d'arrêt sont appelées avec un délais nul
|
|
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.
|
|
Idem pour le lancement d'un client déjà démarré.
|
|
New property clientApp.0.uninstallargs=truc machin uninstall bidule
|
|
Si présente, la classe sera appelée avec ces arguments juste avant la suppression de $PLUGIN
|
|
Toutes les tâches de désinstallation sont appelées avec un délais nul
|
|
New property clientApp.0.classpath=$I2P/lib/truc.muche,$PLUGIN/lib/bidule.jar
|
|
L'exécutable du greffon devra faire une substitution de variable dans les lignes des
|
|
les arguments et les stopargs de la façon suivante :
|
|
$I2P => dossier d'installation de base d'I2P;
|
|
$CONFIG => dossier de configuration d'i2p (habituellement ~/.i2p)
|
|
$PLUGIN => le dossier d'installation du greffon (habituellement ~/.i2p/plugins/appname)
|
|
(Voir les remarques importantes sur les scripts d'exécution shell ou les programmes externes)
|
|
</pre>
|
|
|
|
|
|
<h3>Tâches d'installation du greffon</h3>
|
|
Séquence d'installation.
|
|
<ul>
|
|
|
|
<li>Téléchargement du fichier .xpi2p.</li>
|
|
<li>Vérification de la signature du .sud par rapport au clés connues. En l'absence de correspondance, le .sud est
|
|
extrait, la clé est chargée à partir des propriétés, vérifiée et enregistrée.</li>
|
|
<li>Vérification de l'intégrité du fichier zip.</li>
|
|
<li>Extraction du fichier plugin.config.</li>
|
|
<li>Vérification de la version d'I2P, pour assurer que le greffon peut fonctionner.</li>
|
|
<li>Vérification qu'il ne s'agit pas d'un doublon d'une des application $I2P.</li>
|
|
<li>Arrêt de l'éventuel greffon existant.</li>
|
|
<li>Contrôle de l'inexistence du dossier d'installation si update=false, ou demande d'écrasement.</li>
|
|
<li>Vérification de l'existence du dossier d'installation update=true, ou demande de création.</li>
|
|
<li>Décompression du greffon dans appDir/plugins/name/</li>
|
|
<li>Ajout d'une référence au greffon dans plugins.config</li>
|
|
</ul>
|
|
|
|
<h3>
|
|
Tâches du lanceur du greffon</h3>
|
|
Séquence de lancement du greffon.
|
|
tout d'abord, le fichier plugins.config est vérifié pour trouver quels greffons doivent être lancés.
|
|
Pour chacun :
|
|
<ul>
|
|
<li>Vérification de clients.config, chargement et lancement de chacun (ajout des jars configurés au classpath).</li>
|
|
<li>Vérification de console/webapp et console/webapp.config. chargement et lancement des éléments requis
|
|
(ajout des jars configurés au classpath).</li>
|
|
<li>Ajout de console/locale/truc.muche au classpath de traduction, si présent.</li>
|
|
<li>Ajout de console/theme au chemin de recherche de thèmes, si présent.</li>
|
|
<li>Ajout du lien au panneau de contrôle.</li>
|
|
</ul>
|
|
|
|
<h3>
|
|
Remarques sur les applications web de console</h3>
|
|
<p>
|
|
Ces applications avec des tâches de fond doivent mettre en œuvre un ServletContextListener
|
|
(voir les exemples de seedless ou i2pbote), ou écraser le destroy() dans le servlet, pour qu'elles puissent être
|
|
arrêtées.
|
|
À partir de la version 0.7.12-3 du routeur, les applications web de console sont toujours arrêtées avant d'être
|
|
redémarrées pour que le développeur n'ait pas à se soucier des instances multiples, si jamais il y en a.
|
|
À partir de cette même version, les webapps sont arrêtées lorsque le routeur est arrêté.
|
|
<p>
|
|
Ne fournissez pas de bibliothèques jars dans les webapps ; placez-les dans lib/ avec un classpath dans webapps.config.
|
|
Vous pourrez ainsi faire des installations et des mises à jours séparées, où ces dernières ne contiendront pas de
|
|
bibliothèques.
|
|
<p>
|
|
N'incluez pas de fichiers .java ou de .jsp ; sinon, jetty les recompilera à l'installation.
|
|
<p>
|
|
Pour l'instant, une webapp qui a besoin d'ajouter un des fichiers classpath dans $PLUGIN doivent avoir le même nom que
|
|
que le greffon. Par exemple, la webapp du greffon 'truc' doit s'appeler truc.war.
|
|
|
|
|
|
<h3>
|
|
Remarques sur les eepsite
|
|
</h3>
|
|
<p>
|
|
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
|
|
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
|
|
instances Jetty et I2PTunnel pour un nouvel eepsite.
|
|
<p>
|
|
Il peut instancier un nouvel I2PTunnel (comme comme le fait la ligne de commande i2ptunnel), mais bien sûr il ne sera
|
|
pas visible dans le GUI i2ptunnel, qui est une instance différente. Ça n'est pas un problème. Vous pouvez ensuite
|
|
arrêter et démarrer i2ptunnel et Jetty ensemble.
|
|
<p>
|
|
Ne comptez donc pas sur le routeur pour fusionner ça avec un site eep préexistant. Ça ne fonctionnera sûrement pas.
|
|
Démarrez un nouvel I2PTunnel et un nouveau Jetty depuis le fichier clients.config. Les meilleurs exemples sont ceux des
|
|
greffons zzzot et pebble, disponibles sur <a href="http://stats.i2p/i2p/plugins/">page greffons de zzz</a>.
|
|
<p>
|
|
Comment réaliser une substitution de path dans jetty.xml? Voir les exemples de zzzot et pebble.
|
|
|
|
|
|
<h3>
|
|
Remarques sur l'arrêt/démarrage du client
|
|
</h3>
|
|
<p>
|
|
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
|
|
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
|
|
les PID, etc… Évitez de tracer et de gérer les exceptions lors des multiples arrêts/démarrages, comme pour les
|
|
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
|
|
dire que tous les clients avec des stopargs dans clients.config seront appelés, qu'il aient ou non été préalablement
|
|
démarrés.
|
|
|
|
|
|
<h3>
|
|
Remarques sur les scripts Shell et les programmes externes
|
|
</h3>
|
|
<p>
|
|
Pour exécuter des scripts shell ou d'autres programmes externes, voir <a href="http://zzz.i2p/topics/141">zzz.i2p</a>
|
|
<p>
|
|
Pour fonctionner sur Windows et Linux, écrivez une petite classe Java qui vérifie le type de SE, puis exécutez
|
|
ShellCommand sur un .bat ou un .sh que vous fournissez vous-même.
|
|
<p>
|
|
Quand le routeur s'arrête, il n'arrête pas les programmes externes, et à contrario, une seconde copie sera lancée au
|
|
démarrage du routeur. Pour empêcher ça, vous pourriez écrire une classe wrapper ou un script shell qui ferait le
|
|
classique enregistrement du PID dans un fichier de PID, et le vérifier au démarrage.
|
|
|
|
|
|
|
|
|
|
<h3>
|
|
Autres conseils pour les greffons
|
|
</h3>
|
|
<ul>
|
|
<li>
|
|
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>
|
|
Pack200 est fortement recommandé pour les jars et les wars des greffons, cela réduit leur taille d'environ 60 à 65%.
|
|
Voir exemple sur la page de zzz.
|
|
La décompression Pack200 est supportée depuis le routeur version 0.7.11-5, c'est à dire quasiment tous les routeurs qui
|
|
supportent les greffons.
|
|
|
|
<li>
|
|
Les greffons ne doivent pas tenter d'écrire dans le dossier $I2P car il est potentiellement en lecture seule, et
|
|
qu'en tous les cas ça n'est pas une bonne pratique.
|
|
<li>
|
|
Les greffons peuvent écrire dans le dossier $CONFIG, mais seul le stockage de fichiers dans $PLUGIN est
|
|
recommandé. Tous les fichiers de $PLUGIN sont supprimés à la désinstallation. Les fichiers situés ailleurs ne sont
|
|
pas supprimés, à moins que le greffon ne le spécifie explicitement par les 'uninstallargs' d'exécution d'un client
|
|
indiqués dans le fichier clients.config. Si l'utilisateur veut sauvegarder des données à la désinstallation, il
|
|
peut le faire avec les branchements des 'uninstallargs'.
|
|
<li>
|
|
Le dossier $CWD peut se trouver n'importe où ; ne considérez pas qu'il se trouve à un endroit particulier,
|
|
n'essayez pas de lire ou écrire des fichiers dans le chemin relatif $CWD.
|
|
<li>
|
|
Le programmes Java doivent pouvoir déterminer où ils se trouvent avec les 'getters' de I2PAppContext.
|
|
<li>
|
|
Le dossier des greffons est I2PAppContext.getGlobalContext().getAppDir().getAbsolutePath() + "/plugins/" + nom de
|
|
l'application, ou indiquez un argument $PLUGIN dans la ligne args du fichier clients.config. Il n'y a pas de moyen
|
|
fiable pour trouver les dossiers d'installation d'i2p, de configuration ou de greffons sans utiliser l'API de contexte
|
|
d'i2p.jar.
|
|
<li>
|
|
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
|
|
génération/vérification, et les fichiers .sud.
|
|
<li>
|
|
Tous les fichiers de configuration doivent être encodés en UTF-8.
|
|
<li>
|
|
Pour l'exécution dans une JVM séparée, utilisez ShellCommand avec java -cp truc:muche:bidule ma.pricipale.classe arg1 arg2 arg3.
|
|
Évidement, il sera alors bien plus difficile d'arrêter le greffon…
|
|
Mais cela reste possible en jouant avec les fichiers PID.
|
|
<li>
|
|
En tant qu'alternative aux stopargs dans clients.config, un client Java peut enregistrer un lien d'arrêt avec
|
|
I2PAppContext.addShutdownTask(). Mais ça n'arrêtera pas le greffon lors d'une mise à jour, donc les stopargs restent
|
|
préférables. De plus, définissez en mode service toutes les tâches créées.
|
|
<li>
|
|
N'incluez pas de classes dupliquant celles de l'installation standard. Améliorez les classes si nécessaire.
|
|
<li>
|
|
Faites attention aux définitions des divers classpath dans wrapper.config entre les installations anciennes et
|
|
nouvelles - voir la section 'classpath' plus bas.
|
|
<li>
|
|
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
|
|
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
|
|
maniaque et paranoïaque. Ne les générez qu'une seule fois.
|
|
<li>
|
|
Ne modifiez pas le fiichier plugin.config à l'exécution car il sera écrasé lors d'une mise à jour. Utilisez un fichier
|
|
de configuration différent dans le dossier pour enregistrer la configuration d'exécution.
|
|
<li>
|
|
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, à
|
|
moins que vous ne fassiez quelque-chose de particulier. Dans l'avenir, le routeur pourrait implémenter un classpath
|
|
réservé pour les greffons, qui empêcherait l'accès à ses propres classes.
|
|
<li>
|
|
Comme chaque numéro de version doit être supérieur à celui de le version précédente, vous pouvez améliorer vos scripts
|
|
de développement en ajoutant un numéro de développement à la fin du numéro de version. C'est pratique pour les tests.
|
|
La plupart des greffons de zzz utilisent cette méthode : regardez build.xml à titre d'exemple.
|
|
<li>
|
|
Les greffons ne doivent jamais invoquer System.exit().
|
|
<li>
|
|
Merci de respecter les licences en vous conformant aux exigences de licences pour tout logiciel que vous fournissez.
|
|
</ul>
|
|
|
|
<h3>
|
|
Classpaths
|
|
</h3>
|
|
|
|
Vous pouvez considérer que les jars suivants dans $I2P/lib sont dans le classpath standard pour toutes les
|
|
installations dI2P, quel que soit l'âge de l'installation d'origine :
|
|
<p>
|
|
i2p.jar, router.jar, jbigi.jar, sam.jar, mstreaming.jar, streaming.jar, i2ptunnel.jar,
|
|
org.mortbay.jetty.jar, javax.servlet.jar, jasper-compiler.jar, jasper-runtime.jar,
|
|
commons-logging.jar, commons-el.jar, wrapper.jar, systray.jar, systray4j.jar
|
|
<p>
|
|
|
|
Rien de non listé ci-dessus ne devrait se trouver dans le classpath de personne, même si l'avez dans le classpath de
|
|
VOTRE version d'i2p. Si vous avez besoin d'un jar non listé ci-dessus, ajoutez $I2P/lib/truc.jar au classpath indiqué
|
|
dans les fichiers clients.config ou webapps.config de votre greffon.
|
|
<p>
|
|
Précédemment, une entrée classpath indiquée dans clients.config était ajoutée au classpath de la JVM. Cependant ceci à
|
|
été corrigé depuis la version 0.7.13-3 en utilisant les chargeurs de classes, et maintenant, conformément à ce qui
|
|
était prévu dès l'origine, le classpath indiqué dans clients.config ne concerne que la tâche spécifique.
|
|
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>
|
|
pour plus de détails. En conséquence, indiquez le classpath intégral requis pour chaque client.
|
|
|
|
|
|
<h3>
|
|
Notes sur les versions de Java
|
|
</h3>
|
|
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
|
|
les plus récentes.
|
|
À moins que vous n'ayez besoin de fonctionnalités de la v1.6, vous devriez créer vos greffons avec la v1.5 pour
|
|
garantir le fonctionnement à ceux qui l'utilisent.
|
|
<p>
|
|
Si votre greffon <b>n'a pas besoin de la 1.6</b> :
|
|
<ul>
|
|
<li>
|
|
Assurez-vous que tous les fichiers java et jsp sont compilés avec source="1.5" target="1.5".
|
|
<li>
|
|
Assurez-vous aussi que toutes les bibliothèques jars fournies sont pour la v1.5 ou plus ancienne.
|
|
<li>
|
|
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
|
|
l'installation du greffon échouera sur un système en v1.5 en générant le message erroné suivant : "Le greffon est
|
|
corrompu".
|
|
</ul>
|
|
|
|
<p>
|
|
Si votre greffon <b>nécessite la v1.6</b>:
|
|
<ul>
|
|
<li>
|
|
Précisez-le expressément sur votre page de téléchargement.
|
|
<li>
|
|
Ajoutez min-java-version=1.6 dans votre ficher plugin.config
|
|
<li>
|
|
Si vous utilisez pack200, l'installation du greffon sur un système en v1.5 échouera et retournera un message erroné "Le
|
|
greffon est corrompu".
|
|
</ul>
|
|
|
|
|
|
<h3>
|
|
La JVM se plante en mise à jour
|
|
</h3>
|
|
Note - tout devrait être résolu à l'heure actuelle.
|
|
<p>
|
|
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
|
|
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
|
|
classes dans la version 0.7.13-3, mais peut-être pas.
|
|
À tester ultérieurement.
|
|
<p>
|
|
Le plus sûr est de concevoir votre greffon avec le jar dans le war (pour une application web), ou d'exiger un
|
|
redémarrage après la mise à jour, ou ne pas mettre à jour les jar de votre greffon.
|
|
<p>
|
|
De part le fonctionnement des class loaders dans une webapp, il _pourrait_ être sûr d'avoir des jars externes si vous
|
|
indiquez le classpath dans le fichier webapps.config. Plus de tests sont nécessaires pour vérifier ce point. N'indiquez
|
|
pas le classpath avec un client factice dans le fichier clients.config s'il n'est nécessaire que pour une webapp -
|
|
utilisez plutôt webapps.config.
|
|
<p>
|
|
Le moins sûr, et apparemment source de la plupart des plantages, sont les clients avec les jars du greffon indiqués
|
|
dans le classpath du fichier clients.config.
|
|
|
|
<p>
|
|
Rien de tout ceci ne devrait poser de problèmes sur une installation initiale - vous ne devriez même jamais avoir à
|
|
demander un redémarrage pour une installation initiale d'un greffon.
|
|
|
|
{% endblock %}
|