LINUX.ORG.RU

Поломался Gentoo при переезде на другой профиль

 ,


2

4

Переезжал на другой профиль, пересобирал sys-libs/glibc-2.26-r5 и при установке получил:

>>> needed    sym /lib32/libm.so.6
>>> needed    obj /lib32/libpthread-2.26.so
>>> needed    sym /lib32/libpthread.so.0
>>> needed    obj /lib32/librt-2.26.so
>>> needed    sym /lib32/librt.so.1
>>> Safely unmerging already-installed instance...
[Errno 80] Accessing a corrupted shared library: b'/bin/bash':
   /bin/bash -c /usr/lib/portage/python3.6/ebuild.sh clean
Traceback (most recent call last):
  File "/usr/lib64/python3.6/site-packages/portage/dbapi/vartree.py", line 2127, in unmerge
    preserve_paths=preserve_paths)
  File "/usr/lib64/python3.6/site-packages/portage/dbapi/vartree.py", line 1935, in _prune_plib_registry
    include_file=needed, preserve_paths=preserve_paths)
  File "/usr/lib64/python3.6/site-packages/portage/dbapi/vartree.py", line 3074, in _linkmap_rebuild
    self.vartree.dbapi._linkmap.rebuild(**kwargs)
  File "/usr/lib64/python3.6/site-packages/portage/util/_dyn_libs/LinkageMapELF.py", line 275, in rebuild
    proc = subprocess.Popen(args, stdout=subprocess.PIPE)
  File "/usr/lib64/python3.6/subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "/usr/lib64/python3.6/subprocess.py", line 1344, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
OSError: [Errno 80] Accessing a corrupted shared library: '/usr/bin/scanelf'

During handling of the above exception, another exception occurred:

Теперь ничего не запускается, говорит:

└─[127] <> uname
zsh: accessing a corrupted shared library: uname

Что делать?

Еще вот такое при установке было:

>>> /usr/lib/libnss_dns.so -> ../../lib/libnss_dns.so.2
 *
 * Installation of a symlink is blocked by a directory:
 *   '/usr/lib/locale'
 * This symlink will be merged with a different name:
 *   '/usr/lib/locale.backup.0000'
 *
panter_dsd ★★★★ ()

На «другой» это на какой? Да телепаты в отпуске.

И Gentoo Toolchain Maintainers в bug #640796 смотрят на тебя как на… ну ты понял а потому что по сей день UNCONFIRMED.

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

Как откатиться, если ничего не запускается? Работают только уже запущенные приложения.

Качай stage3 и точечно подкладывай либы оттуда.

Даже можно скачать stage3, распаковать его, зайти в chroot - Будет рабочая среда. С помощью mount --bind можно прокинуть реальный корень в chroot.

Только вот если у тебя ничего не запускается - готовь LiveCD.

Kroz ★★★★★ ()

Дай угадаю, новый профиль 17.0, который любит включать pie где ни попадя, в то время gcc не умеет собирать правильный бинарник с pie. https://bugs.gentoo.org/show_bug.cgi?id=641474

Если нет старого бинарного пакета (tbz2) glibc, который восстанавливается простой распаковкой в корень, то никак. Или с бекапа, или ставь по новой.

anonymous ()

Я не знаю что ты сделал, но я перед глобальными вещами, (апдейт glibc и/или перекомпиляцией мира) всегда добиваюсь чистого emerge -avuND и emerge @revdep-rebuild . Во избежание подобного.

Сейчас компилю мир с default/linux/x86/17.0/desktop/plasma (stable) и последним sys-libs/glibc-2.26-r5 .

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

Хм. Похоже да, затупил. После перехода на профиль не все дообновил (надо было валить домой), дома уже eix-sync сделал и еще раз запустил обновление мира. Похоже оно и прилетело.

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

17.1 - это тот профиль, который то появляется, то исчезает от обновления портажа? Восстанови glibc и вернись на старый. А новый профиль ставь на девственно чистую систему. Менять профиль на рабочей системе - это неправильная практика, не смотря на глупые ругательства emerge.

anonymous ()

Фрагмент из eselect news read 2017-11-30-new-17-profiles

...

If you are not already running a hardened setup with PIE enabled, then
switching the profile involves the following steps:
If not already done,
* Use gcc-config to select gcc-6.4.0 or later as system compiler
* Re-source /etc/profile:
    . /etc/profile
* Re-emerge libtool
    emerge -1 sys-devel/libtool
Then,
* Select the new profile with eselect
* Re-emerge, in this sequence, gcc, binutils, and glibc
    emerge -1 sys-devel/gcc:6.4.0
    emerge -1 sys-devel/binutils
    emerge -1 sys-libs/glibc
* Rebuild your entire system
    emerge -e @world


...
Там при сборке мира опция -e это empty tree - (кстати вопрос к экспертам, что она делает в реальности (в мане мало информации) и чем она отличается от обычной переустановки пакета)

Обновления нужно выполнять в рекомендуемой последовательности + шаги по грамотному переходу на gcc-6 : там тоже много нюансов пересборки.

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

что она делает в реальности

Пересобирает не только пакет, но и его зависимости, и их зависимости, и зависимости зависимостей, и даже небо, даже Аллаха. Как будто пакет ставится в систему, где даже stage1 нет

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

пересборка мира, так же как при обновлении тулчейна на сутки проц греть.

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

Я правильно понимаю, что мне сейчас остается только стартануть с лайфа и раскатать stage3?

Либо так либо в chroot собирать что надо и ставить в систему бинпакеты.

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

Я сейчас загрузился с лайфа и делаю бэкап /usr

Поможет заменить только glibc в /usr/lib*?

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

благодарю - полезно

- тогда в чем отличие -e от флажка -D ?

- и раз возник вопрос, то в чем особенность emerge с флажком -1 и чем это отличается от обычной установки пакета. Формально, он не записывается в world, но как тогда потом он учитывается в системе без записи world и как учитываются в этом случае зависимости такого -1 пакета?

Получается -e дает пересборку мира более глубокую чем с опциями D N

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

-e в любом случае пересоберет весь мир.

Когда ты делаешь emerge пяпяка закономерно что "пяпяка" заносится в мир т.е. в /var/lib/portage/world.

-1 нужен в том случае если "пяпяка" не нужна в мире, к примеру "пяпяка" == xorg-x11 а нужен enlightenment. Но enlightenment зависит от xorg-x11 и всё равно сперва так или иначе нужны иксы. Значит emerge -1 xorg-x11 а потом emerge x11-wm/enlightenment.

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

-D обновляет всю цепочку зависимостей пакета.

-N пересобирает пакет, если у него новый набор use-флаги.

-e просто пересобирает всю цепочку зависимостей пакета. Даже если пакеты цепочки не обновились, и у них не поменялся набор use-флагов.

Если ты поставил пакет с опицей -1, и если от него не зависят другие пакеты, то обновление/пересборка мира (world) не затронут этот пакет. Также при следующем --depclean он будет удален.

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

тогда в чем отличие -e от флажка -D ?

-D считает только зависимости на N уровней. В случае, если число не указано, он ведёт себя аналогично -e, если я правильно понял. Отличие в том, что -e именно пересобирает пакет и всё дерево зависимостей, в то время как -D лишь заставляет обойти и проверить каждый пакет на предмет изменений и тому подобного.


но как тогда потом он учитывается в системе без записи world и как учитываются в этом случае зависимости такого -1 пакета?

Это зависит от того, с какими аргументами ты запускаешь emerge. Если @world — то пакет не попадёт ни в @selected, ни в зависимости (если, конечно, он не является зависимостью другого пакета), соответственно, просто не будет обработан. При этом он может создать конфликт при обработке других пакетов.


Получается -e дает пересборку мира более глубокую чем с опциями D N

Не совсем. -e именно пересобирает всё дерево, каждый пакет. -DN просто проходится по дереву и смотрит, кого надо пересобрать. То есть дерево они обходят полностью все, разница в совершаемых действиях

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

Тут кто-то агрессивно трет сообщения. Логично, что система сбоит.

anonymous ()

sys-libs/glibc-2.26-r5

Что делать?

Не использовать «~amd64» для системных компонентов, если не знаешь что делать.

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

Вроде, 17.1

Тестовый пакет на профиле предназначенном для тестирования... ну собственно ты занимаешься тем, для чем эти пакеты и профили и предназначены - ищешь проблемы и ты их нашёл. Добро пожаловать в багтреккер с подробным описанием.

grem ★★★★★ ()

Благодарю всех ответивших за разъяснения по поводу нюансов опций -e -D -1

anonymous ()

Распаковал с заменой /lib32 и /lib64 из stage3 и вот я загрузился в свою генточку. Правда,

sudo: /lib64/libc.so.6: version `GLIBC_2.26' not found (required by sudo)
sudo: /lib64/libc.so.6: version `GLIBC_2.26' not found (required by /usr/libexec/sudo/libsudo_util.so.0)

Зато su работает. Буду пересобирать мир...

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

Там при сборке мира опция -e это empty tree - (кстати вопрос к экспертам, что она делает в реальности (в мане мало информации) и чем она отличается от обычной переустановки пакета)

В мане исчерпывающая информация по этой опции. Пересборка пакета и всех зависимостей. в случае с emerge -e @world - пересборка всего за исключением потерянных зависимостей (тех пакетов, которые удалятся опцией --depclean).

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

Продолжаю описание решения проблемы - gcc, ssh, etc перестали работать, пришлось установить glibc вот такой командой:

PORTAGE_BINHOST="http://packages.gentooexperimental.org/packages/amd64-unstable/" emerge -Gav1 sys-libs/glibc

Сейчас попробую обновить мир. На старый профиль уже переключился.

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

И попутно обновление пакетов, для которых доступна новая версия или ругань, если в дереве какого-то пакета уже нет, а новые версии замаскированы.

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

Или уже собранный пакет можно запаковать командой quickpkg

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

Я увидел в темах и подумал - чо это я старый пень сижу на старом, дай обновлюсь. Дурак. :)

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

Так в stage3 пакеты стабильные, там 2.26 ещё нет наверное. Тебе нужно найти/собрать именно 2.26. Часть пакетов работать будет, но некоторые (использующие фичи из этой версии) - очевидно, не будут.

Bfgeshka ★★★★★ ()
Последнее исправление: Bfgeshka (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.