LINUX.ORG.RU

[gentoo][crossdev] куда копать

 ,


0

1

По http://www.gentoo.org/proj/en/base/embedded/handbook/index.xml, http://www.gentoo.org/doc/en/distcc.xml и http://www.gentoo.org/doc/en/cross-compiling-distcc.xml собрал себе стабильный кросс-тулчейн для i686, скомпилировал ядро и часть системы. Система загружается, но практически голая — кросс-тулчейном не собирается большая часть мира, не может собраться даже последний баш. Отсоединившись от большого компа и попробовав собрать на целевой машинке (нетбук с атомом) @system, упёрся в самые разнообразные ошибки, и гуглятся они всё хуже и хуже, что делает мой зад раскаляться, ведь это значит, что я ССЗБ, но при этом не могу понять, где именно накосячил. Вот emerge --info с нетбука и make.conf.

Deleted

Ответ на: комментарий от madcore

Всего тулчейна. Специально синкал портежи на большой машине ираспаковывал свежий стейдж для бука. Потом ещё специально проверил — весь тулчейн одинаковый. По крайней мере, был изначально. Был момент, когда udev конфликтовал с двумя своими версиями и я добавил -u к емержу.

Deleted
()
Ответ на: комментарий от qnikst

Кросс-компиляция реализовывалась с расчётом на использование через distcc в дальнейшем.

Deleted
()
Ответ на: комментарий от qnikst

К тому же, хотя я могу и ошибаться, сборка в чруте невозможна или как минимум связана с большими трудностями, если $CBUID и $CTARGET различаются.

Deleted
()
Ответ на: комментарий от Deleted

Прекрасно собирал в chroot 32 битную систему, chroot из 64 битной системы.

mount /dev /mnt/chroot/dev
mount -t proc none /mnt/chroot/proc
cp /etc/resolv.conf /mnt/chroot/etc
linux32
chroot /mnt/chroot
source /etc/profile

А дальше пляшите как хотите.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Но это же на один раз. А потом как? Пятнадцать болтов на сундук мертвеца, йо-хо-хо и жестак в компьютер?

Deleted
()
Ответ на: комментарий от Deleted

можно rsync на target запускать, но если нужно n компов так поддерживать разных. то не прокатит.

qnikst ★★★★★
()
Ответ на: комментарий от Deleted

Можно собирать emerge -b pack1 pack2
В /etc/make.conf записать

PKGDIR=/usr/portage/pkgdir (или оставить по дефолту), туда будут складываться архивы с уже собраными пакетами, монтируешь через NFS (или флешкой переносишь:) ), на нетбуке монтируешь и /etc/make.conf записываешь куда примонтировал.

ymuv ★★★★
()

Если на Большом Брате amd64, а на нетбуке x86, то кросс-тулчейн для distcc не нужен. Я делал так: на ББ в /usr/x86_64-pc-linux-gnu/gcc-bin/<ver> оригинальные бинарники (x86_64-pc-linux-gnu-{gcc,g++}) переименовал, добавив суффикс .orig, и создал скрипты с такими же именами и следующим содержанием:

#!/bin/bash
exec -a "$(basename $0)" /usr/x86_64-pc-linux-gnu/gcc-bin/<ver>/x86_64-pc-linux-gnu-gcc.orig -m32 -march=prescott -pipe $@
После этого distcc гарантированно отдаёт 32-битные бинарники. Ну про одинаковые версии gcc и glibc уже сказали.

tiandrey ★★★★★
()
Ответ на: комментарий от Deleted

сборка в чруте невозможна или как минимум связана с большими трудностями, если $CBUID и $CTARGET различаются

умвр

anonymous
()
Ответ на: комментарий от kostik87

Что на один раз ?

Кросс-компиляция подобным образом. Не буду же я каждый раз выключать и разбирать нетбук.

Deleted
()
Ответ на: комментарий от tiandrey

Ну окэй. А как тогда эта обёртка будет позволять компилить нормальные 64-битные бинарники?

Алсо, я кажется нашёл, в чём была проблема: я схоронил старый var/lib/portage/world, и, слегка подредактировав, подсунул его емержу. Он видимо не смог отрезолвить зависимости без '-е' и потому падал. А кросс-компилятор тут не причём.

Кстати, чем можно протестить distcc, а то он выполняется как-то уж слишком прозрачно. Уж и количество демонов ему поднял, и приоритет повысил, и в MAKEOPTS клиента пробовал -j10 ставить — нагрузки на ЦП нет, только слабые всплески, коррелирующие с объёмом I/O по сети, когда на клиенте начинается компиляция.

Deleted
()
Ответ на: комментарий от Deleted

А зачем вам его разбирать ?

Собираете в chroot окружении на мощном ПК, в нём устанавливаете и настраиваете все пакеты и выполняете до настройку системы, затем делаете stage4 (архив системы в chroot окружении). Сборочное окружение (chroot) не удаляйте, он вам пригодится.

После чего грузитесь с любого livecd, подготавливаете разделы и файловые системы, монтируете их и разворачиваете архив stage4., опять же выполняете chroot в только что развёрнутую из архива систему, правите /etc/fstab и устанавливаете загрузчик в mbr. Это собственно установка системы, собранной в chroot на целевой компьютер (нетбук)., один раз, после сборки в chroot, ниже разберём установку пакетов на эту систему без их сборки на ней.

Затем, если вам нужно до установить что-либо, на компьютере, где вы собирали систему в chroot, опять же переходите в chroot окружение и собираете / пересобираете нужную вам программу, указав emerge собрать бинарный пакет, ключ '-b'

emerge -b <package_name>
в следствие чего в директории /usr/portage/packages/<category>/ будет создан архив, в котором будет содержаться собранный вам пакет <package_name>.tbz2, так же вы можете указать в /etc/make.conf в FEATURES=«buildpkg» для сборки бинарных пакетов постоянно.

Теперь вы переносите директорию /usr/portage/packages на нетбук, к примеру на флешку, а на нетбуке делаете ссылку /usr/portage/packages -> /media/FLASH/packages, либо монтируете директорию packages по сети, SAMBA / NFS / SFTP, либо делаете её доступной по ftp или http и тогда прописываете в /etc/make.conf, PORTAGE_BINHOST=«http://<ip>/packages» в любом случае после подключения места нахождения бинарных пакетов вы выполняете их установку на нетбуке, с помощью команды:

emerge -k <package_name>

Так же вы можете указать использовать бинарные пакеты по умолчанию для установки на нетбуке., в EMERGE_DEFAULT_OPTS="-k".

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

kostik87 ★★★★★
()
Ответ на: комментарий от Deleted

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

Протестить distcc - ставишь демону большой verbosity level, и читаешь логи.

tiandrey ★★★★★
()
Ответ на: комментарий от Deleted

никто не мешает в чруте использовать нужную библиотеку.

qnikst ★★★★★
()
Ответ на: комментарий от kostik87

Послушайте. Это накладно. Я не хочу держать копию всей системы на своём жёстком диске. Не хочу заходить лишний раз на другую систему, чтобы собрать пакет для этой. Не хочу запускать емерж два раза. Не хочу возиться с сетевыми файловыми системами ради одного нетбука. crossdev и distcc достаточно один раз запустить и забыть.

И для того, чтобы запустить Live CD на нетбуке, мне придётся либо покупать USB-привод, либо тратить время на сборку LiveUSB.

Deleted
()
Ответ на: комментарий от Deleted

Послушайте. Это накладно.

Вы считаете, что distcc и кросс компиляция у вас отработает быстрее ?

Я не хочу держать копию всей системы на своём жёстком диске

Вам жалко 3-4 Гб места ?

Не хочу возиться с сетевыми файловыми системами ради одного нетбука.

Можете не возиться с сетевыми файловыми системами, я вам указал их как пример, для выбора более подходящего вам решения, можете использовать ftp и http, что одно, что второе поднимает на раз.

И для того, чтобы запустить Live CD на нетбуке, мне придётся либо покупать USB-привод, либо тратить время на сборку LiveUSB.

Значит вы меня не внимательно читали, Live CD вам нужен только для установки системы, первый раз Gentoo вы же будете переносить как то на нетбук? Если вы конечно не подключите жёсткий диск нетбука к стационарному ПК.

Далее LiveCD вам больше не понадобится.

либо тратить время на сборку LiveUSB.

Ну а это вообще притянуто за уши. Если вас трудно выполнить 5 команд, затратив на это 3 минуты, тогда это другое дело. Но как я писал выше и в предыдущем сообщении LiveCD вам не нужен.

kostik87 ★★★★★
()
Ответ на: комментарий от Deleted
/etc/conf.d/distcc:
# You can change some logging options here:
# --log-file FILE
# --log-level LEVEL  [critical,error,warning, notice, info, debug]
# Leaving --log-file blank will log to syslog
DISTCCD_OPTS=«${DISTCCD_OPTS} --log-file /tmp/distccd.log --log-level debug»
tiandrey ★★★★★
()
Ответ на: комментарий от Lighting

Да, видно. Только иногда в колонке HOST проскакивает [localhost], хотя его нет в /etc/distcc/hosts. Как будто только часть отсылается, а часть всё равно компилится на локалхосте. Но зато сейчас видно и нагрузку на ЦП и дочерние потоки кросс-компилятора под distccd.

Deleted
()
Ответ на: комментарий от kostik87

Вы считаете, что distcc и кросс компиляция у вас отработает быстрее ?

Полагаю, скорость сети и выполнения компиляции идентичны.

Вам жалко 3-4 Гб места ?

Да, я жмот и ленивая скотина. Привыкай.

можете использовать ftp и http, что одно, что второе поднимает на раз.

Емакс вместо текстового редактора уже есть, спасибо. Настройки бай дефолт для vsftpd и какого-нибудь lighthttpd или cherokee недостаточно секурны. Так что ещё лазать копать.

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

Да, но как я по-вашему должен на голом нетбуке без ничего запускать LiveCD? PXE настраивать что ли?

выполнить 5 команд, затратив на это 3 минуты

А если я с первого раза не смогу? Я люблю всё запарывать :3 Тем более не занимался этим никогда, а в пять команд мне слабо верится.

Но как я писал выше и в предыдущем сообщении LiveCD вам не нужен.

Не нужен.

Deleted
()
Ответ на: комментарий от tiandrey

Охщи, там в пасте должно было быть ещё про DISTCC_LOG, но перечитав мансейчас, понял, что это не оно. сейчас перенём имя в --log-file в DISTCC_OPTS.

Deleted
()
Ответ на: комментарий от Deleted

Здесь можно найти хороший совет.

man pump mode, если выбор останется за distcc.

SmaL
()
Ответ на: комментарий от Deleted

Именно компиляция на локалхосте? Ибо, если ты не добавил localhost в DISTCC_HOSTS, то на нём производится только предварительная подготовка.

Lighting ★★★★★
()

CHOST=«i686-pc-linux-gnu»

Может я чего не понимаю, но о какой кросс-компиляции речь?

nCdy
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.