2017年2月17日金曜日

DVAP、ノードアダプターV7をリピータ同様にするソフト(dv_ap)

Back


New style DVAP pi-zero W(2017.10.09)
DVAPノードアダプターV7 をリフレクターなどに接続して利用されている方は多いと思います。 最近は、DVMEGA や、OpenSpot、DV4mini 等々新しいデバイスも増えてD-STAR以外にもその用途が拡がって来ています。 また日本のコールサインルーティング(ゲート越え)の世界にも「ターミナルモードやアクセスポイントモード(アイコム社)」が実装され、必ずしもリピータを通さずとも遠隔地と交信できるようになって来ました。

今回は、接続タイプのノードであるDVAP又はノードアダプターV7を、安田OM (7M3TJZ局)が作成された dv_ap(JARL D-STAR委員会版)というソフトを使って、アクセスポイントモードのようにコールサインルーティング用のアクセスポイント(ノード)に仕上げます。

ここでご紹介している D-STAR ネットワークへの接続ツール(各種ノード・DVAPなど)の運用においては 免許申請について(安田OMサイト)をご参照ください。 (2013年8月 ガイドラインが示されました。)

説明文中ではDVAPを使用します。出力は10mWで最大でも100m位の範囲をカバーし、プライベートノードに適しています。またノードアダプターV7を使用した場合は、市販のデータ端子を持つFMアナログ無線機の信号がD-STARの信号に変換され、許可された出力の範囲で広域のノードとして利用できます。


=MEMO= Raspbian 9(Stretch)から、dv_ap に関連する部分が大きく変更されました。LANインターフェース名の書式変更及びSSLに関するライブラリの更新です。この部分はセキュリティ・ホールに関連しますので、是非新たに始める方は Raspbian 9(Stretch)をご利用の上、そのレシピをご参照ください。Raspbian 8(Jessie)対応のdv_apも最新版が提供されています。但し、Raspbian 8(Jessie)をお使いの場合と、Raspbian 9(Stretch)の場合でインストール・アップデートの方法・条件及びアプリがそれぞれ専用となります。 (2017.10.02)
=MEMO= アップグレードが頻繁に行われています。(2017.9.22現在 dv_ap V00.74
$ sudo apt-get update
$ sudo apt-get upgrade dv-ap
  :
WARNING: The following packages cannot be authenticated!
  dv-ap
Install these packages without verification? [y/N] y

=MEMO= dv_ap V00.60にて再度スマートフォンのテザリングWi-Fiによるテストを行ったところ、時々信号が通らないことも有りましたが、実用上問題ない程度に改善されておりました。最下部にその場合の設定やテザリングとホームWi-Fiの自動切り替えなどについて記載致しましたのでご参照ください。
(2017.06.08 追記) dv_ap 00.64以降Wi-Fiでの運用が全く問題なくスムーズに長時間行える事を八日間のモバイル運用で実証されました。(実質途切れたのはdocomo[mopera U]の圏外のみ)

ハードウェアの準備

  1. DVAPは、DVAP純正のソフトウェア DVAPTool で使用できていた物ならそのまま使用できます。 ケーブルは、タイプA<==>miniUSB の物が必要になります。

  2. ノードアダプターV7を使われる場合は、ノードアダプターV7(Satoshi Board)による自宅ノードを参照して、ハードウェアの調整を済ませて置いてください。
    また、ノードアダプターとFMアナログ無線機のデータポートを接続するDIN6ピンのケーブルも必要です。USBケーブルはプリンタ用のタイプA<==>タイプBの物となります。

  3. コントローラにはRaspberry Pi3 を使用しました。Wi-Fiモジュールもオンボードなので電源ケーブル以外は何も要りません。勿論、タイプA+やB+、Pi2等も問題なく使えます。 Raspbian Jessie は、Raspbian(Jessie)のインストール for HAM などを参照の上、接続したいルータにケーブル接続できる事を確認しておいてください。(最初はWi-Fi接続できません)

  4. もし、古いRaspberryPi A+,B+,2 等をお持ちの場合は、USBタイプのWi-Fi子機でも全く同じ設定内容で接続できます。私の場合、右写真の子機で、RaspberryPi3で完成したmicroSDカードをPiB+に差し替えるだけで問題なく稼働しました。

  5. WiFi接続したい場合は、Raspberry Pi で複数 Wi-Fi の切り替えをするテキストモードでWi-Fi接続を安定させる(Jessie)を参照してください。

作業環境の構築

今までのように、いきなりリモート(SSH)でと言う訳に行かなくなりました。 セキュリティの為と思いますがデフォルトでは SSH が無効になっています。そこでディスプレイ・キーボードを接続して直接 Raspberry を操作しなければなりません。
  1. ログイン・ユーザ:pi    パスワード: raspberry でログインします。


  2. =MEMO= SSHを有効にした場合は、必ずパスワードを変更してください。 $ sudo raspi-config で変更するか、$ passwd と入力して変更します。

  3. このまま直接 RaspberryPi 上で作業を進めても構いません。今回はWindowsマシンからリモートで操作したいので SSH を有効にします。

  4. $ systemctl list-unit-files
    

    sudo 無しで構いません, [space]でページ送りします。リモートで作業するのに必要なサービスは ssh.service ですが、disable になっているのが分かります。

    サービス名が分かっている時は次の方法でも判別できます。
    $ sudo systemctl is-enabled ssh.service
    disabled
    

    Windowsなど他のマシンからリモート出来るようにsshを有効にします。
    $ sudo systemctl enable ssh.service
    Synchronizing state for ssh.service with sysvinit using update-rc.d...
    Executing /usr/sbin/update-rc.d ssh defaults
    insserv: warning: current start runlevel(s) (empty) of script `ssh' overrides LSB defaults (2 3 4 5).
    insserv: warning: current stop runlevel(s) (2 3 4 5) of script `ssh' overrides LSB defaults (empty).
    Executing /usr/sbin/update-rc.d ssh enable
    Created symlink from /etc/systemd/system/sshd.service to /lib/systemd/system/ssh.service.
    

    再起動すると自動起動しますが、すぐに利用したい時は
    $ sudo systemctl start ssh.service
    

    とします。なお、ここでリモートする場合は、ifconfig でIPアドレスを確認しておいてください。

  5. ソフトウェアがインストール出来るように、また今後アップデートし易いように準備します。

  6. 特定のフォルダ内に、必要なソフトウェアの有り場所を記したリストファイルをダウンロードします。
    $ cd /etc/apt/sources.list.d
    $ sudo wget app.d-star.info/debian/stretch/jarl.list      # Stretchの場合
    $ sudo wget app.d-star.info/debian/jarl.list                # Jessieの場合
    $ ls
    jarl.list  raspi.list
    $ cd
    

    次にキーをダウンロードし、追加します。(Stretchのみ)
    $ sudo wget http://app.d-star.info/debian/stretch/jarl-pkg.key
    $ sudo apt-key add jarl-pkg.key
    

    上(jarl.list)で設定した場所も含めて更新ファイルを検索、アップデートします。
    $ sudo apt-get clean
    $ sudo apt-get update
    $ sudo apt-get upgrade -y
    

    ソフトウェアが一旦インストールされると、上記コマンドでソフトウェアの更新も認識されアップデートされます。

ソフトウェア(dv_ap)のインストールと環境設定

  1. dv_ap をインストールします。

  2. $ sudo apt-get install dv-ap
         :
    Install these packages without verification? [y/N] y
         :
    

  3. いくつかのファイルを、指定のフォルダにコピー又は移動します。

  4. 先ず、ファイルが格納されているフォルダへ入ります。
    $ cd /usr/share/doc/dv-ap
    

    フォルダが、初期には存在しない場合の、配布先フォルダを作成します。
    $ sudo mkdir /opt/dv_ap
    $ sudo mkdir /opt/dv_ap/etc
    $ sudo mkdir /opt/dv_ap/web
    

    次の各ファイルをそれぞれコピーします。
    $ sudo cp 99-dvap.rules /etc/udev/rules.d
    $ sudo cp dv_ap.css dv_ap.js logo.png /opt/dv_ap/web
    $ sudo cp dv_ap.conf.dvap /opt/dv_ap/etc/dv_ap.conf
    $ cd
    

    上の最終行は、DVAPの場合です。ノードアダプターV7の場合は次の様にコピーします。
    $ sudo cp /usr/share/doc/dv-ap/dv_ap.conf.node /opt/dv_ap/etc/dv_ap.conf
    

  5. dv_apの設定ファイル(dv_ap.conf)を編集します。


  6. =MEMO=
    Stretch(Raspbian 9)からLANインターフェースの記述が下記のように変わっています。
    wlan0 ⇨ wlx0022cfea2fba
    もし、互換性の為以前の記述にする必要が有る時は、次のようにしてください。
    $ sudo nano /boot/cmdline.txt
    
      GNU nano 2.2.6               File: /boot/cmdline.txt
    dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait net.ifnames=0
    
    末尾に net.ifnames=0 を追加する


    $ sudo nano /opt/dv_ap/etc/dv_ap.conf
    
      GNU nano 2.2.6               File: /opt/dv_ap/etc/dv_ap.conf
    #########################################
    #                                       #
    #       /opt/dv_ap/etc/dv_ap.conf       #
    #                                       #
    #########################################
    #
    # Basic settings
    #
    TRUST_SERVER=trust.d-star.info
    
    #NODE_CALL=JL3ZBS B
    DVAP_CALL=JL3ZBS A
    GATEWAY_CALL=JL3ZBS A
    DEBUG=1
    DVAP_FREQUENCY=144550000
    
    ###### within -45 and -128
    DVAP_SQUELCH=-90
    
    ###### Calibration frequency within -2000 and 2000Hz
    DVAP_CALIBRATION=100
    
    ###### Auto Calibration 1:ON 0:OFF
    DVAP_AUTO_CALIBRATION=1
    
    # NIC=eth0     # Default
    NIC=wlan0
    
    # Stretchの場合、LANインターフェース名が変わっています。
    # NIC=wlx0022cfea2fba
    
    ###### if port forwarding exists uncomment UPNP=0
    #UPNP=0
    
    ###### sprit the TX/RX frequency
    #DVAP_TX_FREQUENCY=144550000
    #DVAP_RX_FREQUENCY=145550000
    
    #
    # DPRS settings
    #
    APRS_SERVER=d-prs.d-star.info:14580
    APRS_CALLSIGN=JL3ZBS
    RADIO_ID=P
    SEND_INTERVAL=60
    AUTO_RELINK=1
    BEACON_LAT=00.0000
    BEACON_LONG=000.0000
    BEACON_COMMENT=DV_AP D-PRS -> APRS
    BEACON_INTERVAL=1200
    
    #
    # Web Server setting
    #
    HTTP_PORT=8080
    
    #
    # Echo Server setting (dv_ap 00.69 & later)
    #
    ECHO_SERVER=JL3ZBS A:JL3ZBS Z
    ECHO_POSITION_SEND_INTERVAL=3600
    
    #
    # Access Status Server setting (dv_ap 00.69 & later)
    #
    STATUS=status.d-star.info:21050
    
    
    [Ctrl]+[o],[Enter],[Ctrl]+[x]で保存・終了します。

  7. dv_apを自動起動するユニットファイルを作成する。

  8. $ sudo nano /etc/systemd/system/dv_ap.service
    
      GNU nano 2.2.6               File: /etc/systemd/system/dv_ap.service
    [Unit]
    Description=7M3TJZ DV Access Point (DVAP Tool for G1)
    After=network.target
    
    [Service]
    Type=forking
    ExecStart=/usr/bin/dv_ap
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    
    

  9. 自動起動を有効にし、確認します。

  10. $ sudo systemctl enable dv_ap.service
    $ sudo reboot
    

  11. 運用ログの表示


  12. =MEMO= 表示の内容は DEBUG=0, 1, 2 のレベルで変更できます。冒頭のメモをご覧ください。
    $ sudo touch /var/log/dv_ap.log
    $ tail -f -n30 /var/log/dv_ap.log
    

    繰り返し現れるメッセージを省く場合
    (aprsに関するメッセージと自動でポートチェックするメッセージ)
    $ tail -f -n30 /var/log/dv_ap.log | egrep -v 'aprsc|M-SEARCH'
    

    WEBで管理する場合は、Raspberry Piが接続されているルータの外側のアドレス(同じLAN上で管理する場合は Raspberry Pi のIPアドレス)に ":8080" を付けて参照する。

スマートフォンのテザリングWi-Fiによるモバイル運用

  1. dv_ap.config の変更

  2. #UPNP=0 と設定されている一行のコメントアウトマーク(#)を外し UPNP=0 とする。これはUPNPがゼロ(使用しない)という意味になります。

  3. スマートフォンに、外部グローバルアドレスから dv_ap が稼働しているローカルアドレスへポートフォワードするためのアプリをインストールする。

  4. Port Fowarder(G Herbst)

    他にもいろいろ有りますが、私はこれにしました。

  5. Port Fowarder の設定
    • スパナの形をした[ツールアイコン]をタップします。
    • IP Settings]をタップします。
    • Target IP]をタップして、dv_apが稼働している Raspberry Pi のIPアドレスを入力して[OK]します。
    • Public Intarface]を選択して rmnet_data0を選択したら、[戻る]をタップしてメイン画面にします。
    • (+)ボタンの形をしたアイコンをタップして、次の2ポートを追加します。
    • incoming Port on this Device400008080
      Port on Target Device400008080
      ProtocolUDPTCP
      スマホの外側からではなく、http://192.168.xx.yy:8080 の様に内部アドレスで参照する場合は、8080 TCPの設定は不要です。
    •    START   をタップしてフォワーディングを開始します。

    これで、ホームルータに於いて、手動でポートフォワードしているのと同様の設定(スマホをアプリによってルータとして設定)をしている事になります。

  6. テザリングWi-FiとホームルータによるWi-Fiを自動切り替えしたいような場合

  7.  通常、Raspbian Jessie を立ち上げると dhcpcd.serviceが自動的にIPアドレスを取りに行き、固定にする場合は /etc/dhcpcd.conf に固定アドレスを指定するなどします。ただ、今回のような場合固定アドレスは使用できません。その様な場合 dhcpcd では接続できない状況が発生したり、不安定になったりします。
     そこで、dhcpcd.service は無効にして別の方法を使うと、家の近く50から100mくらいまではホームルータに接続していて、それ以上離れるとスマホテザリングに自動接続します。
     詳しくは、テキストモードでWi-Fi接続を安定させる(Jessie)をご覧ください。

    このケースでは、テザリングWi-Fi側でもホームルータ側でも、dv-ap.confの内容が同じで行けるように「既存のポートフォワード有り(UPNP=0)」で統一しています。

     理由は、スマホ側では uPnP によるポート設定が出来ない為、必然的に UPNP=0 にならざるを得ないからです。
     次に、このような UPNP=0 であっても、DHCPで取得したアドレスに対してポートフォワードを自動設定する方法(dv_apが行っているのと同じ方法)と、自動起動について説明します。

    • 先ず、UPnPの機能を使ってdv_apの機能(#UPNP=0の時動作)としてではなく、別途あたかも手動で既存設定が有ったかのように前もってポートフォワードを準備します。その為、次のプログラムを前もってインストールして置きます。(2017.07.11 追記)

    • $ sudo apt-get install miniupnpc
      
      $ upnpc -l                                    ポートフォワードの一覧
      $ upnpc -a 192.168.10.100 40000 40000 udp     対象アドレス 対象ポート 外側ポート プロトコル
      $ upnpc -d 40000 udp                          ポートフォワードを削除
      

    • ユニットファイルを三つ作ります。まず一つ目はポートフォワードの設定を起動するファイルです。

    • $ sudo nano /etc/systemd/system/pforward.service
      
        GNU nano 2.2.6               File: /etc/systemd/system/pforward.service
      [Unit]
      Description=uPnPc Port Forward Setting
      
      [Service]
      Type=simple
      ExecStart=/usr/local/bin/pforward
      Restart=on-failure
      
      [Install]
      WantedBy=Multi-user.target
      
      

      更にサービスによって起動される設定用のスクリプトです。

      $ sudo nano /usr/local/bin/pforward
      
        GNU nano 2.2.6               File: /usr/local/bin/pforward
      #!/bin/sh
      
      ### Stretch
      IPADDR=`ifconfig enxb827ebdabb1c | awk '/inet / {print $2}'`
      
      ### Jessie
      # IPADDR=`ifconfig wlan0 | awk '/inet / {print $2}' | awk -F: '{print $2}'` 
      
      echo $IPADDR
      upnpc -d 8080 tcp
      upnpc -d 40000 udp
      upnpc -a $IPADDR 8080 8080 tcp
      upnpc -a $IPADDR 40000 40000 udp
      
      [Ctrl]+[o],[Enter],[Ctrl]+[x]で保存し終了します。

      $ sudo chmod +x /usr/local/bin/pforward
      $ sudo systemctl start pforward.service
      $ upnpc -l
      
      実行可能ファイルに設定して、start した後、リストアップコマンドで確認します。

    • 次に、dv_apを立ち上げるユニットファイルを作成します。

    • $ sudo nano /etc/systemd/system/dv_ap.service
      
        GNU nano 2.2.6               File: /etc/systemd/system/dv_ap.service
      [Unit]
      Description=7M3TJZ DV Access Point (DVAP Tool for G1)
      After=systemd-networkd.service
      Wants=pforward.service
      
      [Service]
      Type=forking
      ExecStart=/usr/bin/dv_ap
      Restart=on-failure
      
      

      Wants= に示されるサービスは、このdv_ap立ち上げに欲しいサービスです。同様に必要なサービスの場合、Requires= という表現が有りますが、 この場合、pforward.service が失敗するとこのサービスも失敗します。つまり、テザリングの場合uPnPは失敗しますので dv_ap も立ち上がらなくなります。

    • 三つ目に dv_ap の立ち上がるタイミングを採るファイルです。

    • $ sudo nano /etc/systemd/system/dv_ap.timer
      
        GNU nano 2.2.6               File: /etc/systemd/system/dv_ap.timer
      [Unit]
      Description=dv_ap Start delay timer
      
      [Timer]
      OnBootSec=60sec          # or 1min
      #Unit=dv_ap.service
      
      [Install]
      WantedBy=timers.target
      
      

      ブートアップしたタイミングから30秒後に、Unit= で締めしたサービスを実行します。但し、ファイル名が同じ場合(dv_ap.service と dv_ap.timer)記載する必要は有りません。
      また、通常 .service ファイルには [Install] セクションが無いと起動しませんが、今回のようにタイマーを設定する場合、そちらのファイルに存在すれば不要です。

      $ sudo systemctl enable dv_ap.timer
      

      タイマー用のファイルのみ自動起動(enable)に設定します。これで dv_ap.timer が 30秒後に dv_ap.service を立ち上げ、その中で pforward.service が呼ばれます。

    これで、リブートすればテザリングWi-FiでもホームルータのWi-fiでも自動に立ち上がります。また、モバイル運用から自宅に戻り、スマホのテザリングをOFFにするだけで自動的にホームWi-Fiへの切り替えもできます。

    73 J E 3 H C Z

Back


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


    2016年5月31日火曜日

    GPIO使用時のttyAMA0 に関する設定(変わりました。)

    Back



    =MEMO=
    最初の方法は、Jessie になってからシリアルサービスの管理の方法が変更されたことに依るものです。下部の方法の様に inittab が存在しません。もし、存在していれば下の作業を行ってください。cmdline.txt の内容も若干変更されています。
    1. systemd の管理による新しい方法

      • /boot/cmdline.txt の変更

      • 次の様に入力して設定ファイルを立ち上げます。

        $ sudo nano /boot/cmdline.txt
        
          GNU nano 2.2.6                           File: /boot/cmdline.txt
        #dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
        dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
        


        元の一行をコピーします。その行にカーソルがあることを確認の上 [Ctrl]+[k]とすると一旦一行切り取ります。次に同じ場所で[Ctrl]+[u]とすると貼り付けします。これを2回繰り返すと同じ内容の行が2行複写できますので、一行に #を付けてコメントアウトしてください。(元の内容の保存です)

        次に、生きている一行から console=serial0,115200 を削除します。

        Ctrl]+[o]、[Enter]、[Ctrl]+[x]で保存して終了してください。


      • シリアルサービスを無効にする

      • $ sudo systemctl disable serial-getty@ttyAMA0.service
        


        一旦止めるだけなら

        $ sudo systemctl stop serial-getty@ttyAMA0.service
        



    2. inittab による以前の方法

      • /boot/cmdline.txt の変更

      •   GNU nano 2.2.6                           File: /boot/cmdline.txt
        #dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
        dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
        


      • /etc/inittab の変更

      • $ sudo nano /etc/inittab
        
          GNU nano 2.2.6                           File: /etc/inittab
        T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100 
        #T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100 
        


        ファイルの最後の方にある上記の一行をコメントアウトして保存します。


    Back


    2016年5月20日金曜日

    ポケットサイズDVMEGA アクセスポイント(Wi-Fi仕様)

    Back


    最近日本でも急速に増えているDVMEGAですが、Bluestack と Bluespot(Androidアプリ)を Bluetooth で接続して利用するタイプにスポットライトが当たっているようです。 当初 DVMEGAのファームウェアをアップデートするのに Arduino UNO が必要だった時もありましたが、最近ではそれもBluestackを使って出来るようになったり進化して来ています。

    私は、DVMEGAを使うなら Rasberry Piで使いたいと思っていましたので、Raspberry Piでアップデートが出来るようになったのを機会にDVMEGAを購入致しました。 その他の理由としてはWi-Fiを利用している物が多くネットワーク上で管理したい。Bleustackに使用されているBluetooth用チップは技適が通って居らず交換して使用するのは避けたいなどなど。

    ここでご紹介している D-STAR ネットワークへの接続ツール(各種ノード・DVAPなど)の運用においては 免許申請について(安田OMサイト)をご参照ください。 (2013年8月 ガイドラインが示されました。)

    ハードウェアの準備

    DVMEGA DV Raspberry PI Single band Radio hotspot

    6センチ角ほどの、Raspberry Piに差し込んで使用するモジュールです(70cmバンド 90ユーロ)。 配送料込みで112.19ユーロ(15,000円程)2週間程で着きます。 アンテナは付いていません。デュアルバンド(2m、70cm)の物もあります。

    DVMEGA ショップサイト

    Raspberry Pi A+

    2,970円(税込み、配送料別) 大きさに拘らない方はB, B+, Pi2 B, Pi3 Bの方が有線LANポートや複数のUSBポートが有るため作業はし易いと思います。(Pi3は電気食います)
    Aタイプの場合、給電タイプのUSBハブが必要となる場合があります。Bタイプをお持ちの方は設定後microSDのみ差し替えると便利。

    RSコンポーネンツ正規代理店 (株)ケイエスワイ

    PLANEX 無線LAN子機 150Mbps GW-USNano2A

    これでなくともUSB TypeAの物であれば構いません。私の場合数年来同シリーズを使用していますので設定上安心感が有り今回も利用しました。
    amazon.co.jp

    その他、アンテナ(ダミーロード)、microSDカード(8GB異常・最小イメージでは4GBでも可)、microUSBタイプ 5VDCサプライ、HDMIケーブルとディスプレイ、USBタイプキーボード・マウスなど

    ソフトウェアの準備とインストール

    1. アプリケーションセットアップ済みイメージを使う場合

    2. Western D-Star Downloads から次のイメージをダウンロードします。

      ●Jessie-based D-Star Widget image Version B,V2 and V3 Compatible
       BlueSpot対応、DV4miniインストール済み、Dashbord付属、コントロールウィジェット付き

      詳細に付いては、Western D-Star の新しいイメージをインストールしてみるをご参照ください。

    3. OSとアプリケーションを最小限に止める場合

    4. Raspbian(Jessie)のインストール for HAM をご参照戴き、PCとしての環境が整ったところで ircDDBGateway と DStarRepeater のコンパイルとインストールを行ってください。


      =MEMO= 上記の作業を行ったイメージの提供を開始致しました。こちらからダウンロード(http://downloads.todo.vc/os)出来ます。(2017.05.16 追記)

       また、ホーム Wi-Fi とスマホのテザリングなどを自動切り替えしたい方は Raspberry Pi で複数 Wi-Fi の切り替えをするを参照して設定してください。

    ソフトウェアの設定

    1. シリアルポート ttyAMA0 に関する変更設定

    2. 詳細に付いては、GPIO使用時のttyAMA0 に関する設定(変わりました。)をご覧ください。

    3. ircDDBGateway の設定

    4. 次の様に入力して設定画面を立ち上げます。

      $ sudo ircddbgatewayconfig
      


      ウィジェット付きのイメージをインストールした場合は,WDs Widget を開き,[Configure Gateway]ボタンを押すことによっても設定画面を立ち上げ出来ます。

      詳しい設定内容については,ircDDB Gateway 初めての設定をご参照ください。


    5. DStarRepeater(DVMEGA) の設定

    6. DSterRepeater の設定画面を立ち上げます。

      $ sudo dstarrepeaterconfig
      


      ゲートウェイ同様にウィジェットから立ち上げることが出来ます。この場合はリピータ1からリピータ3まで個別の設定画面になっています。

      また,コマンド立ち上げで設定したときの設定ファイルが /etc/dstarrepeater であるのに対して, この方法の場合,同ディレクトリ(/etc)内に dstarrepeater_modem1 ~ modem4 の4つの設定ファイル(以前は設定画面にもリピータが4っつ有った)に分割されます。

      従って,ウィジェットを利用したいと思ったとき,すでにコマンドで設定したファイルがあるならば,次のようにコピーしてください。(CPU やメモリの関係でウィジェトからの設定画面が落ちる場合など)

      $ sudo cp /etc/dstarrepeater /etc/dstarrepeater_modem1
      


      設定の詳細は,DStarRepeater 初めての設定をご参照ください。

    ハードウェアの一部改造

    1. DVMEGAのファームウェアを更新するためのジャンパー線を半田付けする
    2. ケーシングした時に最も面倒なのが、更新が必要となる度にハードを取り出さねばならなくなることです。そこで折角PC(Raspberry Pi)まで内蔵していて、ネットワークでそのPCをコントロール(VNC)出来るのですから、これをしない手は有りません。(更新も10秒ほどです。)

      改造の方法及び更新の仕方については、Raspbian Jessie におけるDVMEGAのファームウェアアップデートをご覧ください。

    3. ケーシングをよりコンパクトにする為に(必ずしも必要ではありません)

      • ATMega328のソケットを取り外し、直付けにしました。

      • ファームウェアの更新が、Raspgerry Piから出来るようになり、外す必要が無くなったことも理由の一つです。

      • DVMEGAのGPIOソケットの高さを、他のピンがDVMEGAの基板に接しない程度に削りました。

      • DVMEGAのGPIOソケットに合わせて、ダミーのソケットを足代わりに(安定性を増す為に)付けました。


    4. ケースの選択

    5. 極近くで運用する前提(部屋の中、又は持ち歩く)で、Wi-Fi 子機もアルミケースの中に入れました。

      また、持ち歩くときは特に1mの範囲内であることから、トップ写真の様に小型のダミーロードにしました。 ケースには、太めのアンテナも取り付けられるよう少し大きめの穴を開けてあります。

      大きさは 外寸 60x90x20mm。ちょうど100枚入り名刺ケースの内箱のサイズです。この内幅で DVMEGA+RaspberryPi A+ の幅がギリギリ入るのでケース底に絶縁用に厚手の紙を敷いただけで、敢えてビス留めなどはしていません。 因みにWi-Fi子機のUSBポート部に穴を開け、外から差し込めるようにするには 60x70x20mm でOKです。またダミーロードしか使わないなら高さ30mmで内蔵できます。

    消費電力に関する実験レポート

    これまで Raspberry Pi を使ったアイテムでは、ほぼ500mAが平均的に必要でした。最初テスト的に起動させたとき 200mA(180mA~220mA)を示していましたので、かなり期待をしてのテストでした。

    バッテリーは2013年2月に買ったちょっと古い4000mAの物ですが、11時間半持ちました。当時 5,980円でしたが今日調べたら 2,000円で買えるようです。

    サンワダイレクト ソーラー充電器 iPhone スマートフォン iPad 対応 LEDライト機能付き 4000mAh 予備バッテリー ポータブル電源 700-BTS006
    Back



    73
    J E 3 H C Z @REF047 C

    2016年5月19日木曜日

    ircDDBGateway と DStarRepeater のコンパイルとインストール

    Back



    1. ソフトウェアの準備

    2. 最新の ircDDBGatewayDStarRepeater をそれぞれの Yahoo Group からダウンロードします。 先に Windowsマシンでダウンロードして置き、OSのイメージを焼いた後、その bootパーティションにコピーしておくと素早く出来ます。(システム領域なので要注意)

      ircDDBGateway : https://groups.yahoo.com/neo/groups/ircDDBGateway/files/Beta/
      DStarRepeater   : https://groups.yahoo.com/neo/groups/pcrepeatercontroller/files/Beta/

      残念ながらそれぞれのグループは入会の認証が必要です。英文ですがWEBから簡単に申請できますので今後のためにも入会をお勧めします。 G4KLX(Jonathan Naylor)の最もオリジナルなソフトウェアが入手できます。(入会している方にダウンロードしてもらうという手もあります。)


    3. ソフトウェアのコンパイルとインストール

    4. まず,コンパイル時に必要となるライブラリーを前もってインストールしておきます。

      $ sudo apt-get -y install wx3.0-headers wx-common libwxgtk3.0-0 libwxgtk3.0-dev libwxbase3.0-0 libwxbase3.0-dev portaudio19-dev libportaudio2 build-essential libusb-dev libusb-1.0-0 libusb-1.0-0-dev
      


      sudo 以下をすべてコピーして LXTerminal に貼り付けてください。(Terminalへの貼り付けは,マウス右クリックのみ)


      =MEMO=
      ircDDBGateway と DSterRepeater のファイルをboot パーティションにコピーして置いた方は、ホームディレクトリ( /home/pi )に移動してください。bootパーティションはシステム領域ですので注意を要します。

      $ sudo mv /boot/ircDDBGateway-yyyymmdd.zip .
      $ sudo mv /boot/DStarRepeater-yyyymmdd.zip .
      

      行末のドットを忘れないようにしてください。

      WEBよりダウンロードしたとき,Linuxのホーム(ログインしたとき自分の居る基本ディレクトリー)にファイルを置いたとして,

      $ sudo unzip ircDDBGateway-yyyymmdd.zip
      $ sudo unzip DStarRepeater-yyyymmdd.zip
      

      yyyyには西暦、mmddにはそれぞれ2桁の月日を表す数字が入ります。

      この結果 ircDDBGatewayDStarRepeater という二つのフォルダ(ディレクトリ)が作成されます。


      =MEMO=
      何れ解消すると思いますが、現時点でこのままコンパイルしても何ヶ所かエラーが発生します。 従いまして、それまでの間、次の項目を参照してソースプログラムを変更してください。

      Debian 8(Jessie)におけるコンパイルエラーの回避


      それぞれのフォルダ内でコンパイルとインストールをします。

       ircDDBGatewayをコンパイル・インストールします。

      $ cd ircDDBGateway
      $ sudo make
      $ sudo make install
      $ cd
      


       DStarRepeaterをコンパイル・インストールします。

      $ cd DStarRepeater
      $ sudo make
      $ sudo make install
      $ cd
      



    Back


    2016年5月11日水曜日

    Raspbian Jessie におけるDVMEGAのファームウェアアップデート

    Back


    先般やっとDVMEGA(ラズパイ・ラジオ,Bluespot共通 UHF版)を入手。折角ラズベリーパイとドッキングして使用するので,そのファームウェアアップデートもラズベリーパイで行いたいと思っておりました。

    左記のサイトにその手順が書かれており,何件かスムーズに出来たとの情報も得ておりました。ところがいざやってみると,Jessieバージョンでは思うように行きません。

    色々調べながら何とかできましたので手順を記したいと思います。実証実験しておりませんが出来たケースはWheezy(Debian7)ではないかと思われますのでオリジナルなやり方として併記いたします。
    1. ハードウェアのジャンパー半田付け


    2. ATMEGA328のリセットピン(C45下部)とGPIOコネクタの7番ピンの間にジャンパケーブルを半田付けします。

      デュアルバンドのDVMEGAの場合は上記サイトに写真があります。
    3. Rasberry Piへ関連ソフトをインストール



    4. =MEMO= 2016/11/05時点では、最新版のRaspbian 4.4.26+ #915に於いて、下記のWheezy用のインストール方法で出来る事を確認しました。  ただし、ファームウェアアップデートの実行に於いては Jessie用のコマンドが必要でした。 ( DVMEGA_HB_V307.cpp.hex )
       2017/05/15時点にて 最新版のRaspbian 4.9.25+ #995 に於いて上記同様にインストール及びアップデート出来る事を確認しましたので Jessie専用のavrdudeインストール方法を削除しました。
      ( DVMEGA_RH_V314_JAPAN.cpp.hex = BlueDV関連のbug fixのみ)

      まず,OSを最新の状態にします。
      $ sudo apt-get update && sudo apt-get upgrade -y
      

      ●avrdudeのインストール

      $ sudo apt-get install avrdude
      

      ●その他関連ソフトのインストールと環境設定

      $ sudo apt-get install git python-dev python-rpi.gpio
      $ git clone https://github.com/openenergymonitor/avrdude-rpi.git
      $ cd avrdude-rpi
      $ sudo cp autoreset /usr/bin
      $ sudo cp avrdude-autoreset /usr/bin
      $ sudo mv /usr/bin/avrdude /usr/bin/avrdude-original
      $ sudo ln -s /usr/bin/avrdude-autoreset /usr/bin/avrdude
      
      このまま一行ずつコピーして実行してください。


    5. その他のソフトが/dev/ttyAMA0を使用していないことを確認

    6. G4KLXアプリケーションや ser2netのようなシリアルポートを使用するソフトウェアは停止してください。

      また次のようにすると、ttyAMA0を占有しているプロセスが判明するので kill します。
      $ ps -ef | grep ttyAMA0
      opendv     807   425  0 15:25 pts/0    00:00:00 grep --color=auto ttyAMA0
      $ sudo kill 425
      


    7. ファームウェアアップデートの実行

    8. Wheeayの場合
      $ avrdude -p m328p -c arduino -P /dev/ttyAMA0 -b 115200 -F -U flash:w::DVMEGA_V227_UNO_JAPAN.cpp.hex -v
      

      Jessieの場合
      $ avrdude -p ATMEGA328P -c arduino -P /dev/ttyAMA0 -b 115200 -F -U flash:w:DVMEGA_V227_UNO_JAPAN.cpp.hex -v
      
      DVMEGA_V227_UNO_JAPAN.cpp.hex は日本版ファームウェアです。

      Jessie での実行結果
      avrdude-original: Version 6.3, compiled on May 11 2016 at 16:34:20
                        Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
                        Copyright (c) 2007-2014 Joerg Wunsch
      
                        System wide configuration file is "/usr/local/etc/avrdude.conf"
                        User configuration file is "/root/.avrduderc"
                        User configuration file does not exist or is not a regular file, skipping
      
                        Using Port                    : /dev/ttyAMA0
                        Using Programmer              : arduino
                        Overriding Baud Rate          : 115200
      avrdude-original: Using autoreset DTR on GPIO Pin 7
                        AVR Part                      : ATmega328P
                        Chip Erase delay              : 9000 us
                        PAGEL                         : PD7
                        BS2                           : PC2
                        RESET disposition             : dedicated
                        RETRY pulse                   : SCK
                        serial program mode           : yes
                        parallel program mode         : yes
                        Timeout                       : 200
                        StabDelay                     : 100
                        CmdexeDelay                   : 25
                        SyncLoops                     : 32
                        ByteDelay                     : 0
                        PollIndex                     : 3
                        PollValue                     : 0x53
                        Memory Detail                 :
      
                                                 Block Poll               Page                       Polled
                          Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
                          ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
                          eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
                          flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
                          lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                          hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                          efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                          lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                          calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
                          signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
      
                        Programmer Type : Arduino
                        Description     : Arduino
                        Hardware Version: 3
                        Firmware Version: 4.4
                        Vtarget         : 0.3 V
                        Varef           : 0.3 V
                        Oscillator      : 28.800 kHz
                        SCK period      : 3.3 us
      
      avrdude-original: AVR device initialized and ready to accept instructions
      
      Reading | ################################################## | 100% 0.00s
      
      avrdude-original: Device signature = 0x1e950f (probably m328p)
      avrdude-original: safemode: hfuse reads as 0
      avrdude-original: safemode: efuse reads as 0
      avrdude-original: NOTE: "flash" memory has been specified, an erase cycle will be performed
                        To disable this feature, specify the -D option.
      avrdude-original: erasing chip
      avrdude-original: reading input file "DVMEGA_V227_UNO_JAPAN.cpp.hex"
      avrdude-original: input file DVMEGA_V227_UNO_JAPAN.cpp.hex auto detected as Intel Hex
      avrdude-original: writing flash (27546 bytes):
      
      Writing | ################################################## | 100% 4.12s
      
      avrdude-original: 27546 bytes of flash written
      avrdude-original: verifying flash memory against DVMEGA_V227_UNO_JAPAN.cpp.hex:
      avrdude-original: load data flash data from input file DVMEGA_V227_UNO_JAPAN.cpp.hex:
      avrdude-original: input file DVMEGA_V227_UNO_JAPAN.cpp.hex auto detected as Intel Hex
      avrdude-original: input file DVMEGA_V227_UNO_JAPAN.cpp.hex contains 27546 bytes
      avrdude-original: reading on-chip flash data:
      
      Reading | ################################################## | 100% 3.19s
      
      avrdude-original: verifying ...
      avrdude-original: 27546 bytes of flash verified
      
      avrdude-original: safemode: hfuse reads as 0
      avrdude-original: safemode: efuse reads as 0
      avrdude-original: safemode: Fuses OK (E:00, H:00, L:00)
      strace: |autoreset: Broken pipe
      strace: |autoreset: Broken pipe
      strace: |autoreset: Broken pipe
      strace: |autoreset: Broken pipe
      strace: |autoreset: Broken pipe
      
      avrdude-original done.  Thank you.
      
      strace: |autoreset: Broken pipe
      
    Back


    73
    J E 3 H C Z / Y. Todo at REF047 C


    2016年2月11日木曜日

    Debian 8(Jessie)におけるコンパイルエラーの回避

    Back


    少し落ち着いた感のある Jessie ですが、まだまだすんなりとは行かないところもあるようです。今回 ircDDBGateway の動いている HummingBoard(Raspberry Pi とレイアウトが全く同じ別物)に Jessie をインストールしたのを切っ掛けに Raspberry Pi にもテストインストールしてみました。

    Raspbian(Jessie)のインストールに関しては「Raspbian(Jessie)のインストール for HAM」をご参照ください。

    Western D-Star のセットアップ済みイメージをダウンロードすれば、こんな苦労は不要です。ただ、容量を少なくしたり、スイッチでオン・オフするため出来るだけ壊れにくくするためにはこの方法が必要です。

    ircDDBGatewayとDStarRepeaterのインストール準備

    1. Wheezyの最終版の辺りから、ライブラリのバージョンが 2.8 から 3.0 に上がっていますので注意

    2. $ sudo apt-get -y install wx3.0-headers wx-common libwxgtk3.0-0 libwxgtk3.0-dev libwxbase3.0-0 libwxbase3.0-dev portaudio19-dev libportaudio2 build-essential libusb-dev libusb-1.0-0 libusb-1.0-0-dev
      


      更に、2017.08.17以降の Rapbian 9 (Stretch)では、次のようにしてください。
      $ sudo apt-get -y install wx3.0-headers wx-common libwxgtk3.0-0v5 libwxgtk3.0-dev libusb-dev libusb-1.0-0-dev
      


    3. 同様に gcc C/C++コンパイラのバージョンも 4.9 にアップしています。

    G4KLXソフトウェアのコンパイル時にエラーが発生(回避方法)

     ここでの、回避方法は私の知る範囲での試行錯誤なのでプログラム的に壊してしまっているか、または的を射ているか全く確認しておりません。Jonathan にも問い合わせておりません。ただ、結果問題なくソフトウェアは稼働し、交信できています。

    ●ircDDBGateway における修正箇所

    1. RepeaterDataSet.cpp の修正

    2. ZIPファイルを解凍したフォルダ(フォルダircDDBGatewayとDStarRepeaterが見える位置)での作業を示します。

      $ sudo nano ircDDBGateway/GUICommon/RepeaterDataSet.cpp
      
        GNU nano 2.2.6          File: ircDDBGateway/GUICommonRepeaterDataSet.cpp
      wxString CRepeaterDataSet::getReflector() const
      {
              if (isDDMode())
                      return wxEmptyString;
      
              int n = m_reflector->GetCurrentSelection();
              int c = m_channel->GetCurrentSelection();
      
              if (n == 0)
                      return wxEmptyString;
      
              wxString reflector = m_reflector->GetStringSelection();
      
              reflector.Append(wxT("        "));
              reflector.Truncate(LONG_CALLSIGN_LENGTH - 1U);
              reflector.Append(wxT("A") + c);
      
              return reflector;
      }
      
      オリジナル 484行目 'A'"A" に変更します。[Ctrl]+[o]→[Enter]→[Ctrl]+[x]で保存・終了

    3. IRCDDBApp.cpp の修正

    4. $ sudo nano ircDDBGateway/ircDDB/IRCDDBApp.cpp
      
        GNU nano 2.2.6                File: ircDDBGateway/ircDDB/IRCDDBApp.cpp
             if (dt.ParseFormat(tk + wxT(" ") + timeToken, wxT("%Y-%m-%d %H:%M:%S")) == "")
      
      オリジナル 867行目 NULL""(空白文字)に置き換えます。(ダブルクォーテイション2つ、スペース無し)

    ●DStarRepeater における修正箇所

    1. MMDVMController.cpp の修正

    2. ZIPファイルを解凍したフォルダ(フォルダircDDBGatewayとDStarRepeaterが見える位置)での作業を示します。

      $ sudo nano DStarRepeater/Common/MMDVMController.cpp
      
        GNU nano 2.2.6                File: DStarRepeater/Common/MMDVMController.cpp
      CMMDVMController::CMMDVMController(const wxString& port, const wxString& path, 
      bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int 
      rxLevel, unsigned int txLevel) :                         
      CModem(),
      m_port(port),
      m_path(path),
      m_rxInvert(rxInvert),
      m_txInvert(txInvert),
      m_pttInvert(pttInvert),
      m_txDelay(txDelay),
      m_rxLevel(rxLevel),
      m_txLevel(txLevel),
      m_serial(port, SERIAL_115200, true),
      m_buffer(NULL),
      m_txData(1000U),
      
      
      MMDVMController.hの中の変数定義と、上記青色の変数の順がrx, txなので赤色の部分も同順にする(オリジナルは tx, rxの順)

    3. SoundCardReaderWriter.cpp の修正

    4. $ sudo nano DStarRepeater/Common/SoundCardReaderWriter.cpp
      
        GNU nano 2.2.6                File: DStarRepeater/Common/SoundCardReaderWriter.cpp
              unsigned int offset = 0U;
              int tmp_offset = 0U;    // for "warning: comparison between signed and unsigned integer expressions"
              int tmp_nSamples = nSamples;
              snd_pcm_sframes_t ret;
      
      /* この行を次行と置き換えるためコメントアウト
              while ((ret = ::snd_pcm_writei(m_handle, m_samples + offset, nSamples - offset)) != (nSamples - offset)) { 
      */
              while ((ret = ::snd_pcm_writei(m_handle, m_samples + offset, nSamples - offset)) != (tmp_nSamples - tmp_offset)) {
      
      オリジナル 753行目 int(singed) と unsigned int の比較(!=)は出来ないという警告なので、赤色行ですべてを singed int にキャスト(tmp_ の変数)して通しました。

    5. DStarRepeaterApp.cpp の修正

    6. $ sudo nano DStarRepeater/DStarRepeater/DStarRepeaterApp.cpp
      
        GNU nano 2.2.6                File: DStarRepeater/Common/SoundCardReaderWriter.cpp
              for (unsigned int i = 0U; i < transmitterNames.GetCount(); i++) {
                  wxString name = transmitterNames.Item(i);
                  if (!name.IsEmpty()) {
                      wxLogInfo(wxT("\tTX %u name: %s"), i + 1U, name.c_str());
                  } 
              }
              for (unsigned int i = 0U; i < receiverNames.GetCount(); i++) {
                  wxString name = receiverNames.Item(i);
                  if (!name.IsEmpty())  {
                      wxLogInfo(wxT("\tRX %u name: %s"), i + 1U, name.c_str());
                  }  
              }
      
      オリジナル 490 及び 495行目の if文に大括弧 { } を入れて構文を整えます。(オリジナルの構文はCや以前のC++コンパイラではOKでした。)

    7. DStarRepeaterD.cpp の修正

    8. $ sudo nano DStarRepeater/DStarRepeater/DStarRepeaterD.cpp
      
      上記のDStarRepeaterApp.cpp と全く同じで、オリジナルの 421, 426行目の if文に大括弧 { } を入れて構文を整えます。


     少し手間ですがこれらの修正を加えた後、ircDDBGateway 及び DStarRepeater 各フォルダ内で sudo make すればエラーが発生すること無くコンパイルが終了します。 その後さらに各フォルダ内で sudo make install すれば完了です。

    Back


    73
    J E 3 H C Z @REF047 C