2012. november 3., szombat

Virtualizált Ubuntu Server 12.10 hálózati csatolóinak újrakonfigurálása új gép hozzárendelésekor

Elkövettem azt a hibát, hogy a virtuális gépek kezelőfelületén töröltem a gép beállításait, majd egy újat létrehozva a megmaradt lemezképhez létrehozva egy újat indítottam el a gépet. Nagy meglepetés ért: több, mint 1 perces boot idő az eddig megszokott 10-20 másodperc helyett, majd a rendszer kiírta, hogy szokatlanul sokat vár a hálózati csatolók inicializálására.

A rendszerbe belépvén az első dolgom az ifconfig parancs kiadása volt, ám a kapott eredmény nem az volt, amire számítottam: csupán a Local Loopback látszott, az eddig működő két hálózati csatolónak (eth0 - NAT, eth1 - "Host only" csatoló) semmi nyoma.

Ezt követően az ifconfig -a parancs kiadására megkaptam a választ: az eth0 és eth1 továbbra is hiányzott, viszont lett egy eth2 és eth3. Ekkor esett le, hogy a virtuális gépkezelő minden újonnan hozzáadott hálózati csatolóhoz véletlenszerűen generál MAC címet, így a gép indításakor az előző két eszközt nem találta, a 2 új címmel rendelkező kártyát pedig új hardverként hozzáadta a rendszerhez.

Egy kis keresgélés után megtaláltam a megoldást: Nyissuk meg kedvenc szerkesztőnkkel a /etc/udev/rules.d/70-persistent-net.rules nevű állományt.
 sudo nano /etc/udev/rules.d/70-persistent-net.rules

Ezt követően valami hasonló kell fogadjon minket:

Látható, hogy 4 eszköz van bejegyezve, pedig a gép csak kettővel rendelkezik.

A megoldás pedig egyszerű:
Töröljük az első két bejegyezést, majd a második kettőt nevezzük át az első kettő nevére (eth0 és eth1), ezáltal a többi hálózati beállást nem szükséges újra írnunk. Mentünk és indítsuk újra a gépet.
(Megjegyzés: A mellékelt képen a sorok hosszúsága miatt nem látható, de a soron tovább haladva megtalálható  az adott csatolóhoz tartozó NAME="eth2" bejegyzés is, amit módosítani kell.)

Ha mindent jól csináltunk, akkor a rendszerbe való belépés, majd az ifconfig parancs kiadása után a virtuális gép létrehozása előtti, jól működő állapotot kell találnunk.


2012. október 24., szerda

Útvonaltervező adatbázis létrehozása PostGIS + pgrouting segítségével

Az előző bejegyzésben bemutattam, hogyan is lehet az alapokból felhúzni egy PostGIS bővítménnyel ellátott PostgreSQL szervert Linuxon.

Most szeretném megmutatni, hogyan is tudjuk felvértezni ezt az adatbázist útvonalkereső és utazóügynök probéma megoldó képességekkel:

Elsőként telepítsük a pgrouting fordításhoz szükséges eszközöket:
apt-get install sudo apt-get install build-essential cmake postgresql-server-dev-9.1
sudo apt-get install libboost-graph-dev
sudo apt-get install libcgal*
Szükségünk lesz továbbá a GAUL (Genetic Algorithm Utility Library) könyvtárra is:
wget http://sourceforge.net/projects/gaul/files/gaul-devel/0.1850-0/gaul-devel-0.1850-0.tar.gz/download
tar -zxvf gaul-devel-0.1850-0.tar.gz
cd gaul-devel-0.1850-0
./configure --disable-slang
make 
Ha az előzőek sikeresen megvoltak, foglalkozhatunk ténylegesen a pgrouting fordításával.
wget http://download.osgeo.org/pgrouting/source/pgrouting-1.05.tar.gz
tar -zxvf pgRouting-1.05.tgz
cd pgrouting/
cmake -DWITH_TSP=on
Ezen a ponton a fordító hibába ütközik, nem talál bizonyos header fájlokat, így ezeket kézzel kell megadnunk neki. A bejegyzés írásakor összesen 3 módosításra volt szükség:
Érintett fájl: .core/src/shooting_star_boost_wrapper.cpp Cseréljük ezt a sort:
#include 
Erre:
#include 
Érintett fájl: .core/src/edge_visitors.cpp Cseréljük ezt a sort:
#include 
Erre:
#include 
És ezt a sort:
#include 

Erre:
#include 

Ezt követően fordítsuk újra, majd telepítsük is:
cmake -DWITH_TSP=on
make
sudo make install
Ha minden jól megy, már csak létre kell hoznunk egy, az útvonaltervezési adatbázisok alapjául szolgáló template adatbázist:
createdb -U dbsuperuser -h 127.0.0.1 -W -E UNICODE -T template_postgis template_routing
cd /usr/share/postlbs
psql -U dbuser -h 127.0.0.1 -W template_routing < routing_core.sql
psql -U dbuser -h 127.0.0.1 -W template_routing < routing_core_wrappers.sql
psql -U dbuser -h 127.0.0.1 -W template_routing < routing_topology.sql
psql -U dbuser -h 127.0.0.1 -W template_routing < routing_tsp.sql
psql -U dbuser -h 127.0.0.1 -W template_routing < routing_tsp_wrappers.sql

Feltöltés adatokkal


Ahhoz, hogy mintaadatokkal tölthessük fel adatbázisunkat, két dologra lesz szükségünk: egyrészt mintaadatokra, másrészt az ezeket adatbázisba töltő programra. Mintaadatoknak az Openstreetmap adatbázisát javaslom, az alábbiakban is ennek használatát mutatom be: osm2pgrouting letöltése és kitömörítése:
wget https://github.com/pgRouting/osm2pgrouting/zipball/master -O osm2pgrouting.zip
unzip osm2pgrouting.zip
Lépjünk az újonnan létrehozott könyvtárba, telepítsük a szükséges library-t majd fordítsuk le az alkalmazást:
sudo apt-get install libexpat1-dev
make
A mintaadatokat az Openstreetmap-ről tölthetjük le:
wget http://download.geofabrik.de/openstreetmap/europe/hungary.osm.bz2 -O hungary.osm.bz2
sudo apt-get install bzip2
bunzip2 hungary.osm.bz2
Mindezek után már csak annyi a dolgunk, hogy létrehozzunk egy új adatbázist és a lefordított programmal feltöltsük azt adatokkal (a letöltött adatok és gépünk teljesítményétől függően ez elég hosszú folyamat lehet):
createdb -U user -h 127.0.0.1 -W -E UNICODE -T template_routing hun_routing
./osm2pgrouting -file hungary.osm -conf mapconfig.xml -dbname hun_routing -user pguser -passwd ~jelszó~ -clean
(megjegyzés: Ha egy már meglévő adatbázison futtatjuk ezt a parancsot, készüljünk rá, hogy a -clean kapcsoló miatt annak tartalmát eldobja/felülírja). 

Ha ez lefutott, akkor kész vagyunk és rendelkezünk egy útvonaltervezésre alkalmas adatbázissal. A későbbiekben bemutatom, hogyan is lehet ezeket az új funkciókat a gyakorlatban is használni egy példaalkalmazáson keresztül. Aki türelmetlen, annak pedig egy kis útmutató az SQL lekérdezésekhez: LINK

FONTOS:  Jelenleg az adatok importálásánál a pgrouting nem veszi figyelembe az egyes utakra vonatkozó korlátozásokat, amely főleg az egyirányú utaknál lehet fontos. A későbbiekben részletesebben foglalkozok a problémával.

2012. október 23., kedd

PostgreSQL + PostGIS telepítése az alapoktól

Ezen bejegyzéssel szeretnék egy magyar nyelvű útmutatót és egy működő megoldást mutatni mindazok számára, akiket érdekel a térinformatika, de nem tudják, a gyakorlatban hogyan is induljanak el, elvesztek a neten fellelhető sokféle, sokszor elavult útmutató között vagy csak nehézségeik adódtak az angollal.
Az alábbi leírást egy frissen telepített Ubuntu Server 12.10 x64-en készítettem.
Figyelem: A szerver virtuális gépként lett létrehozva, melynek célja szigorúan az adatbázis kiszolgálása, grafikus felület nem került telepítésre. A telepítés menete természetesen azonos egy teljes értékűen telepített Ubuntu Serveren (vagy desktopon) is.

Felhasznált szoftverek:

  • Ubuntu Server 12.10 x64
  • PostgreSQL
  • PostGIS

Telepítés:

Adatbáziskezelő (PostgreSQL) és PostGIS bővítmény telepítése:
sudo apt-get install postgresql-9.1 postgresql-9.1-postgis
Ezt követően hozzunk létre egy felhasználót az adatbázisban:
sudo su -l postgres
createuser -E -P -s pguser
~jelszó megadása~
exit

PostgreSQL külső hozzáférhetőségének megnyitása:
(Opcionális, átugorható ha nem akarunk más gépről csatlakozni az adatbázishoz)


1. A /etc/postgresql/9.1/main/pg_hba.conf fájlhoz adjuk hozzá az alábbi sort:
host  all  pguser  192.168.56.1/32  md5
Ezáltal engedélyeztük a pguser nevű felhasználó számára a VirtualBox alapértelmezett hálózati csatoló címének (192.168.56.1) hozzáférhetőségét. (Ha bármilyen hosztról szeretnénk megtenni, írjunk all-t konkrét cím helyett.)
2. Ezen túl az adatbázis beállításainál szükséges beállítani azt is, hogy milyen kapcsolatokat figyeljen. Ezt a /etc/postgresql/9.1/main/postgresql.conf fájlban kell megtennünk egy sor beszúrásával. Keressük meg a
#listen-addresses 'localhost'
sort és cseréljük ki erre:
listen_addresses '*'
Ezt követően indítsuk újra a postgres daemon-t:
sudo service postgres restart

PostGIS template létrehozása:

createdb -U pguser -h 127.0.0.1 -W -E UTF-8 template_postgis
createlang -U pguser -h 127.0.0.1 -W -d template_postgis plpgsql
cd /usr/share/postgresql/9.1/contrib/postgis-1.5/
psql -U pguser -h 127.0.0.1 -W template_postgis < postgis.sql
psql -U pguser -h 127.0.0.1 -W template_postgis < spatial_ref_sys.sql

Ha eddig eljutottunk, az azt jelenti, hogy van egy alap template-ünk, amelyből kiindulva létrehozhatjuk saját térinformatikai adatbázisainkat a PostGIS képességeivel felvértezve.
A következő bejegyzésben megnézzük, hogyan lehet a most felépített adatbázisra útvonaltervezési funkciókat létrehozni...