RU:Creating a local OSM server under FreeBSD

From OpenStreetMap Wiki
Jump to navigation Jump to search

trash bin

Было предложение о удалении этой страницы либо замену на перенаправление. Обсуждение изменений: на этой странице.
Заявленная причина: This guide has not been updated for 10 years. It is questionable whether it helps more or it hides more helpful, different sources. See also the discussion on the English talk page. --Nakaner (talk) 13:52, 29 October 2025 (UTC).

Описание шагов по созданию локального сервера 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

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

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