Я удалил/сломал системный пакет и теперь Gentoo не грузится, неужели переустанавливаться?

(предложено KiberGus)
Нет, можно воспользоваться возможностью portage устанавливать пакеты не в корневую систему. Изначально эта функция предназначалась для сборки минимальных версий gentoo и для кросскомпиляции, однако сгодится и в такой ситуации.

Грузимся с LiveCD или любого работоспособного Linux (с подходящей архитектурой, для починки x86_64 дистрибутива надо грузиться с x86_64 системы).
Качаем stage3 и распаковываем в сторонке, по желанию можете воспользоваться работающим дистрибутивом Gentoo у товарища.
Монтируем корневую ФС убитого дистрибутива в каталог, расположенный внутри распакованного stage3, например в mnt/broken
Говорим emerge ставить пакеты внутрь сломанного дистрибутива:

ROOT="/mnt/broken" emerge -1 my_package_name

Пакет будет установлен по всем правилам, с записью в world (если не была указана --oneshot).

Цитата:Хотя, решение

Цитата:
Хотя, решение несколько неидеально и не учитывает некоторых моментов насчет работоспособности убитой системы (можно ли зачрутиться, сделать emerge etc), но лучше обсуждать уже там

Тут как раз идея в том, что сначала создается минимальная работоспособная gentoo система путем раскатывания stage3, chroot делается в нее. В ней есть работающий компилятор, emerge и прочие сборочные инструменты. Они и будут использоваться для сборки т.к. chroot в испорченную систему делаться не будет, вместо этого я просто объясняю emerge, что надо собранные пакеты устанавливать в какой-то другой каталог, этот каталог может быть даже пуст изначально. Это позволяет, например, сделать минималистичный дистр без сборочных средств. Есть еще опция SYSROOT, сейчас точно не помню, кажется она должна указывать на каталог, куда складывать зависимости времени сборки. Но я сейчас не помню, откуда берется в таком случае компилятор, из основной системы или из SYSROOT. Точно помню, что из SYSROOT будет взят make.conf и прочие настройки.
Поэтому данный способ, хоть и несколько громоздок, позволяет восстанавливать любые убитые системы. В частности, можно найти gentoo croisscompilation guide и испрользовать ту же схему для восстановления/сборки систем под другие архитектуры.

Как раз сейчас практикую

Как раз сейчас практикую расширенную версию этого примера. У меня полетел винчестер на ноутбуке, данные в основном удалось вытащить, но с ошибками. Да еще данные сливал на компьютер, к которому сейчас имею доступ по ssh, то для минимизации передаваемого трафика, а также для гарантированной починки системы (а заодно и пересбора системы с более оптимальными флагами), скопировал из умершей системы etc и var. А далее указанным выше способом
ROOT="/mnt/gentoo" emerge -e system
Сейчас система уже загружается и уже в обычном режиме идет
emerge -e world
который установит все пакеты, которые были установлены ранее.

Если таковым пакетом является gcc...

...то (по крайней мере для случая 4.1 -> 4.3, полагаю и далее в рамках 4-й ветки) достаточно (переход на пятую может потребовать бОльшей осторожности):

# gcc-config --help
# gcc-config -c
# gcc-config $NEW_PROFILE

Ну и далее по инструкции.

Вывод: рулит индивидуальный подход!

:wq
--
Live free or die

IMHO, правильной строкой при

IMHO, правильной строкой при совпадении архитектур будет:
ROOT="/mnt/broken" CONFIG_ROOT="/mnt/broken" emerge -1 my_package_name
В этом случае используется /mnt/broken/etc/make.conf и /mnt/broken/etc/ld.so.conf

http://www.gentoo.ru/node/4679#comment-107238

Update: PORTAGE_CONFIG_ROOT

Update:
PORTAGE_CONFIG_ROOT более првильно

.

Внесу своих две копейки.

1) CONFIG_ROOT не сработал, возможно, сработал бы PORTAGE_CONFIG_ROOT

2) У меня, скажем так, кое-что размаскировано, поэтому вместо stage3
мне пришлось сделать "stage3.5" - то есть в свежераспакованном stage3 выполнить:
* переход на самый нестабильный portage
* http://www.gentoo.org/doc/en/openrc-migration.xml?style=printable
* http://www.gentoo.org/doc/en/gcc-upgrading.xml
* контрольный "emerge @system"

2.1) По этой причине, кстати, нельзя копировать ВЕСЬ /etc внутрь stage3,
а следует копировать только /etc/make.conf + /etc/portage/*

2.2) Я переходил к пересборке /mnt/broken, только когда у меня в "stage3.5" команда
"emerge -pv @system" давала тот же результат, что и в основной.

3) При "предчрутовом" монтировании пришлость пойти немного не по хэндбуку
(про это на http://bugs.gentoo.org/ уже есть бага)
а именно, вместо

mount -t proc none /mnt/gentoo/proc
mount -o bind /dev /mnt/gentoo/dev

следует сделать

mount --bind /dev /path-to-your-chroot/dev
mount --bind /dev/pts /path-to-your-chroot/dev/pts
mount --bind /dev/shm /path-to-your-chroot/dev/shm
mount -t proc none /path-to-your-chroot/proc
mount -t sysfs none /path-to-your-chroot/sys

Это подпись, которую невозможно истолковать неправильно

Offtop

patamooshta написал(а):
* переход на самый нестабильный portage

Специально отобранный и бережно выхоженный, самый бажный портаж, специально для особо красноглазых гентушников! =)

Это обязательно?

Это обязательно?

Локальный оверлей растёт

:)

Для тебя да

может кому поможет: сломал

может кому поможет: сломал ncurses, нагуглил эту тему. скачал stage3 и вместо перезагрузки в livecd, распаковал stage в папку, смонтировал туда биндом корень и сделал chroot. в итоге получился chroot в chroot и никаких перезагрузок не потребовалось. ncurses благополучно установился после "emerge --sync".

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".