Я удалил/сломал системный пакет и теперь 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
).
- Для комментирования войдите или зарегистрируйтесь
Цитата:Хотя, решение
Тут как раз идея в том, что сначала создается минимальная работоспособная 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-й ветки) достаточно (переход на пятую может потребовать бОльшей осторожности):
Ну и далее по инструкции.
Вывод: рулит индивидуальный подход!
: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
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
Update: PORTAGE_CONFIG_ROOT
Update:
PORTAGE_CONFIG_ROOT более првильно
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
.
Внесу своих две копейки.
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/ уже есть бага)
а именно, вместо
следует сделать
Это подпись, которую невозможно истолковать неправильно
Offtop
Специально отобранный и бережно выхоженный, самый бажный портаж, специально для особо красноглазых гентушников! =)
Это обязательно?
Это обязательно?
Локальный оверлей растёт
:)
Для тебя да
может кому поможет: сломал
может кому поможет: сломал ncurses, нагуглил эту тему. скачал stage3 и вместо перезагрузки в livecd, распаковал stage в папку, смонтировал туда биндом корень и сделал chroot. в итоге получился chroot в chroot и никаких перезагрузок не потребовалось. ncurses благополучно установился после "emerge --sync".