2015-06-25 05:21:32 +03:00
# Install Nominatim in a virtual machine for development and testing
2018-03-09 17:03:10 +03:00
This document describes how you can install Nominatim inside a Ubuntu 16
2015-06-25 05:21:32 +03:00
virtual machine on your desktop/laptop (host machine). The goal is to give
you a development environment to easily edit code and run the test suite
without affecting the rest of your system.
2018-03-09 17:03:10 +03:00
The installation can run largely unsupervised. You should expect 1h from
2015-06-25 05:21:32 +03:00
start to finish depending on how fast your computer and download speed
is.
## Prerequisites
1. [Virtualbox ](https://www.virtualbox.org/wiki/Downloads )
2. [Vagrant ](https://www.vagrantup.com/downloads.html )
3. Nominatim
2017-03-12 15:06:25 +03:00
git clone --recursive https://github.com/openstreetmap/Nominatim.git
2015-06-25 05:21:32 +03:00
2018-03-14 18:12:39 +03:00
If you forgot `--recursive` , it you can later load the submodules using
2015-06-25 05:21:32 +03:00
git submodule init
git submodule update
## Installation
1. Start the virtual machine
2016-02-09 01:05:19 +03:00
vagrant up ubuntu
2015-06-25 05:21:32 +03:00
2. Log into the virtual machine
2016-02-09 01:05:19 +03:00
vagrant ssh ubuntu
2015-06-25 05:21:32 +03:00
3. Import a small country (Monaco)
See the FAQ how to skip this step and point Nominatim to an existing database.
2017-05-23 11:48:55 +03:00
```
# inside the virtual machine:
2022-03-23 16:32:03 +03:00
cd nominatim-project
wget --no-verbose --output-document=monaco.osm.pbf http://download.geofabrik.de/europe/monaco-latest.osm.pbf
nominatim import --osm-file monaco.osm.pbf 2>& 1 | tee monaco.$$.log
2017-05-23 11:48:55 +03:00
```
To repeat an import you'd need to delete the database first
2015-06-25 05:21:32 +03:00
2017-07-06 19:05:14 +03:00
dropdb --if-exists nominatim
2015-06-25 05:21:32 +03:00
## Development
Vagrant maps the virtual machine's port 8089 to your host machine. Thus you can
2022-07-20 17:05:25 +03:00
see Nominatim in action on [localhost:8089 ](http://localhost:8089/nominatim/ ).
2015-06-25 05:21:32 +03:00
You edit code on your host machine in any editor you like. There is no need to
restart any software: just refresh your browser window.
2018-03-09 17:03:10 +03:00
Note that the webserver uses files from the /build directory. If you change
2018-03-14 18:12:39 +03:00
files in Nominatim/website or Nominatim/utils for example you first need to
copy them into the /build directory by running the `cmake` step from the
installation.
2018-03-09 17:03:10 +03:00
2015-06-25 05:21:32 +03:00
PHP errors are written to `/var/log/apache2/error.log` .
With `echo` and `var_dump()` you write into the output (HTML/XML/JSON) when
you either add `&debug=1` to the URL (preferred) or set
`@define('CONST_Debug', true);` in `settings/local.php` .
2018-03-09 17:03:10 +03:00
In the Python BDD test you can use `logger.info()` for temporary debug
statements.
## Running unit tests
cd ~/Nominatim/tests/php
phpunit ./
2015-06-25 05:21:32 +03:00
2018-03-09 17:03:10 +03:00
## Running PHP code style tests
cd ~/Nominatim
phpcs --colors .
2015-06-25 05:21:32 +03:00
## Running functional tests
2018-03-18 04:13:42 +03:00
Tests in `test/bdd/db` and `test/bdd/osm2pgsql` have to pass 100%. Other
2015-06-25 05:21:32 +03:00
tests might require full planet-wide data. Sadly even if you have your own
planet-wide data there will be enough differences to the openstreetmap.org
installation to cause false positives in the other tests (see FAQ).
To run the full test suite
2018-03-09 17:03:10 +03:00
cd ~/Nominatim/test/bdd
behave -DBUILDDIR=/home/vagrant/build/ db osm2pgsql
2015-06-25 05:21:32 +03:00
To run a single file
2018-03-18 04:13:42 +03:00
behave -DBUILDDIR=/home/vagrant/build/ api/lookup/simple.feature
2018-03-14 18:12:39 +03:00
Or a single test by line number
2018-03-18 04:13:42 +03:00
behave -DBUILDDIR=/home/vagrant/build/ api/lookup/simple.feature:34
2015-06-25 05:21:32 +03:00
2018-03-14 18:12:39 +03:00
To run specific groups of tests you can add tags just before the `Scenario line` , e.g.
2015-06-25 05:21:32 +03:00
@bug -34
Scenario: address lookup for non-existing or invalid node, way, relation
and then
2018-03-09 17:03:10 +03:00
behave -DBUILDDIR=/home/vagrant/build/ --tags @bug -34
2015-06-25 05:21:32 +03:00
## FAQ
##### Will it run on Windows?
Yes, Vagrant and Virtualbox can be installed on MS Windows just fine. You need a 64bit
version of Windows.
##### Why Monaco, can I use another country?
Of course! The Monaco import takes less than 30 minutes and works with 2GB RAM.
##### Will the results be the same as those from nominatim.openstreetmap.org?
No. Long running Nominatim installations will differ once new import features (or
bug fixes) get added since those usually only get applied to new/changed data.
Also this document skips the optional Wikipedia data import which affects ranking
2020-04-19 01:42:24 +03:00
of search results. See [Nominatim installation ](https://nominatim.org/release-docs/latest/admin/Installation ) for details.
2015-06-25 05:21:32 +03:00
2018-03-09 17:03:10 +03:00
##### Why Ubuntu? Can I test CentOS/Fedora/CoreOS/FreeBSD?
2015-06-25 05:21:32 +03:00
2018-03-09 17:03:10 +03:00
There is a Vagrant script for CentOS available, but the Nominatim directory
isn't symlinked/mounted to the host which makes development trickier. We used
it mainly for debugging installation with SELinux.
In general Nominatim will run in the other environments. The installation steps
2015-06-25 05:21:32 +03:00
are slightly different, e.g. the name of the package manager, Apache2 package
name, location of files. We chose Ubuntu because that is closest to the
nominatim.openstreetmap.org production environment.
2018-03-09 17:03:10 +03:00
You can configure/download other Vagrant boxes from [https://app.vagrantup.com/boxes/search ](https://app.vagrantup.com/boxes/search ).
2015-06-25 05:21:32 +03:00
##### How can I connect to an existing database?
Let's say you have a Postgres database named `nominatim_it` on server `your-server.com` and port `5432` . The Postgres username is `postgres` . You can edit `settings/local.php` and point Nominatim to it.
2020-07-31 17:52:29 +03:00
pgsql:host=your-server.com;port=5432;user=postgres;dbname=nominatim_it
2015-06-25 05:21:32 +03:00
2020-07-31 17:52:29 +03:00
No data import or restarting necessary.
2015-06-25 05:21:32 +03:00
If the Postgres installation is behind a firewall, you can try
ssh -L 9999:localhost:5432 your-username@your-server.com
inside the virtual machine. It will map the port to `localhost:9999` and then
you edit `settings/local.php` with
2019-02-24 18:14:36 +03:00
@define ('CONST_Database_DSN', 'pgsql:host=localhost;port=9999;user=postgres;dbname=nominatim_it');
2015-06-25 05:21:32 +03:00
2015-08-23 01:08:40 +03:00
To access postgres directly remember to specify the hostname, e.g. `psql --host localhost --port 9999 nominatim_it`
2015-06-25 05:21:32 +03:00
##### My computer is slow and the import takes too long. Can I start the virtual machine "in the cloud"?
2018-03-09 17:03:10 +03:00
Yes. It's possible to start the virtual machine on [Amazon AWS (plugin) ](https://github.com/mitchellh/vagrant-aws )
or [DigitalOcean (plugin) ](https://github.com/smdahlen/vagrant-digitalocean ).
2015-06-25 05:21:32 +03:00