Назад | Перейти на главную страницу

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

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

Вероятно, это больше проблем, чем стоит пытаться запустить кросс-компиляцию. Существуют различные способы эмуляции 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

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

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

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

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

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

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