COMMAND ln -sf ${PROJECT_SOURCE_DIR}/website/${wp} ${PROJECT_BINARY_DIR}/website/
)
endforeach()
+
+ add_custom_target(serve
+ php -S 127.0.0.1:8088
+ WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/website
+ )
endif()
#-----------------------------------------------------------------------------
## Verification and further setup
-Instructions for import verification and other details like importing Wikidata can be found in [import and update page](Import-and-Update.md)
+Instructions for import verification and other details like importing Wikidata can be found in the [import section](Import.md)
If the reported rank is 26 or higher, you can also safely add `--index-noanalyse`.
+### PostgreSQL crashed "invalid page in block"
+
+Usually serious problem, can be a hardware issue, not all data written to disc
+for example. Check PostgreSQL log file and search PostgreSQL issues/mailing
+list for hints.
+
+If it happened during index creation you can try rerunning the step with
+
+```sh
+./utils/setup.php --create-search-indices --ignore-errors
+```
+
+Otherwise it's best to start the full setup from the beginning.
+
+
### PHP "open_basedir restriction in effect" warnings
PHP Warning: file_get_contents(): open_basedir restriction in effect.
again once you are done with the PHP command line operations.
-### PHP timzeone warnings
+### PHP timezeone warnings
The Apache log may contain lots of PHP warnings like this:
`PHP Warning: date_default_timezone_set() function.`
The PostgreSQL database, i.e. user `postgres`, needs to have access to that file.
-The permission need to be read & executable by everybody, e.g.
+The permission need to be read & executable by everybody, but not writeable
+by everybody, e.g.
```
-rwxr-xr-x 1 nominatim nominatim 297984 build/module/nominatim.so
When running SELinux, make sure that the
[context is set up correctly](../appendix/Install-on-Centos-7/#adding-selinux-security-settings).
+When you recently updated your operating system, updated PostgreSQL to
+a new version or moved files (e.g. the build directory) you should
+recreate `nominatim.so`. Try
+
+```
+ cd build
+ rm -r module/
+ cmake $main_Nominatim_path && make
+```
+
### Setup.php fails with "DB Error: extension not found"
Make sure you have the PostgreSQL extensions "hstore" and "postgis" installed.
-# Importing and Updating the Database
+# Importing the Database
The following instructions explain how to create a Nominatim database
from an OSM planet file and how to keep the database up to date. It
```
-## Updates
-
-There are many different ways to update your Nominatim database.
-The following section describes how to keep it up-to-date with Pyosmium.
-For a list of other methods see the output of `./utils/update.php --help`.
-
-!!! warning
- If you have configured a flatnode file for the import, then you
- need to keep this flatnode file around for updates as well.
-
-#### Installing the newest version of Pyosmium
-
-It is recommended to install Pyosmium via pip. Make sure to use python3.
-Run (as the same user who will later run the updates):
-
-```sh
-pip3 install --user osmium
-```
-
-Nominatim needs a tool called `pyosmium-get-updates` which comes with
-Pyosmium. You need to tell Nominatim where to find it. Add the
-following line to your `settings/local.php`:
-
- @define('CONST_Pyosmium_Binary', '/home/user/.local/bin/pyosmium-get-changes');
-
-The path above is fine if you used the `--user` parameter with pip.
-Replace `user` with your user name.
-
-#### Setting up the update process
-
-Next the update needs to be initialised. By default Nominatim is configured
-to update using the global minutely diffs.
-
-If you want a different update source you will need to add some settings
-to `settings/local.php`. For example, to use the daily country extracts
-diffs for Ireland from Geofabrik add the following:
-
- // base URL of the replication service
- @define('CONST_Replication_Url', 'https://download.geofabrik.de/europe/ireland-and-northern-ireland-updates');
- // How often upstream publishes diffs
- @define('CONST_Replication_Update_Interval', '86400');
- // How long to sleep if no update found yet
- @define('CONST_Replication_Recheck_Interval', '900');
-
-To set up the update process now run the following command:
-
- ./utils/update.php --init-updates
-
-It outputs the date where updates will start. Recheck that this date is
-what you expect.
-
-The `--init-updates` command needs to be rerun whenever the replication service
-is changed.
-
-#### Updating Nominatim
-
-The following command will keep your database constantly up to date:
-
- ./utils/update.php --import-osmosis-all
-
-(Note that even though the old name "import-osmosis-all" has been kept for
-compatibility reasons, Osmosis is not required to run this - it uses pyosmium
-behind the scenes.)
-
-If you have imported multiple country extracts and want to keep them
-up-to-date, [Advanced installations section](Advanced-Installations.md) contains instructions
-to set up and update multiple country extracts.
at `http://localhost/`.
-Now continue with [importing the database](Import-and-Update.md).
+Now continue with [importing the database](Import.md).
--- /dev/null
+# Updating the Database
+
+There are many different ways to update your Nominatim database.
+The following section describes how to keep it up-to-date with Pyosmium.
+For a list of other methods see the output of `./utils/update.php --help`.
+
+!!! warning
+ If you have configured a flatnode file for the import, then you
+ need to keep this flatnode file around for updates as well.
+
+#### Installing the newest version of Pyosmium
+
+It is recommended to install Pyosmium via pip. Make sure to use python3.
+Run (as the same user who will later run the updates):
+
+```sh
+pip3 install --user osmium
+```
+
+Nominatim needs a tool called `pyosmium-get-changes` which comes with
+Pyosmium. You need to tell Nominatim where to find it. Add the
+following line to your `settings/local.php`:
+
+ @define('CONST_Pyosmium_Binary', '/home/user/.local/bin/pyosmium-get-changes');
+
+The path above is fine if you used the `--user` parameter with pip.
+Replace `user` with your user name.
+
+#### Setting up the update process
+
+Next the update needs to be initialised. By default Nominatim is configured
+to update using the global minutely diffs.
+
+If you want a different update source you will need to add some settings
+to `settings/local.php`. For example, to use the daily country extracts
+diffs for Ireland from Geofabrik add the following:
+
+ // base URL of the replication service
+ @define('CONST_Replication_Url', 'https://download.geofabrik.de/europe/ireland-and-northern-ireland-updates');
+ // How often upstream publishes diffs
+ @define('CONST_Replication_Update_Interval', '86400');
+ // How long to sleep if no update found yet
+ @define('CONST_Replication_Recheck_Interval', '900');
+
+To set up the update process now run the following command:
+
+ ./utils/update.php --init-updates
+
+It outputs the date where updates will start. Recheck that this date is
+what you expect.
+
+The `--init-updates` command needs to be rerun whenever the replication service
+is changed.
+
+#### Updating Nominatim
+
+The following command will keep your database constantly up to date:
+
+ ./utils/update.php --import-osmosis-all
+
+(Note that even though the old name "import-osmosis-all" has been kept for
+compatibility reasons, Osmosis is not required to run this - it uses pyosmium
+behind the scenes.)
+
+If you have imported multiple country extracts and want to keep them
+up-to-date, [Advanced installations section](Advanced-Installations.md) contains instructions
+to set up and update multiple country extracts.
pip3 install --user mkdocs
```
+If `mkdocs` can't be found after the installation, the $PATH might have not
+been set correctly yet. Try opening a new terminal session.
+
Then go to the build directory and run
--- /dev/null
+# Setup Test Environment
+
+To test changes and contribute to Nominatim you should be able to run
+the test suite(s). For many usecases it's enough to create a Vagrant
+virtual machine (see `VAGRANT.md`), import one small country into the
+database.
+
+## Prerequisites
+
+Nominatim supports a range of PHP versions and PHPUnit versions also
+move fast. We try to test against the newest stable PHP release and
+PHPUnit version even though we expect many Nominatim users will install
+older version on their production servers.
+
+#### Ubuntu 20
+
+ sudo apt-get install -y phpunit php-codesniffer php-cgi
+ pip3 install --user behave nose
+
+#### Ubuntu 18
+
+ pip3 install --user behave nose
+
+ sudo apt-get install -y composer php-cgi php-cli php-mbstring php-xml zip unzip
+
+ composer global require "squizlabs/php_codesniffer=*"
+ sudo ln -s ~/.config/composer/vendor/bin/phpcs /usr/bin/
+
+ composer global require "phpunit/phpunit=8.*"
+ sudo ln -s ~/.config/composer/vendor/bin/phpunit /usr/bin/
+
+
+#### CentOS 7 or 8
+
+ sudo dnf install -y php-dom php-mbstring
+ pip3 install --user behave nose
+
+ composer global require "squizlabs/php_codesniffer=*"
+ sudo ln -s ~/.config/composer/vendor/bin/phpcs /usr/bin/
+
+ composer global require "phpunit/phpunit=^7"
+ sudo ln -s ~/.config/composer/vendor/bin/phpunit /usr/bin/
+
+## Run tests, code linter, code coverage
+
+See `README.md` in `test` subdirectory.
- 'FAQ': 'api/Faq.md'
- 'Administration Guide':
- 'Basic Installation': 'admin/Installation.md'
- - 'Importing and Updating' : 'admin/Import-and-Update.md'
+ - 'Importing' : 'admin/Import.md'
+ - 'Updating' : 'admin/Update.md'
- 'Nominatim UI' : 'admin/Setup-Nominatim-UI.md'
- 'Advanced Installations' : 'admin/Advanced-Installations.md'
- 'Migration from older Versions' : 'admin/Migration.md'
- 'OSM Data Import' : 'develop/Import.md'
- 'Place Ranking' : 'develop/Ranking.md'
- 'Postcodes' : 'develop/Postcodes.md'
+ - 'Setup Test Environment' : 'develop/Setup.md'
- 'Documentation' : 'develop/Documentation.md'
- 'External Data Sources':
- 'Overview' : 'data-sources/overview.md'
$print_fail();
echo <<< END
Hints:
- * Rerun the setup.php --create-search-indices step
+ * Run './utils/setup.php --create-search-indices --ignore-errors' to
+ create missing indices.
END;
exit(1);
pip3 install --user psycopg2 pytidylib
-# If you want to run the test suite, you need to install the following
-# additional packages:
-
-#DOCS: :::sh
- sudo yum install -y php-dom php-mbstring
- pip3 install --user behave nose
-
- composer global require "squizlabs/php_codesniffer=*"
- sudo ln -s ~/.config/composer/vendor/bin/phpcs /usr/bin/
-
- composer global require "phpunit/phpunit=7.*"
- sudo ln -s ~/.config/composer/vendor/bin/phpunit /usr/bin/
#
# System Configuration
# Nominatim is now ready to use. Continue with
-# [importing a database from OSM data](../admin/Import-and-Update.md).
+# [importing a database from OSM data](../admin/Import.md).
pip3 install --user psycopg2 pytidylib
-# If you want to run the test suite, you need to install the following
-# additional packages:
-
-#DOCS: :::sh
- sudo dnf install -y php-dom php-mbstring
- pip3 install --user behave nose
-
- composer global require "squizlabs/php_codesniffer=*"
- sudo ln -s ~/.config/composer/vendor/bin/phpcs /usr/bin/
-
- composer global require "phpunit/phpunit=^7"
- sudo ln -s ~/.config/composer/vendor/bin/phpunit /usr/bin/
#
# System Configuration
# Nominatim is now ready to use. Continue with
-# [importing a database from OSM data](../admin/Import-and-Update.md).
+# [importing a database from OSM data](../admin/Import.md).
php-intl python3-setuptools python3-dev python3-pip \
python3-psycopg2 python3-tidylib git
-# If you want to run the test suite, you need to install the following
-# additional packages including the PHP package manager composer:
-
- pip3 install --user behave nose
-
- sudo apt-get install -y composer php-cgi php-cli php-mbstring php-xml zip unzip
-
- composer global require "squizlabs/php_codesniffer=*"
- sudo ln -s ~/.config/composer/vendor/bin/phpcs /usr/bin/
-
- composer global require "phpunit/phpunit=8.*"
- sudo ln -s ~/.config/composer/vendor/bin/phpunit /usr/bin/
#
# System Configuration
# Nominatim is now ready to use. Continue with
-# [importing a database from OSM data](../admin/Import-and-Update.md).
+# [importing a database from OSM data](../admin/Import.md).
php-intl python3-setuptools python3-dev python3-pip \
python3-psycopg2 python3-tidylib git
-# If you want to run the test suite, you need to install the following
-# additional packages:
-
- sudo apt-get install -y phpunit php-codesniffer php-cgi
-
- pip3 install --user behave nose
#
# System Configuration
# ====================
# Nominatim is now ready to use. Continue with
-# [importing a database from OSM data](../admin/Import-and-Update.md).
+# [importing a database from OSM data](../admin/Import.md).