マルチストラップを使用して生成された Linux 用ソフトウェアの構築

マルチストラップを使用して生成された Linux 用ソフトウェアの構築

私は、マルチストラップを使用して構築された ARM CPU と Debian Jessie を搭載した組み込みデバイスに取り組んでいます。そのシステムに、わずかにパッチを適用したバージョンの ModemManager をインストールする必要があるようですが、その方法についてのガイダンスをいただきたいと思います。

これまで試したのは、multistrap によって作成された rootfs に chroot し、apt-get を使用して ModemManager のソース コードをダウンロードし、chroot してビルドすることです。これまでのところ、満足できない依存関係のため、configure スクリプトを渡すことすらできません。

ModemManager の既知の問題 (モデムのシリアル ポートをスキャンすることでハードウェアが混乱する可能性がある) を解決するには、パッチが必要です。udev ルールを使用してデバイスをブラックリストに登録することでこの問題を回避する方法はありますが、この場合、シリアル ポートは tty サブシステムの一部であり、ブラックリストはサポートされていません。ModemManager のソース コードでこれを確認しました。

これを解決するより簡単な方法があれば、私も大いに賛成ですが、今のところそれには気づいていません。

答え1

この具体的な質問は古いものですが、マルチストラップで生成された Debian rootfs に何らかのソフトウェアの修正バージョンを追加することは、マルチストラップを使用するときによくある問題です。

マルチストラップによって生成された chrootfs でソフトウェアをコンパイルするのは面倒すぎるため、クロスコンパイルとマルチストラップを混在させることはお勧めしません。

代わりに、変更したソフトウェアをコンパイルしやすい場所でコンパイルします。ターゲット ARM アーキテクチャ用のクロスコンパイル環境がすでにあるかもしれませんが、そうでない場合、今日 (そして 2016 年でも) 最も簡単な方法は、Raspberry Pi などのシングルボード Linux/ARM コンピューターを目的のターゲット OS とともに使用し、必要なビルド ツールをインストールして、変更したソフトウェアをそこでコンパイルすることです。ネイティブ コンパイルを使用しているため、クロスコンパイルを設定する必要はありません。コンパイルしたら、作成されたバイナリを PC のマルチストラップ環境にコピーします。

multistrap を通常どおり実行し、実行されて chroot 内のすべてのパッケージを構成した後、ターゲット ハードウェアで rootfs を使用する前に、変更されたバイナリを rootfs にコピーするだけです。

ここでの「バイナリ」は、コンパイルされた実行可能ファイルだけを意味する場合もありますが、カスタム .deb パッケージ (単にコピーするのではなく、最後に chroot で dpkg を使用してインストールする) を意味する場合もあります。後者の場合、.deb のバージョン番号を変更できるため、組み込みシステムがapt update; apt upgrade実行中にソフトウェア更新を取得できる場合、後で変更が元に戻されることがないため、変更の保護が強化されます。

関連情報