#
#-----------------------------------------------------------------------------
-cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
endif()
if (BUILD_OSM2PGSQL)
- install(TARGETS osm2pgsql RUNTIME DESTINATION ${NOMINATIM_LIBDIR})
+ if (${CMAKE_VERSION} VERSION_LESS 3.13)
+ # Installation of subdirectory targets was only introduced in 3.13.
+ # So just copy the osm2pgsql file for older versions.
+ install(PROGRAMS ${PROJECT_BINARY_DIR}/osm2pgsql/osm2pgsql
+ DESTINATION ${NOMINATIM_LIBDIR})
+ else()
+ install(TARGETS osm2pgsql RUNTIME DESTINATION ${NOMINATIM_LIBDIR})
+ endif()
endif()
if (BUILD_MODULE)
def set_status(conn, date, seq=None, indexed=True):
- """ Replace the current status with the given status.
+ """ Replace the current status with the given status. If date is `None`
+ then only sequence and indexed will be updated as given. Otherwise
+ the whole status is replaced.
"""
- assert date.tzinfo == dt.timezone.utc
+ assert date is None or date.tzinfo == dt.timezone.utc
with conn.cursor() as cur:
- cur.execute("TRUNCATE TABLE import_status")
- cur.execute("""INSERT INTO import_status (lastimportdate, sequence_id, indexed)
- VALUES (%s, %s, %s)""", (date, seq, indexed))
+ if date is None:
+ cur.execute("UPDATE import_status set sequence_id = %s, indexed = %s",
+ (seq, indexed))
+ else:
+ cur.execute("TRUNCATE TABLE import_status")
+ cur.execute("""INSERT INTO import_status (lastimportdate, sequence_id, indexed)
+ VALUES (%s, %s, %s)""", (date, seq, indexed))
conn.commit()
# Write the current status to the file
endstate = repl.get_state_info(endseq)
- status.set_status(conn, endstate.timestamp, seq=endseq, indexed=False)
+ status.set_status(conn, endstate.timestamp if endstate else None,
+ seq=endseq, indexed=False)
return UpdateState.UP_TO_DATE
assert 1 == temp_db_cursor.scalar("SELECT count(*) FROM import_status")
-
date = dt.datetime.fromordinal(1000100).replace(tzinfo=dt.timezone.utc)
nominatim.db.status.set_status(temp_db_conn, date=date, seq=456, indexed=False)
assert temp_db_cursor.fetchone() == [date, 456, False]
+def test_set_status_missing_date(status_table, temp_db_conn, temp_db_cursor):
+ date = dt.datetime.fromordinal(1000000).replace(tzinfo=dt.timezone.utc)
+ nominatim.db.status.set_status(temp_db_conn, date=date)
+
+ assert 1 == temp_db_cursor.scalar("SELECT count(*) FROM import_status")
+
+ nominatim.db.status.set_status(temp_db_conn, date=None, seq=456, indexed=False)
+
+ temp_db_cursor.execute("SELECT * FROM import_status")
+
+ assert temp_db_cursor.rowcount == 1
+ assert temp_db_cursor.fetchone() == [date, 456, False]
+
+
def test_get_status_empty_table(status_table, temp_db_conn):
assert nominatim.db.status.get_status(temp_db_conn) == (None, None, None)
sudo -u postgres createuser -s $USERNAME
sudo -u postgres createuser apache
-#
-# Setting up the Apache Webserver
-# -------------------------------
-#
-# You need to create an alias to the website directory in your apache
-# configuration. Add a separate nominatim configuration to your webserver:
-
-#DOCS:```sh
-sudo tee /etc/httpd/conf.d/nominatim.conf << EOFAPACHECONF
-<Directory "$USERHOME/build/website">
- Options FollowSymLinks MultiViews
- AddType text/html .php
- DirectoryIndex search.php
- Require all granted
-</Directory>
-
-Alias /nominatim $USERHOME/build/website
-EOFAPACHECONF
-#DOCS:```
-
-sudo sed -i 's:#.*::' /etc/httpd/conf.d/nominatim.conf #DOCS:
-
-#
-# Then reload apache
-#
-
- sudo systemctl enable httpd
- sudo systemctl restart httpd
-
-
#
# Installing Nominatim
# ====================
# then configure and build Nominatim in there:
#DOCS: :::sh
- cd $USERHOME
- mkdir build
- cd build
+ mkdir $USERHOME/build
+ cd $USERHOME/build
cmake $USERHOME/Nominatim
make
+ sudo make install
+
+#
+# Setting up the Apache Webserver
+# -------------------------------
+#
+# The webserver should serve the php scripts from the website directory of your
+# [project directory](../admin/import.md#creating-the-project-directory).
+# Therefore set up a project directory and populate the website directory:
+#
+ mkdir $USERHOME/nominatim-project
+ cd $USERHOME/nominatim-project
+ nominatim refresh --website
+#
+# You need to create an alias to the website directory in your apache
+# configuration. Add a separate nominatim configuration to your webserver:
+
+#DOCS:```sh
+sudo tee /etc/httpd/conf.d/nominatim.conf << EOFAPACHECONF
+<Directory "$USERHOME/nominatim-project/website">
+ Options FollowSymLinks MultiViews
+ AddType text/html .php
+ DirectoryIndex search.php
+ Require all granted
+</Directory>
+
+Alias /nominatim $USERHOME/nominatim-project/website
+EOFAPACHECONF
+#DOCS:```
+
+sudo sed -i 's:#.*::' /etc/httpd/conf.d/nominatim.conf #DOCS:
+
+#
+# Then reload apache
+#
+
+ sudo systemctl enable httpd
+ sudo systemctl restart httpd
#
# Adding SELinux Security Settings
# with a web server accessible from the Internet. At a minimum the
# following SELinux labeling should be done for Nominatim:
- sudo semanage fcontext -a -t httpd_sys_content_t "$USERHOME/Nominatim/(website|lib|settings)(/.*)?"
- sudo semanage fcontext -a -t httpd_sys_content_t "$USERHOME/build/(website|lib|settings)(/.*)?"
- sudo semanage fcontext -a -t lib_t "$USERHOME/build/module/nominatim.so"
- sudo restorecon -R -v $USERHOME/Nominatim
- sudo restorecon -R -v $USERHOME/build
+ sudo semanage fcontext -a -t httpd_sys_content_t "/usr/local/nominatim/lib/lib-php(/.*)?"
+ sudo semanage fcontext -a -t httpd_sys_content_t "$USERHOME/nominatim-project/website(/.*)?"
+ sudo semanage fcontext -a -t lib_t "$USERHOME/nominatim-project/module/nominatim.so"
+ sudo restorecon -R -v /usr/local/lib/nominatim
+ sudo restorecon -R -v $USERHOME/nominatim-project
# You need to create a minimal configuration file that tells nominatim
sudo -u postgres createuser -s $USERNAME
sudo -u postgres createuser apache
-#
-# Setting up the Apache Webserver
-# -------------------------------
-#
-# You need to create an alias to the website directory in your apache
-# configuration. Add a separate nominatim configuration to your webserver:
-
-#DOCS:```sh
-sudo tee /etc/httpd/conf.d/nominatim.conf << EOFAPACHECONF
-<Directory "$USERHOME/build/website">
- Options FollowSymLinks MultiViews
- AddType text/html .php
- DirectoryIndex search.php
- Require all granted
-</Directory>
-
-Alias /nominatim $USERHOME/build/website
-EOFAPACHECONF
-#DOCS:```
-
-sudo sed -i 's:#.*::' /etc/httpd/conf.d/nominatim.conf #DOCS:
-
-#
-# Then reload apache
-#
-
- sudo systemctl enable httpd
- sudo systemctl restart httpd
-
-
#
# Installing Nominatim
# ====================
# then configure and build Nominatim in there:
#DOCS: :::sh
- cd $USERHOME
- mkdir build
- cd build
+ mkdir $USERHOME/build
+ cd $USERHOME/build
cmake $USERHOME/Nominatim
make
+ sudo make install
+
+#
+# Setting up the Apache Webserver
+# -------------------------------
+#
+# The webserver should serve the php scripts from the website directory of your
+# [project directory](../admin/import.md#creating-the-project-directory).
+# Therefore set up a project directory and populate the website directory:
+#
+ mkdir $USERHOME/nominatim-project
+ cd $USERHOME/nominatim-project
+ nominatim refresh --website
+#
+# You need to create an alias to the website directory in your apache
+# configuration. Add a separate nominatim configuration to your webserver:
+
+#DOCS:```sh
+sudo tee /etc/httpd/conf.d/nominatim.conf << EOFAPACHECONF
+<Directory "$USERHOME/nominatim-project/website">
+ Options FollowSymLinks MultiViews
+ AddType text/html .php
+ DirectoryIndex search.php
+ Require all granted
+</Directory>
+
+Alias /nominatim $USERHOME/nominatim-project/website
+EOFAPACHECONF
+#DOCS:```
+
+sudo sed -i 's:#.*::' /etc/httpd/conf.d/nominatim.conf #DOCS:
+
+#
+# Then reload apache
+#
+
+ sudo systemctl enable httpd
+ sudo systemctl restart httpd
#
# Adding SELinux Security Settings
# with a web server accessible from the Internet. At a minimum the
# following SELinux labeling should be done for Nominatim:
- sudo semanage fcontext -a -t httpd_sys_content_t "$USERHOME/Nominatim/(website|lib|settings)(/.*)?"
- sudo semanage fcontext -a -t httpd_sys_content_t "$USERHOME/build/(website|lib|settings)(/.*)?"
- sudo semanage fcontext -a -t lib_t "$USERHOME/build/module/nominatim.so"
- sudo restorecon -R -v $USERHOME/Nominatim
- sudo restorecon -R -v $USERHOME/build
+ sudo semanage fcontext -a -t httpd_sys_content_t "/usr/local/nominatim/lib/lib-php(/.*)?"
+ sudo semanage fcontext -a -t httpd_sys_content_t "$USERHOME/nominatim-project/website(/.*)?"
+ sudo semanage fcontext -a -t lib_t "$USERHOME/nominatim-project/module/nominatim.so"
+ sudo restorecon -R -v /usr/local/lib/nominatim
+ sudo restorecon -R -v $USERHOME/nominatim-project
# You need to create a minimal configuration file that tells nominatim
libbz2-dev libpq-dev libproj-dev \
postgresql-server-dev-10 postgresql-10-postgis-2.4 \
postgresql-contrib-10 postgresql-10-postgis-scripts \
- php php-pgsql php-intl python3-dotenv \
+ php php-pgsql php-intl python3-pip \
python3-psycopg2 git
+# The python-dotenv package that comes with Ubuntu 18.04 is too old, so
+# install the latest version from pip:
+
+ pip3 install python-dotenv
#
# System Configuration
# The code must be built in a separate directory. Create this directory,
# then configure and build Nominatim in there:
- cd $USERHOME
- mkdir build
- cd build
+ mkdir $USERHOME/build
+ cd $USERHOME/build
cmake $USERHOME/Nominatim
make
+ sudo make install
# Nominatim is now ready to use. You can continue with
# Setting up a webserver
# ======================
#
+# The webserver should serve the php scripts from the website directory of your
+# [project directory](../admin/import.md#creating-the-project-directory).
+# Therefore set up a project directory and populate the website directory:
+
+ mkdir $USERHOME/nominatim-project
+ cd $USERHOME/nominatim-project
+ nominatim refresh --website
+#
# Option 1: Using Apache
# ----------------------
#
#DOCS:```sh
sudo tee /etc/apache2/conf-available/nominatim.conf << EOFAPACHECONF
-<Directory "$USERHOME/build/website">
+<Directory "$USERHOME/nominatim-project/website">
Options FollowSymLinks MultiViews
AddType text/html .php
DirectoryIndex search.php
Require all granted
</Directory>
-Alias /nominatim $USERHOME/build/website
+Alias /nominatim $USERHOME/nominatim-project/website
EOFAPACHECONF
#DOCS:```
listen 80 default_server;
listen [::]:80 default_server;
- root $USERHOME/build/website;
+ root $USERHOME/nominatim-project/website;
index search.php index.html;
location / {
try_files \$uri \$uri/ @php;
# The code must be built in a separate directory. Create this directory,
# then configure and build Nominatim in there:
- cd $USERHOME
- mkdir build
- cd build
+ mkdir $USERHOME/build
+ cd $USERHOME/build
cmake $USERHOME/Nominatim
make
+ sudo make install
# Nominatim is now ready to use. You can continue with
# [importing a database from OSM data](../admin/Import.md). If you want to set up
#
# Setting up a webserver
# ======================
+#
+# The webserver should serve the php scripts from the website directory of your
+# [project directory](../admin/import.md#creating-the-project-directory).
+# Therefore set up a project directory and populate the website directory:
+
+ mkdir $USERHOME/nominatim-project
+ cd $USERHOME/nominatim-project
+ nominatim refresh --website
+
#
# Option 1: Using Apache
# ----------------------
#DOCS:```sh
sudo tee /etc/apache2/conf-available/nominatim.conf << EOFAPACHECONF
-<Directory "$USERHOME/build/website">
+<Directory "$USERHOME/nominatim-project/website">
Options FollowSymLinks MultiViews
AddType text/html .php
DirectoryIndex search.php
Require all granted
</Directory>
-Alias /nominatim $USERHOME/build/website
+Alias /nominatim $USERHOME/nominatim-project/website
EOFAPACHECONF
#DOCS:```
listen 80 default_server;
listen [::]:80 default_server;
- root $USERHOME/build/website;
+ root $USERHOME/nominatim-project/website;
index search.php index.html;
location / {
try_files \$uri \$uri/ @php;