2016年7月28日木曜日

XLX Reflector を Raspberry Pi2 で構築しテストしてみる

Back


 XLX Reflector とは正しくは
XLX Multiprotocol Gateway Reflector と言い、その名のとおりD-STARに於ける3つの接続手順であるDPlus(REF)、DCSDExtra (XRF)の全てをサポートします。つまりどの手順を使用しても接続できると言うことです。
 図のようにダッシュボード(WEB)も標準で備わって居り、画像を変更したりする事に依りカスタマイズも可能です。勿論、HTMLやPHPをご存じであれば大きく変化させる事も可能です。
 特徴としては A B C 3つのモジュールを主に使用(H までは接続可能)し、A はインターナショナルとして世界中とピアトゥピア(Peer to Pear:後述)に依ってリフレクター同士が結ばれます。日本では先駆者によって B はローカルグループ、C は日本語による日本国内のピアトゥピアに使用されています。
 大阪の谷町430管理団体により初めて導入(XLX081)され、現在バックアップシステムも含め8ヶ所ほどで運営されています。そしてその全てが C モジュールで横に繋がっており一つのルームを構成しています。

Special thanks to LX1IQ Mr. Luc Engelmann and Digital Voice Communications Working Group of The Radioamateurs du Luxembourg

=MEMO=
XLXリフレクター・ソフトウェアの使用に関しては dvc@rlx.lu にご一報ください。
また接続確認後、XRFリフレクタディレクトリーへの登録(例:XLX047に対するXRF047を登録する)を行ってください。登録依頼先は X Reflector Forum です。


環境を整える

● Raspberry Pi2 の準備

今回、私の場合は限界を知る為に Raspberry Pi2 にしましたが、実際の運用においては Pi3 又は通常の PC を使用した方が良いと思います。(繋がるユーザ数次第ですが・・特にWEB参照数が影響大)
  • microSDにOSイメージを焼き、Rasbian が立ち上がるようにします。

  • 詳しくはRaspbian(Jessie)のインストール for HAMをご参照ください。
    今回のケースでは、ダウンロードしたOSイメージに含まれる機能のみで構いません。上記参照ページでの「追加の機能をインストールします」以下の説明は無視してください。

  • パソコンを利用される方

  • 詳しくは眠っていたパソコンが Linux (Debian8)で蘇るをご参照ください。

  • 作業用のパソコンから SSH 接続できるようにします。

  • 一度、キーボードやディスプレイを接続してターミナルで sudo ifconfig して IPアドレスを確認するか、Fing(スマホ用)や Angry IP Scanner 等のアプリをご使用ください。 なお、その際にはID : pi   Password : raspberry が必要になります。
    SSH接続には Putty 等のツールが便利ですが、Windowsならコマンドプロンプト、Linuxならターミナルから ssh 192.168.x.y -l pi -p 22 とすれば接続できます。 (192.168.x.yの部分は確認したIPアドレスです。)

  • microSD の領域拡張と update, upgrade は上記URLをご参照の上、忘れずに行ってください。

=MEMO= XLX開発者のオリジナルサイトでは安定版OSの Wheezy(Debian 7)のみサポートしています。 この記事のケースでは最新版の Jessie(Debian 8)での稼働を検証する目的で構成しています。どうしてもうまく行かない場合は、OS を Wheezy にインストールし直してサポートを受けてください。
2017.07.11現在、最新の Stretch(Debian 9)にも対応しているとのアナウンスが Luc から有りました。
2017.07.17現在、最新の Stretch(Raspbian 9 : Jessie dist-upgrade)に対応している事を確認しました。

● systemd による固定IPアドレスの取得

    ここでの設定方法は飽くまでテキストモード( X Window を使用しない)での使用を想定しています。パワーに余裕が有る場合や、 一般のパソコンやサーバを利用する場合はGUI標準の wicd を使用した方が便利です。

  1. ユニットファイル(Unit File)の作成

  2. ファイル名には一定のルールが有ります。wiredとした部分は eth0, wlan0, wireless など判別しやすい物を使用しますが、ドット以降は networkとする必要が有ります。 (WiFi を利用したい方は、テキストモードでWi-Fi接続を安定させる(Jessie)をご覧ください。

    $ sudo nano /etc/systemd/network/wired.network
    
      GNU nano 2.2.6         File: /etc/systemd/network/wired.network
    [Match]
    Name=eth0
    
    [Network]
    #DHCP=yes
    
    DHCP=no
    Address=10.0.0.10/24
    Gateway=10.0.0.1
    

    [Ctrl]+[o]➡[Enter]➡[Ctrl]+[x]で保存・終了します。

  3. 既存のネットワークシステムを無効にします。

  4. 先ず、dhcpcd.serviceを無効にします。このサービスは全てのインターフェースにdhcpを機能させようとして不安定要素の一つになる様なのでユニットファイルをリネームしてしまいます。

    $ cd /lib/systemd/system
    $ sudo mv dhcpcd.service dhcpcd.service.org
    $ cd        # homeに戻る
    

    コマンドでも分かるようにユニットファイルの保存されている場所は /lib/systemd/system/etc/systemd/system の2ヶ所ですが、ユーザ作成用としては後者です。 そして、ユーザ作成用の /etc 内の方が優先されます。

    次に、自動起動スクリプト(/etc/init.d/dhcpcd)も無効にします。

    $ sudo update-rc.d dhcpcd remove
    

    私の場合、これで再起動してみたところ相変わらず dhcpcd が起動していました。($ ps -eで確認)そこで、スクリプト自体を移動させてみました。

    $ sudo mv /etc/init.d/dhcpcd /home/pi
    

    これで立ち上がらなくする事が出来ました。

    最後にもう一つ、systemd のサービスである networking.service を無効にします。

    $ sudo systemctl stop networking.service
    $ sudo systemctl disable networking.service
    

  5. 作成した wired.network ファイルを使ってネットワークを立ち上げます。

  6. 現在は、networking から systemd のネットワークサービスへの過渡期で、標準では起動(有効)に設定されていません。

    $ sudo systemctl is-enbaled systemd-networkd.service
    disable
    $ sudo systemctl enable systemd-networkd.service
    

  7. これで再起動すれば、必要とするネットワークサービスだけが立ち上がります。

  8. $ sudo reboot
    

● ルータのフィルタリング・フォワーディングの設定とダイナミックDNS

  1. 下記各ポートのインバウンドを通すようフィルタリング設定を変更します

  2. ポートプロトコル概  要
    80TCPhttp ダッシュボード用WEBの参照 httpsの場合 443
    10001UDPXLX本体とのJSONインターフェース
    10002UDPXLXインターリンク(Peer to Peer)
    22又は10022TCPセキュリティ上、リモートによる支援が必要な場合のみとする
    20001UDPDPlus プロトコル用
    30001UDPDExtra プロトコル用
    30051UDPDCS プロトコル用

  3. 各ポートから XLX Reflector の IPアドレス宛のフォワーディングを設定します

  4. 上記フィルタリング設定やフォワーディング設定についてはお持ちのルータのマニュアルに従ってください。

  5. 固定グローバルアドレスを取得するか、ダイナミックDNSを設定します

  6. 詳しくは、ご契約のプロバイダーのWEBなどをご覧ください。 有償サービスはIPアドレスが変化した場合でもプロバイダー側で追随してくれます。 また、無償サービスでも自動書き換えに対応した機能を提供しているところもあります。 詳しくは、Linux(Raspbian)でダイナミックDNSを使うをご参照ください。

XLX Reflector のインストール

● xlxd を GitHub よりクローン(ダウンロード)します。

https://github.com/LX3JL/xlxdCloan or download ▼ から[Download ZIP]するか、次のように GIT Clone してください。
  1. 追加機能のインストール

  2. $ sudo apt-get install git git-core
    $ sudo apt-get install php5          # php5 package contains apache2
    

  3. xlxd をダウンロードします

  4. $ git clone https://github.com/LX3JL/xlxd.git
    

  5. xlxd をコンパイルしてインストール

  6. $ cd xlxd/src/
    $ sudo make
    $ sudo make clean
    $ sudo make install
    $ cd
    

    インストール先は /xlxd です。

  7. 自動起動スクリプトを /etc/init.d/ へコピーして編集します

  8. $ sudo cp xlxd/scripts/xlxd /etc/init.d/
    $ sudo nano /etc/init.d/xlxd
    
      GNU nano 2.2.6          File: /etc/init.d/xlxd
        :
        :
    # change below settings according to your system
    NAME="xlxd"
    DAEMON="/xlxd/xlxd"
    ARGUMENTS="XLX047 10.0.0.10"       # 上記ネットワークの設定で固定したIPアドレス
    PIDFILE="/var/log/xlxd.pid"
    USER=root
    GROUP=root
        :
        :
    

    「XLX047」の部分は、欲しい番号が使われていないのを確認の上、記入します。先取方式ですが正式登録(後述の自動認証)されねばなりません。 [Ctrl]+[o]➡[Enter]➡[Ctrl]+[x]で保存・終了します。


    =MEMO= $ sudo /etc/init.d/xlxd start とするとその時は立ち上がるのですが、$ sudo update-rc.d xlxd defaults としても自動起動しません。


  9. 自動起動用スクリプトを自動起動させる為の工夫

  10. ネットワーク設定の時同様にユニットファイルを作成します。

    $ sudo nano /etc/systemd/system/xlxd.service
    
      GNU nano 2.2.6          File: /etc/systemd/system/xlxd.service
    [Unit]
    Description=XLX Reflector Daemon by LC1IQ
    After=systemd-networkd.service
    # ネットワーク設定の違いにより自動起動しない時試してください。
    # After=network.target
    # After=networking.service
    
    [Service]
    Type=forking
    ExecStart=/etc/init.d/xlxd start
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=process
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    Alias=xlxd.service
    
    

    [Ctrl]+[o]➡[Enter]➡[Ctrl]+[x]で保存・終了します。

    既存のファイルを変更しただけなので本当に正しい記述かは、今少し勉強が必要です。 今回は起動スクリプトを自動スタートするユニットファイルという事で逃げていますが、本来ならばユニットファイルだけで /xlxd/xlxd を起動できるのではと思っています。

    次に、ユニットファイルを起動用コマンドとして有効にします。

    $ sudo systemctl enable xlxd.service
    

    これで、再起動すれば自動起動してくれるはずですが、まだ重要な環境設定が終わっていませんので、後で再起動する事になります。

  11. ダッシュボード用テンポラリーファイルをWEB用ディレクトリーへコピーします。

  12. $ sudo cp -r ~/xlxd/dashboard/* /var/www/html/
    $ sudo rm /var/www/html/index.html
    

    WEB公開用ディレクトリーには、apache2のインストールによって index.html が存在していますので、ここでコピーしたファイルの index.php と混同しないように最初に削除しておきます。(indexと言う名のファイルが2つ有るのもトラブルの元)

  13. ハッシュ用フォルダ(/tmp)を、専用フォルダ(/callhome)に変更します。

  14. 理由は、tmpにハッシュ用ファイル(callinghome.php)が有ると、PCを再起動する度に内容が失われ、XLX管理サーバとの接続が失われる為です。

    $ sudo mkdir /callhome
    $ sudo chmod 777 /callhome
    $ sudo chmod +r /var/log/messages
    

    callinghomes.php は接続が有効になると自動作成されます。

    =MEMO= リフレクタリスト(後述)に於いて接続完了のグリーンアイコンが赤のダウンに変わったり、リフレクタの表示自体が消えた時などは、この callinghomes.php を一度削除すると正常に戻る事が有るとの情報を頂きました。(from JR1OFP 鈴木さん)

  15. 最も重要な設定ファイルを編集します。

  16. $ sudo nano /var/www/html/pgs/config.inc.php
    
      GNU nano 2.2.6          File: /var/www/html/pgs/config.inc.php
    <?php
    /*
    Possible values for IPModus
    
    HideIP
    ShowFullIP
    ShowLast1ByteOfIP
    ShowLast2ByteOfIP
    ShowLast3ByteOfIP
    
    */
    
    $Service     = array();
    $CallingHome = array();
    $PageOptions = array();
    
    $PageOptions['ContactEmail']                         = 'xlx047@todo.vc';     // 管理者用メールアドレス
    
    $PageOptions['DashboardVersion']                     = '2.3.1';              // Dashboard Version
    
    $PageOptions['PageRefreshActive']                    = true;                 // WEBのリフレッシュをする(true)/しない(false)
    $PageOptions['PageRefreshDelay']                     = '10000';              // 10秒に1回
    
    
    $PageOptions['RepeatersPage'] = array();
    $PageOptions['RepeatersPage']['LimitTo']             = 99;                   // 接続可能なリピータ数の上限
    $PageOptions['RepeatersPage']['IPModus']             = 'ShowLast1ByteOfIP';  // IPアドレスを右1桁のみ表示(標準:すべて表示)
    $PageOptions['RepeatersPage']['MasqueradeCharacter'] = '*';                  // 隠す部分の代替え文字指定
    
    
    $PageOptions['PeerPage'] = array();
    $PageOptions['PeerPage']['LimitTo']                  = 99;                   // 接続可能なピア数の上限
    $PageOptions['PeerPage']['IPModus']                  = 'ShowLast1ByteOfIP';  // IPアドレスを右1桁のみ表示(標準:すべて表示)
    $PageOptions['PeerPage']['MasqueradeCharacter']      = '*';                  // 隠す部分の代替え文字指定
    
    
    $PageOptions['ModuleNames'] = array();                                       // Module nomination 変更しています
    $PageOptions['ModuleNames']['A']                     = 'Int\'l Peers';
    $PageOptions['ModuleNames']['B']                     = 'JA Room';
    $PageOptions['ModuleNames']['C']                     = 'JA Peers';
    $PageOptions['ModuleNames']['D']                     = '';
    
    
    $PageOptions['MetaDescription']                      = 'XLX is a D-Star Reflector System for Ham Radio Operators.';  
    $PageOptions['MetaKeywords']                         = 'Ham Radio, D-Star, XReflector, XLX, XRF, DCS, REF, ';
    $PageOptions['MetaAuthor']                           = 'LX1IQ';
    $PageOptions['MetaRevisit']                          = 'After 30 Days';     // この5項目は SEO 対策なので変更しない。
    $PageOptions['MetaRobots']                           = 'index,follow';
    
    
    $Service['PIDFile']                                  = '/var/log/xlxd.pid';
    $Service['XMLFile']                                  = '/var/log/xlxd.xml';
    
    $CallingHome['Active']                               = true;                                    // ここをtrueにしないと接続不可
    $CallingHome['MyDashBoardURL']                       = 'http://xlx047.ddns.net';                // dashboard url
    $CallingHome['ServerURL']                            = 'http://xlxapi.rlx.lu/api.php';          // 変更厳禁
    $CallingHome['PushDelay']                            = 600;                                     // push delay in seconds
    $CallingHome['Country']                              = "JAPAN";                                 // 国名又はエリア名
    $CallingHome['Comment']                              = "Hosted by 'Day After Day D*Star Network'. Now Testing on Jessie 4.4.13-v7+ RPi2.";   // コメント最大100文字
    $CallingHome['HashFile']                             = "/callhome/callinghome.php";             // /tmp/から/callhome/に変更
    $CallingHome['OverrideIPAddress']                    = "";                                      // 設定不要
    $CallingHome['InterlinkFile']                        = "/xlxd/xlxd.interlink";                  // インターリンク設定ファイルの場所
    
    ?>
    

    赤い文字の部分が今回、変更・追加した部分です。
    [Ctrl]+[o]➡[Enter]➡[Ctrl]+[x]で保存・終了します。



再起動後のチェックポイントと調整・改良

● 再起動後にチェックすべき事

  1. さて前項までで全ての準備が整いました。再起動します。

  2. 全てが、うまく行っているとXLX Reflector Serverが立ち上がると、他のマシンのブラウザで http://10.0.0.10 を見てみると基本形のWEBが立ち上がります。 (右図は基本形ではありません)

    そして、WEBメニューの[Reflectorlist]をクリックすると、全世界のXLXのリンクリストが表示されます。その中のXLX047がグリーンのUPマークになっていれば成功です。

  3. WEBが表示しないなどの問題点が有る場合、まずxlxdが起動しているかを確認します。

  4. $ ps -e | grep xlxd
    29227 ?        08:56:50 xlxd
    

    プロセス番号と共に上のように表示されれば起動しています。もし起動していない時は

    $ sudo /etc/init.d/xlxd start
    

    としてみて、もし立ち上がれば /etc/systemd/system/xlxd.service に問題があるかも知れません。

  5. apache2に問題は無いか?のチェックをします。

  6. $ ps -e | grep apache2
     1356 ?        00:00:02 apache2
     1359 ?        00:10:01 apache2
     1362 ?        00:10:15 apache2
     1456 ?        00:10:07 apache2
     1457 ?        00:09:48 apache2
     4624 ?        00:01:08 apache2
     4674 ?        00:01:22 apache2
     4675 ?        00:01:18 apache2
     4676 ?        00:01:07 apache2
     4700 ?        00:01:00 apache2
     5008 ?        00:00:12 apache2
    

    apache2 が立ち上がっている事が分かります。それでも表示しない場合は、WEB公開用のディレクトリー指定が違っているかも知れません。 今回のシナリオどおりにインストールを行うと、公開ディレクトリーの指定を変更する必要は無いはずですが、チェックしてみます。 実際に index.php の存在している公開フォルダは /var/www/html です。

    $ sudo nano /etc/apache2/sites-available/000-default.conf
    
      GNU nano 2.2.6     File: /etc/apache2/sites-available/000-default.conf
    
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com
    
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
    
             :
             :
    

    [Ctrl]+[o]➡[Enter]➡[Ctrl]+[x]で保存・終了します。

  7. WEBが表示したら確認すべき事(リフレクターリスト)

  8. 再起動直後の成功例ならば良いのですが、リフレクターリストに構築した XLX Reflector が表示されない場合は、/etc/init.d/xlxd の個別設定部分と /var/www/html/pgs/config.inc.php を見直す必要が有るかも知れません。また、前述の=MEMO=の様に callinghomes.php を一度削除してみると良いかも知れません。

● ちょっとした改良?

  1. どうにも気になる日付表示

  2. 気にしなければ良いのですが、yyyy.mm.dd 表示に慣れている私としては dd.mm.yyyy はとても見難く間違いやすいので表示形式を変更しました。

    $ sudo nano /var/www/html/pgs/users.php
    

    44行目・・・
      GNU nano 2.2.6           File: /var/www/html/pgs/users.php
    <td width="150">'.@date("Y.m.d H:i", $Reflector->Stations[$i]->GetLastHeardTime()).'</td>
    

    d.m.Y となっているのを Y.m.d に変更するだけです。大文字/小文字は意味がありますので注意してください。 これを、repeaters.phppeers.php にも施します。


その他テスト運用で得られた結果はリフレクタWEB(XLX047)にも記載しておりますのでご参照ください。

  • CPU負荷率(Rate of CPU Use) [CPU]をクリック

  • CPU温度(CPU Temperature) [Timp.]をクリック

  • Back



    73
    J E 3 H C Z / REF047 C / XLX047 B


    0 件のコメント:

    コメントを投稿