User talk:Tijuca

From OpenStreetMap Wiki
Jump to: navigation, search

Software

Osmosis Debian Paket

Da das Osmosis Paket in den Debian Repos nur in der Version 0.34 vorliegt kann man weder unter SID noch unter Squeeze das neue Format PBF benutzen. Um trotzdem eine aktuellere Version benutzen zu können muss man sich das passende Debian Paket selber bauen bis es ein Update in Debian gibt. Dazu gibt es entsprechende Werkzeuge die man gewohnt einfach per apt-get installieren kann. Folgende Schritte sollten auf einen debian Squeeze bzw. auch SID funktionieren. Lenny habe ich nicht getestet.

Um die Develpakete zu installieren folgenden Befehl ausführen sofern diese Pakete nicht schon installiert sind.

sudo apt-get install dpkg-dev libdpkg-perl quilt devscripts quilt fakeroot libparse-debcontrol-perl

Da Osmosis an sich ein JAR File ist benötigt man natürlich noch ggfls. ein paar zusätzliche Builttools um später als letzten Schritt das Paket bauen zu können. Diese Build Depencies kann man per apt-get automatisch auflösen lassen so das man nicht die einzelnen Pakete selber suchen muss.

sudo apt-get build-dep osmosis

Die folgenden Befehle nicht als root ausführen! Als nächstes benötigt man das "alte" Quellpaket (also die Version die im entsprechenden Repo aktuell ist. Zuvor legen wir uns ein Arbeitsverzeichniss an worin wir den Paketbau vollziehen wollen.

user@pc$ mkdir ~debbuild && cd debbuild
user@pc~/debbuild$ apt-get source osmosis # als user arbeiten!
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut
Statusinformationen werden eingelesen... Fertig
HINWEIS: »osmosis«-Paketierung wird betreut im »Git«-Versionsverwaltungssystem auf:
git://git.debian.org/pkg-grass/osmosis.git
Es müssen 1.377 kB an Quellarchiven heruntergeladen werden.
Hole:1 http://ftp.de.debian.org/debian/ squeeze/main osmosis 0.34+ds1-1 (dsc) [1.662 B]
Hole:2 http://ftp.de.debian.org/debian/ squeeze/main osmosis 0.34+ds1-1 (tar) [1.367 kB]
Hole:3 http://ftp.de.debian.org/debian/ squeeze/main osmosis 0.34+ds1-1 (diff) [8.273 B]
Es wurden 1.377 kB in 6 s geholt (223 kB/s)                                                                         
gpgv: Schlüsselblockhilfsmittel`/home/user/.gnupg/trustedkeys.gpg': Fehler beim Öffnen der Datei
gpgv: Unterschrift vom Do 01 Apr 2010 01:16:15 CEST mittels DSA-Schlüssel ID 1392B174
gpgv: Unterschrift kann nicht geprüft werden: Öffentlicher Schlüssel nicht gefunden
dpkg-source: Warnung: Fehler beim Überprüfen der Signatur von ./osmosis_0.34+ds1-1.dsc             <------- diese Warnung kann ignoriert werden!
dpkg-source: Information: osmosis wird nach osmosis-0.34+ds1 extrahiert
dpkg-source: Information: entpacken von osmosis_0.34+ds1.orig.tar.gz
dpkg-source: Information: entpacken von osmosis_0.34+ds1-1.debian.tar.gz
dpkg-source: Information: anwenden von 00-fix_build.patch
dpkg-source: Information: anwenden von 01-fix_launcher.patch
dpkg-source: Information: anwenden von 02-fix_plexus.patch
dpkg-source: Information: anwenden von debian-changes-0.34+ds1-1

Als nächstes benötigt man die aktuellste Version von Osmosis von http://bretth.dev.openstreetmap.org/osmosis-build/ . Dies ist zu diesem Zeitpunkt die Version die Version 0.38. Also den Link von der Webseite kopieren und per wget in das selbe Verzeichniss holen.

user@pc~/debbuild$ wget http://bretth.dev.openstreetmap.org/osmosis-build/osmosis-0.38.tgz

Das Paket nicht selber entpacken! Das macht der folgende Befehl automatisch. Diese legt auch noch die Debian spezifischen Verzeichnisse mit an. Um starten zu können muss man in das Buildverzeichniss vom ürsprünglichen Debian Paket absteigen und dort den Befehl uupdate ausführen.

user@pc~/debbuild$ cd osmosis-0.34+ds1/
user@pc~/debbuild/osmosis-0.34+ds1$ uupdate -v 0.38 ../osmosis-0.38.tgz
New Release will be 0.38-1.
Symlinking to pristine source from osmosis_0.38.orig.tar.gz...
-- Untarring the new sourcecode archive ../osmosis-0.38.tgz
Unpacking the debian/ directory from version 0.34+ds1-1 worked fine.
Remember: Your current directory is the OLD sourcearchive!
Do a "cd ../osmosis-0.38" to see the new package

Theoretisch könnte man jetzt schon das neue Paket bauen, allerdings gab es einige Veränderungen am Paket osmosis so das einige Patche im Verzeichniss debian/patches nicht mehr passen. Die Veränderungen sind divers, wir legen die Patche die wir benötigen einfach neu an. Zuvor muss man, wie von uupdate schon geschrieben, zuvor in das Verzeichniss der neuen Version wechseln.

user@pc~/debbuild/osmosis-0.34+ds1$ cd ../osmosis-0.38
user@pc~/debbuild/osmosis-0.38$ rm -rf debian/patches/*

Nun sind noch zwei Patche anzulegen. Fangen wir mit dem für plexus.conf an. Um den Patch dem Buildprozess bekannt zu machen wird </code>quilt</code> benutzt.

user@pc~/debbuild/osmosis-0.38$ quilt new 00-fix_plexus.patch
Der oberste Patch ist jetzt 00-fix_plexus.patch
user@pc~/debbuild/osmosis-0.38$ quilt add config/plexus.conf
Datei config/plexus.conf zu Patch 00-fix_plexus.patch hinzugefügt

Gepatcht wird nicht im klassischen Sinn, das patchen an sich nimmt uns </code>quilt</code> ab. Daher verändern wir nun einfach die Datei config/plexus.conf in der nötigen Art und Weise. Hier können wir es uns einfach machen und nehmen einfach die Datei aus den Source Paket der alten Debian Version 0.34 welche im Verzeichniss ../osmosis-0.34+ds1 liegt. Nach dem Kopieren muss man </code>quilt</code> noch mitteilen das man fertig ist mit dem Verändern (und optional einen Kommentar anlegen).

user@pc~/debbuild/osmosis-0.38$ cp ../osmosis-0.34+ds1/config/plexus.conf config/plexus.conf
user@pc~/debbuild/osmosis-0.38$ quilt refresh
Patch 00-fix_plexus.patch aktualisiert
user@pc~/debbuild/osmosis-0.38$ quilt header -e  # optional, nicht unbedingt nötig

Nun fehlt noch die Datei build.xml damit ant später die Datei osmosis.jar auch bauen kann. Dies ist ein Fehler in der Upstream Version denn wir aber dadurch ausgleichen können in dem wir wiederum uns aus dem Verzeichniss ../osmosis-0.34+ds1 bedienen. Wir kopieren die Datei build.xml von dort in das aktuelle Verzeichniss und müssen anschliesend noch kleine Veränderungen durchführen. Starten wir wieder mit der Generierung eines Patches.

user@pc~/debbuild/osmosis-0.38$ quilt new 02-fix_build.xml.patch
Der oberste Patch ist jetzt 02-fix_build.xml.patch
user@pc~/debbuild/osmosis-0.38$ quilt add build.xml
Datei build.xml zu Patch 02-fix_build.xml.patch hinzugefügt
user@pc~/debbuild/osmosis-0.38$ cp ../osmosis-0.34+ds1/build.xml .  # der . am Schluss ist wichtig!

Jetzt passen wir die Version in der Datei build.xml an. Danach kann der Patch abgeschlossen werden. Zusätzlich muss von Hand noch ein Verzeichniss src/ angelegt werden damit ant durchlaufen kann.

user@pc~/debbuild/osmosis-0.38$ sed -i -e "s/0.34/0.38/g" build.xml
user@pc~/debbuild/osmosis-0.38$ quilt refresh
Warning: trailing whitespace in lines 4,8,13,24,28,29,45,49,56,71,75,81,84,90,98,103,170,174,181,185,189,211,214 of build.xml

Patch debian-changes-0.38-1 aktualisiert

user@pc~/debbuild/osmosis-0.38$ quilt header -e  # wieder optional, nicht unbedingt nötig
user@pc~/debbuild/osmosis-0.38$ mkdir src

Als vorletzter Schritt muss nun noch das Changelog angepasst werden damit dpkg-buildpackage seinen Dienst aufnehmen kann. Abschliesend kann man dann endlich dpkg-buildpackage aufrufen.

user@pc~/debbuild/osmosis-0.38$ dch
# es öffnet sich der eingestellte Editor, meistens vi, passenden Eintrag ggfls. erweitern
user@pc~/debbuild/osmosis-0.38$ dpkg-buildpackage
dpkg-buildpackage: exportieren von CFLAGS aus dpkg-buildflags (Quelle: vendor): -g -O2
dpkg-buildpackage: exportieren von CPPFLAGS aus dpkg-buildflags (Quelle: vendor): 
dpkg-buildpackage: exportieren von CXXFLAGS aus dpkg-buildflags (Quelle: vendor): -g -O2
dpkg-buildpackage: exportieren von FFLAGS aus dpkg-buildflags (Quelle: vendor): -g -O2
...
dpkg-deb: Baue Paket »osmosis« in »../osmosis_0.38-1_all.deb«.
signfile osmosis_0.38-1.dsc
...
dpkg-buildpackage: Alles hochzuladen (Originalquellen enthalten)
dpkg-buildpackage: Warnung: .dsc- und .changes-Datei konnte nicht signiert werden  <--- ist für den lokalen Build irrelevant und kann ignoriert werden

Nun findet man im übergeordneten Verzeichniss das frisch gebaute Osmosis Paket welches sich mit dpkg -i installieren lässt.

user@pc~/debbuild/osmosis-0.38$ ls -la ../*.deb
-rw-r--r-- 1 user user 52608 12. Dez 14:36 ../osmosis_0.38-1_all.deb

Fertig!


Probleme beim Bauen

Hmmm? Hab das jetzt mal so probiert. Paket wurde erstellt. Beim Test erscheint:

vofiwg@kiste1: ~/osm$ osmosis --read-xml file="270410.osm" --write-xml file=test.osm
Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/classworlds/Launcher
Caused by: java.lang.ClassNotFoundException: org.codehaus.classworlds.Launcher
       at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
       at java.security.AccessController.doPrivileged(Native Method)
       at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
       at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: org.codehaus.classworlds.Launcher. Program will exit.

Hast Du eine Ahnung, was hier falsch läuft? Entschuldige bitte, dass ich hier in Deine Anleitung reinschreibe, aber wenn Du das schon auf der Disskussionsseite einstellst ... ;-) VoFiWG 19:52, 17 March 2011 (UTC)

Hiho,
uff das ist schon etwas länger her. Und das Java Zeugs mag ich nicht wirklich.
Hatte ich glaube auch den Fehler. Mit dem latest Paket lief es dann wohl durch.
Oder mit apt-cache mal suchen was da so in die Richtung geht.

apt-cache search classworlds
libclassworlds-java-doc - Documentation for the Classworlds Java library
libclassworlds-java - framework for container developers requiring manipulation of ClassLoaders   <--- ggfls. fehlt das hier
libplexus-classworlds-java-doc - API Documentation for plexus-classworlds
libplexus-classworlds-java - Class loading utilities for the Plexus framework

Osmosis aus SVN Tree bauen