Ubuntu 14.04 Üzerinde Bir OSRM Sunucusu Kurulumu
Giriş
Günümüzün dijital dünyasında konum tabanlı hizmetler ve navigasyon uygulamaları vazgeçilmez bir hal almıştır. Haritalar üzerinde en hızlı rotayı bulma, dönüş talimatları sağlama veya belirli bir noktaya olan mesafeyi hesaplama gibi işlevler, günlük hayatımızın önemli bir parçasıdır. Bu tür ihtiyaçları karşılamak için birçok ticari API ve hizmet bulunsa da, açık kaynaklı çözümler hem maliyet etkinliği hem de esneklik açısından önemli avantajlar sunar. İşte tam da bu noktada Open Source Routing Machine (OSRM) devreye girer.
OSRM, büyük coğrafi veri kümeleri üzerinde son derece hızlı rota hesaplamaları yapabilen, yüksek performanslı bir yönlendirme motorudur. C++ ile yazılmış olup, OpenStreetMap (OSM) verilerini kullanarak saniyeler içinde karmaşık rotaları hesaplayabilir. Bu yeteneği sayesinde, web uygulamalarından mobil uygulamalara, lojistik planlamadan akıllı şehir projelerine kadar geniş bir kullanım alanına sahiptir. OSRM, özellikle çevrimdışı (offline) rota hesaplama yeteneği, özelleştirilebilir profil desteği (araç, bisiklet, yaya vb.) ve kendi sunucunuzda barındırma imkanı sunmasıyla öne çıkar. Ticari haritalama servislerinin kullanım limitleri veya maliyetleri sizin için bir engel teşkil ediyorsa, OSRM güçlü ve özgür bir alternatiftir.
Bu kapsamlı teknik makalede, Ubuntu 14.04 işletim sistemi üzerinde adım adım bir OSRM sunucusunun nasıl kurulacağını detaylı bir şekilde inceleyeceğiz. Ubuntu 14.04, eski bir sürüm olmasına rağmen, belirli senaryolarda hala kullanılmakta veya mevcut sistemlerin güncellenmesi yerine yeni bir kurulum gerektirebilmektedir. Bu nedenle, bu özel sürüm üzerindeki kurulum adımlarına odaklanacağız. Kurulumun temel gereksinimlerinden başlayarak, bağımlılıkların yüklenmesi, OSRM kaynak kodunun derlenmesi, OpenStreetMap verilerinin işlenmesi ve son olarak OSRM sunucusunun çalıştırılmasına kadar tüm süreci ele alacağız. Amacımız, bu rehberi takip eden herkesin kendi OSRM yönlendirme hizmetini başarıyla kurup çalıştırabilmesini sağlamaktır.
Ön Gereksinimler
OSRM sunucusunu kurmaya başlamadan önce, sisteminizin belirli gereksinimleri karşıladığından emin olmanız önemlidir. Bu gereksinimler, kurulum sürecinin sorunsuz ilerlemesi ve sunucunun optimum performansta çalışması için kritik öneme sahiptir.
Donanım Gereksinimleri
1. İşletim Sistemi: Ubuntu 14.04 (Trusty Tahr) sunucu sürümü. Bu rehber özellikle bu sürüme odaklanmaktadır. Temiz bir kurulum önerilir.
2. RAM (Bellek): OSRM, özellikle büyük coğrafi bölgelerin (örneğin, tüm Avrupa veya dünya) verilerini işlerken önemli miktarda belleğe ihtiyaç duyar.
* Küçük bir bölge (şehir veya küçük bir ülke) için en az 4-8 GB RAM yeterli olabilir.
* Orta büyüklükteki bölgeler (büyük bir ülke) için 16-32 GB RAM önerilir.
* Çok büyük bölgeler (kıta veya dünya) için 64 GB veya daha fazla RAM gerekebilir.
* Bellek yetersizliği, veri işleme aşamasında takılmalara veya hatalara yol açabilir.
3. Disk Alanı: OpenStreetMap verileri ve OSRM tarafından işlenmiş çıktı dosyaları oldukça büyük olabilir.
* İşlenecek OSM PBF dosyasının boyutunun en az 3-5 katı kadar boş disk alanı ayırmanız önerilir. Örneğin, 1 GB’lık bir PBF dosyası için 3-5 GB boş alana ihtiyacınız olacaktır.
* SSD sürücüler, veri işleme ve sorgu yanıt süreleri açısından HDD’lere göre çok daha iyi performans sunar.
4. İşlemci (CPU): Çok çekirdekli bir işlemci (4 veya daha fazla çekirdek) veri işleme süresini önemli ölçüde hızlandıracaktır. OSRM, derleme ve veri işleme aşamalarında çoklu çekirdek kullanımını destekler.
Yazılım Gereksinimleri ve Temel Bilgiler
1. İnternet Bağlantısı: Bağımlılıkları indirmek ve OSM verilerini çekmek için aktif bir internet bağlantısı gereklidir.
2. sudo Yetkileri: Kurulum adımlarının çoğu sistem genelinde değişiklikler yapmayı gerektireceğinden, kullanıcınızın sudo yetkilerine sahip olması gerekmektedir.
3. Temel Linux Komut Satırı Bilgisi: apt-get, cd, ls, wget, git gibi temel komutları kullanma becerisi gereklidir.
Bu gereksinimleri karşıladığınızdan emin olduktan sonra, kurulum sürecine geçebiliriz.
Sistem Güncellemesi ve Gerekli Araçların Kurulumu
OSRM’in derlenebilmesi ve çalışabilmesi için bir dizi yazılım bağımlılığına ihtiyaç vardır. Ubuntu 14.04 üzerinde bu bağımlılıkları yüklemek için apt-get paket yöneticisini kullanacağız. İlk adım olarak, sisteminizin paket listesini güncelleyip mevcut paketleri yükseltmek her zaman iyi bir uygulamadır.
Sistem Güncellemesi
Terminali açın ve aşağıdaki komutları çalıştırın:
sudo apt-get update
sudo apt-get upgrade -y
* sudo apt-get update: Bu komut, yerel paket listenizi Ubuntu’nun depolarındaki en son bilgilerle senkronize eder. Bu, hangi paketlerin mevcut olduğunu ve hangi sürümlerin yüklenebileceğini bilmek için gereklidir.
* sudo apt-get upgrade -y: Bu komut, sisteminizde yüklü olan tüm paketleri, update komutuyla güncellenen paket listesindeki daha yeni sürümlerine yükseltir. -y bayrağı, tüm sorulara otomatik olarak “evet” yanıtı vererek yükseltme işlemini etkileşimli olmadan tamamlar. Bu adım, güvenlik güncellemelerini ve kararlılık iyileştirmelerini içerdiği için önemlidir.
Derleme Araçları ve Bağımlılıkların Kurulumu
OSRM, C++ ile yazılmıştır ve kaynak kodundan derlenmesi gerekir. Bu nedenle, derleme ortamını ve OSRM’in ihtiyaç duyduğu çeşitli kütüphaneleri kurmamız gerekmektedir. Ubuntu 14.04 için gerekli paketler aşağıdaki gibidir:
sudo apt-get install -y \
build-essential \
git \
cmake \
pkg-config \
libboost-all-dev \
libtbb-dev \
liblua5.2-dev \
libstxxl-dev \
libxml2-dev \
libzip-dev \
libbz2-dev \
libosmpbf-dev \
liblz4-dev \
libjsoncpp-dev \
libprotobuf-dev \
protobuf-compiler \
libgeos-dev \
libspatialite-dev \
libluajit-5.1-dev \
libpng-dev \
libicu-dev \
libcurl4-openssl-dev
Bu komut, OSRM’in derlenmesi ve çalışması için gerekli olan tüm temel paketleri ve kütüphaneleri kuracaktır. Her bir paketin ne işe yaradığına kısaca değinelim:
* build-essential: C/C++ programlarını derlemek için gerekli olan GCC, G++ ve make gibi temel araçları içerir.
* git: OSRM kaynak kodunu GitHub deposundan çekmek için kullanılır.
* cmake: OSRM’in derleme sürecini yönetmek için kullanılan bir yapılandırma aracıdır.
* pkg-config: Derleme sırasında kütüphanelerin konumlarını ve derleme bayraklarını bulmaya yardımcı olur.
* libboost-all-dev: Boost C++ kütüphane koleksiyonunun geliştirme dosyalarıdır. OSRM, birçok Boost bileşenini kullanır (örneğin, dosya sistemi işlemleri, çoklu iş parçacığı). Ubuntu 14.04’te genellikle Boost 1.55 bulunur, bu da OSRM’in çoğu sürümü için yeterlidir.
* libtbb-dev: Intel Threading Building Blocks (TBB) kütüphanesinin geliştirme dosyalarıdır. Paralel programlama için kullanılır ve OSRM’in veri işleme hızını artırır.
* liblua5.2-dev: Lua betik dilinin 5.2 sürümünün geliştirme dosyalarıdır. OSRM, yönlendirme profillerini (araba, bisiklet vb.) tanımlamak için Lua betiklerini kullanır.
* libstxxl-dev: STXXL (Standard Template Library for Extra Large Data Sets) kütüphanesinin geliştirme dosyalarıdır. Disk tabanlı algoritmalar için kullanılır ve OSRM’in büyük veri kümeleriyle çalışmasını sağlar.
* libxml2-dev: XML belgelerini ayrıştırmak ve işlemek için kullanılan libxml2 kütüphanesinin geliştirme dosyalarıdır.
* libzip-dev: ZIP arşivleriyle çalışmak için kullanılan libzip kütüphanesinin geliştirme dosyalarıdır.
* libbz2-dev: Bzip2 sıkıştırma formatıyla çalışmak için kullanılan kütüphanenin geliştirme dosyalarıdır.
* libosmpbf-dev: OpenStreetMap PBF (Protocolbuffer Binary Format) dosyalarını ayrıştırmak için kullanılan kütüphanenin geliştirme dosyalarıdır. OSM verileri genellikle bu formatta dağıtılır.
* liblz4-dev: LZ4 sıkıştırma algoritması için kütüphanenin geliştirme dosyalarıdır.
* libjsoncpp-dev: JSON verilerini ayrıştırmak ve oluşturmak için kullanılan C++ kütüphanesinin geliştirme dosyalarıdır. OSRM API yanıtları genellikle JSON formatındadır.
* libprotobuf-dev ve protobuf-compiler: Google’ın Protocol Buffers kütüphanesi ve derleyicisidir. OSM PBF formatı Protocol Buffers üzerine kuruludur.
* libgeos-dev: GEOS (Geometry Engine – Open Source) kütüphanesinin geliştirme dosyalarıdır. Coğrafi geometrik işlemler için kullanılır.
* libspatialite-dev: SpatiaLite kütüphanesinin geliştirme dosyalarıdır. SQLite veritabanlarına uzamsal yetenekler ekler.
* libluajit-5.1-dev: LuaJIT (Just-In-Time Compiler for Lua) 5.1 sürümünün geliştirme dosyalarıdır. Lua betiklerinin performansını artırır.
* libpng-dev: PNG görüntü formatıyla çalışmak için kütüphanenin geliştirme dosyalarıdır.
* libicu-dev: International Components for Unicode (ICU) kütüphanesinin geliştirme dosyalarıdır. Uluslararasılaştırma ve yerelleştirme (örneğin, metin işleme) için kullanılır.
* libcurl4-openssl-dev: cURL kütüphanesinin geliştirme dosyalarıdır. HTTP istekleri yapmak için kullanılır, bazı OSRM bileşenleri veya eklentileri için gerekli olabilir.
Bu paketlerin kurulumu, sisteminizin internet bağlantısı hızına ve sunucunun performansına bağlı olarak biraz zaman alabilir. Kurulum tamamlandıktan sonra, OSRM kaynak kodunu indirmeye ve derlemeye hazır olacaksınız.
OSRM Kurulumu (Kaynak Koddan Derleme)
Gerekli tüm bağımlılıklar yüklendikten sonra, OSRM kaynak kodunu GitHub deposundan çekebilir ve derleme işlemine başlayabiliriz. Bu bölüm, OSRM’in ana bileşenlerini kendi sisteminizde oluşturma sürecini kapsar.
OSRM Kaynak Kodunu Çekme
Öncelikle, OSRM kaynak kodunu depodan klonlamanız gerekmektedir. Bunu yapmak için git komutunu kullanacağız. Kaynak kodu genellikle kullanıcının ana dizininde veya /opt gibi bir dizinde tutulur. Bu rehberde, kullanıcının ana dizinini kullanacağız.
cd ~
git clone --recursive https://github.com/Project-OSRM/osrm-backend.git
* cd ~: Komutu çalıştırdığınız dizini kullanıcınızın ana dizinine değiştirir.
* git clone --recursive https://github.com/Project-OSRM/osrm-backend.git: Bu komut, OSRM’in ana deposunu osrm-backend adında bir dizine klonlar. --recursive bayrağı çok önemlidir, çünkü OSRM, bazı bağımlılıklarını alt modüller (submodules) olarak yönetir. Bu bayrak olmadan, alt modüller indirilmez ve derleme başarısız olur.
Bu işlem, internet bağlantınızın hızına bağlı olarak birkaç dakika sürebilir.
Derleme Dizini Oluşturma ve Yapılandırma
Kaynak kodu indirdikten sonra, derleme için ayrı bir dizin oluşturmak iyi bir uygulamadır. Bu, derleme dosyalarını kaynak kodundan ayrı tutar ve temiz bir çalışma alanı sağlar.
cd osrm-backend
mkdir build
cd build
Şimdi cmake kullanarak derleme yapılandırmasını oluşturacağız. cmake komutu, sisteminizdeki kütüphanelerin konumlarını ve diğer derleme seçeneklerini algılar ve Makefile dosyalarını oluşturur.
cmake .. -DCMAKE_BUILD_TYPE=Release
* cmake ..: .. (iki nokta), cmake‘e bir üst dizindeki (yani osrm-backend dizinindeki) CMakeLists.txt dosyasını kullanmasını söyler. Bu dosya, OSRM’in derleme talimatlarını içerir.
* -DCMAKE_BUILD_TYPE=Release: Bu bayrak, derlemenin “Release” modunda yapılmasını sağlar. Release modu, hata ayıklama bilgilerini içermez ve performans için optimize edilmiş kod üretir. Bu, üretim ortamları için tercih edilen moddur.
cmake işlemi başarıyla tamamlandığında, derleme için gerekli olan Makefile dosyaları build dizininde oluşturulmuş olacaktır.
OSRM’i Derleme
Makefile dosyaları oluşturulduktan sonra, make komutunu kullanarak OSRM’i derleyebiliriz.
make -j$(nproc)
* make: Derleme işlemini başlatır.
* -j$(nproc): Bu bayrak, derleme işlemini sisteminizdeki çekirdek sayısı kadar paralel iş parçacığı kullanarak hızlandırır. $(nproc) komutu, sistemdeki mantıksal işlemci çekirdeği sayısını döndürür. Örneğin, 4 çekirdekli bir sistemde make -j4 gibi çalışacaktır. Bu, derleme süresini önemli ölçüde kısaltır.
Derleme işlemi, sisteminizin performansına ve RAM miktarına bağlı olarak 15 dakika ile 1 saat veya daha fazla sürebilir. Bu süreçte terminalde birçok derleme çıktısı göreceksiniz. Herhangi bir hata mesajı almadığınız sürece işlem doğru şekilde ilerliyor demektir.
Kurulum (İsteğe Bağlı)
Derleme tamamlandıktan sonra, OSRM ikili dosyalarını sistem genelinde erişilebilir bir konuma kurabilirsiniz. Bu adım isteğe bağlıdır ancak, OSRM araçlarını herhangi bir dizinden çalıştırabilmek için genellikle tavsiye edilir.
sudo make install
Bu komut, osrm-extract, osrm-partition, osrm-customize ve osrm-routed gibi OSRM yürütülebilir dosyalarını genellikle /usr/local/bin dizinine kopyalar. Bu dizin, PATH ortam değişkeninizde olduğu için, bu komutları tam yolunu belirtmeden doğrudan terminalden çalıştırabilirsiniz.
Bu adımları başarıyla tamamladıktan sonra, OSRM çekirdek motoru sisteminizde kurulmuş ve kullanıma hazır hale gelmiş demektir. Şimdi sıra, rota hesaplamaları için OpenStreetMap verilerini hazırlamaya geldi.
Veri Hazırlığı
OSRM’in rota hesaplamaları yapabilmesi için OpenStreetMap (OSM) verilerine ihtiyacı vardır. Bu veriler genellikle .osm.pbf formatında indirilir ve OSRM’in kendi iç formatına dönüştürülmesi gerekir. Bu süreç üç ana adımdan oluşur: veriyi indirme, profili seçme ve veriyi işleme (extract, partition, customize).
1. OpenStreetMap Verisini İndirme
OSM verilerini çeşitli kaynaklardan indirebilirsiniz. En popüler kaynaklardan bazıları şunlardır:
* Geofabrik: Dünyanın birçok ülkesi ve bölgesi için düzenli olarak güncellenen PBF dosyaları sunar. (http://download.geofabrik.de/)
* BBBike: Daha küçük şehirler veya özel bölgeler için özel kesitler oluşturmanıza olanak tanır. (https://extract.bbbike.org/)
Bu rehber için, Almanya’nın Baden-Württemberg eyaletinin küçük bir bölgesini kullanacağız. Bu, test amaçlı kurulumlar için hızlı ve yönetilebilir bir boyuttadır. Gerçek projeleriniz için ihtiyacınız olan bölgeyi indirmelisiniz.
cd ~
mkdir osrm-data
cd osrm-data
wget http://download.geofabrik.de/europe/germany/baden-wuerttemberg-latest.osm.pbf
* mkdir osrm-data: İndirilecek veri dosyaları için yeni bir dizin oluştururuz. Bu, çalışma alanınızı düzenli tutmanıza yardımcı olur.
* wget ...: Belirtilen URL’den PBF dosyasını indirir. İndirme süresi internet bağlantınızın hızına ve dosyanın boyutuna bağlı olacaktır.
2. Yönlendirme Profili Seçimi
OSRM, farklı ulaşım modları (araba, bisiklet, yaya vb.) için farklı yönlendirme kuralları ve hız profilleri kullanır. Bu kurallar, Lua betikleri şeklinde OSRM’in profiles dizininde bulunur.
Kaynak kodu klonladığınız osrm-backend dizininin içinde profiles adında bir dizin bulacaksınız. Bu dizin, car.lua, bike.lua, foot.lua gibi önceden tanımlanmış profilleri içerir.
* car.lua: Arabalar için varsayılan profildir. Yolların hız limitlerini, dönüş kısıtlamalarını ve diğer araç odaklı kuralları dikkate alır.
* bike.lua: Bisikletler için optimize edilmiştir, bisiklet yollarını ve bisiklet dostu rotaları tercih eder.
* foot.lua: Yayalar için optimize edilmiştir, yaya yollarını, parkları ve kısa mesafeli kestirmeleri kullanır.
Bu rehberde, car.lua profilini kullanarak araba rotaları hesaplayacağız.
3. Veriyi İşleme (Extract, Partition, Customize)
İndirilen PBF dosyasını OSRM’in kullanabileceği dahili formata dönüştürmek için üç aşamalı bir işlem gereklidir:
a. osrm-extract
Bu adım, ham OpenStreetMap verilerini (PBF dosyası) OSRM’in dahili, sıkıştırılmış ve yönlendirme için optimize edilmiş formatına dönüştürür. Bu format, .osrm uzantılı bir dosyadır. Bu aşamada, seçilen yönlendirme profili (örneğin car.lua) uygulanır.
cd ~/osrm-data
osrm-extract -p ~/osrm-backend/profiles/car.lua baden-wuerttemberg-latest.osm.pbf
* osrm-extract: OSRM’in veri çıkarma aracıdır.
* -p ~/osrm-backend/profiles/car.lua: Kullanılacak yönlendirme profilinin yolunu belirtir. Burada car.lua profilini kullanıyoruz.
* baden-wuerttemberg-latest.osm.pbf: İşlenecek OSM PBF dosyasının adıdır.
Bu işlem, PBF dosyasının boyutuna ve sisteminizin RAM/CPU performansına bağlı olarak zaman alabilir. Başarılı bir şekilde tamamlandığında, baden-wuerttemberg-latest.osrm gibi bir dosya seti oluşacaktır.
b. osrm-partition
osrm-partition aracı, çıkarılan grafı daha hızlı sorgular için mantıksal bölümlere (partitions) ayırır. Bu, özellikle büyük veri kümelerinde rota hesaplama hızını artırmak için kritik öneme sahiptir. OSRM, hiyerarşik bir yönlendirme yaklaşımı kullanır ve bu adım, bu hiyerarşinin ilk bölümünü oluşturur.
osrm-partition baden-wuerttemberg-latest.osrm
* osrm-partition: OSRM’in graf bölümleme aracıdır.
* baden-wuerttemberg-latest.osrm: osrm-extract tarafından oluşturulan ana OSRM veri dosyasıdır.
Bu adım da oldukça bellek yoğun olabilir. İşlem tamamlandığında, .osrm.hsgr, .osrm.ramIndex gibi ek dosyalar oluşturulacaktır.
c. osrm-customize
osrm-customize aracı, bölümlenmiş grafı daha da optimize eder ve yönlendirme profiline özgü ek verileri (örneğin, dönüş kısıtlamaları, ağırlıklar) uygular. Bu, son rota hesaplama performansını ve doğruluğunu doğrudan etkiler.
osrm-customize baden-wuerttemberg-latest.osrm
* osrm-customize: OSRM’in graf özelleştirme aracıdır.
* baden-wuerttemberg-latest.osrm: Yine ana OSRM veri dosyasıdır.
Bu işlem, .osrm.cell_metrics, .osrm.cnbg gibi daha fazla dosya oluşturacaktır. Üç adımın da başarıyla tamamlanmasıyla, OSRM sunucusunun kullanıma hazır hale getirilmesi için gerekli tüm veri dosyaları hazırlanmış olur. Artık OSRM sunucusunu başlatmaya geçebiliriz.
OSRM Sunucusunu Çalıştırma
Veri dosyaları hazırlandıktan sonra, OSRM sunucusunu (osrm-routed) başlatabilir ve rota sorgularını kabul etmeye başlayabiliriz. Sunucuyu çalıştırmanın birkaç yolu vardır; basit bir terminal komutundan başlayarak, üretim ortamları için daha sağlam çözümlere kadar.
Basit Bir Şekilde Sunucuyu Başlatma
Test amacıyla, sunucuyu doğrudan terminalden başlatabilirsiniz.
cd ~/osrm-data
osrm-routed baden-wuerttemberg-latest.osrm
* cd ~/osrm-data: Veri dosyalarının bulunduğu dizine geçiş yaparız.
* osrm-routed baden-wuerttemberg-latest.osrm: OSRM yönlendirme daemon’ını başlatır ve ona hangi OSRM veri setini kullanacağını söyler.
Sunucu varsayılan olarak 0.0.0.0:5000 adresinde dinlemeye başlayacaktır. Terminalde sunucunun başlatıldığına dair mesajları görmelisiniz. Sunucu bu şekilde çalışırken, terminal penceresini kapatırsanız sunucu da duracaktır.
Sunucuyu Test Etme
Sunucu çalışmaya başladıktan sonra, bir web tarayıcısı veya curl komutu kullanarak test edebilirsiniz. Varsayılan olarak, OSRM sunucusu http://localhost:5000 adresinde çalışır.
Web Tarayıcısı ile:
Eğer sunucuyu yerel makinenizde çalıştırıyorsanız, tarayıcınızda aşağıdaki adresi açın:
http://localhost:5000/route/v1/driving/8.0,48.5;8.1,48.6
(Bu koordinatlar Baden-Württemberg içindeki örnek noktalardır.)
Eğer sunucuyu uzak bir makinede çalıştırıyorsanız, localhost yerine sunucunuzun IP adresini veya alan adını kullanın:
http://SUNUCU_IP_ADRESİ:5000/route/v1/driving/8.0,48.5;8.1,48.6
curl Komutu ile:
Terminalde aşağıdaki komutu çalıştırın:
curl "http://localhost:5000/route/v1/driving/8.0,48.5;8.1,48.6"
Her iki durumda da, OSRM’den JSON formatında bir rota yanıtı almalısınız. Yanıt, rota bilgileri, mesafe, süre ve dönüş talimatları gibi detayları içerecektir.
Üretim Ortamı İçin: Upstart ile Sunucuyu Daemonize Etme (Ubuntu 14.04)
Üretim ortamında, sunucunun arka planda sürekli çalışması ve sistem yeniden başlatıldığında otomatik olarak başlaması istenir. Ubuntu 14.04, hizmet yönetimi için Upstart kullanır (daha yeni Ubuntu sürümleri systemd kullanır). Bir Upstart betiği oluşturarak OSRM sunucusunu bir hizmet olarak yönetebiliriz.
Öncelikle, OSRM verilerinizin ve yürütülebilir dosyalarınızın tam yollarını not edin. Örneğin:
* OSRM Veri Dosyası: /home/kullanici_adi/osrm-data/baden-wuerttemberg-latest.osrm
* osrm-routed yürütülebilir dosyası: /usr/local/bin/osrm-routed (eğer sudo make install kullandıysanız) veya /home/kullanici_adi/osrm-backend/build/osrm-routed (eğer kurmadıysanız).
Şimdi, /etc/init/osrm.conf adında yeni bir Upstart yapılandırma dosyası oluşturalım:
sudo nano /etc/init/osrm.conf
Dosyanın içine aşağıdaki içeriği yapıştırın ve kullanici_adi ile /home/kullanici_adi kısımlarını kendi sisteminize göre düzenleyin:
description "OSRM Routing Server"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
respawn limit 10 5
setuid kullanici_adi
setgid kullanici_adi
OSRM veri dosyalarının bulunduğu dizin
chdir /home/kullanici_adi/osrm-data
OSRM yürütülebilir dosyasının tam yolu ve veri dosyası
exec /usr/local/bin/osrm-routed baden-wuerttemberg-latest.osrm --ip 0.0.0.0 --port 5000
* description: Hizmetin kısa bir açıklaması.
* start on runlevel [2345]: Sunucunun çok kullanıcılı grafiksel olmayan (2) ve çok kullanıcılı grafiksel (3, 4, 5) runlevel’larda başlamasını sağlar.
* stop on runlevel [!2345]: Bu runlevel’ların dışına çıkıldığında (örneğin sistem kapanırken) hizmetin durmasını sağlar.
* respawn: Hizmet çökerse otomatik olarak yeniden başlatılmasını sağlar.
* respawn limit 10 5: 5 saniye içinde 10 kez çökerse yeniden başlatmayı durdurur.
* setuid ve setgid: Hizmetin belirtilen kullanıcı ve grup kimliğiyle çalışmasını sağlar. Bu, güvenlik için önemlidir; hizmeti root olarak çalıştırmaktan kaçınılmalıdır.
* chdir: OSRM’in veri dosyalarını bulabilmesi için çalışma dizinini belirtir.
* exec: Çalıştırılacak komutu belirtir. Burada osrm-routed komutunu ip ve port parametreleriyle birlikte kullanıyoruz. --ip 0.0.0.0 sunucunun tüm ağ arayüzlerinden erişilebilir olmasını sağlar.
Dosyayı kaydedip kapatın (Ctrl+O, Enter, Ctrl+X).
Şimdi hizmeti başlatabiliriz:
sudo service osrm start
Hizmetin durumunu kontrol etmek için:
sudo service osrm status
Sistem yeniden başlatıldığında OSRM sunucusu otomatik olarak başlayacaktır. Hizmeti durdurmak için sudo service osrm stop ve yeniden başlatmak için sudo service osrm restart komutlarını kullanabilirsiniz.
Güvenlik Duvarı Yapılandırması
Eğer sunucunuzda bir güvenlik duvarı (örneğin ufw) etkinse, OSRM’in dinlediği 5000 numaralı portu dışarıdan erişilebilir hale getirmeniz gerekebilir.
sudo ufw allow 5000/tcp
sudo ufw enable
Bu komutlar, 5000 numaralı TCP portundan gelen bağlantılara izin verir ve ufw güvenlik duvarını etkinleştirir (eğer etkin değilse).
Bu adımlarla, OSRM sunucunuz artık Ubuntu 14.04 üzerinde güvenli ve sürekli bir şekilde çalışmaya hazır olmalıdır.
Gelişmiş Yapılandırma ve Optimizasyon (Kısaca)
OSRM sunucunuzu temel düzeyde çalışır hale getirdikten sonra, performansını ve esnekliğini artırmak için bazı gelişmiş yapılandırma ve optimizasyon seçeneklerini göz önünde bulundurabilirsiniz.
1. Çoklu Harita veya Profil
Aynı sunucu üzerinde farklı coğrafi bölgeler veya farklı yönlendirme profilleri (araba, bisiklet, yaya) için hizmet vermek isteyebilirsiniz. Bunun için iki ana yaklaşım vardır:
* Farklı Portlarda Çalıştırma: Her OSRM veri seti veya profil için ayrı bir osrm-routed örneğini farklı bir portta çalıştırabilirsiniz (örn. osrm-routed europe.osrm --port 5000, osrm-routed us.osrm --port 5001).
* Ters Proxy ile Yönlendirme: Nginx gibi bir ters proxy (reverse proxy) kullanarak, farklı URL yollarını farklı OSRM arka uçlarına yönlendirebilirsiniz. Örneğin, /europe/route istekleri 5000 portundaki sunucuya, /us/route istekleri 5001 portundaki sunucuya gidebilir. Bu, istemciler için tek bir erişim noktası sağlar.
2. Nginx ile Ters Proxy ve Yük Dengeleme
Nginx, OSRM sunucunuzun önüne bir ters proxy olarak yerleştirilerek performansı, güvenliği ve ölçeklenebilirliği artırabilir.
* SSL/TLS Şifreleme: Nginx, OSRM trafiğini HTTPS üzerinden şifreleyebilir.
* Önbellekleme: Nginx, sık yapılan rota sorgularının yanıtlarını önbelleğe alarak OSRM üzerindeki yükü azaltabilir.
* Yük Dengeleme: Birden fazla OSRM sunucusu örneği çalıştırıyorsanız, Nginx gelen istekleri bu sunucular arasında dağıtarak yük dengelemesi yapabilir.
* API Anahtarları ve Hız Limitleme: Nginx, API anahtarı doğrulama veya istek hız limitleme gibi güvenlik ve kaynak yönetimi özelliklerini uygulayabilir.
Bir Nginx yapılandırma örneği (basit bir ters proxy için):
server {
listen 80;
server_name your_domain.com; # Veya sunucu IP adresi
location / {
proxy_pass http://localhost:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
3. Bellek Yönetimi ve Performans
OSRM, bellek yoğun bir uygulamadır. Özellikle veri işleme (osrm-extract, osrm-partition, osrm-customize) ve sunucu çalışma zamanı boyunca yüksek RAM kullanımı görülebilir.
* Takas Alanı (Swap Space): Yetersiz RAM durumunda, sistem takas alanını kullanmaya başlayabilir. Ancak disk tabanlı takas, performansı ciddi şekilde düşürür. Mümkünse, yeterli fiziksel RAM’e sahip olun.
* osrm-routed Parametreleri: osrm-routed komutu, bellek kullanımı ve performans üzerinde ince ayar yapmanızı sağlayan çeşitli parametrelere sahiptir. Örneğin, --max-threads ile sorgu işleme için kullanılacak iş parçacığı sayısını sınırlayabilirsiniz. osrm-routed --help komutunu kullanarak tüm seçenekleri görebilirsiniz.
* Veri Güncelleme Stratejileri: OSM verileri sürekli güncellenir. Sunucunuzdaki verileri düzenli olarak güncellemek isteyebilirsiniz. Bu genellikle yeni PBF dosyasını indirip tüm işleme adımlarını (extract, partition, customize) yeniden çalıştırmayı ve ardından sunucuyu yeni veri setiyle yeniden başlatmayı içerir. Bu işlemi kesinti süresini en aza indirmek için ayrı bir dizinde yapıp, tamamlandığında sunucuyu yeni verilere yönlendirebilirsiniz.
4. Loglama ve İzleme
OSRM sunucusunun düzgün çalıştığından emin olmak için loglarını izlemek önemlidir. Upstart betiği, çıktıyı varsayılan olarak /var/log/upstart/osrm.log gibi bir dosyaya yönlendirebilir. Bu logları düzenli olarak kontrol ederek olası sorunları erken teşhis edebilirsiniz. Ayrıca, sistem kaynaklarını (CPU, RAM, disk I/O) izlemek için htop, atop gibi araçları kullanmak, performans darboğazlarını belirlemenize yardımcı olur.
Bu gelişmiş konular, OSRM sunucunuzu bir üretim ortamında daha kararlı, verimli ve güvenli hale getirmek için önemlidir. İhtiyaçlarınıza göre bu seçenekleri keşfetmek, OSRM deneyiminizi optimize etmenize yardımcı olacaktır.
Sorun Giderme
OSRM kurulumu ve yapılandırması sırasında çeşitli sorunlarla karşılaşmak olasıdır. İşte sık karşılaşılan bazı sorunlar ve olası çözümleri:
1. Bağımlılık Hataları
* Sorun: cmake veya make komutları çalışırken “missing header file” (eksik başlık dosyası) veya “cannot find library” (kütüphane bulunamıyor) gibi hatalar alıyorsunuz.
* Çözüm: Bu genellikle gerekli geliştirme paketlerinin (-dev uzantılı olanlar) eksik olduğu anlamına gelir. “Sistem Güncellemesi ve Gerekli Araçların Kurulumu” bölümündeki tüm paketlerin doğru bir şekilde yüklendiğinden emin olun. Özellikle Ubuntu 14.04 gibi eski bir sürümde, bazı kütüphanelerin güncel sürümleri depolarda olmayabilir veya manuel olarak yüklenmesi gerekebilir.
2. Bellek Yetersizliği (Out of Memory)
* Sorun: osrm-extract, osrm-partition veya osrm-customize adımları sırasında “Out of memory” (bellek yetersizliği) hataları alıyorsunuz veya işlem takılıyor.
* Çözüm: Bu, OSRM’in işlediği veri boyutu için yeterli RAM’e sahip olmadığınız anlamına gelir.
* Daha küçük bir OSM veri dosyası (daha küçük bir bölge) ile deneyin.
* Sunucunuza daha fazla RAM ekleyin.
* Takas alanını (swap space) artırmayı düşünebilirsiniz, ancak bu performansı ciddi şekilde etkileyecektir ve yalnızca geçici bir çözüm olmalıdır.
3. Disk Alanı Yetersizliği
* Sorun: Veri işleme adımları sırasında “No space left on device” (cihazda boş alan kalmadı) hatası alıyorsunuz.
* Çözüm: İndirilen PBF dosyası ve OSRM tarafından oluşturulan çıktı dosyaları çok yer kaplayabilir.
* Diskinizde yeterli boş alan olduğundan emin olun (OSM PBF dosyasının en az 3-5 katı).
* Gereksiz dosyaları silerek yer açın.
* Daha büyük bir disk kullanın veya depolama alanınızı genişletin.
4. osrm-routed Başlamıyor veya Hata Veriyor
* Sorun: osrm-routed komutunu çalıştırdığınızda sunucu başlamıyor veya hemen kapanıyor, terminalde hata mesajları görüyorsunuz.
* Çözüm:
* Veri Dosyası Yolu: osrm-routed komutuna verdiğiniz .osrm dosyasının tam yolunun doğru olduğundan ve dosyanın gerçekten var olduğundan emin olun.
* Veri İşleme Başarısızlığı: osrm-extract, osrm-partition ve osrm-customize adımlarının her birinin başarıyla tamamlandığından emin olun. Bu adımlardan herhangi biri başarısız olursa, .osrm veri seti bozuk olabilir.
* Port Çakışması: Sunucunun dinlemeye çalıştığı 5000 numaralı portun başka bir uygulama tarafından kullanılıp kullanılmadığını kontrol edin (sudo netstat -tulpn | grep 5000). Eğer kullanılıyorsa, osrm-routed --port YENI_PORT ile farklı bir port kullanmayı deneyin.
* Logları Kontrol Etme: Eğer Upstart ile çalıştırıyorsanız, /var/log/upstart/osrm.log dosyasını kontrol edin. Doğrudan terminalden çalıştırdıysanız, terminal çıktısını dikkatlice inceleyin.
5. Rota Sorguları Yanıt Vermiyor
* Sorun: osrm-routed çalışıyor gibi görünüyor, ancak curl veya tarayıcı ile sorgu yaptığınızda yanıt alamıyorsunuz (bağlantı zaman aşımına uğruyor veya reddediliyor).
* Çözüm:
* Sunucu Durumu: osrm-routed‘ın gerçekten çalıştığından emin olun. sudo service osrm status (Upstart için) veya ps aux | grep osrm-routed komutlarını kullanabilirsiniz.
* Güvenlik Duvarı: Sunucunuzda bir güvenlik duvarı (ufw, iptables vb.) etkinse, 5000 numaralı porttan gelen bağlantılara izin verdiğinizden emin olun. (sudo ufw allow 5000/tcp).
* IP Adresi: osrm-routed komutunu --ip 0.0.0.0 parametresiyle başlattığınızdan emin olun. Aksi takdirde, yalnızca localhost üzerinden erişilebilir olabilir.
* Koordinatlar: Sorgunuzdaki coğrafi koordinatların, yüklediğiniz harita verisinin içinde yer aldığından emin olun. Harita dışındaki koordinatlar için rota bulunamaz.
6. Derleme Sırasında Hatalar
* Sorun: make komutu sırasında derleme hataları alıyorsunuz.
* Çözüm:
* --recursive: git clone komutunu --recursive bayrağı ile kullandığınızdan ve tüm alt modüllerin indirildiğinden emin olun.
* Güncel Kod: Bazen GitHub’daki master dalı anlık olarak kararsız olabilir. Daha eski, bilinen kararlı bir sürümü (tag) kontrol edip derlemeyi deneyebilirsiniz. git checkout v5.22.0 gibi.
* Derleme Ortamı: build-essential ve diğer derleme araçlarının düzgün çalıştığından emin olun.
Bu sorun giderme ipuçları, OSRM kurulumunuzla ilgili çoğu yaygın sorunu çözmenize yardımcı olmalıdır. Her zaman log dosyalarını kontrol etmek ve hata mesajlarını dikkatlice okumak, sorunun kök nedenini bulmak için en iyi yaklaşımdır.
Sonuç
Bu kapsamlı teknik makalede, Ubuntu 14.04 işletim sistemi üzerinde bir Open Source Routing Machine (OSRM) sunucusunun baştan sona nasıl kurulacağını detaylı bir şekilde inceledik. Modern navigasyon ve konum tabanlı hizmetlerin temelini oluşturan hızlı ve verimli rota hesaplamalarının önemine vurgu yaparak başladık ve OSRM’in bu alandaki güçlü ve esnek bir açık kaynak çözümü olduğunu belirttik.
Kurulum sürecini adım adım ele alarak, öncelikle sunucunuzun donanım ve yazılım gereksinimlerini belirledik. Yeterli RAM ve disk alanının yanı sıra, Ubuntu 14.04 üzerinde gerekli tüm derleme araçlarını ve kütüphane bağımlılıklarını apt-get kullanarak nasıl kuracağınızı gösterdik. Bu bağımlılıklar, OSRM’in C++ kaynak kodundan başarılı bir şekilde derlenmesi için kritik öneme sahipti.
Ardından, OSRM kaynak kodunu GitHub’dan --recursive bayrağı ile klonlamanın, cmake ile derleme yapılandırmasını oluşturmanın ve make -j$(nproc) komutuyla OSRM’i sisteminize nasıl derleyeceğinizi detaylandırdık. Bu adımlar, osrm-extract, osrm-partition, osrm-customize ve osrm-routed gibi temel OSRM araçlarını kullanılabilir hale getirdi.
Makalenin önemli bir bölümü, OpenStreetMap verilerinin hazırlanmasına ayrıldı. Geofabrik gibi kaynaklardan .osm.pbf formatında veri indirmenin, car.lua gibi bir yönlendirme profili seçmenin ve bu ham veriyi OSRM’in dahili formatına dönüştürmek için osrm-extract, osrm-partition ve osrm-customize araçlarını kullanmanın inceliklerini açıkladık. Bu üç aşamalı veri işleme süreci, hızlı ve doğru rota hesaplamaları için vazgeçilmezdir.
Son olarak, hazırlanan veri setiyle OSRM sunucusunu (osrm-routed) nasıl başlatacağınızı gösterdik. Basit bir terminal komutundan başlayarak, Ubuntu 14.04’ün Upstart hizmet yöneticisiyle sunucuyu arka planda sürekli çalışacak bir hizmet olarak yapılandırmanın adımlarını sunduk. Ayrıca, güvenlik duvarı ayarlarını ve Nginx gibi bir ters proxy kullanarak performansı ve güvenliği artırma gibi gelişmiş yapılandırma ve optimizasyon ipuçlarına da değindik. Karşılaşılabilecek olası sorunlar için kapsamlı bir sorun giderme bölümü de ekleyerek, kullanıcıların yaygın hataları kendi başlarına çözmelerine yardımcı olmayı amaçladık.
Bu rehberi takip ederek, artık kendi özel OSRM yönlendirme sunucunuzu Ubuntu 14.04 üzerinde kurmuş ve çalışır hale getirmiş olmalısınız. Kendi verilerinizle, kendi kurallarınızla ve kendi sunucunuzda çalışan bir yönlendirme motoruna sahip olmak, size büyük bir esneklik ve kontrol sağlar. Bu kurulum, web uygulamalarınız, mobil projeleriniz veya lojistik ihtiyaçlarınız için güçlü ve maliyet etkin bir temel oluşturacaktır. OSRM’in sunduğu olanakları keşfetmeye devam edin ve konum tabanlı hizmetlerinizi bir sonraki seviyeye taşıyın!
