
CI
bitbucket-pipelinesなどの一般的なシステムで実行するために、Docker仮想マシンでRaspberry Piイメージの生成を自動化しようとしています。
物理システムでは、「テンプレート」イメージを使用し、それをローカルディレクトリに分割し、スクリプトで埋め、アンマウントします。インストールするには、次のスクリプトを使用します。
loopdevice=`losetup -f --show -P images/template.img`
echo $loopdevice > loopdevice
mkdir -p images/p1
mkdir -p images/p2
mkdir -p images/p3
mount ${loopdevice}p1 images/p1
mount ${loopdevice}p2 images/p2
mount ${loopdevice}p3 images/p3
(画像にはそれぞれ3つのディレクトリにマウントされている3つのパーティションが含まれています。)
残念ながら、Dcokerコンテナ内のループバックデバイスは許可なく使用できず、Bitbucketパイプライン内で権限を付与することもできません。ここでは、行き止まりの路地が見えます。
それでは、問題は、ファイルシステムイメージファイルをループバックデバイスにマウントせずに操作できるLinuxツールがありますか?
答え1
- 要件に応じてファイルシステムを操作するツールがあります。その一つはツールボックスFAT ファイルシステムをサポートするパッケージです。もう一つはe2ツール、EXT2、EXT3 ファイルシステムを実装します。どちらもdebian Linuxや他の多くのオペレーティングシステムで利用可能です。
- これらのツールはパーティションのイメージを処理できない可能性があります。これは問題ではありません。テンプレートをパーティションテーブルとパーティションコンテンツの別々のファイルに分割し(おそらくあらかじめ)、ファイルシステムイメージにファイルを追加してから、フラグメントを
cat
正しい順序で集めて最終ディスクイメージを作成するだけです。
答え2
使用してお勧めしますguestfish
、これは以下の一部ですlibguestfs、仮想マシンのディスクイメージにアクセスして変更するためのライブラリ。
OpenStackドキュメントに、権限が必要ないツールの有用な説明が含まれていることがわかりました。画像の修正 — 仮想マシンの画像ガイドドキュメント
多くの非連続的な変更を行う場合は、guestfish
デーモンを実行し、リモートコントロールモードを使用すると利点が得られます。これにより、開始時間を(些細ではありませんが)節約できます。
バラよりguestfish
ソケットによるリモートコントロールマニュアルの内容guestfish
。