Но я человек нехитрый, тупо переключил профиль на multilib и стал надеяться, что оно полетит. Разумеется, пересборка тулчейна (и, персонально, glibc) никуда не полетела, а вывалилась с жалобами на /lib/cpp, не прошедший sanity check. А на что я надеялся, если в системе нет инструментария для сборки x86-кода? Полез в гугл, где быстро наткнулся на неутешительный ответ: Warning: Currently you cannot switch from a no-multilib to a multilib-enabled profile, so think over your decision twice before you use the no-multilib profile. Несправедливо! Из дальнейшего гугленья выяснилось, как всяческие проблемы с /lib/cpp решают в иных дистрибутивах: просто ставят подходящий бинарный пакет. Ну а мы чем хуже? Итак, ниже представлен действенный процесс перевода Gentoo Linux с чистого профиля amd64 на amd64-multilib (наличие hardened-патчей не играет роли), не прибегая к кросс-компиляции. (Прежде, чем продолжить, настоятельно советую сделать резервную копию тулчейна: quickpkg binutils gcc glibc. Если у вас несколько версий gcc в слотах, укажите нужную атомом, особенно если это hardened-версия компилятора. Затем скопируйте файлы бинарных пакетов из /usr/portage/packages/All (или где там у вас PKGDIR) в какой-нибудь надёжный каталог.) Для дальнейших манипуляций необходимо наличие Gentoo LiveCD (хотя, в принципе, подойдёт и InstallCD), который по сути -- универсальная multilib-система с нужным для наших целей тулчейном. У меня как раз на жёстком диске лежала исошка. Монтируем её и образ системы (если у вас это добро записано на CD, то первым mount'ом просто примонтируйте этот CD): mkdir /mnt/{iso,squash} mount -o loop ~/livecd-amd64-installer-2008.0-r1.iso /mnt/iso mount -o loop /mnt/iso/image.squashfs /mnt/squash Скопируем содержимое squashfs в нормальную файловую систему, в которой можно работать: dd if=/dev/zero of=~/livecd_fs bs=1M count=2500 mkfs.ext3 -b1024 -I128 -m0 -O sparse_super -Fv ~/livecd_fs mkdir /mnt/gentoo mount -o loop,exec ~/livecd_fs /mnt/gentoo cp -vrpP /mnt/squash/* /mnt/gentoo/ (Как и у большинства задач в линуксе, у этой тоже есть несколько решений. Так, если у вас InstallCD, то создавать образ на 2.5 гигабайта совершенно не требуется. Объём можно сократить и в случае LiveCD, если не копировать всё содержимое squashfs. Я здесь пошёл по простейшему пути.) Всё почти готово. Подключаем служебные {псевдо}-файловые системы и актуальное дерево портежа: mount -t proc none /mnt/gentoo/proc mount -o bind /dev /mnt/gentoo/dev mount -o bind /usr/portage /mnt/gentoo/usr/portage/ Если каталоги с дистрибутивами и бинарными пакетами лежат у вас не в /usr/portage/{distfiles,packages}, а за пределами директории portage, не забудьте примонтировать аналогичным образом и их. Теперь завершаем приготовления и чрутимся в созданную среду: cp -vPf /etc/make.* /mnt/gentoo/etc/ chroot /mnt/gentoo /bin/bash С помощью ls -l /etc/make.profile убедитесь, что символьная ссылка ведёт к нужному вам multilib-профилю. (Тут стоит оговориться, что если ваша основная, не-chroot-система использует hardened-профиль, не указывайте его, если только не перенесли в chroot и hardened gcc. Иными словами, достаточно выбрать обычный десктопный профиль amd64, который по умолчанию multilib.) Затем отредактируйте /etc/make.conf, добавив в список USE-флагов multilib. Также, если в переменной FEATURES прописывали всяческие ограничения привилегий для работы портежа (типа usersandbox, userpriv и т.п.) и при этом сидите на hardened-ядре с укреплённым chroot'ом, уберите их, иначе не сможете выполнить сборку. Наконец, обновляем среду и компилируем мультилибнутый glibc, создавая бинарный пакет. Имейте в виду, необходимо собрать ту же самую версию glibc, что и в основной системе, так что указывайте пакет атомом. env-update ; source /etc/profile emerge --metadata emerge --buildpkgonly =sys-libs/glibc-2.6.1 Если на этапе конфигурации не возникнет проблем, то и сборка наверняка пройдёт успешно. Итак, если нам повезло, и glibc с USE-флагом multilib собран, возвращаемся из чрута на свет божий: logout. Убедитесь, что у вас установлен флаг multilib (emerge --info | grep multilib) и, если нет, добавьте его в make.conf. Всё готово к установке glibc и пересборке тулчейна (не забудьте указать gcc атомом, если у вас hardened-профиль): FEATURES="-collision-protect" emerge -K sys-libs/glibc emerge =sys-devel/gcc-3.4.6-r2 emerge binutils glibc =sys-devel/gcc-3.4.6-r2 Осталось прибраться и пересобрать мир: umount -v /mnt/gentoo/proc umount -v /mnt/gentoo/dev umount -v /mnt/gentoo/usr/portage/ # отмонтируйте остальные использованные вами файловые системы # <...> umount -v /mnt/gentoo umount -v /mnt/squash umount -v /mnt/iso rm -vi ~/livecd_fs rmdir /mnt/{iso,squash,gentoo} emerge -e world Миссия выполнена. |
|
|
|
SQUASHFS error: Major/Minor mismatch, older Squashfs 3.1 filesystems are unsupported |
Кстати, vdouo был отчасти прав: в MinimalCD как таковом действительно отсутствует портеж. Всё, что нужно в этом случае, это распапаковать стейдж в чрут-среду. |
Если вы столкнулись с такой же проблемой, установите пакет sys-fs/squashfs-tools, и с помощью утилиты unsquashfs извлеките содержимое образа. |
|
USE="multilib" emerge glibc USE="multilib" emerge gcc ну и после этог всё пересобрал без проблем ) |
|
Руская языка. |