Übersicht
I2P setzt ein einfaches, aber sicheres System zur automatischen Softwareaktualisierung ein. Die Routerkonsole lädt in regelmäßigen Abständen eine Datei mit Neuigkeiten rund um I2P von einer konfigurierbaren URL. Für den Fall, dass der Server nicht erreichbar ist, ist eine Ersatz-URL fest einprogrammiert.
Der Inhalt der Neuigkeitendatei wird auf der Eingangsseite der Routerkonsole angezeigt. Zusätzlich enthält die Datei die neueste I2P-Versionsnummer. Wenn die Versionsnummer höher als die Routerversion ist, wird dem Benutzer angezeigt, dass eine neue Version verfügbar ist.
Wenn der Router entsprechend eingestellt ist, lädt er die neue Version herunter und installiert sie ggf. auch gleich.
Format der Neuigkeitendatei
Die Datei news.xml kann die folgenden Elemente enthalten:
<i2p.news date="$Date: 2010-01-22 00:00:00 $" /> <i2p.release version="0.7.14" date="2010/01/22" minVersion="0.6" />
Elemente können in XML-Kommentaren eingeschlossen werden, wenn sie nicht im Browser angezeigt werden sollen. Die Elemente i2p.release und version sind Pflicht. Alle anderen sind optional und werden derzeit nicht verwendet.
Der Nachrichtenquelle wird nur insoweit vertraut, als sie angibt, ob eine neue Version verfügbar ist. Die Aktualisierungs-URL, die Prüfsumme und alle anderen Informationen werden daraus nicht bezogen.
Format der Aktualisierungsdatei
Die digital unterschriebene Aktualisierungsdatei ist eine Zip-Datei mit einem vorangestellten, 56 Byte langen Vorspann. Als Dateiname ist i2pupdate.sud üblich. Der Vorspann enthält:
- Eine 40 Byte lange DSA-Signatur und
- Eine 16 Byte lange UTF8-Zeichenkette, die die I2P-Version angibt und falls nötig am Ende mit Nullen aufgefüllt wird.
Die Signatur deckt nur die Zip-Datei, nicht den Versionsvorspann ab. Die Signatur muss auf einen der fest in den Router einprogrammierten Öffentlichen DSA-Schlüssel der I2P-Projektverantwortlichen passen.
Beim Versionsvergleich wird [0-9]* als Hauptversion bzw. Unterversionen und '-', '_' und '.' als Trennzeichen interpretiert; alle anderen Zeichen werden ignoriert.
Laden und Installation
Der Router lädt die Aktualisierungsdatei mit Hilfe des eingebauten HTTP-Klienten und -Proxys von einer URL in einer konfigurierbaren I2P-URL-Liste. Es sind mehrere URLs fest einprogrammiert. Der Router überprüft, ob die Version in der Aktualisierungsdatei neuer als die installierte Version ist. Die Signatur wird selbstverständlich auch überprüft.
Die Zip-Datei wird im Verzeichnis $I2P, d.h. im I2P-Grundverzeichnis installiert.
Neuere Routerversionen unterstützen die Pack200-Komprimierung. Dateien im Zip-Archiv, die auf .jar.pack oder .war.pack enden, werden selbsttätig in eine Jar- bzw. War-Datei dekomprimiert. Aktualisierungsdateien, die Pack200-Dateien enthalten, haben üblicherweise die Endung ".su2". Pack200 verkleinert die Aktualisierungsdateien um ca. 60%.
Zukünftige Verbesserungen
- Der Router könnte die neueste Versionsnummer mit einer HEAD-Anfrage ermitteln. Dadurch würde verhindert, dass statt der neuen die alte Version heruntergeladen und installiert wird, weil der Aktualisierungsserver noch nichts von der neuen Version mitbekommen hat.
- Wenn irgendwann ein neues Format für die Aktualisierungsdatei festgelegt wird, sollte die DSA-Signaturschlüssellänge erhöht werden und die Signatur die Versionsnummer einschließen. Eine Versionsnummer für das Dateiformat wäre auch erwägenswert.
- Das I2P-Netzwerk wird früher oder später für Aktualisierungen über HTTP zu groß werden. Mit dem eingebauten Bittorrent-Klient, I2PSnark, kann dann die Aktualisierung verteilt durchgeführt werden. Mit der Arbeit daran wurde 2009 begonnen; diese ruht aber, bis die Funktionalität benötigt wird.
- Der Router-Aktualisierungsmechanismus ist Teil der (Web-) Routerkonsole. Eine Aktualisierung von Routern, die in Kleingeräten laufen und keine Routerkonsole haben, ist zur Zeit nicht möglich (außer natürlich von Hand).














