LinuxForum.Fans
Тема

Кросс-компиляция пакетов под mips в Debian

Автор: NewUse 10 сообщений 2827 просмотров
21.10.2014 00:21 #397414

Сорри за лаймерский вопрос, но не ужели нет простого способа кросскопиляции deb-src пакетов в i386 для офф. поддерживаемой архитектуры?

Имеется дохлая железяка под mips64 с debian7-based ОС, имеется другая "мощная" железяка с i386 архитектуой и Debian7.6.

Необходимо пересобрать пакет freeradius с добавлением специфичных патчей.

Debian7 официально портирован под mips и пакет freeradius под данную архитектуру существует и ставится из штатного репозитоия.

Гуру, подскажите лаймеру наиболее простой способ сборки из deb-source исходников пакета на i386 под mips.

Пытался собрать multiarch toolchain, и emdebian toolchain но ни то ни другое не увенчалось успехом :(

Не верю, чтоб не было штатного метода кросс-компиляции под штатную же архитектуру, но поиски соответствующей хау-тушки не увенчались успехом, не верю, чтоб девелоперы так же мудрили с тулчейнами, должен же быть простой механизм?

Подскажите, плз,
Заранее спасибо!

21.10.2014 10:49 · отредактировано #397438
"NewUse" написал:
Пытался собрать multiarch toolchain, и emdebian toolchain но ни то ни другое не увенчалось успехом

сдаётся мне, что multiarch toolchain сейчас и есть самый Ъ способ... в чём затык случился?

"NewUse" написал:
Не верю, чтоб не было штатного метода кросс-компиляции под штатную же архитектуру

если ищешь готовый бинарный пакет, то в его существовании есть сомнения...

"NewUse" написал:
не верю, чтоб девелоперы так же мудрили с тулчейнами, должен же быть простой механизм?

для стоковой сборки пакетов используются либо нативные либо эмулируемые под qemu билд-фермы... т.к. кросс компиляция работает не для всех пакетов, а в худшем случае производит нерабочие бинарники...

ЗЫ: для сборки multiarch toolchain'а пришлось кой-чего забрать из jessie...

21.10.2014 20:50 #397533

если ищешь готовый бинарный пакет, то в его существовании есть сомнения...

Да, надеялся на готовый пакет, ясно, значит ручкаи

в чём затык случился?

не нашёл пошагового how-to, добавил репозитории с целевой архитектурой (dpkg --add-architecture mips), а дальше на сколько я понял нужен cross-build toolchain под mips, а вот как его правильно собрать и как им пользоваться -- мозгов не хватает.

На сколько я понимаю, https://wiki.debian.org/BuildingCrossCompilers там сказано и выделенно жирным, что эти кросс-тулчейны уже должны быть....
но как найти их -- я не допёр.

apt-get source freeradius
apt-get build-dep -a mips freeradius:
Build-Depends для freeradius не может быть удовлетворена, так как пакет libpcap-dev не найден
хотя пакет стоит....
dpkg-buildpackage -amips -b
не проходит (не удаётся поставить все пакеты под мипс, некоторых нет в репозитории, некоторые то ли не нужны то ли имеют другое название)

ЗЫ: для сборки multiarch toolchain'а пришлось кой-чего забрать из jessie...

можете поподробнее накидать пример для получения готовой среды для сборки под мипс, если не сложно?

21.10.2014 22:02 #397542
"NewUse" написал:
Да, надеялся на готовый пакет, ясно, значит ручкаи

если что, то тут я похоже был не прав))

"NewUse" написал:
На сколько я понимаю, https://wiki.debian.org/BuildingCrossCompilers там сказано и выделенно жирным, что эти кросс-тулчейны уже должны быть....но как найти их -- я не допёр.

а ещё там сказано:

Please note that most of this page is out-of-date. Emdebian toolchains are no longer supported, and multi-arch toolchains are the future. That said, multi-arch cross-gcc is not yet in Debian. Unofficial snapshots can be obtained from http://toolchains.secretsauce.net/

т.е. или «надо ещё чуть-чуть подождать =) или пользоваться неофициальной репой, или собирать самому...
репа у меня не завилась т.к. версия gcc не соответствует ни sid'у, ни jessie... возможно в течение недели поправят...

Сборку тулчейна делал по этой доке: https://wiki.debian.org/MultiarchCrossToolchainBuild (раздел Local building of multiarch cross-toolchains), но до конца не довёл т.к. места на харде под виртуалку найти сейчас не могу...

Из подводных камней:
На чистом wheezy сборка не работает хотя бы из-за того, что gcc староват...
Желательно перейти хотя бы на jessie полностью... (или я просто дзеном смешения ветвей debian'а плохо владею)
gcc лучше сразу брать 4.9 после сборки 4.8 у меня пакеты не установились из-за конфликтов... (хотя это может быть связано с предыдущим пунктом)
binutils самому собирать не обязательно в jessie он уже запакован: binutils-mips-linux-gnu

пока всё...

22.10.2014 23:59 #397750

СПАСИБО ОГРОМНОЕ!

Вроде победил, установил бинарный кросстул из эмдебиан репозитоия, но вот незадача:
никак не могу победить зависимости:
:~#apt-get build-dep -a mips freeradius
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
E: Зависимость типа Build-Depends для freeradius не может быть удовлетворена, так как пакет libpcap-dev не найден
Пакета под mips-архитектуру, похоже не существует, та как он под архитектуру :all
Гуру, как быть, куда копать далее?

23.10.2014 00:17 #397753
"NewUse" написал:
Гуру, как быть, куда копать далее?

Этот пакет не содержит ничего существенного, только документацию. Потому и all. При этом он зависит от libpcap0.8-dev, и я бы попробовал установить последний, а потом попробовал бы снова установить freeradius.

23.10.2014 00:42 #397756

Этот пакет не содержит ничего существенног

Да, я так и понял но в Build-Depends у freeradius значится именно он, а вот почему он не хватает архитектуру :all я так и не понял...
libpcap0.8-dev:mips стоит, поставить его параллельно с libpcap0.8-dev:i386 не удалось :(
попытка установить libpcap-dev:all приводит к попытке заменить libpcap-dev:mips на libpcap-dev:i386....

23.10.2014 21:24 #397919

так... по поводу проблем с установкой библиотек другой архитектуры... есть два ряда граблей:
1) версии для разных архитектур должны совпадать с точности до последней +b1 (подчёркнуто тут)
2) если пакет содержит исполняемые файлы (эльфы или скрипты — не важно, главное, что ложаться в /usr/bin), то он должен быть специальным образом адаптирован и пока этого не сделают с этим ничего не поделаешь, кроме как писать в дебиановские мейллисты/багзиллу. немного инфы

libpcap0.8-dev как раз относится ко вторым из-за pcap-config. сюда же относятся и многие другие -dev пакеты...

"NewUse" написал:
apt-get build-dep -a mips freeradius

пробовал так:

text
apt-get build-dep freeradius:mips

но у меня ставит нативные =(
а в начале было такое воодушивление...

После такого хочется сделать плачевный вывод, что multiarch в дебиане для кросскомпиляции, вообще говоря, не особо пригоден...
Может стоит рассмотреть альтернативы кросскомпиляции? я всё больше склоняюсь к тому, что поднять misp'овый chroot-префикс с qemu-usermod эмуляцией будет проще... К тому же избавит в будущем от потенциальных проблем...

24.10.2014 01:11 #397943

Пробовал поднять debian:mips на qemu, но под неё не оказалось дистрибутива Debian Wheezy :(((

24.10.2014 02:56 · отредактировано #397951
"NewUse" написал:
но под неё не оказалось  дистрибутива Debian Wheezy

хз где ты искал... http://cdimage.debian.org/debian-cd/7.7.0/mips/iso-cd/

и вообще похоже ты не то пробовал о чём я говорю... Алгоритм примерно такой:
(сейчас под рукой ничего нет, так что буду писать по памяти то, что выделено курсивом — очень условно)
1. mkdir debian-chroot
2. распаковываешь в debian-chroot базовую систему с мипсом... в дебе должны быть механизмы, чтобы её бутстрапить, но угадать сейчас не смогу... можно даже с платы с корня твоей железяки обычный тарбол снять (подразумевая, что там есть работоспособный apt и bash)
3. apt-get install qemu-user-mips-static
4. modprobe binfmt_misc && echo -e 'очень сложное заклинание для mips'a' >/proc/где-то-там/binfmt/misc # гуглится по ключевым словам... в принципе дебианщики могли сделать простой скрипт-обёртку над этим заклинанием
5. ln /usr/bin/qemu-user-mips debian-chroot/usr/bin # или cp если они на разных ФС
6. chroot debian-chroot /bin/bash

дальше можно работать как будто ты в нативной mips системе...само собой, сборка будет идти значительно медленнее, чем нативная, но не будет геморроя кросс компиляции...
Если не понятно, то попозже могу расписать конкретнее...

Войдите или зарегистрируйтесь, чтобы ответить.