RU:Creating a local OSM server under FreeBSD

From OpenStreetMap Wiki
Jump to navigation Jump to search

Описание шагов по созданию локального сервера OpenStreetMap на базе Rails_Port v3.* под управлением FreeBSD

Работы с ОС FreeBSD

Настраиваем ядро

options         SYSVSHM                 # совместно используемая память SysV
options         SHMMAXPGS=65536
options         SYSVSEM                 # семафоры SysV
options         SEMMNI=40               # максимальное количество наборов семафоров в системе
options         SEMUME=40
options         SEMMNS=240              # макс количество семафоров в системе
options         SEMMNU=120              # макс количество структур undo в системе
options         SYSVMSG                 # межпроцессорное взаимодействие SysV

Установка портов

Ruby 1.8.6 или выше
RubyGems 1.3.1 или выше
Postgres 8.3 или выше
ImageMagick

Настраиваем rc.conf

 postgresql_enable="YES"
 postgresql_data="path_to/pgsql/data"
 postgresql_flags="-w -s -m fast"
 postgresql_initdb_flags="--encoding=utf-8 --lc-collate=C"

Настраиваем login.conf:

postgres:\
        :lang=en_US.UTF-8:\
        :setenv=LC_COLLATE=C:\
        :tc=default:

запустить `cap_mkdb login.conf'

Получения текущего кода OpenStreetMap

# git clone git://git.openstreetmap.org/rails.git

Копируем и редактируем файлы конфигурации

# cd /path_to_rails_code
# cp config/example.application.yml config/application.yml
# cp config/example.database.yml config/database.yml 

Работы с Postgres

Установка дополнений

# cd /usr/ports/databases/posgresql84-contrib
# make 
# make install

Настраиваем postgresql.conf

 shared_buffers = 128MB
 checkpoint_segments = 20
 maintenance_work_mem = 256MB
 autovacuum = off

Создаем пользователя и базы postgres

# sudo -u pgsql -i
$createuser openstreetmap -s -P
$Enter password for new role:secret
$Enter it again:secret
$createdb -E UTF8 -O openstreetmap openstreetmap 
$createdb -E UTF8 -O openstreetmap osm_test
$createdb -E UTF8 -O openstreetmap osm
$psql -d openstreetmap < /usr/local/share/postgresql/contrib/btree_gist.sql

Настраиваем доступ к postgres в pg_hba.conf.

# "local" is for Unix domain socket connections only
local   openstreetmap         openstreetmap                               trust
local   all         all                               ident sameuser
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
host   openstreetmap         openstreetmap       192.168.0.0/24          trust
host    all         all         192.168.0.0/24          trust

Устанавливаем gem-библиотеки

gem-библиотеки, требуемые для кода ОСМ

# gem install bundler
# cd path_to_rails_code/
# bundle install

Примечание: Некоторые библиотеки потребовали задания дополнительный параметров или установки дополнительный портов
iconv

# gem install iconv -- --with-iconv-include=/usr/local/include

memached

# cd /usr/ports/databases/memached
# make  -with-sasl
# make install 
# gem install memcached

Дополнительные gem-библиотеки

# gem install passenger
Fetching: rake-0.9.2.2.gem (100%)
Fetching: fastthread-1.0.7.gem (100%)
Building native extensions.  This could take a while...
Fetching: daemon_controller-1.0.0.gem (100%)
Fetching: rack-1.4.1.gem (100%)
Fetching: passenger-3.0.13.gem (100%)

Итоговый список

# gem list --local

*** LOCAL GEMS ***

actionmailer (3.2.2)
actionpack (3.2.2)
activemodel (3.2.2)
activerecord (3.2.2)
activeresource (3.2.2)
activesupport (3.2.2)
addressable (2.2.7)
arel (3.0.2)
builder (3.0.0)
bundler (1.1.5, 1.1.4)
cocaine (0.2.1)
coffee-rails (3.2.2)
coffee-script (2.2.0)
coffee-script-source (1.2.0)
composite_primary_keys (5.0.1)
daemon_controller (1.0.0)
deadlock_retry (1.2.0)
dynamic_form (1.1.4)
erubis (2.7.0)
execjs (1.3.0)
faraday (0.7.6)
fastthread (1.0.7)
hike (1.2.1)
http_accept_language (1.0.2)
httpclient (2.2.4)
i18n (0.6.0)
iconv (0.1)
journey (1.0.3)
jquery-rails (2.0.1)
json (1.6.5)
libv8 (3.3.10.4)
libxml-ruby (2.2.2)
mail (2.4.1)
memcached (1.4.1)
mime-types (1.17.2)
multi_json (1.1.0)
multipart-post (1.1.5)
nokogiri (1.5.0)
oauth (0.4.6, 0.4.5)
oauth-plugin (0.4.0.rc2)
oauth2 (0.5.2)
open_id_authentication (1.1.0)
paperclip (2.7.0)
passenger (3.0.13)
pg (0.13.2)
polyglot (0.3.3)
rack (1.4.1)
rack-cache (1.1)
rack-openid (1.3.1)
rack-ssl (1.3.2)
rack-test (0.6.1)
rails (3.2.2)
rails-i18n (0.5.1)
railties (3.2.2)
rake (0.9.2.2)
rdoc (3.12)
rinku (1.5.1)
ruby-openid (2.1.8)
sanitize (2.0.3)
sass (3.1.15)
sass-rails (3.2.4)
sprockets (2.1.2)
SystemTimer (1.2.3)
therubyracer (0.9.10)
thor (0.14.6)
tilt (1.3.3)
timecop (0.3.5)
treetop (1.4.10)
tzinfo (0.3.31)
uglifier (1.2.3)
validates_email_format_of (1.5.3)

Работа с кодом OpenStreetMap

Подключение модуля libpgosm.so

# cd /path_to_rails_code/db/functions
# gmake
# sudo -u pgsql -i
$ psql openstreetmap
openstreetmap=# CREATE FUNCTION maptile_for_point(int8, int8, int4) RETURNS int4 AS '/data1/www/data/map/db/functions/libpgosm.so', 'maptile_for_point' LANGUAGE C STRICT;
openstreetmap=# CREATE FUNCTION tile_for_point(int4, int4) RETURNS int8 AS '/data1/www/data/map/db/functions/libpgosm.so', 'tile_for_point' LANGUAGE C STRICT;
$\q

Заполнение структуры базы и тест

# sudo -u pgsql -i
$ cd /path_to_rails_code
$ rake db:migrate
$ env RAILS_ENV=production rake db:migrate
$ rake test

Назначение администратора и модератора

$ /path_to_rails_code/script/rails console
irb(main):001:0> user = User.find_by_display_name("admin")
irb(main):001:0> user.roles.create({:role => "administrator", :granter_id => 1}, :without_protection => true)
irb(main):001:0> user.roles.create({:role => "moderator", :granter_id => 1}, :without_protection => true)
irb(main):004:0> user.save!

Установки Apache2

Компилируем модуль mod_passenger.so

# /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.13/bin/passenger-install-apache2-module

Создаем файл passenger.conf

apache22/Includes/passenger.conf

LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.7
PassengerRuby /usr/local/bin/ruby18

Создаем файл .htaccess

AddHandler fastcgi-script .fcgi
AddHandler cgi-script .cgi
Options +FollowSymLinks +ExecCGI
RewriteEngine On
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ public/dispatch.cgi [QSA,L]
ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"

Загрузка данных дампа планеты Planet.osm в базу

  • Проверка контрольной суммы.
# gmd5sum -c dump-planet.osm.bz2.md5 dump-planet.osm.bz2
  • Заполнение базы
# osmosis --read-xml-0.6 file="dump-planet.osm.bz2" --write-apidb-0.6 populateCurrentTables=yes host="localhost" database="openstreetmap" user="openstreetmap" password="secret" validateSchemaVersion=no

Примечание: Скачанный файл планеты записать в базу не удалось. Пришлось перезаписать его в файл соответствующий последней дате, указанной на сайте https://planet.openstreetmap.org/day-replicate/.

# bzcat dump-planet.osm.bz2 | osmosis --rri --simc --rx - --ac --wx - | bzip2 > planet-out.osm.bz2
# osmosis --read-xml-0.6 file="planet-out.osm.bz2" --write-apidb-0.6 populateCurrentTables=yes host="localhost" database="openstreetmap" user="openstreetmap" password="secret" validateSchemaVersion=no

Источники информации

Что еще почитать