3

私が持っているセットアップは次のようなものです: amd64 (pc) とarmelx (ARM) 用にコンパイルされたライブラリの 2 つのセットがあります。どちらも、ビルド マシンで一部のソフトウェアをクロスコンパイルするために使用されます。

最初のもの (amd64) は、apt-repository を更新apt-get installしてビルド マシンで使用することにより、問題なく更新できます。ただし、ARM 用のパッケージは、別のディレクトリへのインストールをサポートしていないため、apt でインストールしたくありません。デフォルトのディレクトリにインストールすると、バージョンが共存できませんでした。右?

dpkg -xこれまでのところ、パッケージの新しいバージョンが存在するたびに、専用の「偽の」footfsディレクトリに展開するだけで、ビルド マシンが手動で更新されていました。これは、コンパイラが他の SW をクロスコンパイルするときにも参照する場所です。問題は、これらの抽出されたパッケージまたはそのバージョンに関する情報がシステムのどこにもないことですよね? ステータスファイルにあるはずです。

私の考えは、これらのパッケージをこの footfs dir にインストールすることでしたdpkg -i <package.deb> --root=<rootfs>。これは機能しますか?debパッケージにはpost/pre-remove/installスクリプトがないため、そうではないと感じています。また、これが初めてでも機能するためには、 rootfsディレクトリ構造はどのように見える必要があり、何を含める必要がありますか? これを支援するツールはありますか?

ありがとう。

4

1 に答える 1

3

ベースの armel Debian システムを用意したら、実際にそれに入り、QEMU などを使用してその内部で armel コードを実行できます。このqemu-arm-staticツール (qemu-user-staticパッケージ内) は、Linux のbinfmt_misc機能を利用して、ARM 実行可能ファイルが QEMU ARM システム エミュレーターで直接実行されるようにすることができます。したがって、amd64 ハードウェアで実行しているときに、armel の「rootfs」内で 、 などdpkgを実行できます。apt-get

例:

my_arm_system=/mnt/arm_system
sudo cp /usr/bin/qemu-arm-static "$my_arm_system/usr/bin/"
sudo chroot "$my_arm_system" apt-get update
sudo chroot "$my_arm_system" apt-get install $somepkg
sudo chroot "$my_arm_system" /bin/bash

そもそもベース armel システムのセットアップに関して: Debootstrap は、chroot であろうとなかろうと、Debian ベース システムをセットアップするための典型的な方法です。これを使用して、異なるアーキテクチャのベース システムをインストールできますが、いくつかの追加手順が必要です。

distro=jessie   # or whatever
echo "Debootstrap phase 1"
sudo mkdir "$my_arm_system"
sudo debootstrap --arch=armel --verbose --foreign "$distro" "$my_arm_system"
sudo cp /usr/bin/qemu-arm-static "$my_arm_system"/usr/bin/
echo "Debootstrap phase 2"
sudo chroot "$my_arm_system" /debootstrap/debootstrap --second-stage

Multistrapも便利なツールです。これは、あるアーキテクチャーの Debian 環境を別のアーキテクチャーのホスト上にセットアップすること、またはより複雑な APT ソースの組み合わせを使用することを目的としています。すべてのdebインストールの「ルール」に正確に従っていないため、完璧ではありません。その仕事を合理的に可能にするために、いくつかの近道/逸脱が必要です。

于 2015-09-01T15:16:15.877 に答える