第5章 Howto

5.1. ネットワーク設定方法

本章では、ネットワークモジュール用いて各種ネットワークインターフェースを設定するための方法を紹介します。

node-eye においてネットワークの設定ファイルは2つあり、それぞれ用途と設定ファイルが使われるタイミングが異なります。タイミングについては 「ネットワークインターフェース設定シーケンス」 を参照してください。

表5.1 ネットワーク設定ファイル

設定ファイル用途
line.confSACM に接続するためのネットワーク設定を管理します。この設定ファイルは Armadillo 上に設定・保存します。
ネットワークモジュールコンフィグSACM と接続した後のネットワーク設定を管理します。この設定ファイルは SACM 上に設定・保存します。

5.1.1. line.conf

リモートコンフィグや死活監視などを行うためには、Armadillo と SACM が互いに通信できる環境を用意する必要があります。 line.conf は Armadillo と SACM が互いに通信できる環境を作るための設定ファイルです。

line.conf にはデフォルト設定が存在します。デフォルト設定ではネットワークインターフェースに eth0 を使い、DHCP によるIPアドレス取得を行って SACM と通信します。

そのため、下記の3つの条件が揃っている場合、line.conf を変更する必要ありません。

  • Armadillo のネットワークインターフェースに有線LAN(eth0)を使用している

  • Armadillo が DHCP によるアドレスを取得できる環境である

  • サービスアダプタの通信要件を満たしている

5.1.1.1. line.conf の設定方法

line.conf の設定にはテキストエディタを使用します。node-eye パッケージをインストールすると、line.conf は /etc/armsd/ に配置されます。

vi で line.conf を編集するには、下記のコマンドを実行してください。

[armadillo /]# vi /etc/armsd/line.conf
[ティップ]

line.conf の編集は 「line.conf コンフィグ一覧」「設定例」 を参考に行ってください。

line.conf のデフォルト設定を使用するには line.conf を空にするか、書き込んでいるコンフィグをすべてコメントアウトしてください。

line.conf を編集した後は、recovery パーティションに line.conf コピーしてください。

[armadillo /]# mount /dev/mmcblk2p3 /mnt
[armadillo /]# mkdir -p /mnt/etc/armsd/
[armadillo /]# cp /etc/armsd/line.conf /mnt/etc/armsd/line.conf
[armadillo /]# umount /mnt
[注記]

recovery パーテションにコピーした line.conf はリカバリーイメージが使用します。 ファームウェアアップデートの失敗などによりリカバリーイメージが起動した場合、SACM と通信を行うために line.conf が必要となります。

5.1.1.2. line.conf コンフィグ一覧

5.1.1.2.1. eth0 固定IP

表5.2 eth0 で 使用可能な key 一覧

key説明
ETHERNET_ENABLE無線LANの有効/無効 (true/false)
STATIC_ADDRESSIPアドレス
STATIC_NETMASKネットマスク
STATIC_GATEWAYゲートウェイ

[ティップ]

ETHERNET_ENABLE はnode-eyeパッケージ v0.2.0-1 以降で使用することができます。

5.1.1.2.2. wwan

表5.3 wwan で使用可能な key 一覧

key説明
MOBILE_ID認証 ID(ユーザー名)
MOBILE_PASSパスワード
MOBILE_APNアクセスポイント名(APN)
MOBILE_AUTH_TYPE認証方式
MOBILE_PDP_TYPEPDPタイプ

5.1.1.2.3. wlan0

表5.4 wlan0 で使用可能な key 一覧

key説明
WIRELESS_LAN_ENABLE無線LANの有効/無効 (true/false)
WIRELESS_LAN_ESSIDESSID
WIRELESS_LAN_PASSPHRASEパスフレーズ

[ティップ]

LS Pull における eth0 と wlan0 は排他になっているため、WIRELESS_LAN_ENABLE=trueに設定した場合は eth0 による LS Pull はできません。

[ティップ]

WIRELESS_LAN_ENABLE=falseに設定した場合はETHERNET_ENABLE=trueの設定を行わなくても eth0 が有効になります。

5.1.1.2.4. resolv

表5.5 resolv で使用可能な key 一覧

key説明
RESOLV_SEARCHresolv.conf の search
RESOLV_NAMESERVERresolv.conf の nameserver

5.1.1.3. 設定例

5.1.1.3.1. 3Gモバイル回線を使う
MOBILE_ID="User name"
MOBILE_PASS="Password"
MOBILE_APN="APN"
MOBILE_AUTH_TYPE="PAP"
MOBILE_PDP_TYPE="IP"
5.1.1.3.2. 固定IPを使う
ETHERNET_ENABLE=true
STATIC_ADDRESS="192.0.2.10"
STATIC_NETMASK="255.255.255.0"
STATIC_GATEWAY="192.0.2.1"

RESOLV_SEARCH="local-network"
RESOLV_NAMESERVER="192.168.10.1"
5.1.1.3.3. 無線LAN(wlan)を使う
WIRELESS_LAN_ENABLE=true
WIRELESS_LAN_ESSID="myessid"
WIRELESS_LAN_PASSPHRASE="mypresharedkey"
5.1.1.3.4. 無線LANで固定IPを使う
WIRELESS_LAN_ENABLE=true
WIRELESS_LAN_ESSID="myessid"
WIRELESS_LAN_PASSPHRASE="mypresharedkey"

STATIC_ADDRESS="192.0.2.10"
STATIC_NETMASK="255.255.255.0"
STATIC_GATEWAY="192.0.2.1"

RESOLV_SEARCH="local-network"
RESOLV_NAMESERVER="192.168.10.1"

5.1.2. ネットワークモジュールコンフィグ

ネットワークモジュールコンフィグを設定することで、リモートから Armadillo のネットワーク設定を管理できます。 ネットワークモジュールコンフィグにはデフォルト設定が無いため、必ず設定する必要があります。

5.1.2.1. 使用可能な key 一覧

ネットワークモジュールコンフィグに設定可能な key は、「ネットワークモジュールコンフィグ一覧」 を参照してください。

5.1.2.2. 設定例

以下はネットワークモジュールの設定例です。 必ず、VERSION=2, interface_***=enableが書かれていることに注目してください。

5.1.2.2.1. 3Gモバイル回線を使う
VERSION=2

interface_wwan=enable
interface_wwan_type=dhcp
interface_wwan_id=user
interface_wwan_pass=password
interface_wwan_apn=apn
interface_wwan_auth_type=PAP
interface_wwan_pdp_type=IP
interface_wwan_metric=10
5.1.2.2.2. wlanを使う
VERSION=2

interface_wlan0=enable
interface_wlan0_type=dhcp
interface_wlan0_essid=my-wireless-network
interface_wlan0_passphrase=preshared-key
interface_wlan0_metric=20
5.1.2.2.3. 固定IPアドレスを使う

eth0 を使用する場合

VERSION=2

interface_eth0=enable
interface_eth0_metric=1
interface_eth0_type=static
interface_eth0_address=192.168.10.10
interface_eth0_netmask=255.255.255.0
interface_eth0_gateway=192.168.10.1

resolv_conf_search=local-network
resolv_conf_nameserver=192.168.10.100

wlan0 を使用する場合

VERSION=2

interface_wlan0=enable
interface_wlan0_type=static
interface_wlan0_address=192.168.10.10
interface_wlan0_netmask=255.255.255.0
interface_wlan0_gateway=192.168.10.1
interface_wlan0_essid=my-wireless-network
interface_wlan0_passphrase=preshared-key
interface_wlan0_metric=20

resolv_conf_search=local-network
resolv_conf_nameserver=192.168.10.100
5.1.2.2.4. 複数のインターフェースを同時に使う
VERSION=2

interface_eth0=enable
interface_eth0_metric=1
interface_eth0_type=static
interface_eth0_address=192.168.10.10
interface_eth0_netmask=255.255.255.0
interface_eth0_gateway=192.168.10.1

interface_wwan=enable
interface_wwan_type=dhcp
interface_wwan_id=user
interface_wwan_pass=password
interface_wwan_apn=apn
interface_wwan_auth_type=PAP
interface_wwan_pdp_type=IP
interface_wwan_metric=10

interface_wlan0=enable
interface_wlan0_type=dhcp
interface_wlan0_essid=my-wireless-network
interface_wlan0_passphrase=preshared-key
interface_wlan0_metric=20

resolv_conf_search=local-network
resolv_conf_nameserver=192.168.10.100

5.2. リカバリーイメージを使って Armadillo を復旧する

本章では、リカバリーイメージを使って Armadillo を復旧する手順を紹介します。

手順5.1 リカバリーイメージを使った Armadillo の復旧

  1. リカバリーイメージで起動していることを確認する

    はじめに、node-eye コントロールパネルにログインします。

    リカバリーイメージで起動した Armadillo は、接続状態が [切断中] で表示されるため、 [切断中] の Armadillo に対し ping を実行します。

    "状態" が [成功] となった場合は復旧作業ができます。Armaidllo はリカバリーイメージで起動しているので、次の手順に進んでください。

    "状態" が [失敗] となった場合は復旧作業ができません。何らかの原因で Armadillo と SACM が接続できていないため、Armadillo を直接確認する必要があります。

  2. リカバリーイメージからプライマリイメージを書き換える

    ping が成功した Armadillo に対しファームウェアアップデートを行います。入力するカーネルとユーザーランドのダウンロードURLは、起動できるものを入力してください。 ファームウェアアップデートには時間がかかる場合があるため、[アップデート完了時に再起動する] にチェックを入れてから、実行することをおすすめします。

  3. 書き込みを行ったイメージの確認

    ファームウェアアップデートが成功し、再起動すると、書き込んだイメージが起動します。 また、SACM と通信ができると接続状態が [接続中] になります。 これでファームウェアアップデートは完了です。

    再起動後、接続状態が [切断中] → [接続中] に切り替わるまでに時間がかかる場合があります。 10分以上切り替わらない場合は、リカバリーイメージで起動していることが考えられます。この場合は、再び復旧作業を行ってください。

5.3. リカバリーイメージの起動をテストする

本章では、Armadilloに書き込んだリカバリーイメージが正常に起動するか確認する方法を説明します。

手順の中で、既にArmadillo に書き込まれているプライマリイメージを上書きします。リカバリーイメージの起動を確認した後に、元に戻すための正常なプライマリイメージファイルを用意しておいてください。

手順5.2 リカバリーイメージの起動テスト

  1. 起動しないプライマリイメージファイルを作る

    正常に起動することができないイメージを書き込んだ状況を再現するため、サイズが1バイトのファイルをgzip圧縮して不正なプライマリイメージファイルとして用意します。次の手順をATDE等のLinuxマシンで行ってください。

    [PC~]$ echo | gzip > dummy.tar.gz
    [PC~]$ md5sum dummy.tar.gz > dummy.tar.gz.md5
    [PC~]$ ls dummy*
    dummy.tar.gz    dummy.tar.gz.md5
  2. 起動しないプライマリイメージを Armadillo から接続可能なWebサーバーに配置する

    作成した2つのファイルをArmadilloがアクセスすることのできるWebサーバーに配置してください。

  3. node-eyeコントロールパネルから起動しないプライマリイメージを使ってファームウェアアップデートを実行する

    node-eye コントロールパネル で対象となる Armadillo を選択して、 不正なプライマリイメージファイル "dummy.tar.gz" へのURLを [ユーザーランド] に入力し、 [アップデート完了後に再起動する] にチェックを入れた上で、ファームウェアアップデートを実行してください。

    [カーネル] のテキストボックスには何も入力する必要はありません。

    ファームウェアアップデート (node-eye コントロールパネル)

    図5.1 ファームウェアアップデート (node-eye コントロールパネル)


  4. リカバリーイメージによってArmadilloが起動した事を確認する

    起動しないプライマリイメージファイルによるファームウェアアップデートに成功してArmadilloは再起動を実行します。 しかし、起動しないプライマリイメージによって起動が失敗するため、自動的にリカバリーイメージで再起動します。

    リカバリーイメージで再起動した Armadillo は node-eyeコントロールパネル または SACMコントロールパネルからは [切断中] として認識されますが、Ping、Traceroute、再起動、ファームウェアアップデートは実行することができます。

    起動しないプライマリイメージのアップデートによる再起動を実行してから15分以上経過した後に、 対象の Armadillo が node-eyeコントロールパネルから [切断中] として表示される事と、 Ping が実行できる事を確認してください。

    確認が終ったら正常なプライマリイメージを使ってファームウェアアップデートを実行してください。

5.4. node-eyeインストール済のユーザーランド ビルド方法

アットマークテクノが提供しているユーザーランドアーカイブには、標準でnode-eyeがインストールされていません。そのため、そのままファームウェアアップデートしてしまうとSACMに接続できなくなってしまいます。

本章では、node-eye環境をインストールしたユーザーランドの作成方法について説明します。

手順5.3 node-eye環境をインストールしたユーザーランドの作成方法

  1. x1-debian-builderの準備

    カスタマイズしたユーザーランドの作成には、専用のツールが必要です。アットマークテクノのダウンロードサイトからお使いの環境に合わせた機種,バージョンを選択し、「Debian GNU/Linux ルートファイルシステム 構築ツール」であるx1-debian-builderをATDE上にダウンロードしてください。

    ダウンロード後は以下のように解凍し、該当するディレクトリ内に入ります。

    [PC ~]$ ls
    x1-debian-builder-[version].tar.gz
    [PC ~]$ tar zxf x1-debian-builder-[version].tar.gz
    [PC ~]$ cd x1-debian-builder-[version]
    [PC ~]/x1-debian-builder-[version]$ ls
    aiotg3_resources   ax1_resources   aiotg3l_resources   build.sh
  2. パッケージインストールリストにnode-eye追加

    x1-debian-builderのビルド時にインストールされる、パッケージのリストへnode-eyeを追加します。以下のようにpackagesファイルを開き、最下部に[node-eye]を追記してください。

    [PC ~]/x1-debian-builder-[version]$ vi ax1_resources/resources/packages
    # List of packaes will install in the debootstrap chroot environment.
    # A line start with # is comment. Separate packages name with new-line or space.
    
    #Utils
    sudo
    locales
    sed
    less
    expect
    minicom
    cu
    vim-tiny
    dosfstools
    util-linux
    rsyslog
    bash-completion
    man
    dialog
    cpufrequtils
    pds6j-utils
    atmark-x1-base
    
    #Device
    usbutils
    i2c-tools
    evtest
    bluez
    
    #Network
    iptables
    network-manager
    modemmanager
    net-tools
    avahi-daemon
    avahi-autoipd
    ntpdate
    lighttpd
    curl
    wget
    traceroute
    iputils-ping
    iputils-arping
    dnsutils
    mosquitto-clients
    openssh-client
    
    #Dev
    ruby2.1
    rubygems
    bundler
    lua5.2
    node-eye
    
  3. line.confの作成

    line.confをx1-debian-builder下に作成します。

    line.confの説明,設定例は「line.conf」に記載しています。そちらを参考に、お客様のネットワーク環境に合わせたline.confを作成してください。

    [PC ~]/x1-debian-builder-[version]$ vi line.conf
  4. line.confの配置

    作成したline.confをユーザーランドに配置します。

    [PC ~]/x1-debian-builder-[version]$ cp line.conf ax1_resources/resources/

    その後ax1_resources/resources/fixupにcpコマンドを追記します。これを行うことで、node-eyeインストール時に任意のline.confへ上書きできます。

    [PC ~]/x1-debian-builder-[version]$ vi ax1_resources/resources/fixup
    #!/bin/sh
    
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    
    PKGS=$(cat /resources/packages | grep -v ^# | xargs)
    
    cp /resources/sources.list /etc/apt/sources.list
    cp /resources/atmark-techno-pin-1001 /etc/apt/preferences.d/
    
    apt-key adv --keyserver pgp.nic.ad.jp --recv-keys 3874DA771B351757
    apt-get -y update
    apt-get -y install $PKGS
    
    #Setup locales
    locale-gen
    sed -i 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
    locale-gen
    
    #Setup timezone
    echo "Asia/Tokyo" > /etc/timezone
    dpkg-reconfigure -f noninteractive tzdata
    
    #user/password/hostname
    useradd atmark
    echo "atmark:atmark" | chpasswd
    usermod -s /bin/bash -Gcdrom,floppy,audio,dip,video,plugdev atmark
    mkhomedir_helper atmark
    
    echo "root:root" | chpasswd
    usermod -Guucp,dialout root
    echo "armadillo" > /etc/hostname
    
    #fix fstab
    mkdir /opt/license
    if [ $(grep -c proc /etc/fstab) -eq 0 ]; then
        echo "proc                    /proc           proc     defaults                0 0" >> /etc/fstab
        echo "/dev/mtdblock1          /opt/license    squashfs defaults,nofail         0 0" >> /etc/fstab
    fi
    
    #fix rc.local
    cp /resources/rc.local /etc/rc.local
    cp /resources/hosts /etc/hosts
    cp /resources/line.conf /etc/armsd/line.conf
    
  5. x1-debian-builderのビルド

    設定が完了したら、x1-debian-builderをビルドしてnode-eyeインストール済のユーザーランドを生成します。

    [PC ~]/x1-debian-builder-[version]$ sudo ./build.sh
  6. ユーザーランドの生成確認

    ビルド完了後、/x1-debian-builder-[version]下にユーザーランドが生成されます。

    [PC ~]/x1-debian-builder-[version]$ ls
    aiotg3_resources   ax1_resources   aiotg3l_resources   build.sh   debian-jessie-armhf_ax1_YYYYMMDD.tar.gz

5.5. モジュールの作成方法

本章では、Armadillo に独自のモジュールを組込む手順について説明します。

モジュールを作成して Armadillo のユーザーランドに組込むためには、node-eye パッケージをインストールしておく必要があります。

5.5.1. モジュールの配置

モジュールはユーザーランドの下記のパスに配置します。

/etc/armsd/user_modules/

モジュール名はモジュール番号(ユーザー向けは4から15) + "_"で始まるファイル名で作成してください。

例えば、5_mymodule.sh というファイル名でモジュールを作成した場合、モジュール5 として実行されます。

ファイル名のモジュール番号は重複しないようにしてください。同じ番号が複数ある場合、ファイル名をasciiで ソートして若い方の1つだけがモジュールの実装として機能します。

5.5.2. モジュールのサンプル

モジュールのサンプルを以下に記載します。

#! /bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
OPS=${1}
shift

syslog_debug() {
    logger -t armsd.module.$(basename ${0}) ${1}
}

case ${OPS} in
  start)
    syslog_debug "START: <id=${1}> <version=${2}> <info=${3}> <configure=${4}>"
    ;;
  stop)
    syslog_debug "STOP: <id=${1}>"
    ;;
  reconfig)
    syslog_debug "RECONFIG: <id=${1}> <version=${2}> <info=${3}> <configure=${4}>"
    ;;
  status)
    syslog_debug "STATUS: <id=${1}> <requestfile=${2}> <resultfile=${3}>"
    syslog_debug "request: $(cat ${2})"
    echo "STATUS RESULT" > ${3}
    ;;
  *)
    exit 1
    ;;
esac

exit 0

文中のcase文で分岐する条件の OPS にはモジュールのオペレーションが文字列として代入されます。

5.5.3. モジュールのオペレーションの種類

各モジュールの case文に書く事のできるオペレーションの種類と、実行される条件は下記の通りです。

表5.6 各モジュールの case 文に書く事のできるオペレーションの種類と実行条件

オペレーション実行タイミング
startarmsdが SACM に接続を確立した直後
stopSACM または node-eye コントロールパネルで 再起動 を実行
reconfigSACMコントロールパネルで コンフィグ反映 を実行
statusSACMコントロールパネルで ステータス取得 を実行

モジュールを作る場合は、必ずしも全ての オペレーション に対応するcase文を書く必要はありません。 SACMコントロールパネルからの各オペレーションの実行方法についてはSACM マニュアル「オペレーション」タブ を参照してください。

[警告]

Armadillo-IoT ゲートウェイ G3, Armadillo-IoT ゲートウェイ G3L, Armadillo-X1 は、任意コマンド実行機能非対応です。 SACM 上から任意コマンドのオペレーションを実行しても動作しません。

5.5.4. モジュールの設計の注意点

個々のモジュールのタイムアウト時間は 180秒 です。 start/stop 等の オペレーション を呼び出してから、180秒以内に実行が終了しない 場合はモジュールの実行が中断されます。

モジュールの返り値はモジュールへのオペレーションの成功/失敗の判定に影響することはありません。 スクリプトのテスト等の用途で自由に設定することができます。

5.6. テンプレートセットを活用した複数Armadilloの一括設定

SACMコントロールパネルではテンプレートセットという仕組みを使って 複数のArmadilloに対して、同時にモジュールのコンフィグを実行することができます。 使い方は SACM service manual の テンプレートセットについてを参照してください。