Как собрать порты для другой архитектуры?

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
paa
проходил мимо
Сообщения: 4
Зарегистрирован: 2013-08-10 13:14:28

Как собрать порты для другой архитектуры?

Непрочитанное сообщение paa » 2013-08-10 13:32:12

Доброго времени суток!

Проконсультируйте плз, не думал, что придётся когда-нибудь на форуме спрашивать.

Имею два компа - шустрый десктоп (Freebsd 9.1 amd64) и тормозной ноутбук на P3-1000 (Freebsd 9.1 i386). Софт ставлю исключительно из портов, соответственно на тормозном ноуте они собираются несколько дней. Раньше я делал так: ставил фрю i386 на отдельный винт, пихал его в шустрый десктоп, собирал порты в пакеты txz, а с ноута по sftp забирал их и ставил c pkg_add. Всё хорошо, но шаманство с винтами надоело. Вопрос - как можно собрать порты для i386 в установленной amd64, а то надоело разбирать комп и перетыкать винты туда-сюда (тем более, что у меня их несколько в gmirror). Пробовал ставить фрю на USB HDD, чтобы хоть попроще стало, но при загрузке с USB не отрабатывает второй загрузчик, похоже, косяк с биосом. Вот и ищу возможность собирать "чужие" порты без танцев с бубнами.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: Как собрать порты для другой архитектуры?

Непрочитанное сообщение FreeBSP » 2013-08-10 14:10:19

http://ray-freebsd.blogspot.ru/2011/09/ ... eebsd.html
Есть смысл собрать клетку на хост-машине под целевую архитектуру, и уже в клетке собирать порты. такой путь мне представляется наиболее правильным, поскольку ./configure будет работать в х86 окружении(хоть и на х64 ядре)
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

paa
проходил мимо
Сообщения: 4
Зарегистрирован: 2013-08-10 13:14:28

Re: Как собрать порты для другой архитектуры?

Непрочитанное сообщение paa » 2013-08-10 14:18:49

Благодарю, попробую копать в этом направлении.

Аватара пользователя
Neus
капитан
Сообщения: 1828
Зарегистрирован: 2008-09-08 21:59:56

Re: Как собрать порты для другой архитектуры?

Непрочитанное сообщение Neus » 2013-08-11 21:24:01

Ноуту на пенсию пора :-)

paa
проходил мимо
Сообщения: 4
Зарегистрирован: 2013-08-10 13:14:28

Re: Как собрать порты для другой архитектуры?

Непрочитанное сообщение paa » 2013-08-11 22:02:56

Не не, мне только ssh, nfs и rs232 порт от него нужны, так что ещё поработает. Да и кина исправно кажет, и в инет ходит.

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: Как собрать порты для другой архитектуры?

Непрочитанное сообщение FreeBSP » 2013-08-11 23:07:17

как успехи?
у меня собралось с небольшими правками
чисто из интереса
[0:02]~/# cat cross-compile.sh

Код: Выделить всё

[ -z "$1" ] && exit
echo $1
cd $1
TARGET=i386
TARGET_ARCH=i386
SRC_TREE=/usr/src

#cd ${SRC_TREE}
#make toolchain TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} TARGET_CPUARCH=${TARGET}

cd $1
make clean
make configure
PATH=/usr/obj/${TARGET}/${SRC_TREE}/tmp/usr/bin:/usr/obj/${TARGET}/${SRC_TREE}/tmp/usr/sbin:${PATH} make
[0:03]~/# sh -x cross-compile.sh /usr/ports/audio/beep/

Код: Выделить всё

+ [ -z /usr/ports/audio/beep/ ]
+ echo /usr/ports/audio/beep/
/usr/ports/audio/beep/
+ cd /usr/ports/audio/beep/
+ TARGET=i386
+ TARGET_ARCH=i386
+ SRC_TREE=/usr/src
+ cd /usr/ports/audio/beep/
+ make clean
===>  Cleaning for beep-1.0
+ make configure
===> Fetching all distfiles required by beep-1.0 for building
===>  Extracting for beep-1.0
=> SHA256 Checksum OK for beep-1.0.tar.gz.
===>  Patching for beep-1.0
/usr/bin/sed -i.bak 's|machine/speaker\.h|dev/speaker/speaker.h|'  /usr/ports/audio/beep/work/beep/beep.c
===>  Configuring for beep-1.0
+ PATH=/usr/obj/i386//usr/src/tmp/usr/bin:/usr/obj/i386//usr/src/tmp/usr/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin make
===>  Building for beep-1.0
Warning: Object directory not changed from original /usr/ports/audio/beep/work/beep
cc -O2 -pipe -fno-strict-aliasing  -I/usr/local/include -L/usr/local/lib -std=gnu99 -fstack-protector  -c beep.c
cc -O2 -pipe -fno-strict-aliasing  -I/usr/local/include -L/usr/local/lib -std=gnu99 -fstack-protector   -o beep beep.o
gzip -cn beep.1 > beep.1.gz
[0:03]~/# file /usr/ports/audio/beep/work/beep/beep

Код: Выделить всё

/usr/ports/audio/beep/work/beep/beep: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), dynamically linked (uses shared libs), for FreeBSD 8.3 (803500), not stripped
[0:03]~/# uname -mrs

Код: Выделить всё

FreeBSD 8.2-STABLE amd64
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

paa
проходил мимо
Сообщения: 4
Зарегистрирован: 2013-08-10 13:14:28

Re: Как собрать порты для другой архитектуры?

Непрочитанное сообщение paa » 2013-08-15 22:16:26

У меня по-простому не получилось, похоже дело в неверной заточке /dev/hands...

Зато получилось методом погеморнее, вот так:

Код: Выделить всё

mkdir /test
cd /usr/src
make buildworld TARGET=i386 TARGET_ARCH=i386
make installworld TARGET=i386 TARGET_ARCH=i386 DESTDIR=/test
cp -R /etc /test
cp -R /usr/ports /test/usr
chroot /test
mount -t devfs devfs /dev
mkdir /packages
setenv PACKAGES /packages
cd /usr/ports/misc/mc
make package-recursive
После этого готовые пакетики под i386 забираю NFS'ом из /test/packages/All

fidaj
мл. сержант
Сообщения: 136
Зарегистрирован: 2009-12-19 20:54:03

Re: Как собрать порты для другой архитектуры?

Непрочитанное сообщение fidaj » 2013-08-15 22:30:03

ports-mgmt/poudriere в помощь