QMapShack v Linux Mint

screen155QMapShack je nástupcem skvělého mapového programu QLandkarte. Zkompilovaná verze je k dispozici zatím jen pro Windows, na Linuxu si musíme binárku zkompilovat sami. Naštěstí to není nic moc složitého. Potřebujeme k tomu jen pár vývojářských balíčků. A protože je aplikace stále v celkem čilém vývoji, bude možná lepší, když si ji nainstalujeme z přímo z vývojářského repozitáře, abychom měli k dispozici vždy tu nejnovější verzi. Například v posledních dvou dnech autor přidal na žádost jednoho z uživatelů drag&drop funkcionalitu. Kdo by se spokojil jen s jednorázovou instalací, vynechá balíčky g++mercurial.

Jediným problémem v Mintu je ten, že standardní součástí distribuce je Cmake ve verzi 2.8, kdežto pro zkompilování potřebujeme minimálně verzi 3. Proto si nejdříve přidáme repozitář s aktuální verzí a zaktualizujeme seznam SW:

sudo add-apt-repository ppa:george-edison55/cmake-3.x
sudo apt-get update

Pokud používáme LMDE, kde nejsou k dispozici PPA, stačí, když si stáhneme aktuální verzi z cmake.org a nainstalujeme třeba pomocí sh skriptu.

Pro kompilaci QMapShack budeme potřebovat Qt5, GDAL a PROJ4 a také poslední verzi Routino. Proto se doporučuje nainstalovat následující balíčky:

sudo apt-get installgraphicsmagick graphicsmagick-libmagick-dev-compat cmake cmake-curses-gui gdal-bin libgdal-dev libgdal1h python-gdal libproj-dev build-essential qttools5-dev-tools qttools5-dev qttools5-private-dev qt5-default libqt5webkit5-dev qtscript5-dev checkinstall mercurial subversion libapache2-svn gcc make libc6-dev libz-dev libbz2-dev libgraphics-magick-perl

Tím bychom měli mít všechny závislosti splněné a můžeme se pustiti do instalace Routina, které, stejně jako QMapShack budeme instalovat z nejčerstvějších zdrojáků. Já udržuji všechny aplikace instalované mimo repozitáře v adresáři ~/compile, takže zde budu pracovat s adresářem ~/compile/QMapShack. Routino nejprve stáhneme, zkompilujeme a vytvoříme instalační balíček, který také vzápětí nainstalujeme:

cd ~/compile/QMapShack
svn co http://routino.org/svn/trunk routino
cd routino
make
sudo checkinstall -D --pkgname=routino --pkgversion=3.0 --arch amd64 --backup=no
cd

Vše by mělo jít bez problémů a přistoupíme k instalaci vlastního QMapShack. Přepneme se do pracovního adresáře, pomocí Mercury stáhneme poslední verzi z větve serverdaten. Vytvoříme pracovní adresář pro kompilaci (mkdir build_QMapShack) a přepneme se do něj. Poté příkazem ccmake ho zkompilujeme - v prostředí Cmake nejprve klávesou "c" spustíme konfiguraci a po jejím dokončení spustíme generování souborů klávesou "g". Po dokončení konfigurace spustíme vlastní kompilaci pomocí příkazu make a půjdeme si udělat kávu. Na mém starouškovi T61 s dual core procesorem trvá kompilace asi půl hodinky, na T420 s i5 a SSD diskem asi 10 minut. Po jejím dokončení už aplikaci jen buď nainstalujeme příkazem sudo make install, nebo, stejně jako v případě Routina vytvoříme instalační balíček a nainstalujeme. 

cd ~/compile/QMapShack
hg clone https://bitbucket.org/maproom/qmapshack serverdaten
mkdir build_QMapShack
cd build_QMapShack
ccmake ../serverdaten -Wno-dev
make
sudo checkinstall -D --pkgname=qmapshack --pkgversion=1.3.1 --arch amd64 --backup=no
cd

Pokud by se při konfiguraci vyskytly nějaké problémy, je k dispozici nápověda. Osobně mi při zjišťování v jakém balíčku se ta která potřebná komponenta nachází hodně pomohl apt-file. Pokud ho dosud v systému nemáte, nainstalujete ho pomocí sudo apt-get install apt-file a následně musíte aktualizovat databázi sudo apt-file update dotazy na chybějící balíčky potom provádíme zadáním například apt-file search Qt5LinguistToolsConfig.cmake

QMapShack
QMapShack

Pokud bychom nechtěli "bleeding edge" verzi a spokojili se s poslední stabilní verzí, nahradíme "serverdaten" řetezcem "QMapShack". V případě, že autor vydá novou verzi nebo jen patch, tak se v terminálu přepneme do adresáře ~/compile/QMapShack/serverdaten a zadáme hg pull && hg update default. Až se nám soubory zaktualizují, potom už jen z adresáře /build_QMapShack spustíme pouze makesudo checkinstall -D --pkgname=qmapshack --pkgversion=1.1.0 --arch amd64 --backup=no nebo make install. A samozřejmě budeme muset aktualizovat i Routino. Tím je instalace hotová a QMapShack je připraven k používání.

Na některých systémech se může stát, že ani v případě, že instalace proběhla bez chyb nejde aplikace spustit, protože nemůže najít soubory Routina. V takovém případě se v mailing listu vyskytla rada zkopírovat některé knihovny Routina ručně.

sudo mkdir /usr/share/routino
sudo cp /usr/local/share/routino/* /usr/share/routino/
cd ~/compile/QMapShack/routino/src/
sudo cp libroutino.so /usr/lib/
sudo cp libroutino.so.0 /usr/lib/
cd

Obě aplikace lze aktualizovat i automaticky, pomocí skriptu, osobně jsem nezkoušel:

#!/bin/sh
# Script-Name: ./qms_update.sh
# variable
datum=$(date +"%Y-%m-%d")
# ***************************************************
# Update aus folgenden Ordner ~/QMapShack/serverdaten
cd ~/QMapShack/serverdaten
hg pull
# jetzt Benutzereingabe ob exit oder weiter
echo "Wenn keine geänderten Daten gefunden wurden kann man nun das Update beenden"
echo "Update Beenden $(tput bold)$(tput setaf 1)Ja (j)$(tput sgr0) oder $(tput bold)$(tput setaf 4)Nein (n)$(tput sgr0) eingeben:"
# Eingabe auswerten
read answer
echo "$(tput bold)$(tput setaf 4)Ihre Antwort war:$(tput sgr0)$(tput bold)$(tput setaf 2) $answer $(tput sgr0)"
case $answer in
n*|N*) hg update
# wenn neue Daten da dann in den Ordner cd build_QMapShack wechseln und mit
cd ~/QMapShack/build_QMapShack
make
# ein neues Paket bauen, ins System dann wieder mit
sudo checkinstall -D --pkgname=qmapshack --pkgversion=$datum --arch amd64 --backup=no
echo "$(tput bold)$(tput setaf 1)Update abgeschlossen$(tput sgr0)"
echo "$(tput bold)$(tput setaf 4)ENDE mit ENTER$(tput sgr0)"
read ENDE
exit 0;;
# ***************************************************
j*|J*|y*|Y*) echo "Update beendet!"
echo "$(tput bold)$(tput setaf 4)ENDE mit ENTER$(tput sgr0)"
read ENDE
exit 0;;
*) echo "Falsche Eingabe, Update wird abgebrochen"
echo "Fehler mussen eventuell von Hand beseitigt werden";;
esac
echo "$(tput bold)$(tput setaf 4)ENDE mit ENTER$(tput sgr0)"
read ENDE
exit 0

Zdroj skriptu a příprava a instalace DEB balíčku převzaty ze stránky http://altersachse.de/50-linux/qms/mint.php.