Orange Pi One PlusとTraccarで位置情報管理サーバを構築

Orange Pi One Plus+外付けSSD+Armbian+Traccar+PostgreSQLで位置情報サーバを構築するメモ。 ※一瞬はてぶろにアップしていこうかなと思いつつ、結局、自由が利く独自ドメインの方に上げました。

最初に:(このカッコ内は詳しい人向け。traccarの公式サイトにインストール方法は書いてありますが、やることは簡単。armbian入れて、Traccar入れて、PostgreSQL入れて、traccar.xmlとdefault.xml弄って、必要なポート開けて、サービスを再起動して、TraccarのクライアントやGNSSトラッカーから位置情報が来て表示が出てるか確認するだけです。それを以下で長々と書いてます)

このメモを書くことになった理由:以前は、Allwinner H3が載ったOrange Pi One+SSD+armbian+Traccar+MySQLという組み合わせで動かしていたのですが、どうやらArmbianというか元になったDebianがMySQLのサポートをやめた?影響なのか、この辺のOSS界隈の事情は詳しくは知らないが、Traccar Ver4.12にアップデートしたとたんに動かなくなってしまい困りました。

仕方なくバックアップのハードウェアとして購入保管してあったOrangePiOnePlus+ArmbianとMySQLからフォークしたというMariaDBでTraccarを動かそうと思ったら、ログとか見ても原因はよくわからないが動かず。

Traccarの掲示板で相談している話も見つけましたが、開発者もMySQLとかサポートしてるやつを使うか、お金払ってサポート受けてね、という感じ(まあ、そうですよね)。

というわけで、サポートされているPostgreSQLの方ならどうだ?というわけでやってみたまとめです。長文をわかりやすく書くのが苦手なので、雑かつ長いです。不要な操作もたぶん入ってますが、何せやっつけなので(コラ)。

自分で書いておいてなんですが、一応、自分はこれ見ながら本当に動くかやってみたら、うまく動きました。今のところも動いてます。
かなり丁寧に書いてますけど、メモを書いてる本人の記憶力と頭が悪いのでほとんど忘れても動かせるように書いてます。(OrangePiOneが安定してたので、インストール作業なんて2年?3年?ぶりだし。みんな忘れてしまった)
 

本編:ここから—————————————–
※Orange Pi One Plusは名前が長いので以下OP1Pと表記。
※SSD運用前提です。
※面倒くさがりなのでインストールと設定まではrootでやってます。 あとでrootでのログインを無効にするなりやってください。

ハードウェア環境:

・OP1P ※ACアダプタは念のため3Ah以上。

・MicroSDカード ※SSD運用の場合2GBので大丈夫だった。

・USB接続のSSD ※うちの場合、余ってた120GBのをとりあえずつないでる。

ソフトウェア環境:
・Windows10+Rufus ※MicroSDにArmbianを書き込む用。MicroSDにイメージを焼けるならUbuntuでもDebianでもお好きに。

・Armbian ※今回はBusterを使用。

・JRE/JDK・Traccar・PostgreSQL

以下3つはphppgadmin用なので不要な人はスルーで。
・Apache2 ※phppgadmin用。nginxとか動かせるならなんでも。
・PHP ※phppgadmin用。
・phppgadmin ※PostgreSQLのGUI管理用。

とかです。

まず、armbianをダウンロード

Armbian Buster mainline based kernel 5.10.y
https://redirect.armbian.com/orangepioneplus/Buster_current

をPCにダウンロード。PCでの解凍は当方では7-zipを使用。

Rufus 3.13をダウンロードして、Armbianのイメージ(.imgファイル)を適当なMicroSDカードに書き込んで、OP1Pに差し込んでLANケーブルと電源ケーブルもつないでOP1Pを起動。

※別にRufusじゃなくてもいいです、たまたまこれまでうまく動いてる組み合わせを書いてるだけなので…。

Rufus
https://rufus.ie/ja_JP.html

OP1Pにインストールしたarmbianは初期はDHCPでIPアドレスを取得しているので自分で探してSSHでつなぐ。

※自分の場合、テキトー野郎なので使ってるルータの通信ログやWindows10のコマンドプロンプトからarp -aとかやって、新しくIPアドレスを取得した端末をみつけてつないでます。

PCなどからSSHでOP1Pのarmbianに接続する。
armbianの初期設定ではID:root、PW:1234になってるのでログイン。

rootアカウントのパスワードを再設定するように求められるのと、ユーザ権限のアカウントを1つ作るように表示されるので・・作る。

shellをbashかzshか選ぶように言われるので、お好きな方を。ユーザを設定したらctrl+cで抜ける。

#reboot

で再起動し、rootまたは最初に作成したユーザでログイン(このメモはroot前提で書いてます)。

※自分は設定の時は面倒なので設定が終わるまでrootで入り、後からrootログインを無効化してる。

OP1PのIPアドレスを固定

#armbian-config

で簡単に設定できます。詳しい人はinterfacesを弄るなりなんなり。

※armbian-configでIPアドレスを設定してOKすると、すぐに反映されるので、変更後のIPアドレスにsshでつなぎなおす必要があります。

USBでつないだSSDでarmbianを運用する設定。

#nand-sata-install

※MicroSD運用でも動くのですが、一定期間運用してTraccarのDBのデータ量が増えてくると過去データの読み出しでサーバの応答が無くなったり固まったりがありました。
MicroSDの問題かその他かはわかりませんが、SSD化でとりあえず解決したので、その後はSSD運用してます。

とりあえず、armbianにインストールされてる諸々をアップデートする

#apt update

#apt upgrade

念のため再起動。

#reboot

Java実行環境をインストールTraccarはJAVAで動くので、

#apt install default-jre-headless

javaのインストール先を確認

#update-alternatives –config java

今回の場合、JAVAのインストール先は以下のように表示された。
/lib/jvm/java-11-openjdk-arm64/bin/java

環境変数の設定

#nano /etc/environment

JAVA_HOME=”/lib/jvm/java-11-openjdk-arm64/bin/java”

環境変数の設定が設定されたか確認。
echo $JAVA_HOME/lib/jvm/java-11-openjdk-arm64/bin/java

と表示された。
表示されない場合、OP1Pの再起動で確認できた。

Traccarのダウンロードとインストール

ダウンロードするファイルを格納するディレクトリに移動(任意のディレクトリ)。

#cd /usr/local/src

Traccar

#wget https://github.com/traccar/traccar/releases/download/v4.12/traccar-linux-arm-4.12.zip

解凍

#unzip traccar-linux-arm-4.12.zip

Traccarをインストール

#./traccar.run

Traccar 4.12がこのままだと動かないのでTraccarインストールで自動でコピーされるJJAVA関連ファイルを削除して、上記でOP1PにインストールしたJAVAへのシンボリックリンクを作る。

#ln -s $JAVA_HOME /usr/local/java

#rm -rf /opt/traccar/jre/bin/java

#ln -s /usr/local/java /opt/traccar/jre/bin/java

#systemctl enable traccar

#reboot

※この作業が必要な理由だが、Traccar 4.12にはJAVAの実行環境?のファイルが最初から同梱されていて?これを使うようになってるっぽいのだが、当方の環境だとうまく動かない。それで上記で自分でインストールしたJAVAの実行環境を使うように設定する作業をしている。同じような症状で困っている人がTraccarのフォーラムで質問していて、そこに解決方法として載っていた。当方もJAVAやらLinux系OSに詳しいわけではないのと、時間的制約の問題で具体的にどこを改善すれば、またどういう原因で問題が起きているか、この作業をしなくても?問題が解決できるかとか、そういう追及はしていない・・・。
確か3.xxの頃からアップデートして使っているので、いつこうなったかはよくわからず。
これまでは動いてたのだが・・。

ここまでの作業で、TraccarはH2データベースを使って動くようにはなる。
http://SERVERIPADDRESS:8082/

でウェブブラウザでサーバのURL(SERVERIPADDRESSの部分にURLなり、IPアドレスなりを入れる)を開けば動作してるのがわかるはず。

※必要ならばTraccarサーバの初期設定ポート8082を開ける。

Traccarの初期ログインアカウントは、ID: adminパスワード: adminである。
※メール欄にID。

※dafault.xmlを編集することでメアドのみをIDにしたりもできる。ただ、H2データベースは初代Orange Pi Oneの時に使用したところ、MicroSDカードでの運用だった影響もあるのか記録の件数が増えてくると過去の位置情報データの読み出しでサーバの反応が無くなってしまうことが多々あり、MySQLとSSD運用に変更した経緯がある。なので今回も最初からH2データベースは使わずに、続けてPostgreSQLを入れて運用する設定を行っている。

PostgreSQL-11をインストール。

apt install postgresql-11

PostgreSQLがインストールできたか確認。

cd ~

cd ..

su postgres

$psql –versionpsql
(PostgreSQL) 11.10 (Debian 11.10-0+deb10u1)

※PostgreSQLはインストールするとpostgreSQL管理用のpostgresというアカウントを作るので、postgresインストール直後の最初の設定時はpostgresでログインして作業をする。

※PostgreSQLでは、データベースのユーザをROLLと呼ぶらしい(Postgreはほぼ初めてなのでメモ)。

PostgreSQLではインストールすると作成される初期設定のROLLであるpostgresの他に別に管理用アカウントを作るのが作法らしいので作成する。(実際は当方は別のアカウント名にしてる。各自任意でどうぞ)
createuser –pwprompt –interactive adminusr

※adminusrのところを別の名前にすればその名前で作成できる。

作成したpostgres管理用ユーザのパスワードを2回入れ、スーパーユーザとしても設定する
Enter password for new role:Enter it again:Shall the new role be a superuser? (y/n)y

ここで作ったPostgreSQLのデータベース管理用アカウントでPostgreSQLにログインする。psql -U adminusr -d postgres -h localhost

※adminusrのところは、自分で作った管理用ユーザ名で。

プロンプトが以下になってれば成功。
postgres=#

インストール時も含めて作成されている全てのPostgreSQLのユーザ一覧を見る。
PostgreSQLにログインして上記postgresのプロンプト(postgres=#)で、

\du

でユーザ一覧が表示される。

Role name | Attributes | Member of———–+————————————————————+———–
adminusr | Superuser, Create role, Create DB | {}
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

\q

でpostgresから抜ける。

※なぜこれをやるというかというと、
21.2. ロールの属性
https://www.postgresql.jp/document/12/html/role-attributes.html
によると、「スーパーユーザー以外にCREATEDB権限とCREATEROLE権限を持つロールを作成することを勧めます。 そして、このロールを使用して、データベースとロールを管理するためのすべての処理を行ってください。 この方法によって、実際には不要な処理をスーパーユーザーとして行う危険性を避けることができます。」ということらしい。

※(補足メモ)Postgresユーザのパスワード変更方法。postgresにログインした状態で、
ALTER ROLE adminusr WITH PASSWORD ‘新しいパスワード’;

※adminusrのところは自分で作成したやつに置き換え※初期ユーザのpostgresも同様に変更可能。

Traccarが使用するDBをPostgreSQLに作る。
※当方はコマンドで打ち込むよりGUIで操作したいヘタレなので、GUIでも操作できるphppgadminを入れたい!というわけで、以下はphppgadminを動かすまでの作業も入ってるので、不要な人は飛ばしてください。

$exit

で、postgresユーザからarmbianのrootに戻る。

基本的には以下のURLの作業のまんまである。
https://www.server-world.info/query?os=Debian_10&p=postgresql&f=1

※変更としてはLANのアドレス範囲とかは自分の家等の環境にしてある程度。

phppgadminを使うまでにやることは以下の3つ。
・Apache2(ウェブサーバ)のインストールと設定。

・PHP(phppgadminを動かすPHP環境)のインストールと設定。

・phppgadmin(PHPでブラウザ上からPostgreSQLのデータベースを弄れる管理ソフト)のインストールと設定。

※本当はnginxとかで動かしたいんだけど、armbianのメンテ以外ではLinux系を触ったのが3年ぶりくらいなのと、まとまった時間がとりにくくて新しいことに手を出しづらいので、絶対動くだろっていうapache2でやってます。(ほ…ほらAllwinner H6はパワーあるし・・・)

ここからphpmyadminインストールおよび使用開始までの作業開始。

Apache2のインストール

apt -y install apache2

nano /etc/apache2/conf-enabled/security.conf

25行目:変更
ServerTokens Prod

nano /etc/apache2/mods-enabled/dir.conf

2行目:ディレクトリ名のみでアクセスできるファイル名を設定
DirectoryIndex index.html index.htm index.php

apache2を再起動して設定を反映。

systemctl restart apache2

初期設定だと、
/var/www/html/

の下がウェブサイトの表示用などのファイルを入れておくようになっているので、何も手を加えてないならApache2のDefault Pageが、何も入ってなければ、このディレクトリに適当なindex.htmlファイルとかを作っておくとブラウザから

http://SERVERIPADDRESS/

で、OP1PのIPアドレスを入れれば開けるはず(Apache2ウェブサーバの初期設定ポート80番から弄ってない場合)。Traccarは8082が初期設定なので設定が衝突することはない。

次にPHPのインストール

apt -y install php php-cgi libapache2-mod-php php-common php-pear php-mbstring

phpの設定。
タイムゾーンの設定をする。

nano /etc/php/7.3/apache2/php.inidate.timezone = “Asia/Tokyo”

※行頭にコメントを表す「;」があれば消す。

※nanoで該当行を探す場合、ヘルプ見ればわかるけど、「ctrl + w」(カッコ不要)で単語検索できるのでキーワードを「date.timezone」で検索すれば出てくると思う。

Apache2のサービスを再起動して設定を反映。

systemctl restart apache2

phpが動いてるかテストページを作ってブラウザで表示できるか試す。

nano /var/www/html/index.php

中身ここから——-



ここまで———

これをブラウザで開く
http://SERVERIPADDRESS/index.php

※うまくPHPとApache2が動いてれば「PHP Test Page」と表示される。

次に、phppgadminをインストールする。

apt -y install phppgadmin php-pgsql

以下、phppgadminからのPostgreSQLへのログインをどうするか等設定。
※ウェブサーバとして外部に直に公開するサーバの場合、設定はかなり厳重かつ慎重にどうぞ。
※うちの場合、外部からはVPNで接続してから管理画面にアクセスしてます。

nano /etc/phppgadmin/config.inc.php

自身が所有するDBのみ表示するように設定。
$conf[‘owned_only’] = true;

※ここんところよくわからんので、各自適当にtrueなりfalseなりしてください。

PostgreSQLにアクセスできるネットワークの設定。自分が接続したいLANなどのネットワークを設定してください。

nano /etc/postgresql/11/main/pg_hba.conf

host all all 127.0.0.1/32 md5
host all all 10.0.0.0/24 md5
host all all ::1/128 md5

※この事例だと、初期設定に10.0.0.0/24(10.0.0.1~254)からのアクセスは受けるようになってます。

apache2を使用してphppgadminを使う場合の設定をする。

nano /etc/apache2/conf-enabled/phppgadmin.conf

Require local
Require ip 10.0.0.0/24

※アクセスを受け入れるネットワークの範囲を追加。
 初期設定だとlocalのみが入ってますので、この事例だと前述と同じ10.0.0.0/24の範囲を追加。

Apache2とPostgreSQLのサービスを再起動して設定を反映。

systemctl restart postgresql apache2

※この時点で設定がうまくいってれば、
http://SERVERIPADRRES/phppgadmin/

でphppgadminの画面が出てくるので、左のリストからPostgreSQLをクリックすると、上の方で作ったPostgreSQLの管理用アカウントでログインできます。

※繰り返しますが外部のウェブサーバとして公開する場合、phppgadminの画面にアクセスできてログインされると、直にデータベースを弄ったりできちゃいますので注意です。

ここまででphppgadminが動かせるようになったので、TraccarでPostgreSQLが使えるように設定します。

PostgreSQL上にTraccarに必要なDBを作る。

まず、phppgadminからtraccarの運用管理に使うアカウントでPostgreSQLにログイン。
今回の場合、上の方で作ったadminusrとパスワードでログインします。

次に、Traccarで使うデータベースを作成します。
Traccarは起動時に必要なテーブルが存在しない場合は自動で作ってくれますが、その箱にあたるDBは先に作っておく必要があります。

ブラウザ上の左のリストから「PostgreSQL」をクリックして、同ブラウザの右の画面の「データベースを作成する」をクリック。

作成するDBの内容は、
名前:traccar
Template:postgres
エンコード:UTF8

とかで作ります。
※名前はTraccarのtraccar.xmlに設定するのと同じDB名であれば任意でOK。

Templateは新しいDBを作成する時のテンプレートにするDBですが、「postgres」でいいみたいです。
これでPostgreSQL側は準備完了です。

次にTraccar側の設定。
初期設定のH2データベースでの運用からPostgreSQLでの運用に切り替えます。
Traccarは初期設定だと、

/opt/traccar

にインストールされます。
通常、Traccarの設定ファイルで弄ることがあるのは、このディレクトリより下の階層にある

/opt/traccar/conf/traccar.xml

/opt/traccar/conf/default.xml

の2つだけです。

基本的にはtraccar.xmlにデータベースへのアクセス方法などを書きます。
default.xmlはTraccarが対応しているGNSS(GPS)トラッカーが位置情報を送ってくるポート番号の初期値やTraccarサーバが動作する上での各種フィルタ等の設定などが書いてあります必要があれば設定を変えられます。

TraccarからPostgreSQLに接続できるように設定する。

Traccarの公式サイトにあるPostgresの設定
https://www.traccar.org/postgresql/
に記載とほぼ同じです。

nano /opt/traccar/conf/traccar.xml

org.postgresql.Driver
jdbc:postgresql://127.0.0.1:5432/[DATABASE]
[USER]
[PASSWORD]

※[DATABASE]には上で作ったDBの例だとtraccarになります。

※[USER]と[PASSWORD]はTraccarのDB作成管理用に作ったPostgresのものを使います。
もちろん細かく権限を設定したTraccar用の専用アカウントを作った方がベストだとは思いますが、今回の場合、とりあえず動かすのが目的なので、上の方で作ったPostgres管理用のadminusrとそのパスワードを書きます。

default.xmlの設定を変更する。
※変更しなくても動きますが、あると(当方が)便利な設定を入れました。

nano /opt/traccar/conf/default.xml

<entry key='filter.future'>86400</entry>

の下あたりに、

<entry key='filter.zero'>true</entry>
<entry key='filter.maxSpeed'>25000</entry>

を追加します。

※「filter.zero」は、アフリカ沖とかに行ったりする人は入れない方がいいかも。
いわゆる「ヌル島(Null Island)」(緯度経度が0の架空の島)をフィルタする設定です。
GNSSトラッカーによっては起動してすぐや衛星からの信号を受信できない時に、現在の緯度経度を0(ヌル島の位置、アフリカの西海岸沖合)をTraccarの位置情報サーバに送ってしまうことがあり、これを記録しないで無視する設定です。

このヌル島フィルタを設定しないとGNSS/GPSの電波受信状態が悪い時はしょっちゅうアフリカ旅行をしてることになり、Traccarで地図上に表示する時に位置情報の連続性が無くなってガタガタになります。

filter.maxSpeedは、前の位置情報から次の位置情報が飛び過ぎた場合に無視する設定です。位置情報が飛び過ぎると離れた場所へ超高速で移動したような記録データになりますが、速度が一定以上の場合にはそのデータを無視するようにフィルタリングすることで、記録される位置が飛ぶのを防げます。単位はノットです。上記は25000ノット(時速42999.99km/h、マッハ69.4くらい)を越えると無視する設定です。より低速でフィルタしたい方や、光速で移動されるような方は適宜訂正してください。

あまりに低速に設定すると通常の車や鉄道の移動などもフィルタリングされて記録されなくなります。

その他、さらに細かく設定したい場合はTraccarのドキュメントを参照してください。
https://traccar.org/configuration-file/https://www.traccar.org/documentation/

これであとは運用できる・・・はず。
ufwなどポートが開いてない場合は、それぞれ必要なポートを開けてください。
 
サーバの動作テストはTraccar Clientを利用できます。
Traccar Client
https://play.google.com/store/apps/details?id=org.traccar.client&hl=en_US&gl=US

Traccarのサーバの5055ポートをあけて、そこにTraccarクライアントから位置情報が飛んでくるか確認できます。

Traccarクライアントの設定の概要を書くと、
・TraccarクライアントのサーバーURL欄にTraccarサーバのIPアドレス/URLを設定。
・同、デバイスIDを設定(任意だが、サーバ側に設定するのと同じにする)
・同、サービスステータスのスイッチを「サービス実行中」にする。
・Traccarサーバ側でadmin権限を持つアカウントでログインして「デバイス」→「+[十字アイコン]」でサーバにGNSS/GPSトラッカーを設定する。この時に「名前」は任意で日本語も使えます。大事なのは「ID」でここにTraccarクライアントに設定したID等を設定します。
 
これで、とりあえずはTraccarサーバ側からTraccarクライアントが入った端末の位置情報を認識できるはず。

他のGNSSトラッカーを追加する場合も同じです。
個々のデバイスの設定からデバイスごとに地図上に表示されるアイコンを変えることもできます(車や人、バイク他)。

携帯電話回線を使うGNSSトラッカーの場合、デバイスのIDは通常は端末のIMEIを設定すれば良いです。
それで認識しない場合は

cat /opt/traccar/logs/tracker-server.log

(traccarでなくtrackerなのを注意。default.xmlで変更できます)

でログを見て、サーバが受信したログデータから端末を識別できる何かしらの固有のIDを探す必要があります。
Traccarサーバ側で登録してない機器は位置情報を送ってもサーバ上には表示されません。
 
という感じです。
 
次の記事でTraccarサーバの使い方を簡単ですが、書きます。