Armadilloを使った製品を運用するにあたり、
openssh-serverなどをインストールしてEthernet経由でのログインを検討されることと思います。
各Armadilloシリーズの製品マニュアルでもご案内している通り、
openssh-server のような「パッケージのインストールの際に、自動的に秘密鍵を生成する」パッケージは、
ルートファイルシステムアーカイブのイメージにおいてインストールを行うと、
イメージを書き込んだArmadilloすべてが同一の秘密鍵を利用することとなってしまうため、
Armadillo を起動した後に "apt install" を使って個別にインストールすることが望ましいです。
しかし、製品量産時に個別にインストールを行う事は非常に非効率です。
そこで、効率的にArmadilloへopenssh-serverをインストールしつつ、
各Armadilloが異なる秘密鍵を利用するような手順を2つご紹介します。
この記事では、事前にパッケージファイルをダウンロードし、Armadilloの初回起動時にインストールを行うという手段をご紹介します。
もう一つの記事ではインストールしたopenssh-serverの秘密鍵を事後に書き換える手段をご紹介しておりますので、併せてご覧ください。
Armadilloを使った製品量産時に各Armadilloにopenssh-serverを効率的にインストールする方法(その2)
概要
- debパッケージをダウンロードしてルートファイルシステムアーカイブに格納する
- インストール後の初回起動時にパッケージのインストールを行う
実施環境
この記事はArmadillo-IoT A6を前提とした記載をしておりますが、
その他のArmadilloシリーズでも同様の手段がご利用可能です。
Armadillo-IoT A6ではルートファイルシステムアーカイブのビルドツールがat-debian-builderであるため、
この記事でもat-debian-builderを使用しています。
他のArmadilloシリーズに適用される場合は、それぞれに適したビルドツールをご利用ください。
パッケージのダウンロード
at-debian-builder/x1-debian-builderでは、
ルートファイルシステムアーカイブをビルドするためにARM用のDebian環境の展開を行うので、
ビルド処理の中でファイルのダウンロードを行うことが出来ます
以下のように、「apt-get install」 コマンドに「-d」というオプションを付けると、
インストールを行わず、ファイルのダウンロードのみを行います。
apt-get install -y -d openssh-server
ダウンロードしたファイルは「/var/cache/apt/archives」に格納されます。
上記コマンド実行後に、このディレクトリに格納された「*.deb」というファイルを全てコピーし、
以下のようにコマンド実行すると、インストールする事が出来ます。
dpkg -i ./*.deb
ただし、「/var/cache/apt/archives」には「apt-get install -d」でダウンロードしたファイルだけでなく、
「apt-get install」でインストールしたパッケージのキャッシュファイルが全て格納されています。
そのため、「apt-get install -d」を実行する前に、「apt-get clean」を実行してキャッシュをクリアしておく必要があります。
at-debian-builder/aiota6_resources/ersources/fixup
に以下のように追記します。
at-debian-builder/aiota6_resources/ersources/fixup (前略) apt-get -y install $PKGS #ここから apt-get clean #キャッシュクリア apt-get install -y -d openssh-server #ダウンロード cd /var/cache/apt/archives #ダウンロードしたファイルの格納先へ移動 tar zcf packages.tar.gz *.deb #ダウンロードしたファイルをファイル名を指定して圧縮(ここではpackages.tar.gzというファイルに圧縮) mv packages.tar.gz /root/ #任意のディレクトリに移動させておく(ここではルートユーザのディレクトリ) cd #ここまで #Setup locals (後略)
パッケージのインストール
インストール直後の初回起動時に、ダウンロードしたdebパッケージをインストールします。
インストール実行のために、以下のような処理内容のスクリプトファイルを作成します。
- aptパッケージファイルを解凍
- インストールを実行
- インストール完了後debパッケージファイルを削除
- スクリプトファイル自身を削除
実際のスクリプトファイル内容は以下のようになります。
/root/setup.sh cd /root #debパッケージを圧縮したファイルが格納されたディレクトリへ移動 mkdir pkg #ファイル展開先のディレクトリを作成 tar zxf packages.tar.gz -C pkg #上記で作成したディレクトリを指定してファイル展開 cd /root/pkg #ファイル展開したディレクトリへ移動 dpkg -i ./*.deb #インストールの実行 cd .. #ディレクトリ再移動 rm -r pkg #展開したファイルをディレクトリごと削除 rm packages.tar.gz #圧縮ファイルを削除 rm setup.sh #スクリプトファイル自身を削除
スクリプトファイルを実行させるための準備
作成したスクリプトファイルをArmadillo起動直後に実行させるための準備をします。
ファイル準備
作成したスクリプトファイル「setup.sh」をat-debian-builder/aiota6_resources\resoucesに格納します。
ファイルコピー
at-debian-builder/aiota6_resources\resouces/fixupに以下のように追記し、
ビルド時にファイルのコピーと実行権限の付与を行います。
(前略) cp /resources/interfaces /etc/network/interfaces #ここから cp /resources/setup.sh /root/setup.sh #ファイルコピー chmod +x /root/setup.sh #実行権限付与 #ここまで #user change the password at login (後略)
自動実行設定
起動時に上記スクリプトを自動実行させるために、
rc.localファイルへ、スクリプトファイルを呼び出すように記載します。
at-debian-builder/aiota6_resources/resources/rc.local !/bin/sh if { -f /sys/calss/leds/red/brightness }; then echo 0 > /sys/class/leds/red/brightness fi #ここから /root/setup.sh #ここまで
実行
以上でビルドしたルートファイルシステムをインストールディスク等で書き込んだ後にArmadilloを起動すると、
ダウンロードしておいたパッケージファイルを初回起動時にインストールさせられます。
ルートファイルシステムのビルド、書き込みの手順については各製品のマニュアルをご参照ください。