[SOLVED] После обновления dev-libs/mpc GCC продолжает пытаться использовать старую, удаленную libmpc.so.2
Обновлял систему. Так как обновился gcc, я собрал toolchain, переключился на новый gcc, собрал toolchain еще раз, собрал system, [забыл про revdep-rebuild], а при сборке world произошла какая-то ошибка.
Когда собирал system, обновился dev-libs/mpc-0.8.2 на dev-libs/mpc-1.0.1 (по логам посмотрел)
Также при помощи elogv увидел, что dev-libs/mpc мне советовал
WARN: postinst Old versions of installed libraries were detected on your system. In order to avoid breaking packages that depend on these old libs, the libraries are not being removed. You need to run revdep-rebuild in order to remove these old dependencies. If you do not have this helper program, simply emerge the 'gentoolkit' package. # revdep-rebuild --library '/usr/lib/libmpc.so.2' && rm '/usr/lib/libmpc.so.2'
То что я забыл про revdep-rebuild и привело к текущей проблеме - при помощи gcc ничего не собирается.
При попытке собрать "hello world" вылазит следующее:
eeepc_host # cc -o hello hello.c
/usr/libexec/gcc/i686-pc-linux-gnu/4.6.3/cc1: error while loading shared libraries: libmpc.so.2: cannot open shared object file: No such file or directory
Ищу libmpc.so.2:
eeepc_host # locate libmpc.so /usr/lib/libmpc.so /usr/lib/libmpc.so.2 /usr/lib/libmpc.so.3 /usr/lib/libmpc.so.3.0.0 eeepc_host # ls -ld `!!` ls -ld `locate libmpc.so` ls: cannot access /usr/lib/libmpc.so.2: No such file or directory lrwxrwxrwx 1 root root 15 Jun 2 21:10 /usr/lib/libmpc.so -> libmpc.so.3.0.0 lrwxrwxrwx 1 root root 15 Jun 2 21:10 /usr/lib/libmpc.so.3 -> libmpc.so.3.0.0 -rwxr-xr-x 1 root root 100240 Jun 1 12:44 /usr/lib/libmpc.so.3.0.0
В locate она осталась, но в реальной системе её нет. Проверяю (ну на всякий случай):
eeepc_host # ls -la /usr/lib/libmpc* lrwxrwxrwx 1 root root 15 Jun 2 21:10 /usr/lib/libmpc.so -> libmpc.so.3.0.0 lrwxrwxrwx 1 root root 15 Jun 2 21:10 /usr/lib/libmpc.so.3 -> libmpc.so.3.0.0 -rwxr-xr-x 1 root root 100240 Jun 1 12:44 /usr/lib/libmpc.so.3.0.0
Итак. Значит /usr/lib/libmpc.so.2 отсутствует в системе.
eeepc_host # equery files dev-libs/mpc-1.0.1 * Searching for mpc1.0.1 in dev-libs ... * Contents of dev-libs/mpc-1.0.1: /usr /usr/include /usr/include/mpc.h /usr/lib /usr/lib/libmpc.so -> libmpc.so.3.0.0 /usr/lib/libmpc.so.3 -> libmpc.so.3.0.0 /usr/lib/libmpc.so.3.0.0 /usr/share /usr/share/doc /usr/share/doc/mpc-1.0.1 /usr/share/doc/mpc-1.0.1/NEWS.bz2 /usr/share/doc/mpc-1.0.1/README.bz2 /usr/share/doc/mpc-1.0.1/TODO.bz2 /usr/share/info /usr/share/info/mpc.info.bz2
Проверяю пакет на целостность:
eeepc_host # equery check dev-libs/mpc-1.0.1 * Checking dev-libs/mpc-1.0.1 ... 15 out of 15 files passed
То есть пакет целый, libmpc.so.2 нет, вместо неё более новая.
Я читаю про динамическую линковку:
Cмотрю какие библиотеки тянет бинарник компилятора:
eeepc_host # ldd /usr/libexec/gcc/i686-pc-linux-gnu/4.6.3/cc1 linux-gate.so.1 (0xb77a9000) libmpc.so.2 => not found libmpfr.so.4 => /usr/lib/libmpfr.so.4 (0xb7732000) libgmp.so.10 => /usr/lib/libgmp.so.10 (0xb76c8000) libdl.so.2 => /lib/libdl.so.2 (0xb76c3000) libz.so.1 => /lib/libz.so.1 (0xb76ab000) libc.so.6 => /lib/libc.so.6 (0xb7508000) /lib/ld-linux.so.2 (0xb77aa000)
Смотрю ELF заголовок бинарника компилятора:
eeepc_host squirre1 # scanelf -l /usr/libexec/gcc/i686-pc-linux-gnu/4.6.3/cc1 | grep libmpc ET_DYN /usr/lib/libmpc.so.3.0.0
Вот здесь не понимаю. В ELF заголовке же сказано, что нужно использовать /usr/lib/libmpc.so.3.0.0, а ldd показывает libmpc.so.2
Тыкните носом, куда копать, пока затык.
---
Для очистки совести:
# revdep-rebuild --library '/usr/lib/libmpc.so.2' (ничего не нашел) - http://pastebin.com/sZeVQLTe
# revdep-rebuild --library '/usr/lib/libmpc.so.3' (тоже ничего не нашел) - http://pastebin.com/NN6AbP3g
# emerge --info '=dev-libs/mpc-1.0.1' http://pastebin.com/73r7VNT4
# emerge -pqv '=dev-libs/mpc-1.0.1' [ebuild R ] dev-libs/mpc-1.0.1 USE="-static-libs"
- Для комментирования войдите или зарегистрируйтесь
Жаль, не могу ничем помочь,
Жаль, не могу ничем помочь, но хотелось бы отметить упорство автора и стремление решить проблему самостоятельно. Не чета большинству спрашивающих.
Хотя могу предложить вариант решения: временно создать в /usr/lib симлинк с именем, соответствующим имени библиотеки от предыдущей версии и пересобрать компилятор еще раз. Для очистки совести пересобирая его с FEATURES="-ccache"
Пользуясь моментом, хочу передать привет друзьям, которые также пользуются "Моментом"
Идея с симлинком тоже
Идея с симлинком тоже мелькала, но немного побоялся...(
Ладно, буду смелее) Попробую пересобрать.
Вот за это реально спасибо. Ccache стоит, и при пересборке я бы точно забыл его отключить. А если бы стал пересобирать и всё взялось бы из кэша, потратил бы время впустую(
.
Не зря.
Твоё чувство гармонии и прекрасного правильно тебя предупреждает.
Лезть ручками по библиотечным каталогам... неправильно.
:wq
--
Live free or die
.
Я бы попенял автору на недостаточное внимание к разделу ЧаВо (хотя не знаючи что искать, и что испомое есть — занятие не из весёлых и сейчас его можно понять):
http://www.gentoo.ru/content/ya-udalilslomal-sistemnyy-paket-i-teper-gentoo-ne-gruzitsya-neuzheli-pereustanavlivatsya
С моралью на будущее (соломка):
man make.conf
::wq
--
Live free or die
http://www.gentoo.ru/content/
http://www.gentoo.ru/content/ya-udalilslomal-sistemnyy-paket-i-teper-gentoo-ne-gruzitsya-neuzheli-pereustanavlivatsya
Эту ссылку видел когда гуглил. Все равно спасибо)
Но проблема - не знаю какой пакет переустанавливать с live-cd?
И GCC и MPC-1.0.1 у меня лежат в бинарниках (когда toolchain и system собирал - делал (emerge -b)
Я их уже пробовал вытащить emerge -K gcc dev-libs/mpc
И они вытащились. Но ситуация не изменилась(
Или я Вас не понял?
FEATURES=... buildsyspkg ...
Ухтышка!) Почитал про них)
Блин, жалко раньше не знал...
.
Кстати, из личного опыта хочу предостеречь.
Когда оно мне потребовалось... перечень собираемого в рамках buildsyspkg меня несколько разочаровал.
:wq
--
Live free or die
.
Вот тут-то самое интересное.
На каком пакете и что об этой ошибке говорит журнал (сборки)? Или ты его зачистил?
:wq
--
Live free or die
Нашел по логу где сломалась
Нашел по логу где сломалась сборка:
Вот записи из elogv (отсортированы по времени) (первые 6 - зелененькие - собрались):
И вот что пишется, когда выбираешь libassuan в elogv:
.
Под зачищаемым логом я имел в виду в данном случае:
/var/tmp/portage/dev-libs/libassuan-2.0.3/temp/build.log
Если сохранился, стоит посмотреть на предмет ошибки.
:wq
--
Live free or die
Сохранился-
Сохранился- http://pastebin.com/cVt9NsmC
Падает при проверке работоспособности C compiler
`config.log' for more details
`config.log' for more details - http://pastebin.com/ZUFP9LSW
config.log полностью в
config.log полностью в студию. Лежит обычно в ${PORTAGE_TMPDIR}/category/package-name/work
Пользуясь моментом, хочу передать привет друзьям, которые также пользуются "Моментом"
Вот -
Вот - http://pastebin.com/ZUFP9LSW
Кстати, в системе всего два файла config.log:
На всякий случай выложил второй - /var/tmp/portage/sys-devel/libtool-2.4-r1/work/libtool-2.4/config.log - http://pastebin.com/Xm6Zh7c9
Ну сей лог подтверждает
Ну сей лог подтверждает неработоспособность компилера. Предлагаю стянуть бинарный пакет компилера под вашу архитектуру и развернуть. Лина на сие был приведен анархистом выше.
Пользуясь моментом, хочу передать привет друзьям, которые также пользуются "Моментом"
Я уже смирился с
Я уже смирился с этим...)
Всем спасибо, утром попробую поставить. Поставлю - отпишусь.
/
С чем-чем смирился?
На самом деле ты весьма неправ, но в том не только твоя вина.
Из срача в комментах в теме по приведённой мной ссылке следует один интересный и весьма полезный практический вывод.
До компактного поверенного практикой оформления которого дело, увы, не дошло, но то совсем другая история.
А вывод тот гласит, что:
В stage3 есть достаточный набор утилит для сборки (в рамках рассматриваемой задачи даже несколько избыточный).
Посредством принципиально несложных (знаючи что и где искать и что должно получиться в результате) манипуляций используя заведомо рабочее окружение stage3 можно (и было бы нужно) использовав конфиги (а также дерево portage, архивы исходников и тэ дэ) повреждённой системы пересобрать повреждённый пакет(ы). С установкой в корень повреждённой системы (не уверен в том, что именно нужно пересобирать --- можно по данной метóде пересобрать весь system).
Хотя вопрос установки сдёрнутых с системы (утилитой
quickpkg
) пакетов тоже по-хорошему требует внимания.:wq
--
Live free or die
Предыстория
Вообще всё началось с того, что я полгода не обновлялся (жутко стыдно), сделал sync, увидел новый profile, обновил emerge portage, переехал на новый profile (default/linux/x86/13.0/desktop).
Попробовал обновить world, увидел в обновлениях gcc и стал обновлять систему c двойной пересборкой toolchain, как везде написано)
.
Не вижу никакой крамолы и ничего, что бы могло предвещать проблемы.
Ну попросит обновление несколько больше времени/внимания... И всё.
Во-первых, в умных книгах (типа раздела ЧаВо гентуру), пишут, что на сколько-нибудь современных версиях gcc (ЕМНИП 4.3+) оно избыточно.
Во-вторых, склонен полагать, что твоя ошибка в том, что ты занялся переводом системы на новый gcc до согласования системы с деревом portage. Мои представления о гармонии, подтверждаемые практикой, указывают на первичность данного согласования. Других мыслей относительно причин инцидента не имею.
:wq
--
Live free or die
Решение
Если честно, не рискнул перезагружаться - были проблемы с udev (в блоге в феврале предупреждали, что нужно быть осторожнее).
Вот решение на мой страх и риск (у меня все получилось без проблем):
Сделал симлинк новой (существующей) библиотеки на старую (удаленную):
eeepc_host # ln -s /usr/lib/libmpc.so.3 /usr/lib/libmpc.so.2 eeepc_host # ls -la /usr/lib/ | grep libmpc lrwxrwxrwx 1 root root 15 Jun 2 21:10 libmpc.so -> libmpc.so.3.0.0 lrwxrwxrwx 1 root root 20 Jun 3 02:59 libmpc.so.2 -> /usr/lib/libmpc.so.3 lrwxrwxrwx 1 root root 15 Jun 2 21:10 libmpc.so.3 -> libmpc.so.3.0.0 -rwxr-xr-x 1 root root 100240 Jun 1 12:44 libmpc.so.3.0.0
Проверил GCC. Получилось:
eeepc_host # ldd /usr/libexec/gcc/i686-pc-linux-gnu/4.6.3/cc1 linux-gate.so.1 (0xb76f6000) libmpc.so.2 => /usr/lib/libmpc.so.2 (0xb76c3000) libmpfr.so.4 => /usr/lib/libmpfr.so.4 (0xb7665000) libgmp.so.10 => /usr/lib/libgmp.so.10 (0xb75fb000) libdl.so.2 => /lib/libdl.so.2 (0xb75f6000) libz.so.1 => /lib/libz.so.1 (0xb75de000) libc.so.6 => /lib/libc.so.6 (0xb743b000) /lib/ld-linux.so.2 (0xb76f7000)
Набрался смелости:
Все собралось. GCC ищет новую библиотеку:
eeepc_host portage_message # ldd /usr/libexec/gcc/i686-pc-linux-gnu/4.6.3/cc1 linux-gate.so.1 (0xb772d000) libmpc.so.3 => /usr/lib/libmpc.so.3 (0xb76fa000) libmpfr.so.4 => /usr/lib/libmpfr.so.4 (0xb769c000) libgmp.so.10 => /usr/lib/libgmp.so.10 (0xb7632000) libdl.so.2 => /lib/libdl.so.2 (0xb762d000) libz.so.1 => /lib/libz.so.1 (0xb7615000) libc.so.6 => /lib/libc.so.6 (0xb7472000) /lib/ld-linux.so.2 (0xb772e000)
Теперь можно удалять симлинк:
Решено!) Компилятор стал собирать.
Мое окружение, где это помогло:
x86
GCC обновлялся с i686-pc-linux-gnu-4.5.4 на i686-pc-linux-gnu-4.6.3
libmpc обновлялся с dev-libs/mpc-0.8.2 на dev-libs/mpc-1.0.1
Как я понимаю, недостаточно просто сделать заглушку-симлинк (плохое решение), после этого обязательно нужно пересобрать с этой заглушкой toolchain, после этого удалить заглушку , и с новым toolchain собирать system.
При пересборке toolchain и system нужно очистить каталог с бинарниками /usr/portage/packages/ и отключить ccache (если он у вас есть) FEATURES="-ccache"
Вывод. Теперь:
- буду постоянно читать elogv (на предмет WARN и ERROR)
- не буду лезть обновлять систему по недосыпу
thanks
Большое спасибо Tzar и Anarchist за ответы.