2015-09-01 8 views
2

настройки у меня есть, как это: у меня есть два набора библиотек, скомпилированные для amd64 (ПК) и armelx (ARM). Они оба используются для перекрестного компиляции некоторого программного обеспечения на машине сборки.УСТАНОВКА ОБЪЕКТИВА кросс-скомпилированные пакеты Debian не фальсифицировать «footfs» с DPKG

Первые из них (amd64) могут быть обновлены без хлопот, обновив apt-репозиторий и используя apt-get install на машине сборки. Однако пакеты для ARM, я не хочу устанавливать с помощью apt, потому что он не поддерживает установку в другой каталог. Если я установил каталоги по умолчанию, версии не могли бы сосуществовать. Правильно?

До сих пор сборка машина была обновлена ​​вручную каждый раз, когда появилась новая версия пакетов, просто путем экстракции dpkg -x к выделенному «поддельные» footfs каталог. Именно здесь компилятор также будет смотреть, когда кросс-компиляция другого SW. Проблема в том, что информация об этих извлеченных пакетах или их версиях нигде в системе отсутствует, правильно? Он должен был находиться в файле .

Я думал, что эти пакеты установлены в этом каталоге footfs с dpkg -i <package.deb> --root=<rootfs>. Будет ли это работать? У меня такое ощущение, что этого не произойдет, потому что в пакетах deb нет сценариев post/pre-remove/install, поэтому он может работать как-то, но не для обновления? Кроме того, какова должна быть структура каталогов rootfs и что она должна содержать, чтобы это работало даже в первый раз? Есть ли инструмент для этого?

Спасибо.

+0

Теперь я понимаю, что это может быть лучше подходит для форума _superuser_ ... – daljaz

ответ

2

Как только у вас есть базовая система Debian, вы можете ввести ее и запустить в ней код Armel, используя что-то вроде QEMU. Инструмент qemu-arm-static (в пакете qemu-user-static) может использовать возможности binfmt_misc в Linux, чтобы сделать так, чтобы исполняемые файлы ARM запускались непосредственно под эмулятором системы QEMU ARM. Таким образом, вы можете запускать dpkg, apt-get и т. Д. Внутри armel «rootfs» во время работы на аппаратном обеспечении amd64.

Пример:

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 является типичным методом для установки базовой системы 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. Для того, чтобы сделать свою работу разумно возможной, требуется несколько ярлыков/отклонений.

+0

Спасибо за информацию, но это не совсем то, что я хотел. Возможно, я был неясен в моем вопросе, сложно объяснить всю установку элегантно. Моя проблема развивалась пару раз, когда я рылся глубже. Когда я задал вопрос, я был в начале решения проблемы, но теперь у меня есть неделя. Я не единственный, кто работает над этим проектом, и есть некоторые ограничения на то, что нужно изменить и как. – daljaz