ブログ

x1-debian-builderを使用したルートファイルシステムの構築について

at_takuma.fukuda
2019年8月5日 9時50分

20120/2/21改訂

x1-debian-builderとは


x1-debian-builder(at-debian-builder)は、Armadillo用のarmhfアーキテクチャに対応したDebian GNU/Linux ルートファイルシステムを
ATDE上で構築することができるツールです。
x1-debian-builderはArmadillo-IoTゲートウェイG3・G3L、Armadillo-X1に対応しています。
at-debian-builderはArmadillo-640に対応しています。
以下の文章では「x1-debian-builder」に統一して記載しますが、それぞれの機能や動作および操作方法は同様です。

x1-debian-builderによるルートファイルシステムの構築について


x1-debian-builderでは、debootstrap(Debianのルートファイルシステムアーカイブを作成するツール)を使用して
最小限のDebian GNU/Linux ルートファイルシステムを構築します。
x1-debian-builderにおけるdebootstrapの動作については下記をご参考ください。
https://users.atmark-techno.com/blog/1913/2666

そして付随する処理によってそれをArmadilloのルートファイルシステムに作り替えます。
この処理は、実行される順に並べると以下のようになります。

①ファイルのコピー・ペースト

指定したファイルをルートファイルシステム上にコピーするというものです。
開発したアプリケーションの実行ファイルやOSの設定ファイルなどをルートファイルシステム上にコピーすることが出来ます。
x1-debian-builder内の〇〇(機種名)_resourcesディレクトリの直下にディレクトリやファイルを配置すると、
ルートファイルシステムのルートディレクトリ直下にディレクトリ構造を保った状態でコピーされます。
例えばArmadillo上の

/root/example/sample.sh

というファイルをx1-debian-builderで作成したルートディレクトリに配置するには、
〇〇(機種名)_resourcesディレクトリの直下にrootディレクトリを作成し、その直下にさらにexampleディレクトリを作成して、
その直下にsample.shを配置します。
ファイルパスは以下のようになります。

x1-debian-builder/〇〇(機種名)_resources/root/example/sample.sh

ただし、〇〇(機種名)_resourcesディレクトリの直下にはresourcesというディレクトリが最初から格納されていますが、
このディレクトリはコピーされません。

②パッケージのインストール

指定したパッケージをルートファイルシステムにインストールするというものです。
アプリケーションの実行に必要なパッケージをインストールすることが出来ます。
〇〇(機種名)_resources/resources直下のpackagesファイルにパッケージ名を記入すると
ルートファイルシステムにインストールされます。
インターネット上からのダウンロードとインストールを行いますので、必ずATDEがインターネットに接続出来ている状態で実行してください。
ただし、ここでインストールされるのはapt-get installでインストールされるものだけです。
rubyのgemインストールやpythonのpipインストールによって導入するパッケージは後述の③でインストールを行います。

③ユーザ追加等の処理

指定したコマンドをルートファイルシステム上で実行するというものです。
OSやパッケージに対する設定作業を行うことが出来ます
〇〇(機種名)_resources/resources直下のfixupファイルにコマンドスクリプトを記述すると
ルートファイルシステム構築時にそれが実行されます。
前述したgemインストール等もここにコマンドを記述して実行することが出来ます。


開発中に留意すべき点


量産時にx1-debian-builderを使ったルートファイルシステムの構築をスムーズに行うためには、
以下の点について開発時に留意しておく必要があります。

①アプリケーションの実行に必要なパッケージを把握する

アプリケーション開発中は様々なパッケージをインストールすることになるかと思いますが、
その中には運用時には不要となるものもあります。
量産用のルートファイルシステムに不要なパッケージをインストールしてしまわないよう、
どのパッケージが必要であるかを把握する必要があります。

②設定操作がどのファイルに反映されるかを把握する

アプリケーション開発のために、OSやパッケージの設定の変更を行うと、その結果はいずれかのファイルに反映されます
コマンド実行によって設定が反映されるものはスクリプトにそのコマンドを記述することで対応できますが、
設定ファイルの編集が必要なものについては、その設定ファイルをコピーしてルートファイルシステムに反映する必要があります。

直接ファイルを編集して設定している場合は、ファイル名や格納パスが明確なので問題ありませんが、
何らかの設定画面を呼び出して設定を行うようなタイプのものは、その結果がどこに反映されたのかを判別するのが困難です。
しかし、ある操作を行うと、その操作の後で変化したファイルのみを検出することが出来ますので、
それを用いて設定ファイルを特定しましょう。
ある操作とは、overlayfsの有効化です。ブートローダでoverlayfsを有効化すると、
何らかの更新が行われたファイルは

/overlay/ramdisk/upper

に格納されます。
参考:https://users.atmark-techno.com/blog/53/2659
overlayfsを有効化した状態で設定操作を行えば、その結果が反映されたファイルを特定することが出来ます。
overlayfsが有効化されたままでは設定が保存されないので、
この方法で反映されるファイルを特定したら、overlayfsを解除して設定をやり直してください。
ただし、キャッシュファイルなどの不要なファイルをコピーしてしまうと、イメージ作成が正常に完了できなかったり、
作成したイメージの動作が想定と異なるものになる場合があります。
必要なファイルと不要なファイルを見極め、必要なもののみをコピーするよう留意してください。
特に/var/lib以下に格納されるキャッシュファイルはイメージ作成の妨げになる事が多いです。
rubyのgemインストールを実行した際に、/var/lib内に必要なファイルが格納されることもありますが、
このような場合もファイルをコピーしてイメージファイルへ適用するのではなく、
fixupへコマンドを追加して、スクリプト処理にてインストールを行うことを推奨いたします。

以上の点を踏まえて開発を進めると、x1-debian-builderを使用したルートファイルシステムの構築が非常にスムーズになります。

x1-debian-builderに含まれるファイルについて、ここで解説していないものについては以下を参照ください
https://users.atmark-techno.com/blog/7370/2935