開発環境の整備と運用

Armadillo用の標準開発環境をATDE(Atmark Techno Development Environment)といいます。 ATDEは仮想マシン上で動作するLinuxデスクトップ環境(Debian GNU/Linux)で、開発に必要なソフトウェア一式がプリインストールされています。 ATDEはVMwareイメージとして提供されているため、作業用PCのOSがWindowsであるかLinuxであるかを問わず、VMwareを実行できる環境であれば、ATDEを実行することができます。

Armadillo-600シリーズ用の標準開発環境は、ATDE7となっています。 ATDE7のベースはDebian GNU/Linux 9 (コードネーム "stretch")です。 ATDE7 のインストール及び基本的な設定方法については、Armadillo入門編「開発環境の構築と基本操作」を参照してください。

この章では、Armadillo入門編で触れなかったATDE7の運用方法について説明をおこないます。

3.1. ATDE7にソフトウェアを追加する

Debian GNU/Linuxではアプリケーションプログラムやライブラリなどのソフトウェアの管理はDebianパッケージと呼ばれるパッケージ単位で行います。 この章では、Debianパッケージを検索し、それをATDE7へインストールする方法について説明します。

3.1.1. ソフトウェアが含まれるパッケージを検索する

まず、インストールしたいアプリケーションプログラムやライブラリが含まれるパッケージのパッケージ名を知る必要があります。 パッケージ名を調べる一般的な方法には、以下のものがあります。

  • Debianのパッケージ検索[5]から検索する。
  • apt searchを使用しパッケージを検索する。
  • すでにインストールされているファイルからパッケージ名を検索する。

本章ではこれらの方法について、説明します。

[注記]apt-getとaptitude

aptと同様の機能を持つコマンドにapt-getとaptitudeがありますが、現在はaptの使用が推奨されています。

3.1.1.1. Debianパッケージページで検索する

debian.org(Debian GNU/Linuxの公式サイト)のパッケージページでDebianパッケージの検索をすることができます。 Debianのパッケージ検索でのパッケージの検索方法としては以下の方法があります。

  • パッケージ名
  • パッケージ説明文
  • ソースパッケージ名
  • パッケージに含まれるファイルのパス

それぞれの検索方法でパッケージを選択し、ダウンロードすることができます。

[注記]Debian GNU/Linuxのバージョンとアーキテクチャ

Debian GNU/Linuxには安定版(stable)、テスト版(testing)、不安定版(unstable)、旧安定版(oldstable)というリリースが存在します。 それぞれ用途・更新頻度・サポート体制が違います。

ATDE7では、2019年4月現在の安定版(stable)であるDebian GNU/Linux 9 (コードネーム "stretch")をベースに開発環境を構築しています。

また、Debianでは各種アーキテクチャ用のパッケージが提供されています。

Intel x86系CPU用のアーキテクチャ名はi386です。ATDE7では、このアーキテクチャを使用します。

ARM CPU用には、armel[6]とarmhf[7]の二つのアーキテクチャがありますが、Armadillo-600シリーズはarmhfアーキテクチャ用のパッケージを使用します。

3.1.1.2. aptコマンドで検索する

aptコマンドの引数にsearchを付けて実行することでパッケージの検索ができます。 パッケージ名やパッケージの説明に対して検索できます。

例えば「coreutils」というlsコマンドやcpコマンドなどの基本的なコマンドが含まれるパッケージを検索する場合は以下のコマンドを実行します。

[ATDE ~]$ apt search coreutils
ソート中... 完了
全文検索... 完了
bsdmainutils/oldstable,now 9.0.12+nmu1 i386 [インストール済み]
  FreeBSD 由来のユーティリティ集

coreutils/oldstable,now 8.26-3 i386 [インストール済み]
  GNU コアユーティリティ

gotail/oldstable 1.0.0+git20160415.b294095-3+b2 i386
  Go implementation of tail

libsemanage1/oldstable,now 2.6-2 i386 [インストール済み]
  SELinux ポリシー管理ライブラリ

mktemp/oldstable,oldstable 8.26-3 all
  coreutils mktemp 過渡的なパッケージ

policycoreutils/oldstable 2.6-3 i386
  SELinux core policy utilities

policycoreutils-dev/oldstable 2.6-3 i386
  SELinux core policy utilities (development utilities)

policycoreutils-gui/oldstable,oldstable 2.6-3 all
  SELinux core policy utilities (graphical utilities)

policycoreutils-python-utils/oldstable 2.6-3 i386
  SELinux core policy utilities (Python utilities)

policycoreutils-sandbox/oldstable 2.6-3 i386
  SELinux core policy utilities (graphical sandboxes)

progress/oldstable 0.13.1-1 i386
  Coreutils Progress Viewer (formerly known as 'cv')

python3-sepolgen/oldstable,oldstable 2.6-3 all
  Python3 module used in SELinux policy generation

realpath/oldstable,oldstable 8.26-3 all
  coreutils realpath 過渡的なパッケージ

図3.1 apt searchによるパッケージの検索


一番左に表示されているものが、パッケージ名です。すでにインストール済みのパッケージについては 一番右に[インストール済み]と表示されます。

3.1.1.3. すでにインストールされているパッケージから逆引きする

ATDE7にはインストールされていないソフトウェアが、Debian GNU/Linux 9.0などがインストールされている作業用PCには入っている場合があります。 この章では、ファイル名やコマンド名は分かるが、パッケージ名が分からないときに便利なコマンドを紹介します。

インストールされているファイル名や、コマンド名からパッケージを調べるにはdpkgコマンドに-Sオプションを付けて使用します。 ここでは例としてlsコマンドがどのパッケージに含まれているかを調べます。

[PC ~]$ which ls
/bin/ls
[PC ~]$ dpkg -S /bin/ls
coreutils: /bin/ls

図3.2 lsコマンドが含まれているパッケージを調べる


whichコマンドを使ってlsコマンドのパスを調べた結果を、dpkgコマンドの引数として指定しています。 dpkg -Sはファイルのパスで検索してくれます。 ファイル名ではなく、パスを使用したほうが検索結果が少なく便利です。

dpkg -S /bin/lsを実行した結果から、lsコマンドはcoreutilsパッケージに含まれていることが分かります。

3.1.2. パッケージをインストールする

インストールしたいパッケージのパッケージ名が分かれば、apt installでパッケージをインストールできます。 apt installは、指定されたパッケージ名のパッケージをダウンロードし、インストールまでを行います。

例として、SSHサーバーのopenssh-serverパッケージをインストールする場合、図3.3「apt installによるパッケージのインストール」のようになります。

[ATDE ~]$ sudo apt install openssh-server
[sudo] atmark のパスワード:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  icedtea-netx icedtea-netx-common
これを削除するには 'sudo apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  openssh-sftp-server
提案パッケージ:
  molly-guard monkeysphere rssh ssh-askpass ufw
以下のパッケージが新たにインストールされます:
  openssh-server openssh-sftp-server
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。
419 kB のアーカイブを取得する必要があります。
この操作後に追加で 1,189 kB のディスク容量が消費されます。
続行しますか? [Y/n]
取得:1 http://ftp.jp.debian.org/debian stretch/main i386 openssh-sftp-server i386 1:7.4p1-10+deb9u7 [45.0 kB]
取得:2 http://ftp.jp.debian.org/debian stretch/main i386 openssh-server i386 1:7.4p1-10+deb9u7 [374 kB]
419 kB を 0秒 で取得しました (644 kB/s)
パッケージを事前設定しています ...
以前に未選択のパッケージ openssh-sftp-server を選択しています。
(データベースを読み込んでいます ... 現在 185232 個のファイルとディレクトリがインストールされています。)
.../openssh-sftp-server_1%3a7.4p1-10+deb9u7_i386.deb を展開する準備をしています ...
openssh-sftp-server (1:7.4p1-10+deb9u7) を展開しています...
以前に未選択のパッケージ openssh-server を選択しています。
.../openssh-server_1%3a7.4p1-10+deb9u7_i386.deb を展開する準備をしています ...
openssh-server (1:7.4p1-10+deb9u7) を展開しています...
openssh-sftp-server (1:7.4p1-10+deb9u7) を設定しています ...
systemd (232-25+deb9u12) のトリガを処理しています ...
man-db (2.7.6.1-2) のトリガを処理しています ...
openssh-server (1:7.4p1-10+deb9u7) を設定しています ...

Creating config file /etc/ssh/sshd_config with new version
Creating SSH2 RSA key; this may take some time ...
2048 SHA256:IeCEsCfh2kQ9vClX2pLTY9BmWxRxc9ki4PLS/BM43CM root@atde7 (RSA)
Creating SSH2 ECDSA key; this may take some time ...
256 SHA256:PjOjXxOksmocHq4pSn6ufXQ+BKdL8hnIDk/iiPpqCFs root@atde7 (ECDSA)
Creating SSH2 ED25519 key; this may take some time ...
256 SHA256:YhoEp0UJblQR3eIEiZmpdUP9nsPSHhDKajfgrHIdZOw root@atde7 (ED25519)
Created symlink /etc/systemd/system/sshd.service → /lib/systemd/system/ssh.service.
Created symlink /etc/systemd/system/multi-user.target.wants/ssh.service → /lib/systemd/system/ssh.service.
systemd (232-25+deb9u12) のトリガを処理しています ...

図3.3 apt installによるパッケージのインストール


aptコマンドにはいろいろな機能が備わっています。 詳しくはman aptを参照してください。

3.2. ATDE7にクロス開発用ライブラリをインストールする

ここでは、クロス開発用ライブラリパッケージのインストール方法を紹介します。 ATDE7に、クロス開発用ライブラリパッケージをインストールする手順は難しくありません。

まずは、次のコマンドを実行します。

[ATDE ~]$ sudo dpkg --add-architecture armhf

図3.4 armhfアーキテクチャをdpkgのarchitectureリストに追加する


このコマンドを実行すると、armhfアーキテクチャ用のパッケージを--force-architectureを使用せずにインストールできるようになります。

[ティップ]

次のコマンドを実行すると、architectureリストを表示できます。 図3.4「armhfアーキテクチャをdpkgのarchitectureリストに追加する」がうまくいっていれば、システムコンソールにarmhfが表示されます。

[ATDE ~]$ dpkg --print-foreign-architectures
armhf

図3.5 dpkgのarchitectureリストを表示する


以上で準備は完了です。

例として、armhf用のlibboostの開発用パッケージ(libboost-system-dev:armhf)をインストールしてみます。

[ティップ]パッケージ名の最後が-devのパッケージ

パッケージ名の最後が-devになっているパッケージは開発用のものです。開発 用パッケージにはヘッダーファイルなどが入っています。例えばlibjpeg62パ ッケージの開発用パッケージ名は、libjpeg62-devになります。libjpeg62を使 用するソースコードをコンパイルする場合は、libjpeg62-devパッケージも必 要になります。

クロス開発を行う場合はこのようなケースが多いので、新しいクロス開発用パッ ケージをインストールする場合、開発用パッケージもインストールしておくの が良いでしょう。

[ATDE ~]$ sudo apt update && sudo apt install libboost-system-dev:armhf
無視:1 http://download.atmark-techno.com/debian stretch InRelease
ヒット:2 http://download.atmark-techno.com/debian stretch Release
ヒット:4 http://security.debian.org/debian-security stretch/updates InRelease
無視:5 http://ftp.jp.debian.org/debian stretch InRelease
ヒット:6 http://ftp.jp.debian.org/debian stretch-updates InRelease
ヒット:7 http://ftp.jp.debian.org/debian stretch Release
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
パッケージはすべて最新です。
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  libasan3:armhf libatomic1:armhf libboost-system1.62-dev:armhf
  libboost-system1.62.0:armhf libboost1.62-dev:armhf libgcc-6-dev:armhf
  libgomp1:armhf libstdc++-6-dev:armhf libubsan0:armhf
提案パッケージ:
  libboost1.62-doc:armhf libboost-atomic1.62-dev:armhf
  libboost-chrono1.62-dev:armhf libboost-context1.62-dev:armhf
  libboost-coroutine1.62-dev:armhf libboost-date-time1.62-dev:armhf
  libboost-exception1.62-dev:armhf libboost-fiber1.62-dev:armhf
  libboost-filesystem1.62-dev:armhf libboost-graph1.62-dev:armhf
  libboost-graph-parallel1.62-dev:armhf libboost-iostreams1.62-dev:armhf
  libboost-locale1.62-dev:armhf libboost-log1.62-dev:armhf
  libboost-math1.62-dev:armhf libboost-mpi1.62-dev:armhf
  libboost-mpi-python1.62-dev:armhf libboost-program-options1.62-dev:armhf
  libboost-python1.62-dev:armhf libboost-random1.62-dev:armhf
  libboost-regex1.62-dev:armhf libboost-serialization1.62-dev:armhf
  libboost-signals1.62-dev:armhf libboost-test1.62-dev:armhf
  libboost-thread1.62-dev:armhf libboost-timer1.62-dev:armhf
  libboost-type-erasure1.62-dev:armhf libboost-wave1.62-dev:armhf
  libboost1.62-tools-dev:armhf libmpfrc++-dev:armhf libntl-dev:armhf
  libstdc++-6-doc:armhf
以下のパッケージが新たにインストールされます:
  libasan3:armhf libatomic1:armhf libboost-system-dev:armhf
  libboost-system1.62-dev:armhf libboost-system1.62.0:armhf
  libboost1.62-dev:armhf libgcc-6-dev:armhf libgomp1:armhf
  libstdc++-6-dev:armhf libubsan0:armhf
アップグレード: 0 個、新規インストール: 10 個、削除: 0 個、保留: 0 個。
9,587 kB のアーカイブを取得する必要があります。
この操作後に追加で 137 MB のディスク容量が消費されます。
続行しますか? [Y/n]
:
:
:

図3.6 armhf用のlibboostの開発用パッケージのインストール


図3.6「armhf用のlibboostの開発用パッケージのインストール」のログを見ると分かりますが、libgcc1:armhfやlibgcc-6-dev:armhfなど、libboostが依存しているパッケージも一緒にインストールされます。 このため、アプリケーションプログラムの開発者がパッケージの依存関係を気にする必要はありません。

libboostを利用したアプリケーションプログラムをArmadillo上で動作させる際は、libboostをArmadilloにインストールします。 もちろん、この時もパッケージの依存関係は自動的に処理され、libboostと一緒にlibboostの動作に必要なパッケージがインストールされます。

[armadillo ~]# apt update && apt install l
ibboost-system1.62.0
Ign:1 http://download.atmark-techno.com/debian stretch InRelease
Get:2 http://download.atmark-techno.com/debian stretch Release [8872 B]
Get:3 http://download.atmark-techno.com/debian stretch Release.gpg [833 B]
Ign:4 http://ftp.jp.debian.org/debian stretch InRelease
Get:5 http://security.debian.org stretch/updates InRelease [94.3 kB]
Hit:6 http://ftp.jp.debian.org/debian stretch Release
Get:7 http://download.atmark-techno.com/debian stretch/main Sources [7365 B]
Get:8 http://download.atmark-techno.com/debian stretch/non-free Sources [2018 B]
Get:9 http://download.atmark-techno.com/debian stretch/main armhf Packages [9711
 B]
Get:10 http://download.atmark-techno.com/debian stretch/non-free armhf Packages
[15.4 kB]
Get:12 http://security.debian.org stretch/updates/main Sources [211 kB]
Get:13 http://security.debian.org stretch/updates/main armhf Packages [503 kB]
Get:14 http://security.debian.org stretch/updates/main Translation-en [232 kB]
Fetched 1085 kB in 7s (153 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
8 packages can be upgraded. Run 'apt list --upgradable' to see them.
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  libboost-system1.62.0
0 upgraded, 1 newly installed, 0 to remove and 8 not upgraded.
Need to get 32.1 kB of archives.
After this operation, 56.3 kB of additional disk space will be used.
Get:1 http://ftp.jp.debian.org/debian stretch/main armhf libboost-system1.62.0 a
rmhf 1.62.0+dfsg-4 [32.1 kB]
Fetched 32.1 kB in 0s (231 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package libboost-system1.62.0:armhf.
(Reading database ... 41508 files and directories currently installed.)
Preparing to unpack .../libboost-system1.62.0_1.62.0+dfsg-4_armhf.deb ...
Unpacking libboost-system1.62.0:armhf (1.62.0+dfsg-4) ...
Processing triggers for libc-bin (2.24-11+deb9u4) ...
Setting up libboost-system1.62.0:armhf (1.62.0+dfsg-4) ...
Processing triggers for libc-bin (2.24-11+deb9u4) ...

図3.7 Armadilloへのlibboostのインストール




[6] Debian/armelはハードウェア浮動小数点演算ユニット (FPU) をサポートしていない、古い32ビットのARMプロセッサを対象としています。

[7] Debian/armhfは最低でも ARMv7 アーキテクチャにARMベクトル浮動小数点演算仕様のバージョン3 (VFPv3) を実装した新しい32ビットのARMプロセッサを対象としています。