Скомпилировать пакет Debian для amd64 на машине с i386?

У меня есть i386 ubuntu hardy machine и amd64 ubuntu hardy machine. Я хочу скомпилировать пакет debian (он же deb) для машины amd64 на i386 (потому что у меня недостаточно памяти для быстрой компиляции на машине amd64). Если я сделаю dpkg-buildpackage на машине i386 он создает deb для i386, который не может быть установлен на машине amd64. Есть ли способ скомпилировать deb для amd64 на машине i386?

3 ответа

Итак, есть несколько решений для этого:

  • Установите кросс-компиляцию инструментария и используйте обычные dpkg-buildpackage построить свой пакет. Проблема в том, что создание цепочки инструментов не очень просто.
  • Используйте 32-битный chroot на вашем 64-битном компьютере для компиляции. По-видимому, это самый рекомендуемый метод. В этом посте приведен пример компиляции ядра, но этот же процесс для любого другого программного обеспечения.

Это, вероятно, больше проблем, чем стоит попробовать начать кросс-компиляцию. Существуют различные способы эмуляции 64-битных систем на 32-битных, но вы заплатите цену за производительность.

Если вы только делаете это немного, то я бы сказал, что запустите 64-битную машину на Amazon за несколько часов. Если вы делаете это много, то, возможно, получите какое-то 64-битное оборудование, или, может быть, AWS останется интересным, потому что вы платите только за то, сколько вы его используете, и вы можете запустить ферму сборки, когда захотите.

Это может дать вам несколько полезных идей: http://blog.fwbuilder.org/2009/05/building-ubuntu-deb-packages-on-amazon.html

Этот список образов систем Debian для различных архитектур и выпусков также может быть полезен: https://wiki.debian.org/Cloud/AmazonEC2Image

Одна вещь, которую я все время делаю в Debian, - это использование 64-битного ядра с 32-битным пользовательским пространством для моей обычной системы, а затем создание chroot с 64-битным пользовательским языком для сборки пакетов amd64. Структура пакетов ядра в Ubuntu немного отличается, поэтому я не знаю, возможно ли это или рекомендуется там.

Помимо этого, чистое решение заключается в использовании виртуальной машины. QEMU - очевидный выбор, потому что он может эмулировать практически все на что угодно (и это бесплатно). Вы можете использовать qemubuilder (упакованный в Ubuntu) для интеграции сборки с pbuilder. По моему опыту, это может быть немного сложно настроить, но это может стоить того, если вам придется делать это повторно. Для нескольких пакетов просто запустите QEMU и войдите вручную.

Если вы очень любите приключения, вы также можете попробовать кросс-компиляцию, но это, вероятно, намного сложнее и не работает со всеми пакетами. Ищите dpkg-cross, чтобы начать.

Или как насчет того, чтобы создать личный архив пакетов (PPA) на Launchpad и сделать так, чтобы ваш пакет был автоматически скомпилирован там.

Другие вопросы по тегам