zed.0xff.me

Gentoo: миграция no-multilib -> multilib

Если при устновке/конфигурации amd64 генты был установлен профиль no-multilib, то официальная документация говорит нам:
bq{background:#ffbbbb}. 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.

Но при наличии навыка гугления можно нарыть следующую линку: Howto switch to multilib, где описывается следующий грязный хак:

  1. распаковка “родного” amd64 stage3
  2. chroot в него
  3. заворачивание “родных” gcc и glibc в бинарные пакеты
  4. chroot оттуда :)
  5. мерж бинарных пакетов в целевую систему
  6. обновление gcc и glibc до последних/нужных стандартным emerge’м

Чем мы сейчас и займемся :)

Шаг №1. Меняем профиль.

(старый профиль ссылался на ../usr/portage/profiles/default/linux/amd64/2008.0/no-multilib)

1
2
3
cd /etc
rm make.profile
ln -s ../usr/portage/profiles/default/linux/amd64/2008.0/server make.profile

Шаг №2. Разворачиваем stage3

(не забываем заменить /path/to/ на реальный путь к stage3)

1
2
3
4
5
6
7
8
9
mkdir /mnt/gentoo
cd /mnt/gentoo
tar xvjpf /path/to/stage3-amd64-2008.0.tar.bz2
mount -t proc none /mnt/gentoo/proc
mount -o bind /dev /mnt/gentoo/dev
mount -o bind /usr/portage /mnt/gentoo/usr/portage
cp -r /usr/portage /mnt/gentoo/usr
chroot /mnt/gentoo /bin/bash
env-update

(если всё прошло без ошибок – то мы находимся внутри chroot-а свежераспакованного stage3)

Шаг №3. Заворачиваем glibc и gcc в бинарные пакеты

1
2
3
quickpkg glibc
quickpkg gcc
exit

(если всё прошло без ошибок – то должны создаться пакеты /usr/portage/packages/sys-devel/gcc-4.1.2.tbz2 и /usr/portage/packages/sys-libs/glibc-2.6.1.tbz2)
(версии могут отличаться если stage3 был не 2008.0)

Шаг №4. Ставим gcc и glibc из бинарных пакетов в целевую систему

1
emerge -Ktva glibc gcc

Шаг №5. Обновляем gcc и glibc до свежих

1
emerge -tva1 glibc gcc

Шаг №6. Cleanup

(выполнять только если все предыдущие шаги прошли успешно :)

1
2
3
4
umount /mnt/gentoo/proc
umount /mnt/gentoo/dev
umount /mnt/gentoo/usr/portage
rm -rf /mnt/gentoo

Шаг №7. Profit!! :)

Можем себя поздравить, всё прошло успешно! :) справедливость multilibность восстановлена! :)

PS: перевод “Howto switch to multilib” не дословный! Отражены некоторые вещи, отражающие более современную действительность и (imho) более системный подход.