[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"

Пользуясь моментом, хочу передать привет друзьям, которые также пользуются "Моментом"

Идея с симлинком тоже

Идея с симлинком тоже мелькала, но немного побоялся...(

Ладно, буду смелее) Попробую пересобрать.

FEATURES="-ccache"

Вот за это реально спасибо. Ccache стоит, и при пересборке я бы точно забыл его отключить. А если бы стал пересобирать и всё взялось бы из кэша, потратил бы время впустую(

.

squirre1 написал(а):
Идея с симлинком тоже мелькала, но немного побоялся...(

Не зря.
Твоё чувство гармонии и прекрасного правильно тебя предупреждает.
Лезть ручками по библиотечным каталогам... неправильно.

:wq
--
Live free or die

.

Tzar написал(а):
Хотя могу предложить вариант решения: временно создать в /usr/lib симлинк с именем, соответствующим имени библиотеки от предыдущей версии и пересобрать компилятор еще раз. Для очистки совести пересобирая его с FEATURES="-ccache"

Я бы попенял автору на недостаточное внимание к разделу ЧаВо (хотя не знаючи что искать, и что испомое есть — занятие не из весёлых и сейчас его можно понять):
http://www.gentoo.ru/content/ya-udalilslomal-sistemnyy-paket-i-teper-gentoo-ne-gruzitsya-neuzheli-pereustanavlivatsya

С моралью на будущее (соломка):
man make.conf:

FEATURES=...
buildsyspkg
...
unmerge-backup
...

: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 ...

FEATURES=...
buildsyspkg
...
unmerge-backup

Ухтышка!) Почитал про них)

Блин, жалко раньше не знал...

.

squirre1 написал(а):
FEATURES=...
buildsyspkg
...
unmerge-backup

Ухтышка!) Почитал про них)

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

:wq
--
Live free or die

.

squirre1 написал(а):
а при сборке world произошла какая-то ошибка.

Вот тут-то самое интересное.
На каком пакете и что об этой ошибке говорит журнал (сборки)? Или ты его зачистил?

:wq
--
Live free or die

Нашел по логу где сломалась

Нашел по логу где сломалась сборка:

1370113233:  === (153 of 928) Compiling/Packaging (dev-libs/libassuan-2.0.3::/usr/portage/dev-libs/libassuan/libassuan-2.0.3.ebuild)
1370113239:  *** Finished. Cleaning up...
1370113239:  *** exiting unsuccessfully with status '1'.
1370113252:  *** terminating.

Вот записи из elogv (отсортированы по времени) (первые 6 - зелененькие - собрались):

│ * media-libs/jbig2dec-0.11-r1 - 06/01/2013 
│ * dev-libs/mpc-1.0.1 - 06/01/2013           
│ * dev-libs/libusb-compat-0.1.4 - 06/01/2013 
│ * virtual/libc-0 - 06/01/2013            
│ * dev-libs/libgcrypt-1.5.0-r2 - 06/01/2013
│ * virtual/yacc-0 - 06/01/2013           
│ * dev-libs/libassuan-2.0.3 - 06/01/2013 (эта красненькая - тут сломалось)

И вот что пишется, когда выбираешь libassuan в elogv:


INFO: setup                                                        
│Package:    dev-libs/libassuan-2.0.3                              
│Repository: gentoo                                                
│Maintainer:                                      
│USE:        abi_x86_32 elibc_glibc kernel_linux userland_GNU x86  
│FEATURES:   ccache preserve-libs sandbox                          
│ERROR: configure                                                  
│ERROR: dev-libs/libassuan-2.0.3 failed (configure phase):         
│  econf failed                                                    
│                                                                  
│Call stack:                                                       
│         ebuild.sh, line  93:  Called src_configure               
│       environment, line 118:  Called econf '--disable-static'    
│  phase-helpers.sh, line 521:  Called die                         
│                                                                  
│The specific snippet of code:                                                                              
│                        die "econf failed"                                                                
│                                                                                                          
│If you need support, post the output of `emerge --info '=dev-libs/libassuan-2.0.3'`,                      
│the complete build log and the output of `emerge -pqv '=dev-libs/libassuan-2.0.3'`.                       
│The complete build log is located at '/var/tmp/portage/dev-libs/libassuan-2.0.3/temp/build.log'.          
│The ebuild environment file is located at '/var/tmp/portage/dev-libs/libassuan-2.0.3/temp/environment'.   
│Working directory: '/var/tmp/portage/dev-libs/libassuan-2.0.3/work/libassuan-2.0.3'                       
│S: '/var/tmp/portage/dev-libs/libassuan-2.0.3/work/libassuan-2.0.3'                                       
│                                                                                     

.

Под зачищаемым логом я имел в виду в данном случае:
/var/tmp/portage/dev-libs/libassuan-2.0.3/temp/build.log
Если сохранился, стоит посмотреть на предмет ошибки.

:wq
--
Live free or die

Сохранился-

Сохранился- http://pastebin.com/cVt9NsmC

Падает при проверке работоспособности C compiler

checking for style of include used by make... GNU
checking for i686-pc-linux-gnu-gcc... i686-pc-linux-gnu-gcc
checking whether the C compiler works... no
configure: error: in `/var/tmp/portage/dev-libs/libassuan-2.0.3/work/libassuan-2.0.3':
configure: error: C compiler cannot create executables
See `config.log' for more details

`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:

squirre1@eeepc_host ~ $ sudo find / -iname 'config.log'
/var/tmp/portage/dev-libs/libassuan-2.0.3/work/libassuan-2.0.3/config.log
/var/tmp/portage/sys-devel/libtool-2.4-r1/work/libtool-2.4/config.log

На всякий случай выложил второй - /var/tmp/portage/sys-devel/libtool-2.4-r1/work/libtool-2.4/config.log - http://pastebin.com/Xm6Zh7c9

Ну сей лог подтверждает

Ну сей лог подтверждает неработоспособность компилера. Предлагаю стянуть бинарный пакет компилера под вашу архитектуру и развернуть. Лина на сие был приведен анархистом выше.

Пользуясь моментом, хочу передать привет друзьям, которые также пользуются "Моментом"

Я уже смирился с

Я уже смирился с этим...)

Всем спасибо, утром попробую поставить. Поставлю - отпишусь.

/

squirre1 написал(а):
Я уже смирился с этим...)

Всем спасибо, утром попробую поставить. Поставлю - отпишусь.

С чем-чем смирился?

На самом деле ты весьма неправ, но в том не только твоя вина.
Из срача в комментах в теме по приведённой мной ссылке следует один интересный и весьма полезный практический вывод.
До компактного поверенного практикой оформления которого дело, увы, не дошло, но то совсем другая история.

А вывод тот гласит, что:
В 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, как везде написано)

.

squirre1 написал(а):
Вообще всё началось с того, что я полгода не обновлялся (жутко стыдно)

Не вижу никакой крамолы и ничего, что бы могло предвещать проблемы.
Ну попросит обновление несколько больше времени/внимания... И всё.

squirre1 написал(а):
Попробовал обновить 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)

Набрался смелости:

eeepc_host # emerge -1b glibc binutils gcc portage

Все собралось. 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)

Теперь можно удалять симлинк:

eeepc_host # rm -i /usr/lib/libmpc.so.2 
rm: remove symbolic link ‘/usr/lib/libmpc.so.2’? y

Решено!) Компилятор стал собирать.

Мое окружение, где это помогло:
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 за ответы.

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

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