
2020年にラズパイ4に建てたもの(18.04LTS , 20.04LTS)の最新盤です。今回はラズパイ5を使います。
環境構築は22.04LTS の場合はサボってて分かりませんが、20.04以前に比べるとはるかに簡素で容易になっています。
2025/02/10時点での欠点:JAPANのデータを使っても日本語表示ができない(しばしマテ…..?)。
が、サブリージョンなら表示できます(なんで…???)。Appendix参照
ラズパイ5 Model B (8GB)
MicroSD (64GB)
ラズパイ用のOSにUbuntu 24.04.1 LTS を作成します。
Windows版Imager を起動します。
デバイスはRaspberry Pi 5 を選択
OS を選びます。
選択肢の矢印が表示されていない場合はSDを初期化しておいてください。
Ubuntu を選択
Server 24.04.1 LTS (64-bit)
ストレージとして初期化しておいたSDを選択
初期ユーザーなどを設定しておきます。
tileserverという新規ユーザーを作成してログインするようにしておきます。
tileserverというユーザーを作成。
隣のサービスでSSHを有効にしておきます。
SDへの書き込み開始
進捗が出ます
終了したらSDメディアをラズパイのスロットに挿して電源投入。
Ubuntuが起動したらtileserverでログインします。
以下を実行
●ロックがかかっていてアップグレードできない場合
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock*
再度
sudo apt upgrade -y
SSHで接続して作業開始します。
固定IPアドレスを設定する場合
ディレクトリ移動
オリジナルを改名
現在のIPアドレスの確認は以下のコマンドを使用
gateway確認
nameservers(DNS)確認
新規作成
固定IPを192.168.0.32にするとした場合、2か所修正して以下を追記して保存
Wi-Fi設定
Wi-Fiの情報は各自でご確認ください。
XXXXXXX <- Wi-FiのSSID
YYYYYYY <- Wi-FiのPASS
インデントはスペースのみ有効、タブはエラーになります。
コロンの後ろは1スペース開けないといけないようです。
適用
SSH接続の場合は、ここで1回切断されます(異なるIPアドレスの場合)。
再度、設定した固定IPでログインしてください。
注1:Windows などでSSH接続する場合、2回目以降アドレス変更した場合、以下のようなメッセージが出てエラーになる場合
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
C:¥Users¥user.ssh¥known_hostsファイルを編集します。
使われているアドレスに関連した行をバッサリ削除して、再度ログイン
注2:以下のようなエラーメッセージが出る場合、無視していいです。
** (process:xxxxx): WARNING **: xx:xx:xx.xx: Problem encountered while validating default route consistency.Please set up multiple routing tables and use routing-policy
instead.
Error: Conflicting default route declarations for IPv4 (table: main, metric: default), first declared in wlan0 but also in eth0
リブートして再度、設定した固定IPでログイン
例
ssh tileserver@192.168.0.32
Switch2OSM : Manually building a tile server (Ubuntu 24.04)
This page describes how to install, setup and configure all the necessary software to operate your own tile server. These step-by-step instructions were written for Ubuntu Linux 24.04 (Noble Numbat), and were tested in April 2024.
このページでは、独自のタイル サーバーを運用するために必要なすべてのソフトウェアをインストール、セットアップ、および構成する方法について説明します。これらのステップ バイ ステップの手順は、Ubuntu Linux 24.04 (Noble Numbat) 用に作成され、2024 年 4 月にテストされました。
Software installation
ソフトウェアインストール
サーバーは5 つの主要コンポーネント (mod_tile、renderd、mapnik、osm2pgsql、postgresql/postgis データベース) で構成されています。mod_tile は、キャッシュされたタイルを提供し、まだキャッシュされていないか、古くなっているため、どのタイルを再レンダリングする必要があるかを判断する Apache モジュールです。 Renderd は、レンダリング要求の負荷を管理して平準化するために、さまざまな種類の要求に対して優先度キューイング システムを提供します。Mapnik は、実際のレンダリングを行うソフトウェア ライブラリで、renderd によって使用されます。
これらの手順は、新しくインストールされた Ubuntu 24.04 サーバーに対して作成およびテストされています。
このガイドでは、すべての操作を非ルート ユーザーから「sudo」経由で実行することを前提としています。以下のすべてをルートとして実行しないでください。うまくいきません。
この時点で、いくつかの新しいアカウントが追加されています。これらは「tail /etc/passwd」で確認できます。「postgres」は、レンダリング用のデータを保持するために使用するデータベースの管理に使用されます。「_renderd」は renderd デーモンに使用され、以下のコマンドの多くがそのユーザーとして実行されるようにする必要があります。
次に、postgis データベースを作成する必要があります。さまざまなプログラムのデフォルトでは、データベースの名前が gis であると想定されており、このチュートリアルでも同じ規則を使用しますが、これは必須ではありません。以下の「_renderd」は renderd デーモンが実行されるユーザーと一致していることに注意してください。
「postgres」ユーザーとして作業しながら、PostgreSQL データベースに PostGIS を設定します。
プロンプトは「postgres=#」になります。
「ユーザー ‘postgres’ としてデータベース ‘gis’ に接続されました」という応答が返され、プロンプトは「gis=#」になります。
CREATE EXTENSIONが返されます。
CREATE EXTENSIONが返されます。
ALTER TABLEが返されます。
ALTER TABLEが返されます。
psqlを終了し、通常のLinuxプロンプトに戻ります。
ログアウトします。
上記の「sudo -u postgres -i」を実行する前のユーザーに戻ります。
Mapnik
Mapnik は既にインストールされています。次の操作を実行して、正しくインストールされているかどうかを確認します。
python3
>>>import mapnik
エラーが出なければ正解です。次のコマンドでpythonを終了します。
>>>quit()
Stylesheet configuration
スタイルシートの構成
必要なソフトウェアがすべてインストールされたので、スタイルシートをダウンロードして設定する必要があります。
ここで使用するスタイルは、openstreetmap.org Web サイトの「標準」マップで使用されているスタイルです。このスタイルが選ばれたのは、十分に文書化されており、世界中のどこでも機能するはずだからです (ラテン語以外の地名がある場所も含む)。ただし、欠点がいくつかあります。グローバルに機能するように設計された妥協案であり、理解して変更する必要がある場合、非常に複雑です。
ここでは、使用している非ルート ユーザー アカウントのホーム ディレクトリの下の「src」の下のディレクトリにスタイルシートの詳細を保存していると想定しています。「_renderd」ユーザーが下にアクセスできるようにアクセスを変更します。
「carto」コンパイラの適切なバージョンをインストールします。
少なくとも次の数値が返されるはずです。
1.2.0
次に、carto プロジェクトを Mapnik が理解できる形式に変換します。
これで、 /home/<youruseraccount>/src/openstreetmap-carto/mapnik.xml に Mapnik XML スタイルシートが作成されました。
実行時、最初は何も表示されず進捗が不明ですがほどなく大量のWarningを吐き出して終了します。
例:Warning: style/admin.mss:82:6 Styles do not match layer selector #admin-low-zoom.
問題はないようです。
Loading data
データ読み込み
最初は、少量のテスト データのみをロードします。他のダウンロード場所も利用できますが、「download.geofabrik.de」には幅広いオプションがあります。
ASIAに関しては以下のデータが使えるようですが、JAPANなどは2GBくらいあります。ただアゼルバイジャン(Azerbaijan)は40MB弱と比較的小さいのでこれをダウンロードして使います。
Afghanistan
Armenia
Azerbaijan
Bangladesh
Bhutan
Cambodia
China
East Timor
GCC States
India
Indonesia (with East Timor)
Iran
Iraq
Israel and Palestine
Japan
Jordan
Kazakhstan
Kyrgyzstan
Laos
Lebanon
Malaysia, Singapore, and Brunei
Maldives
Mongolia
Myanmar (a.k.a. Burma)
Nepal
North Korea
Pakistan
Philippines
Russian Federation
South Korea
Sri Lanka
Syria
Taiwan
Tajikistan
Thailand
Turkmenistan
Uzbekistan
Vietnam
Yemen
https://download.geofabrik.de/asia/azerbaijan.html にアクセスし、「このファイルの最終更新日」の日付 (例: 「2024-04-24T20:21:40Z」) を書き留めます。後で、OpenStreetMap に対するユーザーのその後の変更をデータベースに反映させるときに、この日付が必要になります。次のようにダウンロードします。
次に、「_renderd」ユーザーがスタイルシートにアクセスできることを確認する必要があります。これを行うには、ダウンロードした場所にアクセスする必要がありますが、デフォルトではホームディレクトリにアクセスできません。ユーザーアカウントの下の「src」にある場合は、以下を実行。
これを行いたくない場合は、ファイルを移動し、後続のコマンドでファイルの場所への参照を修正することができます。
次のコマンドは、先ほどダウンロードした OpenStreetMap データをデータベースに挿入します。この手順はディスク I/O を大量に消費するため、ハードウェアによっては、地球全土をインポートするのに数時間、数日、または数週間かかる場合があります。抽出が小さい場合は、インポート時間が大幅に短縮されるため、マシンの使用可能なメモリに収まるように、さまざまな -C 値を試してみる必要がある場合があります。このプロセスでは、“_renderd” ユーザーが使用されることに注意してください。
sudo -u _renderd osm2pgsql -d gis --create --slim -G --hstore --tag-transform-script ~/src/openstreetmap-carto/openstreetmap-carto.lua -C 2500 --number-processes 1 -S ~/src/openstreetmap-carto/openstreetmap-carto.style ~/data/azerbaijan-latest.osm.pbf
これらのオプションの意味について少し説明しておきます。
-d gis : 使用するデータベース (以前は「gis」がデフォルトでしたが、現在は指定する必要があります)。
–create : 既存のデータベースにデータを追加するのではなく、空のデータベースにデータをロードします。
–slim : osm2pgsql はさまざまなテーブル レイアウトを使用できます。レンダリングには「slim」テーブルが適しています。
-G : マルチポリゴンの処理方法を決定します。
–hstore : 明示的なデータベース列がないタグをレンダリングに使用できるようにします。
–tag-transform-script : タグ処理に使用される lua スクリプトを定義します。これは、スタイル自体がタグを処理する前に OSM タグを処理する簡単な方法であり、スタイル ロジックを潜在的に大幅に簡素化します。
-C 2500 : インポート プロセス用に osm2pgsql に 2.5 GB のメモリを割り当てます。メモリが少ない場合は、より小さい数値を試すことができます。メモリ不足によりインポート プロセスが強制終了した場合は、より小さい数値を試すか、OSM 抽出を小さくする必要があります。
–number-processes 1 : 1 つの CPU を使用します。使用可能なコアがさらにある場合は、さらに使用できます。
-S : このファイルにデータベース列を作成します(実際にはこれらは「openstreetmap-carto」から変更されていません)
最後の引数はロードするデータ ファイルです。
コマンドは、「osm2pgsql は全体で 163 秒 (2 分 43 秒) かかりました」のような内容で完了します。
*JAPAN の場合
japan-latest.osm.pbfのダウンロードで9分くらい、データベースへのロードに3時間くらいかかります。
Creating indexes
インデックス作成
バージョン 5.3.0 以降では、いくつかの追加インデックスを手動で適用する必要があります。
「CREATE INDEX」が 16 回応答されるはずです。
*JAPAN の場合
15分くらいかかります。
Database functions
データベース機能
「OSM Carto」バージョン5.9.0(2024年10月リリース)では、一部の機能をデータベースに手動でロードする必要があります。これらは、次の方法でいつでも追加/再ロードできます。
Shapefile download
シェープファイルのダウンロード
地図の作成に使用されるデータのほとんどは、上記でダウンロードしたOpenStreetMapデータファイルから直接取得されていますが、低ズームの国境などのシェープファイルはまだ必要です。これらをダウンロードしてインデックスを作成するには、以前に使用したのと同じアカウントを使用します。
このプロセスにはかなりのダウンロードが含まれ、時間がかかる場合があります-実行中に画面にあまり表示されません。一部のデータは直接データベースに送られ、一部は “openstreetmap-carto” の下の “data” ディレクトリに送られます。ここで問題がある場合は、Natural Earthのデータが移動した可能性があります – 詳細については、この問題とNatural Earthの他の問題をご覧ください。Natural Earthのダウンロード場所を変更する必要がある場合は、このファイルのコピーを編集する必要があります。
5種類のファイルがありダウンロードとインポートで全体で30分弱くらいかかります(3GB強消費)。
●simplified_water_polygons <-- そこそこ高速
●water_polygons<-- めっぽう時間がかかります
●icesheet_polygons<-- 高速
●icesheet_outlines<-- めっぽう時間がかかります
●ne_110m_admin_0_boundary_lines_land <-- 高速
Fonts
フォント
バージョン 5.6.0 以降の Carto では、フォントを手動でインストールする必要があります。
最後のフォント (“Noto_Emoji”) を取得するとエラーが表示される場合があります。これは無視できる既知のエラーです – 誰かがプルリクエストを受け入れるか、問題を解決する他の方法を提案するのを待っています。
私たちのテストデータエリア(アゼルバイジャン)が選ばれたのは、エリアが小さいことと、その地域の一部の地名にラテン文字以外の文字が含まれているためです。
なにやら否定的な表現の多いメッセージがやたらたくさん表示されます…こんな感じ。
Setting up your webserver
Configure renderd
renderd の設定
Ubuntu 24.04の「renderd」の設定ファイルは「/etc/renderd.conf」です。
エディターで開きます。
最後に次のようなセクションを追加
● XMLファイル「/home/<accountname>/src/openstreetmap-carto/mapnik.xml」の場所を、システム上の実際の場所に変更する必要があります。
● “[s2o]” と “URI=/hot/” もお好みで変更できます。1つのサーバーから複数のタイルセットをレンダリングしたい場合は、 “[s2o]”のような別のセクションを別の名前で追加し、異なるマップスタイルを参照することができます。
● デフォルトの “gis” とは異なるデータベースを参照したい場合は可能ですが、それはこのドキュメントの範囲外です。
● メモリが2GB程度しかない場合は、「num_threads」を2に減らすこともできます。
● “URI=/hot/” は、ここで生成されたタイルを HOT タイルレイヤーの代わりに OpenStreetMap.org でより簡単に使用できるように選択されました。ここでは他のものを使うこともできますが、”/hot/” は何よりも良いです。
このガイドが最初に書かれたとき、Ubuntu 24.04 によって提供される Mapnik のバージョンは 3.1 で、ファイルの “[mapnik]” 部分の “plugins_dir” 設定は “/usr/lib/mapnik/3.1/input” でした。その「3.1」は、将来また変わるかもしれません。タイルをレンダリングしようとしたときにエラーが発生した場合は、次のようにします。
An error occurred while loading the map layer 's2o': Could not create datasource for type: 'postgis' (no datasource plugin directories have been successfully registered) encountered during parsing of layer 'landcover-low-zoom'
次に、 “/usr/lib/mapnik” を見て、 どのバージョンのディレクトリがあるかを確認
“/usr/lib/mapnik/<version>/input” を見て、 そこに “postgis.input” ファイルが存在することを確認します。
例:ls /usr/lib/mapnik/3.1/input
「renderd」にタイルレンダリングリクエストにどのように反応するかを指示したので、apache Webサーバーにそれらを送信するように指示する必要があります。残念ながら、この構成は mod_tile の最近のバージョンから削除されています。ただし、現在はここからインストールできます
Making sure that you can see debug messages
デバッグ メッセージが表示されることを確認する
この時点で、タイルレンダリングプロセスからの出力(エラーを含む)を確認できると非常に便利です。最近の mod_tile バージョンでは、デフォルトではオフになっています。オンにするには…..
まだない(多分)場合は、[Service]セクションの後ろに以下を追加します。
Environment=G_MESSAGES_DEBUG=all
で、
Configuring Apache
Apache の設定
/var/log/syslog を見ると、「renderd」サービスからのメッセージが表示されるはずです。最初はいくつかのフォント警告があります – 今のところそれらについて心配しないでください。
次に…..
他で /etc/renderd.confを編集した場合、これを必ず実行します。
syslog には、次のようなメッセージが表示されます。
Apr 23 11:14:10 servername apachectl[2031]: [Sat Apr 23 11:14:10.190678 2024] [tile:notice] [pid 2031:tid 140608477239168] Loading tile config s2o at /hot/ for zooms 0 - 20 from tile directory /var/cache/renderd/tiles with extension .png and mime type image/png
次に、Webブラウザーで「http://yourserveripaddress/index.html」にアクセスします(yourserveripaddressを実際のサーバーアドレスに変更します)。「Apache2 Ubuntuデフォルトページ」が表示されます。
どのIPアドレスが割り当てられているかわからない場合は、”ifconfig”を使用して調べることができます – ネットワーク設定がそれほど複雑でない場合は、おそらく”127.0.0.1″ではない”inet addr”でしょう。ホスティングプロバイダーでサーバーを使用している場合、サーバーの内部アドレスは割り当てられた外部アドレスとは異なる可能性がありますが、その外部IPアドレスはすでに送信されており、現在サーバーにアクセスしているアドレスである可能性があります。
これは単なる “http” (ポート 80) サイトであることに注意してください – https を有効にする場合は、もう少し Apache の設定を行う必要がありますが、それはこれらの手順の範囲外です。ただし、「Let’s Encrypt」を使用して証明書を発行する場合は、その設定プロセスでApache HTTPSサイトも構成できます。
次に、Webブラウザで次のようにアクセスします http://yourserveripaddress/hot/0/0/0.png
(yourserveripaddressを実際のサーバーアドレスに変更します)
もちろん、上記の「URI=/hot/」を変更した場合は、それを編集する必要があります。小さな世界地図が表示されます。
そうでない場合は、表示されるエラーを調査します。これらは、権限のエラーであるか、上記の手順の一部の手順を誤って見逃したことに関連している可能性があります。タイルが取得されず、他のエラーが再度発生する場合は、出力全体をペーストビンに保存し、help.openstreetmap.org などのどこかで問題について質問してください。
Viewing tiles
タイルの表示
タイルを見るために、私たちはズルをして、非常に単純なマップを表示できるhtmlファイル「sample_leaflet.html」を使用します。これを取得するには….
IPアドレスが「127.0.0.1」とだけ言うのではなく、サーバーアドレスと一致するように編集します。これにより、他のユーザーからこのサーバーにアクセスできるようになります。
*JAPAN の場合
緯度経度の指定は、東京スカイツリーなら「35.7100152,139.8107594」
「http://yourserveraddress/sample_leaflet.html」を参照します。
最初のマップ表示には少し時間がかかります。ズームインおよびズームアウトは可能ですが、サーバーの速度によっては、一部のタイルがブラウザーに間に合わないため、最初は灰色で表示される場合があります。ただし、一度完了すると、次に必要になったときに準備が整います。/var/log/syslog を見ると、タイルのリクエストが表示されるはずなので、リクエストされたとおりにこれらを確認するには、ssh 接続から次のようにします。
(「TILE」の周りのスペースに注意してください)
これにより、タイルが要求されるたびに線が表示され、タイルのレンダリングが完了するたびに 1 行が表示されます。
必要に応じて、”/etc/apache2/conf-available/renderd.conf” の “ModTileMissingRequestTimeout” 設定を 10 秒から 30 秒か 60 秒に増やすことができます。これにより、背景にタイルがレンダリングされるのを待ってから、ユーザーに灰色のタイルが与えられます。変更後は、「sudo service renderd restart」と「sudo service apache2 restart」を確認してください。
以上
Appendix
https://download.geofabrik.de/asia/japan/kansai-latest.osm.pbf
例えばこんな感じ。
Leave a Reply