Armadillo上にDebian GNU/Linuxを構築する

この章では、本格的な開発に入る前にターゲット側となるArmadilloの準備をおこないます。開発効率を上げるために、ArmadilloにDebian GNU/Linuxをインストールします。

Armadilloの標準ルートファイルシステムは、Atmark Distで作成されたinitrdです。initrdを使う方法は実環境での運用には向いていますが、ルートファイルシステムの空き容量が少ない、変更を簡単に保存できないなどの問題があるので開発段階には適切ではありません。

Armadillo上にDebian GNU/Linuxを構築しておけば、開発に役立つ様々なツールをapt-getコマンド一発でインストールできたり、セルフコンパイルできるようになったりと、大変便利です。Debian GNU/Linuxのバージョンは、ATDE5と同じ7(コードネーム "wheezy")を使用します。

4.1. 構築手順

Armadillo-400シリーズでは、カーネルイメージはmicroSDカードに、ユーザーランドのルートファイルシステムはmicroSDカードまたはUSBメモリにも配置することができます。ここでは、例としてmicroSDカードにカーネルイメージとルートファイルシステム両方を配置する手順を説明します。microSDカードは、1GB以上の容量のものが必要です。

microSDカードにルートファイルシステムを構築し、/bootディレクトリにカーネルイメージファイルを配置します。どのデバイスからカーネルイメージをロードするかは、Hermit-Atのブートオプションで指定します。また、ルートファイルシステムがどこにあるかは、カーネルパラメーターで指定します。これも、Hermit-Atで設定します。

ArmadilloにDebian GNU/Linuxをインストールする具体的な手順は、以下のようになります。

  1. microSDカードにパーティションを作成しEXT3ファイルシステムでフォーマットする。
  2. カーネルイメージファイルをmicroSDカードにコピーする。
  3. ルートファイルシステムをmicroSDカードにコピーする。
  4. Hermit-Atの設定を行う。

microSDカードにDebian GNU/Linuxをインストールする作業は、ATDEで行います。そのためATDEにSDカードを接続する必要があります。

ATDEにSDカードを接続すると次のように、自動的に/media/ディレクトリにマウントされます。本章に記載されている手順を実行するためには、次のようにSDカードをアンマウントしておく必要があります。

[ATDE ~]$ mount
(略)
/dev/sdb1 on /media/077C-C6E2 type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0077,codepage=cp437,iocharset=utf8,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks)
(略)
[ATDE ~]$ sudo umount /dev/sdb1
[ATDE ~]$

図4.1 自動マウントされたmicroSDカードのアンマウント


4.1.1. パーティションの作成とフォーマット

まず、microSDに1つのパーティションを作成し、EXT3ファイルシステムでフォーマットします。作業はATDEで行います。

[ATDE ~]$ sudo fdisk /dev/sdb

Command (m for help): d  1
Selected partition 1

Command (m for help): n  2
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4):  
Using default value 1
First sector (2048-1947647, default 2048):  3
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-1947647, default 1947647):  4
Using default value 1947647

Command (m for help): w 5
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[ATDE ~]$

図4.2 パーティション作成手順


1

まずは、既存のパーティションを削除します。複数のパーティションがある場合は、すべて削除してください。

2

新しくパーティション1にプライマリパーティションを作成します。パーティションナンバーの設定では、デフォルトのパーティション1を使用するので、そのままEnterキーを押してください。

3

開始シリンダにはデフォルト値(2048)を使用するので、そのままEnterキーを押してください。

4

最終シリンダにもデフォルト値(1947647)を使用するので、そのままEnterキーを押してください。

5

変更をmicroSDに書き込みます。

作成したパーティションに対応するブロックデバイスは、/dev/sdb1となります。

[注記]パーティション作成での注意点

使用するmicroSDカードによって仕様が異なるため、表示されるセクタ数は手順通りとはならない場合があります。

続いて、作成したパーティションをEXT3ファイルシステムでフォーマットします。フォーマットにはmke2fsコマンドを使用します。-jオプションを指定することで、EXT3ファイルシステムとして指定したブロックデバイスをフォーマットします。ルートファイルシステムを配置するパーティションは-L rootfsのオプションを指定する事でrootfsというボリュームラベルにしておきます。また、tune2fsコマンドでファイルシステムのオプションを変更します。-i 0オプションを付けることで、時間経過によるファイルシステムのチェックを行わないようにします。これは、Armadilloのリアルタイムクロックが大きくずれていた際に、ファイルシステムチェックが行われるのを抑制するためです。

[ATDE ~]$ sudo mke2fs -L rootfs -j /dev/sdb1
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
60800 inodes, 243200 blocks
12160 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=251658240
8 block groups
32768 blocks per group, 32768 fragments per group
7600 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376

Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

[ATDE ~]$ sudo tune2fs -i 0 /dev/sdb1
tune2fs 1.42.5 (29-Jul-2012)
Setting interval between checks to 0 seconds

図4.3 ファイルシステム作成手順


4.1.2. カーネルイメージファイルのコピー

microSDから起動する場合は、起動パーティションの/bootディレクトリにカーネルイメージを配置する必要があります。対応しているカーネルイメージファイルの形式は、非圧縮カーネルイメージ(Imagelinux.bin)または、圧縮イメージ(Image.gzlinux.bin.gz)のどちらかになります。

ここで説明する例では、カーネルイメージの取得にwgetコマンドを使用します。wgetコマンドで指定するURLは製品によって異なりますので、以下の表を参照し適宜読み替えてください。

尚、wgetコマンドを使用すためには、Armadilloのネットワーク設定が正しく行われている必要があります。ネットワーク設定が行われていない場合は、ご使用のネットワーク環境に合わせ、/etc/config/interfaces及び、/etc/config/resolv.confを設定しておいて下さい。

ネットワークの設定方法については、第1部の「Armadilloの基本操作」「ネットワークを使う」を参照してください。

表4.1 カーネルイメージのダウンロード先URL

製品 URL

Armadillo-420

http://download.atmark-techno.com/armadillo-420/image/linux-a400-[バージョン].bin.gz


以下にArmadillo-420での例を示します。

[ATDE ~]$ mkdir sd
[ATDE ~]$ sudo mount /dev/sdb1 sd
[ATDE ~]$ sudo mkdir sd/boot
[ATDE ~]$ cd sd/boot
[ATDE ~/sd/boot]# sudo wget http://download.atmark-techno.com/armadillo-420/image/linux-a400-[バージョン].bin.gz
[ATDE ~/sd/boot]# sudo mv linux-a400-[バージョン].bin.gz linux.bin.gz
[ATDE ~/sd/boot]# cd
[ATDE ~]# sudo umount sd

図4.4 カーネルイメージの配置


4.1.3. ルートファイルシステムの構築

Armadillo-400シリーズ用に設定済みのDebian GNU/Linuxルートファイルシステムのアーカイブは、付属DVDのdebianディレクトリか、弊社ダウンロードサイトから取得できます。アーカイブをmicroSDカードに展開することでルートファイルシステムを構築することができます。

ここで説明する例では、アーカイブの取得にwgetコマンドを使用します。wgetコマンドで指定するURLは製品によって異なりますので、以下の表を参照し適宜読み替えてください。

表4.2 Debianアーカイブのダウンロード先URL

製品 URL

Armadillo-420

http://download.atmark-techno.com/armadillo-420/debian/debian-wheezy-armel-a400-[バージョン].tar.gz


[ATDE ~]$ sudo mount /dev/sdb1 sd
[ATDE ~]$ wget http://download.atmark-techno.com/armadillo-420/debian/debian-wheezy-armel-a400-[バージョン].tar.gz
[ATDE ~]$ sudo tar zxvf debian-wheezy-armel-a400[バージョン].tar.gz -C sd
[ATDE ~]$ sudo umount sd

図4.5 ルートファイルシステムの構築


ルートファイルシステムの構築が完了したmicroSDをArmadillo-420/440/460のmicroSDスロットにmicroSDカードを挿入[31] [32]します。

4.1.4. ブートデバイスとカーネルパラメーターの設定

カーネルイメージをロードする場所は、Hermit-Atのブートデバイス設定で指定します。また、ユーザーランドの場所は、カーネルパラメーターで指定します。

Hermit-Atの設定は保守モードでおこないます。Armadilloの電源が切れた状態で、タクトスイッチ(SW1)を押しながら電源を投入し、Hermit-Atの保守モードで起動してください。

カーネルイメージをロードするデバイスの指定は、setbootdeviceコマンドを使用します。microSDカードのパーティション1に配置したカーネルイメージで起動するためには、以下のコマンドを実行してください。

hermit> setbootdevice mmcblk0p1

図4.6 ブートデバイスをmicroSDカードに指定する


カーネルパラメーターの指定は、setenvコマンドを使用します。ルートファイルシステムをmicroSDカードのパーティション1にする場合は、以下のコマンドを実行してください。

hermit> setenv console=ttymxc1 root=/dev/mmcblk0p1 noinitrd rootwait

図4.7 ルートファイルシステムをmicroSDカードに指定する


[ティップ]Hermit-Atの設定を元に戻す

Hermit-Atの設定を初期状態に戻す(カーネルイメージをロードするデバイスとルートファイルシステムの場所をフラッシュメモリにする)には、以下のコマンドを実行してください。

hermit> setbootdevice flash
hermit> clearenv

図4.8 Hermit-Atの設定を元に戻す


以上の設定をおこない、bootコマンドを実行するか再起動すると、microSDカード上に構築されたDebian GNU/Linuxで起動します。

4.2. Debian GNU/Linuxインストール後にまずすること

Armadilloにインストールした直後のDebian GNU/Linuxは、最小限の設定しかされていない状態です。この章では、最低限行わなければならない設定について説明します。

4.2.1. ログインと一般ユーザーの追加

インストール直後のDebian GNU/Linuxでは、特権ユーザーであるrootユーザーしかいません。そのため、ログインはrootユーザーで行います。rootユーザーのパスワードは「root」です。

Debian GNU/Linux 7 debian ttymxc1

debian login: root
Password:
Linux debian 3.14.36-at4 #3 PREEMPT Mon Oct 12 11:00:18 JST 2015 armv5tejl

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@debian:~# 

図4.9 Armadillo上のDebian GNU/Linuxへログインする


以降は、Armadillo上で動作するDebian GNU/Linuxのプロンプトとして、以下の表記を用います。

[darmadillo ~]#

図4.10 Armadillo上のDebian GNU/Linuxのプロンプト表記


一般ユーザーがいないと何かと不便ですので、まずは一般ユーザーを追加します。一般ユーザーの名前はguest、パスワードもguestとしましょう。

[darmadillo ~]# useradd -m guest
[darmadillo ~]# passwd guest
Enter new UNIX password: guest
Retype new UNIX password: guest
passwd: password updated successfully

図4.11 一般ユーザー(guest)の追加


4.2.2. 時刻の設定

続いて、時刻の設定をおこないます。時刻を正しく設定しておかないと、apt-get installを実行する際にワーニングが大量に表示されるなど、色々な問題が発生します。

まずは、dpkg-reconfigure tzdataでタイムゾーンを設定します。テキストベースのメニュー画面が表示されますので、タイムゾーンをJSTに設定するには[Asia]-[Tokyo]を選択してください。

[darmadillo ~]# dpkg-reconfigure tzdata
Package configuration

  lqqqqqqqqqqqqqqqqqqqqqqqqqu Configuring tzdata tqqqqqqqqqqqqqqqqqqqqqqqqqqk
  x Please select the geographic area in which you live. Subsequent         x
  x configuration questions will narrow this down by presenting a list of   x
  x cities, representing the time zones in which they are located.          x
  x                                                                         x
  x Geographic area:                                                        x
  x                                                                         x
  x                          Africa                                         x
  x                          America               a                        x
  x                          Antarctica            a                        x
  x                          Australia                                      x
  x                          Arctic Ocean          a                        x
  x                          Asia                  a                        x
  x                          Atlantic Ocean        a                        x
  x                          Europe                                         x
  x                                                                         x
  x                                                                         x
  x                   <Ok>                       <Cancel>                   x
  x                                                                         x
  mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

Package configuration

     lqqqqqqqqqqqqqqqqqqqqqqqu Configuring tzdata tqqqqqqqqqqqqqqqqqqqqqqqk
     x Please select the city or region corresponding to your time zone.  x
     x                                                                    x
     x Time zone:                                                         x
     x                                                                    x
     x                         Seoul                                      x
     x                         Shanghai            a                      x
     x                         Singapore           a                      x
     x                         Taipei              a                      x
     x                         Tashkent            a                      x
     x                         Tbilisi             a                      x
     x                         Tehran              a                      x
     x                         Tel Aviv                                   x
     x                         Thimphu             a                      x
     x                         Tokyo                                      x
     x                                                                    x
     x                                                                    x
     x                 <Ok>                     <Cancel>                  x
     x                                                                    x
     mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj


Current default time zone: 'Asia/Tokyo'
Local time is now:      Thu Jan  1 09:07:54 JST 1970.
Universal Time is now:  Thu Jan  1 00:07:54 UTC 1970.

図4.12 タイムゾーンの設定


次に、システムクロックを設定します。この時点ではntpクライアントが使用できませんので、dateコマンドで手動設定します。リアルタイムクロックがArmadillo-420/440/460に接続されており、適切に設定されている場合、システムクロックは起動時に自動で設定されます。そのため、この手順は不要です。システムクロックが現在時刻と大きくずれている場合だけ実行してください。

[darmadillo ~]# date -s "2015/10/13 00:00:00"

図4.13 システムクロックを手動設定する


システムクロックを設定した後は、それをハードウェアクロック(リアルタイムクロック)にも反映させます。ハードウェアクロックの設定はhwclockコマンドを使用しますが、DebianGNU/Linuxではそれをラップしたhwclock.shスクリプトがあるので、それを使用します。

[darmadillo ~]# /etc/init.d/hwclock.sh restart

図4.14 システムクロックをハードウェアクロックに反映する


4.2.3. パッケージのアップデート

Debian GNU/Linuxでは、セキュリティアップデートやバグフィックスのためパッケージが随時更新されています。ArmadilloにインストールしたDebian GNU/Linuxのアーカイブは最新の状態ではありませんので、パッケージをアップデートする必要があります。

パッケージの管理には、apt-getコマンドを使用します。apt-get updateでローカルに持っているパッケージのリストを最新のものに更新し、apt-get upgradeで更新可能なパッケージをすべてインストールします。

[darmadillo ~]# apt-get update
[darmadillo ~]# apt-get upgrade

図4.15 Debianパッケージのアップデート


4.2.4. FTPサーバーのインストール

ATDEとArmadilloで簡単にファイルを送受信するための方法の1つとしてFTPで転送する方法があります。この章ではArmadillo上のDebian GNU/LinuxにFTPサーバーを構築する方法について説明します。

パッケージのインストールには、apt-get installを使用します。FTPサーバーのパッケージ名は、ftpdです。

[darmadillo ~]# apt-get install ftpd

図4.16 FTPサーバーのインストール


ftpdは、スーパーサーバー(inetd)を経由して起動されます。そのため、ftpdパッケージをインストールすると、openbsd-inetdパッケージも一緒にインストールされます。Armadillo上で動作するFTPサーバーに外部からアクセス可能にするには、inetdを起動しておく必要があります。なお、次回起動時からはinetdは自動起動されるように、インストールした時点で設定されています。

[darmadillo ~]# /etc/init.d/openbsd-inetd start
Starting internet superserver: inetd.

図4.17 inetdの起動


ATDE5などからFTPでArmadilloに接続する際、ユーザー名とパスワードを要求されます。ftpdが使用するユーザー名とパスワードは、一般ユーザーのものになります。そのため、ユーザー名guest、パスワードguestでアクセスすることができます。

[ATDE ~]$ lftp ArmadilloのIPアドレス -u guest
パスワード: guest

図4.18 lftpでArmadilloのFTPサーバーに接続


[ティップ]lftpの便利な使い方

lftpコマンドでは、-eオプションでFTPコマンドを指定することができます。何度も同じファイルをArmadilloに転送する必要がある場合、一行でコマンドを書いておき、シェルのヒストリー機能を活用することで何度も同じコマンドを入力せずに済みます。

以下のコマンド例では、guestユーザーでログインし、ファイルを送信しています。一度ファイルを削除しているのは、lftpでは同じファイル名のファイルがある場合、上書きしないため何度も同じコマンドを実行してもファイルが更新されないためです。また、パスワードをコマンドラインに書いてしまっています。コマンドの履歴は同じコンピューターを使用する別のユーザーが見ることができるので、通常、コマンドラインに直接パスワードを書くことは望ましくありません。コンピューターを共有している場合は気をつけてください。

[ATDE ~]$ lftp -u guest,guest ArmadilloのIPアドレス -e "rm ファイル名;put ファイル名;quit"

図4.19 lftpを使用してArmadilloにファイルを転送


4.2.5. Telnetサーバーのインストール

Armadillo上で動作するDebian GNU/LinuxにTelnetサーバーを動作させておくと、ATDEからネットワーク経由でArmadilloを操作できるようになります。シリアルインターフェースを端末として使用できない場合などに便利ですので、本章ではTelnetサーバーの構築方法について説明します。

Telnetサーバーのインストールは、いつものようにapt-get installを使用します。パッケージ名はtelnetdです。

[darmadillo ~]# apt-get install telnetd

図4.20 Telnetサーバーのインストール


telnetdもftpdと同様に、inetdを介して起動されます。そのため、inetdが起動していない場合は、起動する必要があります。図4.17「inetdの起動」を参照してください。

ATDE5などからArmadilloのTelnetサーバーにアクセスするには、telnetコマンドを使用します。FTPサーバーと同様に、一般ユーザーguestでログインすることができます。

[ATDE ~]$ telnet ArmadilloのIPアドレス
Trying ArmadilloのIPアドレス...
Connected to ArmadilloのIPアドレス.
Escape character is '^]'.
Debian GNU/Linux 7
debian login: guest
Password: guest

図4.21 telnetでArmadilloのTelnetサーバーに接続


4.3. セルフコンパイル用ツールチェインのインストール

複雑な依存関係を持ったソフトウェアなどでは、クロスコンパイルが難しい場合もあります。そのような時のために、Armadillo上にツールチェインをインストールしてセルフコンパイルできるようにする方法を紹介します。

build-essentialパッケージをインストールすると、開発に最低限必要なパッケージをインストールすることができます。

[darmadillo ~]# apt-get install build-essential

図4.22 ツールチェインのインストール


依存関係に基づいて、gcc、g++、binutils、libc6-dev、makeなどがインストールされます。その他のライブラリなどは、必要に応じてインストールしてください。これは、ATDE5上でセルフコンパイルする場合と、変わりありません。

高速なCPUを搭載した作業用PCでクロスコンパイルする場合と比べ、Armadillo上でセルフコンパイルすると格段に時間がかかります。しかし、クロスコンパイルがどうしても難しいという場合もあるので、最後の手段として、このような方法もあることを覚えておいてください。本書では、これ以降セルフコンパイルについては取り上げません。



[31] Armadillo-420/440のmicroSDスロットは、ロック式になっています。microSDカードの着脱方法に関しては「Armadillo-400シリーズハードウェアマニュアル」をご参照ください。

[32] Armadillo-460ではSDスロットです。microSDカードを使用する場合、microSD<⇒SD変換アダプタが必要です。