# [solved] emerge -uND world - не найден libexpat.so.0

## user11

Вздумал обновить систему...

$ emerge --sync && emerge -vNDu world

При компиляции qt получаю: error while loading shared libraries: libexpat.so.0: cannot open shared object file: No such file or directory.

Имею нефункциональную систему.

Поиском по логу выясняется, что при обновлении expat с 1.95.8 на 2.0.1 имя библиотеки сменилось с so.0 на so.1, и было сказано, чтобы я напустил revdep-rebuild.

$ revdep-rebuild --library=libexpat.so.0 -X

(сначала начал делать то же самое без -X, но передумал и прервал)

Долго думает, потом долго что-то собирает, но снова спотыкается при сборке qt. Заколдованный круг.

Не имея иных идей (не считая ln -s libexpat.so.1 libexpat.so.0, в котором я не уверен), достаю libexpat.so.0 из бакапа, кладу на старое место  :Sad:  Система начинает работать.

$ emerge -vNDu world

всё проходит (внешне) нормально.

Думаю, как теперь избавиться от старой версии libexpat:

```
# ldd `which kwrite` |grep exp

        libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb6bec000)

        libexpat.so.0 => /usr/lib/libexpat.so.0 (0xb6840000)
```

То есть, теперь используются обе. Избавиться от старой нельзя.

Гуглю. Вроде, тема не самая популярная. Из самого близкого нахожу http://www.gentoo.ru/node/7965, но только в виде оборота "Ну, ладно. Обновление libexpat на десктопе мы пережили."

Что я сделал не так? В какой момент я наступил на эти грабли? Наконец, дежурный вопрос - как довести систему до штатного (для gentoo) состояния?

Дело осложняется тем, что большая часть логов уже потерялась.Last edited by user11 on Sun Sep 02, 2007 8:31 pm; edited 1 time in total

----------

## _Sir_

 *user11 wrote:*   

> Не имея иных идей (не считая ln -s libexpat.so.1 libexpat.so.0, в котором я не уверен), достаю libexpat.so.0 из бакапа, кладу на старое место  Система начинает работать

 Криво. Но ведь это неважно, верно?

 *user11 wrote:*   

> Думаю, как теперь избавиться от старой версии libexpat:
> 
> ```
> # ldd `which kwrite` |grep exp
> 
> ...

 Ну, раз вы сами решили, что нельзя, значит так и живите с ней.  *user11 wrote:*   

> Гуглю. Вроде, тема не самая популярная. Из самого близкого нахожу http://www.gentoo.ru/node/7965, но только в виде оборота "Ну, ладно. Обновление libexpat на десктопе мы пережили."
> 
> Что я сделал не так?

 Все. В том числе, невнимательно прочли тред с проблемой пересборки апача. Там говорилось, что ln -s решает данную проблему. Поскольку в гугле тема непопулярна, следует считать, что большинство пользователей либо вообще не обновляется, либо просто не заметили этой проблемы  :Smile:  Логично?

Я, конечно, далеко не гуру, но как-то меня тоже эта ситуация не коснулась, хотя обновление libexpat совпало у меня с обновлением KDE 3.5.5 на 3.5.7 на ноутбуке x86_64 и на домашней машине x86. Попробуйте удалить ту библиотеку, (старую) с которой вы насильно собрали пакеты, и вдумчиво 

```
revdep-rebuild -- -v -p
```

этот скрипт не всегда может корректно определить порядок сборки. Иногда он об этом говорит честно  :Smile:  чаще -- нет. Кстати, на буке у меня обе qt -- и третья и четвертая.

```
sir@bb ~ $ ls -l /usr/lib/libexpat.so*

lrwxrwxrwx 1 root root     17 Aug 24 00:18 /usr/lib/libexpat.so -> libexpat.so.1.5.2

lrwxrwxrwx 1 root root     17 Aug 24 00:18 /usr/lib/libexpat.so.1 -> libexpat.so.1.5.2

-rwxr-xr-x 1 root root 129540 Aug 24 00:18 /usr/lib/libexpat.so.1.5.2

```

```
sir@bb ~ $ eix expat

[I] dev-libs/expat

     Available versions:  1.95.7 ~1.95.7-r1 1.95.8 ~2.0.0 2.0.1 {test}

     Installed versions:  2.0.1(00:18:53 08/24/07)

```

----------

## user11

Спасибо.

Сделал ещё раз 

```
revdep-rebuild --library=libexpat.so.0
```

 - *после* всех упомянутых в исходном сообщении манипуляций - и ссылки на libexpat.so.0 исчезли.

Факт остаётся тот, что мне пришлось ручками создавать .so.0, и непонятно, можно ли было без этого обойтись. Непонятно также, чем же я такой неправильный пользователь, что у меня это проблема возникла, тогда как у других всё в порядке.

 *Quote:*   

> Криво. Но ведь это неважно, верно? 

 

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

Поскольку теперь уже всё починено, а следы неисправности заметены, то можно считать, что вопрос снят. Ещё раз спасибо.

----------

## user11

// Да, конечно, гуглить мозиллой на рабочей системе веселее, чем links'ом из консольки 80x25  :Smile: 

Нашёл-таки тред

https://forums.gentoo.org/viewtopic-t-575289.html

где, после долгих выяснений и недосказанностей, разработчики признаются, что это (если я правильно понял, что *это* - и есть моя проблема) баг:

https://forums.gentoo.org/viewtopic-t-575289-postdays-0-postorder-asc-highlight-188782-start-25.html#4185129

и ссылаются на баг в portage https://bugs.gentoo.org/show_bug.cgi?id=188782 (баг уже исправлен).

Как я понял, в такую идиотскую ситуацию попадают те, кто, как и я, имея portage версии ровно 2.1.2.11 (ну, или, быть может, ещё 2.1.2.10, если такая была), начинают обновлять expat с 1-го до 2-го. Те, у кого на этот момент portage 2.1.2.9 или 2.1.2.12-й, с этим, КАК Я ПОНЯЛ, не сталкиваются.

Вот "роковой" кусок моего emerge -uND world:

```
[ebuild     U ] sys-apps/portage-2.1.2.12 [2.1.2.11] USE="-build -doc -epydoc (-selinux)" LINGUAS="-pl" 0 kB

*** Portage will stop merging at this point and reload itself,

    then resume the merge.

[ebuild     U ] sys-devel/autoconf-2.61-r1 [2.61] USE="-emacs" 0 kB

[ebuild     U ] dev-libs/openssl-0.9.8e-r2 [0.9.8d] USE="zlib -bindist -emacs -sse2 -test" 3,264 kB

[ebuild     U ] media-libs/libpng-1.2.18-r1 [1.2.18] USE="-doc" 0 kB

[ebuild     U ] dev-libs/expat-2.0.1 [1.95.8] USE="(-test%)" 436 kB
```

----------

## _Sir_

Достаточно было линка. Те "либы" о которых так много говорили, так же были линками.

Вы разве не смотрели ls -l в своей системе или хотя бы в моем посте?

И portage, когда появляется его обновление, я, как и советует выдача на консоли, обновляю до того, как делать дальнейшие телодвижения. То есть отдельно, ручками.

emerge -va portage

В общем, будем считать, Вам не повезло. Но мне почему-то кажется, что таких невезений именно у Вас будет еще достаточно. 

Понаблюдаем  :Smile:  Быть может я и ошибаюсь.

----------

## user11

 *Quote:*   

> Те "либы" о которых так много говорили, так же были линками.
> 
> Вы разве не смотрели ls -l в своей системе или хотя бы в моем посте?

 

Вы хотите сказать, что Вы бы сделали ln -s so.1 so.0 и забыли бы об этой проблеме? Быть может, Вы бы сделали иначе, но просто не стали бы об этом спрашивать на форуме?

 *Quote:*   

> И portage, когда появляется его обновление, я, как и советует выдача на консоли, обновляю до того, как делать дальнейшие телодвижения. То есть отдельно, ручками.
> 
> emerge -va portage

 

Ну, если бы какая-то аналогичная библиотека обновилась бы в тот момент, когда я обновлял portage с 2.1.2.9 до 2.1.2.11, то в моём, "ламерском" варианте, я бы провёл обновление системы 9-й версией portage (и всё было бы хорошо), а в Вашем, "аккуратном" - система обновлялась уже 11-й версией, с багом - и я бы в аккурат нарвался бы на аналогичную проблему.

 *Quote:*   

> В общем, будем считать, Вам не повезло. Но мне почему-то кажется, что таких невезений именно у Вас будет еще достаточно.

 

Пожалуйста, поясните - каких "таких"? Без этого уточнения это просто флейм.

----------

## user11

Нашёл конкретное решение без симлинков.

Начальные условия те же - portage 2.1.2.11 (и должен обновиться), а expat должен обновиться с 1-го на 2-й. Система "десктопная". Требуется просто обновить систему.

```
emerge --sync && emerge -NDu world # с этого всё началось

# вываливается, скажем, на qt

# допустим, проблему ещё не понял, попытался "ещё раз"

# заодно собрались ещё некоторые другие пакеты (вероятно, и важный для дальнейшего gettext)

emerge -NDu world

# тут можно попытаться сделать

# revdep-rebuild -p --library libexpat.so.0

# но оно всё равно заткнётся на qt

# не делаем. Переходим к исправлению конкретной ситуации.

emerge -1 fontconfig # будем считать, что мы угадали, что надо обновить

emerge -NDu world # теперь всё получается

revdep-rebuild --library libexpat.so.0 # обновляем ещё кучу битых зависимостей - тоже всё получается

revdep-rebuild -p --library libexpat.so.0 # проверяем, что все зависимости исправились

```

Одна беда - все эти ad-hoc рецепты помогают только для данной проблемы, связанной с данной версией пакетов и пр.

----------

## fank

основное достоинство такого понятия, как опыт состоит в том, что его можно передать другим =)

https://forums.gentoo.org/viewtopic-t-556773.html

последний пост   :Wink: 

----------

## user11

Да, спасибо, именно благодаря твоему посту в том треде (ну, и, конечно, благодаря треду про апач), и ориентируясь на такой стиль решения, я и подобрал такой бубен для своего случая.

Писать эту десктопную проблему в топик про подводные камни отдельным сообщением я постеснялся, т.к. это уже упомянутый там expat.so.0, да и к тому же - довольно редкий случай. Поэтому и изложил всё здесь. Мне кажется, если уж писать - то сразу и про запуск апач, и про сборку qt, стиль один. Если считаешь, что добавить туда стоит, то буду благодарен, если ты дополнишь (отредактируешь) свой пост пояснением про qt. Если считаешь, что не надо, то не надо  :Smile: 

По сути, тут, в сравнении с апачем, добавляется только emerge -1 fontconfig и повторный emerge -NDu world (т.к. к этому моменту система всё ещё не обновлена). Ну а потом уже revdep-rebuild.

----------

## fank

 *Quote:*   

> Писать эту десктопную проблему в топик про подводные камни отдельным сообщением я постеснялся, т.к. это уже упомянутый там expat.so.0, да и к тому же - довольно редкий случай. Поэтому и изложил всё здесь. Мне кажется, если уж писать - то сразу и про запуск апач, и про сборку qt, стиль один. Если считаешь, что добавить туда стоит, то буду благодарен, если ты дополнишь (отредактируешь) свой пост пояснением про qt. Если считаешь, что не надо, то не надо  

 

ты имеешь в виду, что затык на qt у тебя, а я там указал apache?

так это всего лишь для примера и в основном для релевантности, если так можно выразиться

просто проблема с qt по большому счету никого сильно волновать не будет, и можно в спокойной обстановке сесть и разобраться в причинах

в случае же apache, а значит, и "серверной" направленности вопроса админу вывалится результат поиска, в котором даже не русскоязычный разберется без труда. Тут ситуация другая и может грозить админу лишением премии   :Very Happy: 

а по поводу "редкого случая" ты зря - https://forums.gentoo.org/viewforum-f-8.html

первый топик страниц на 12 прилеплен   :Wink: 

так что... имеет смысл

к тому же, данный пост-руководство довольно полезен для новичков как достаточно универсальный пример разрешения проблем с "потерянными" библиотеками

----------

## user11

Ну что ж... убедил. Хотя, мне всё равно кажется, мое знание предмета недотягивает до написания статей в FAQ. В общем, претензии, поправки и пожелания (if any) принимаются.

----------

## andreyu

Вчера столкнулся с такой же проблемой на десктопе жены при компиляции Qt. Заморачиваться не стал, просто сделал линк на библиотеку.

Я ошибся в выборе пути решения данной проблемы?

----------

## fank

да, ты ошибся.

----------

