Rainers Blog

Archiv für die Kategorie ‘IT’

E-Mail-Verschlüsselung im Web-Browser – FireGPG mit Firefox 12

Geschrieben von Rainer Klute - 2012-04-30

Verschlüsselte E-Mails senden und empfangen – das ist gar nicht so einfach, wenn man lediglich mit einem Web-Browser auf sein E-Mail-Konto zugreift.

FireGPG

Früher gab es dafür das Firefox-Addon FireGPG. Damit konnte man E-Mails oder allgemeine Texte im Browser ver- und entschlüsseln – also ohne daß der private Schlüssel den lokalen Rechner verließ.

Leider stellte FireGPG-Autor Maximilien Cuony Mitte 2010 die weitere Entwicklung ein, und ab Firefox 4 war FireGPG 0.8 nicht mehr lauffähig.

Glücklicherweise kümmern sich ein paar Leute um den verwaisten Quellcode und sorgen dafür, daß FireGPG auch mit moderneren Firefox-Versionen nutzbar ist. Die Installation ist nicht ganz so einfach, wie man das von anderen Firefox-Addons kennt, aber die Komplexität hält sich doch sehr in Grenzen.

Ich habe es mal mit Firefox 12 ausprobiert und zwar unter Linux (OpenSUSE 11.4 64 bit). Wer das mit einem anderen Betriebssystem nachvollziehen will, muß die Kommandos halt entsprechend anpassen.

Ach ja: Für die eigentlichen kryptografischen Operationen wie das Ver- oder Entschlüsseln verwendet FireGPG im Hintergrund die Software GnuPG. Die muß man bei Bedarf installieren

FireGPG installieren

Und so geht’s:

  1. Wer noch eine alte FireGPG-Version installiert haben sollte, muß die zunächst loswerden:
    1. In der Addon-Verwaltung FireGPG entfernen.
    2. Firefox beenden und neu starten. Beim Neustart wird die alte Version entfernt.
  2. Jetzt braucht man irgendwo ein Verzeichnis, das die FireGPG-Software aufnimmt, zum Beispiel /meine/firefox/addons. Mit Hilfe der Kommandozeile legt man dieses Verzeichnis an und geht hinein:
    • mkdir /meine/firefox/addons
    • cd /meine/firefox/addons
  3. Der nächste Schritt ist das Herunterladen von FireGPG. Dazu braucht man das Versionsverwaltungsprogramm Git. Wer es noch nicht hat, muß es installieren. Gute Linix-Distributionen bringen Git in ihrer Paketverwaltung mit. Im Zweifelsfall findet man Git auf der Git-Homepage– natürlich auch für andere Betriebssysteme.
    • git clone git://github.com/bit/firegpg.git

    Dieses Kommando legt im aktuellen Verzeichnis – also /meine/firefox/addons – das Unterverzeichnis firegpg an und lädt die Software hinein.

  4. Jetzt gilt es, das firegpg-Verzeichnis dem Firefox bekanntzumachen. Das geschieht im Firefox-Profil, genauer: in dessen Unterverzeichnis extensions. Auf meinem Rechner heißt dieses Verzeichnis /home/klute/.mozilla/firefox/ceil9pha.default/extensions, auf deinem mit (ziemlicher) Sicherheit anders. Zu diesem Verzeichnis gehen:
    • cd /home/klute/.mozilla/firefox/ceil9pha.default/extensions
  5. Die Datei firegpg@firegpg.teammuß den Namen des FireGPG-Installationsverzeichnisses enthalten:
    • echo "/meine/firefox/addons/firegpg” >firegpg@firegpg.team
  6. Firefox neu starten.
  7. In den Addon-Einstellungen identifiziert sich FireGPG mit der Versionsnummer 0.8.5. Man muß es aktivieren.
  8. Firefox neu starten. Danach sollte FireGPG funktionieren.

FireGPG benutzen

Wie man FireGPG im einzelnen benutzt, wie man E-Mails verschlüsselt, entschlüsselt, signiert oder Signaturen prüft, will ich an dieser Stelle nicht beschreiben. Die beiden wichtigsten Funktionen hier ganz kurz:

E-Mails verschlüsseln

  1. E-Mail in das Texteingabefeld des Browsers eingeben.
  2. Text selektieren
  3. Nach Rechtsklick auf den selektierten Text öffnet sich das Kontextmenü.
  4. Im Kontextmenü je nach Bedarf FireGPG → Verschlüsseln oder FireGPG → Unterschreiben und Verschlüsseln auswählen. (Die falsche Groß-/Kleinschreibung ist nicht von mir.)
  5. FireGPG erfragt, für wen der Text verschlüsselt werden soll, fragt ggf. nach dem privaten Schlüssel zum Unterschreiben und ersetzt den selektierten Text dann durch die verschlüsselte und ggf. unterschriebene Version.
  6. E-Mail absenden. Achtung: Anhänge und die Betreffzeile werden nicht verschlüsselt!

E-Mails entschlüsseln

  1. FireGPG erkennt PGP-verschlüsselte Nachrichten in einer Webseite automatisch und zeigt sie verkürzt an.
  2. Auf Entschlüsseln klicken. FireGPG fragt ggf. nach der Passphrase für den privaten Schlüssel, entschlüsselt den verschlüsselten Text und zeigt das Ergebnis an.

Auf GPG-Agenten verzichten

Falls FireGPG nicht nach der Passphrase für den privaten Schlüssel fragt und das Entschlüsseln fehlschlägt, kann man versuchen, auf die Benutzung des GPG-Agenten zu verzichten. Das stellt man in den FireGPG-Optionen ein: Auf dem Reiter GPG nimmt man das Häkchen von GPG-Agent aktivieren weg.

Viel Erfolg!

Weblinks

Veröffentlicht in IT | Getaggt mit: , , , , , , , , | Kommentar schreiben »

Nützliche Eclipse-Plugins

Geschrieben von Rainer Klute - 2012-04-20

An dieser Stelle ensteht eine Übersicht nützlicher Eclipse-Plugins.

Nein, ich will hier beileibe keine Konkurrenz etwa zum Eclipse Marketplace machen mit seinen über 1,5 Mio. Einträgen, sondern lediglich das eine oder andere Plugins festhalten, die ich selbst kenne und nutze.

Ich habe vor, die Einträge hier nach und nach und nur nach Bedarf zu erweitern. Los geht’s mit diesem hier:

Veröffentlicht in IT | Getaggt mit: , | Kommentar schreiben »

Geheimnisvolles Yoono oder: Wie man Inkompatibilitäten überwindet

Geschrieben von Rainer Klute - 2011-12-28

Seit längerer Zeit verwende ich Yoono als Client für Twitter, Facebook und andere soziale Netzwerke. Ein großer Vorteil von Yoono ist seine Fähigkeit, mehrere Accounts gleichzeitig zu verwalten. So schicke ich meine Statusmeldungen in der Regel gleichzeitig sowohl über meinen Twitter-Account @Rainer_Klute als auch über Facebook heraus. Außerdem verwalte ich ein paar weitere Twitter-Accounts, zum Beispiel den der @FeG_Dortmund oder der @Nuklearia. Sehr nützlich, alle Accounts gleichzeitig im Blick zu haben und mal eben über diesen oder jenen Account etwas schreiben zu können! Sehr praktisch auch die Möglichkeit, Follower, Freude oder wie sie alle heißen, in Gruppen einteilen zu können.

Ich verwende Yoono als Firefox-Add-on; es steht auch für Google Chrome zur Verfügung, außerdem für’s iPhone sowie als eigenständige Anwendung für Linux, Mac und Windows.

Upgrade-Probleme

Das kann man natürlich auch alles auf der Yoono-Homepage nachlesen. Wozu also dieser Blogpost? Grund dafür sind Inkompatibilitäten, mit denen ich mich anläßlich einer Aktualisierung herumschlagen durfte.

Nachdem ich von Yoono 7.6.16 auf 7.7.0 aktualisiert hatte, passierte folgendes: Das neue Yoono lief kurze Zeit normal, dann – zack – lief Firefox in eine Endlosschleife. Nichts ging mehr, nicht einmal die Fensterinhalte wurden aktualisiert. Das einzige, was Firefox noch tat: Er belegte einen CPU-Kern zu 100 Prozent.

Ich habe daraufhin Yoono wieder auf Version 7.6.16 zurückgesetzt und konnte erstmal weiterarbeiten. Das half allerdings nur bis zu Firefox 9: damit mochte das alte Yoono 7.6.16 nicht mehr zusammenarbeiten.

Erste Hilfe: Yoono Desktop

Um überhaupt noch irgendetwas machen zu können, habe ich als Sofortmaßnahme Yoono Desktop heruntergeladen und unabhängig vom Firefox zum Laufen gebracht. Aber wie die Accounts und Gruppen aus Firefox herüberholen? Yoono verwaltet diese Dinge im wesentlichen in zwei SQLite-Datenbanken, die man im Firefox-Profil im Unterverzeichnis yoono findet. Diese Datenbankdateien habe ich in das entsprechende Verzeichnis der Desktop-Variante herüberkopiert und konnte damit arbeiten. Dennoch will ich hier nicht weiter in die Einzelheiten gehen, weil dieser Weg im allgemeinen nicht funktioniert. Er ist in meinem Fall nur deshalb gangbar gewesen, weil Yoono Firefox 7.6.16 und die von mir verwendete Yoono-Desktop-Version »zufällig« dasselbe Datenbankschema verwenden.

Neues Datenbankschema

Das ist aber nicht selbstverständlich, und leider hat sich das Datenbankschema mit Yoono 7.7.x geändert. Man kann die alten Datenbanken daher nicht einfach herüberkopieren und weitermachen.

Eigentlich sollte man erwarten können, daß Yoono ein altes Datenbankschema selbstständig erkennt und in das neue Schema migriert. Bleibt zu hoffen, daß das bei künftigen Versionen besser läuft!

Yoono-Gruppen wiederherstellen

Natürlich könnte man einfach die alte Yoono-Version wegschmeißen und mit einer neuen frisch anfangen. Hat man allerdings ein paar hundert Partner in sozialen Netzen und hat man diese auf verschiedene Yoono-Gruppen verteilt, ist das keine wirkliche Alternative. Man müßte ja alle Gruppen neu einrichten!

Was der gemeine Yoono-Anwender nicht weiß und was ich erst im Twitter-Dialog mit dem Yoono-Support herausgefunden habe: Man kann die Gruppen aus der alten Yoono-Instanz heraus exportieren und in die neue wieder einspielen. Die entsprechenden Funktionen haben die Yoono-Entwickler aus welchen Gründen auch immer gut versteckt.

Hier die einzelnen Schritte, um ein altes Yoono auf eine inkompatible neue Version zu aktualisieren. Zwar bleiben die Gruppen erhalten, Yoonos Wissen über die Benutzerkonten geht aber verloren. Also sollte man die Zugangsdaten bereithalten, um die Accounts schnell wieder einrichten zu können. Auch hier sollte Yoono nachbessern!

  1. Im Browser ruft man die »Adresse« about:yoono auf. Yoono zeigt daraufhin im Browser-Fenster verschiedene Schaltflächen an.
  2. Ein Klick auf die Schaltfläche Export Groups schreibt die Gruppen in die Datei groups.exp im Verzeichnis yoono. Dieses Verzeichnis liegt selbst im Firefox-Profilverzeichnis. Welches das ist, zeigt steht ganz oben im Fenster mit den Yoono-Schaltflächen.
  3. Die Datei groups.exp kopiert man an einen sicheren Ort außerhalb des Firefox-Profilverzeichnisses. Das Sichern der Gruppendatei ist sehr wichtig, weil das Verzeichnis yoono im übernächsten Schritt vollständig gelöscht wird.
  4. In der Add-on-Verwaltung des Firefox entfernt man die alte Yoono-Version bzw. man markiert sie als zu entfernen.
  5. Ein Neustart des Firefox entfernt Yoono tatsächlich. Dabei wird auch das Verzeichnis yoono aus dem Firefox-Profilverzeichnis gelöscht.
  6. In der Add-on-Verwaltung des Firefox installiert man die neue Yoono-Version.
  7. Startet man den Firefox neu, startet auch das neue Yoono und legt dabei unter anderem das Verzeichnis yoono neu an.
  8. Leider muß man Yoono nun erneut mit den verschiedenen Konten der sozialen Netzwerke verbinden.
  9. Sind die Accounts eingerichtet, kann man die Gruppen einspielen. Dazu kopiert man die vorher gesicherte Datei groups.exp in das Verzeichnis yoono hinein.
  10. Im Firefox ruft man den Pseudo-URL about:yoono auf.
  11. Nach einem Klick auf die Schaltfläche Import Groups liest Yoono die Datei yoono/groups.exp und richtet die Gruppen ein.

Gruppen aus der Yoono-Desktopanwendung exportieren

Bleibt die Frage, wie man die Gruppen aus Yoono Desktop heraus exportieren kann. Dort gibt es zwar auch ein Browser-Fenster, aber about:yoono in die Adreßzeile einzugeben, führt zu nichts. Auch hier gibt es einen geheimen Trick:

  1. In Yoono Desktop die Tastenkombination [Strg+Umschalt+D] eingeben.
  2. Auf das Werkzeug-Icon klicken (rechts neben dem Yoono-Logo). Das Werkzeug-Menü klappt auf.
  3. Im Werkzeug-Menü erscheint an erster Stelle der neue Menüpunkt Debug. Darunter gibt einen Punkt about:yoono.
  4. Das Anklicken dieses Menüpunktes bewirkt dasselbe wie ein Aufruf von about:yoono im Browser: Es öffnet sich ein Fenster mit den bekannten Schaltflächen, insbesondere mit Export Groups zum Exportieren der Gruppen. Yoono Desktop erstellt wie Yoono Firefox eine Datei namens yoono/groups.exp. Die liegt natürlich nicht im Firefox-Profil, sondern in einem eigenen Verzeichnis. Welches das ist, zeigt Yoono Desktop oben im Fenster mit den Schaltflächen an. In diesem Verzeichnis findet man das Unterverzeichnis yoono und darin wiederum die Datei groups.exp.

Update: Yoono-Macher wollen Geheimnisse bewahren

Offenbar haben die Yoono-Macher noch nicht verstanden, daß es bei Software um die Menschen geht, die diese Software benutzen. Jedenfalls beschwert man sich auf Twitter über diesen Blogbeitrag:

Aha. Eine sehr merkwürdige Einstellung! Es geht offenbar nicht darum, den Benutzern zu helfen, sondern den Machern selbst – wobei mir nicht klar ist, wie durch das Verstecken der Features den Yoono-Entwicklern ein Vorteil entsteht.

Und wenn Geheimnisse geheim bleiben sollen, bläst man sie besser nicht öffentlich via Twitter in die Welt hinaus:

Vielleicht wird es Zeit für eine quelloffene Alternative!

Veröffentlicht in IT | Getaggt mit: , , , | 1 Kommentar »

USB mit VirtualBox

Geschrieben von Rainer Klute - 2011-08-06

VirtualBox ist ein PC-Emulator der Firma Oracle. Wer in einer virtuellen Maschine die USB-Geräte des Wirtssystems benutzen wollte, mußte dazu früher eine kostenpflichtige Lizenz erwerben. Seit VirtualBox 4 ist das nicht mehr nötig. Einfach VirtualBox installieren und mit USB loslegen klappt trotzdem nicht.

Um USB mit VirtualBox 4.0.12 unter Linux (openSUSE 11.4) als Wirtssystem ans Laufen zu kriegen, mußte ich folgendes tun:

Extension herunterladen und installieren

Für die USB-Unterstützung braucht man neben der normalen VirtualBox-Installation ein Erweiterungspaket, das man von http://www.virtualbox.org/wiki/Downloads herunterlädt. Achtung, es gibt unterschiedliche Pakete für VirtualBox 4.1 und 4.0.12. Für mich ist letzteres interessant, und ich erhalte die Datei Oracle_VM_VirtualBox_Extension_Pack-4.0.12-72916.vbox-extpack. Was man an der Dateiendung nicht erkennen kann: Es handelt sich um eine gzipkomprimierte Tar-Datei.

Die Installation erfolgt mit Hilfe des VirtualBox-Managers:

  1. Anwendung VirtualBox starten.
  2. Im File-Menü Preferences… wählen. Das Fenster Settings erscheint.
  3. Im linken Bereich auf Extensions klicken.
  4. Rechts auf das Symbol klicken, das für Add package steht.
  5. Heruntergeladene Datei mit dem Erweiterungspaket auswählen und auf Open klicken.
  6. Die Installation beginnt. Da Systemdateien installiert werden, muß man das Root-Kennwort in ein Dialogfenster eingeben.

Siehe auch Kapitel »Installing VirtualBox and extension packs« im Benutzerhandbuch.

USB für virtuelle Maschine aktivieren

Um USB für eine bestimmte virtuelle Maschine zu aktivieren, macht man im VirtualBox-Manager folgendes:

  1. Gewünschte virtuelle Maschine auswählen.
  2. Auf Settings klicken. Dialogfenster öffnet sich.
  3. Im linken Bereich auf USB klicken.
  4. Häkchen bei Enable USB 2.0 (EHCI) Controller setzen.
  5. Filter hinzufügen. Hier sollte man für die Geräte, die man in der virtuellen Maschine nutzen will – und nur für diese –, einen Filter definieren. Das läßt alle Geräte außen vor, die das Wirtssystem selbst benötigt. Wie das mit dem Filter genau geht, kann man im Kapitel »USB Support« des Benutzerhandbuchs nachlesen.

Man denke aber nicht, nun könne man endlich mit USB loslegen. Denn zuvor gilt es, eine wichtige Frage zu klären:

Wer darf USB benutzen?

Das Wirtsystem (hier: Linux) und das Gastsystem in der virtuellen Maschine dürfen nicht gleichzeitig auf dasselbe USB-Gerät zugreifen. Wenn das Gastsystem beginnt, ein USB-Gerät zu nutzen, sperrt VirtualBox daher den Zugriff des Wirtssystems auf dieses Gerät. Dennoch kann dabei etwas schiefgehen: Greift das Gastsystem beispielsweise auf eine USB-Festplatte zu, die im Wirtssystem noch angemeldet ist, wirkt das im Wirtssystem so, als wenn der USB-Stecker gezogen worden wäre. Es kann zu Datenverlusten kommen.

Man muß also sehr genau wissen, was man tut und zum Beispiel daran denken, USB-Festplatten im Wirtssystem freizugeben, bevor man sie im Gastsystem verwendet. Daher darf nicht jeder beliebige Benutzer einer virtuellen Maschine USB nutzen, sondern muß vom Systemverwalter dazu berechtigt worden sein. Der macht das, indem er Nutzer in die Gruppe vboxusers einträgt.

Berechtigung aktivieren

USB-Geräte funktionieren im Gastsystem immer noch nicht? Das kann daran liegen, daß VirtualBox die nötigen Berechtigungen im Wirtssystem fehlen. Es hängt von der jeweiligen Linux-Distribution ab, wie genau das Problem zu lösen ist. Im Benutzerhandbuch gibt es dazu das Kapitel »USB not working«.

Unter openSUSE 11.4 ist folgendes zu tun:

  1. Datei /etc/udev/rules.d/60-vboxdrv.rules bearbeiten. Hier gibt es zwei Zeilen, die der Gruppe vboxusers den Zugriff auf USB-Geräte gestatten. Allerdings sind diese Zeilen auskommentiert, so daß sie gar nichts bewirken! Man entfernt die Kommentarzeichen, so daß die beiden Zeilen so aussehen:
    SUBSYSTEM=="usb_device", ATTR{devnum}=="?*", ATTR{busnum}=="?*",NAME="vboxusb/$attr{busnum}/$attr{devnum}", GROUP="vboxusers"
    SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{devnum}=="?*", ATTR{busnum}=="?*",NAME="vboxusb/$attr{busnum}/$attr{devnum}", GROUP="vboxusers"
  2. Obwohl dies ein Linux-System ist, ist nun ein Neustart erforderlich. Danach geht’s.

Diese Lösung habe ich auf der VirtualBox-Seite im englischsprachigen openSUSE-Wiki gefunden.

Veröffentlicht in IT | Getaggt mit: , , , | 2 Kommentare »

Zusammenhängende XML-Dateien syntaxgesteuert editieren

Geschrieben von Rainer Klute - 2010-08-12

Das syntaxgesteuerte Editieren von XML-Dateien ist eine feine Sache. Der Editor weiß, welche Elemente mit welchen Attributen an welchen Stellen erlaubt sind, und er haut dem Anwender auf die Finger, wenn der etwas versucht, was die Document Type Definition (DTD) oder das XML-Schema verbieten.

Editieren mit Emacs/PSGML

Seit rund 20 Jahren verwende ich dazu den Editor Emacs zusammen mit dem sogenannten Major mode PSGML. Unter openSUSE-Linux gehört beides bequemerweise zum Lieferumfang – auch wenn den openSUSE-Leuten die Integration nicht so ganz gelungen ist und man einen weiteren, nicht so mächtigen SGML-Modus per Hand löschen muß. Auch für alternative Betriebssysteme wie Microsoft Windows sind Emacs und PSGML verfügbar.

Ja, klar, gelegentlich habe ich immer wieder mal nach einer moderneren Alternative geguckt, besonders, seit es XML-Schema gibt, mit dem PSGML nichts anzufangen weiß. Bis jetzt habe ich aber nichts gefunden, das erstens frei verfügbar ist und zweitens ähnlich mächtig und flexibel wie Emacs/PSGML daherkommt.)

Ein Beispieldokument

Der folgende XML-Quelltext zeigt ein einfaches Beispieldokument in der Datei A.xml. Welche Regeln darin gelten, legt die DOCTYPE-Deklaration fest (siehe Hervorhebung). Im vorliegenden Fall verrät sie, daß es sich um ein DocBook-Dokument handelt. Ein syntaxgesteuerter Editor wie Emacs/PSGML liest die DocBook-DTD und sorgt beispielsweise dafür, daß innerhalb eines section-Elements title und para in der richtigen Reihenfolge stehen.

version="1.0" encoding="UTF-8"?>
article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "docbookx.dtd">

<article>

 <section>
  <title>Erstes Kapitel</title>
  <para>Dies ist der Text des ersten Kapitels.</para>
 </section>

 <section>
  <title>Zweites Kapitel</title>
  <para>Dies ist der Text des zweiten Kapitels.</para>
 </section>

</article>

Zusammenhängende Dokumente

Ist ein Dokument länger als unser Minibeispiel, möchte man es womöglich auf mehrere Dateien aufteilen. XML ermöglicht das mit Hilfe von Entities. Eine Entity hat einen Namen und einen Wert. Beispielsweise können wir eine Entity namens anhang definieren, die als Wert den Text eines Anhangs unseres Dokuments enthalten soll.

Das Einfügen des Anhangs in das Dokument ist sehr einfach und übersichtlich, weil wir nur die entsprechende Entity-Referenz &anhang; hinzuschreiben brauchen. Das Ende der Datei sieht so aus:

 ...
 </section>

 &anhang;

</article>

Der Wert der Entity wird an der Stelle eingefügt, an der die Entity-Referenz steht.

Diesen Wert haben wir aber noch gar nicht definiert. Das machen wir in der DOCTYPE-Deklaration, die wir dazu »ein wenig« erweitern:

article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "docbookx.dtd" [
 <!--ENTITY anhang "
                   <title>Anhang</title>
                   <para>Dies ist der Text des Anhangs.</para>
                  </appendix>">
]>

Damit haben wir allerdings nichts gewonnen, denn der Text des Anhangs steht im Hauptdokument statt in einer separaten Datei, und von einer Vereinfachung kann angesichts der aufgeblähten und unübersichtlichen DOCTYPE-Deklaration keine Rede sein.

Aber eines sieht man doch, nämlich wie eine ENTITY-Anweisung den Namen und den Wert einer Entity festlegt. Der Wert ist eine durch doppelte Anführungszeichen begrenzte Zeichenfolge, die sich in unserem Fall über mehrere Zeilen erstreckt.

Statt den Wert der Entity hinzuschreiben, kann man aber auch angeben, daß sich er sich in einer Datei befindet. Das geht so:

article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "docbookx.dtd" [
 <!--ENTITY anhang SYSTEM "B.xml">
]>

Das sieht schon besser aus. Mit dieser Definition wird ein XMP-Prozessor jedes Vorkommen von &anhang; in der Datei A.xml durch den Inhalt von B.xml ersetzen.

Eingebundene Dateien editieren

So weit, so gut. Weniger schön ist allerdings, daß wir B.xml nicht editieren können, jedenfalls nicht syntaxgesteuert. Das ist ja auch kein Wunder, denn B.xml enthält nur den reinen Text des Anhangs und keinerlei Hinweis auf eine DTD. Eine DOCTYPE-Deklaration, an der PSGML die zu verwendende DTD erkennen könnte, ist hier nicht erlaubt, weil sie ja mit in das Gesamtdokument integriert und dort zu einem Fehler führen würde. Außerdem lieferte eine DOCTYPE-Deklaration gar nicht genug Informationen. Ein syntaxgesteuerte XML-Editor muß nicht nur wissen, welche DTD gilt, sondern auch, an welcher Stelle die Entity in den übergeordneten XML-Baum eingefügt wird. In unserem Beispiel befinden wir uns im Element article hinter einem section-Element. Davon weiß B.xml aber nichts.

Glücklicherweise können wir diese Informationen in der XML-Datei unterbringen und zwar in einem Kommentar, aus dem sich PSGML eine ganze Reihe von Einstellungen holt. Ein Aufruf von SGML → File Options → Save File Options im Emacs erzeugt diesen Kommentar am Ende der Datei. Hier ein Beispiel:

<!-- Keep this comment at the end of the file
Local variables:
mode: xml
sgml-omittag:nil
sgml-shorttag:nil
sgml-namecase-general:nil
sgml-general-insert-case:lower
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->

Interessant ist die hervorgehobene Zeile; wir ersetzen sie durch diese hier:

sgml-parent-document:("A.xml" "article" "appendix")

Diese Anweisung verrät PSGML dreierlei:

  1. Das übergeordnete Dokument ist A.xml. Die dort geltende DTD gilt auch hier.
  2. Die aktuelle Datei, also B.xml, wird in ein article-Element eingefügt.
  3. Die aktuelle Datei muß ein einziges appendix-Element enthalten.

Voilá, und damit geht es! Wir können die Datei jetzt syntaxgesteuert editieren und den Schatz der DocBook-Elemente heben.

Wie man sieht, geht die sgml-parent-document-Anweisung davon aus, daß die aktuelle Datei in ein ganz bestimmtes übergeordnetes Dokument an einer ziemlich genau bestimmten Stelle eingebunden wird. In der Praxis wird das meistens auch so sein. Dennoch kann man die Datei mittels Entity-Referenzen durchaus an mehreren und unterschiedlichen Stellen in das Gesamtdokument einfügen, solange letzteres dadurch syntaktisch korrekt bleibt. Ein XML-Prozessor kümmert sich ja nicht um das, was in irgendeinem Kommentar steht.

Eclipse

Eclipse-Nutzer können übrigens ebenfalls einen leistungsfähigen XML-Editor einsetzen, sofern sie das WTP-Paket installiert haben. Dieser XML-Editor kann nicht nur anhand einer DTD, sondern auch gemäß eines XML-Schemas editieren. Er kommt sogar mit XML-Katalogen klar – ein Thema, das ich aus diesem Beitrag übrigens bewußt herauslasse. Das Bearbeiten von verknüpften Fragmentdateien hat der Eclipse-XML-Editor allerdings nicht drauf. Sehr schade! Ich habe dazu eine Fehlermeldung geschrieben. Wer mag, kann für eine Erweiterung votieren. Bis auf weiteres werde ich aber wohl bei der bewährten Kombination Emacs/PSGML bleiben müssen.

Weblinks

Veröffentlicht in IT | Getaggt mit: , , , , , , , , , , | Kommentar schreiben »

BIOS-Aktualisierung unter Linux

Geschrieben von Rainer Klute - 2010-05-24

Wer das BIOS seines Linux-Computers aktualisieren will oder muß, steht vor einem Problem: Die Hersteller bieten BIOS-Updates in der Regel als DOS- oder Windows-Anwendungen an, die unter Linux nicht laufen.

So ging es mir auch mit meinem Dell-Notebook Latitude E6500, bei dem ich das BIOS von Version A12 auf A19 aktualisieren wollte. Glücklicherweise ist die BIOS-Aktualisierung mit einem kleinen Trick auch unter Linux möglich. Dazu braucht man zunächst das neue BIOS als DOS-Anwendung. Dell bietet sie für das E6500 hier zum Herunterladen an, in meinem Fall die Datei E6500A19.exe.

Für die weiteren Schritte braucht man auf seinem Rechner zwei Software-Pakete:

  • Mit wine kann man Windows-Anwendungen unter Linux ausführen. Es ist ein Standardpaket, das zu jeder gängigen Installation gehört. Gegebenenfalls muß man es vom Installationsmedium oder über das Netz nachinstallieren.
  • Das Paket firmware-addon-dell kümmert sich um die BIOS-Aktualisierung von Dell-Computern, das der Hersteller für verschiedene Linux-Distributionen zur Installation anbietet. Ich verwende openSUSE 11.2 und habe mittels YaST das Repository http://linux.dell.com/repo/community/repositories/home:/michael_e_brown/openSUSE_Factory/ zu meiner Konfiguration hinzugefügt. Entsprechende Repositories gibt es bei Dell auch für Fedora 11, RHEL4 und SLES9. Nun kann man firmware-addon-dell installieren. Dieser Vorgang verlangt weitere Pakete wie die nicht dellspezifischen firmware-tools und smbios-utils. Dell bietet diese Pakete aber ebenfalls in seinem Repository an, so daß man nicht lange suchen muß.

Als nächstes gewinnt man mittels wine aus der Datei E6500A19.exe eine sogenannte HDR-Datei:

wine E6500A19.exe -writehdrfile -nopause

Dieser Schritt erzeugt die Datei E6500A19.hdr, die wir für die BIOS-Aktualisierung benötigen. Die folgenden Kommandos bereiten diese vor:

modprobe dell_rbu
dellBiosUpdate -u -f E6500A19.hdr

Nun ist das neue BIOS zur Aktualisierung vorgemerkt. Die Aktualisierung selbst erfolgt aber erst beim Neustart der Maschine. Dazu sind zwei Dinge zu beachten:

  • Während des Aktualisierungsvorgangs darf die Maschine auf keinen Fall stromlos werden. Also unbedingt den Rechner sowohl ans Stromnetz anschließen als auch einen vollen Akku drinhaben!
  • Man muß einen Warmstart durchführen. Das heißt, der Rechner darf vor dem Neustart nicht ausgeschaltet werden. Das kann man zum Beispiel durch das Kommando <tt>reboot</tt> erreichen oder unter KDE durch die Funktion Verlassen→Neustart im KDE-Menü.

Beim Neustart bemerkt die Maschine das neue BIOS und installiert es. Das dauert eine Weile. Anschließend bootet die Maschine mit dem neuen BIOS. Fertig.

Veröffentlicht in IT | Getaggt mit: , , , , , , | 1 Kommentar »

 
Follow

Bekomme jeden neuen Artikel in deinen Posteingang.