Почему после обновления Debian или другого дистрибутива может падать софт
Posted on Ноябрь 14th, 2009 in Linux, Нестандартности, Разное | 5 Comments »
Обратил внимание, что у меня часто падает мой любимый дебиан (тестинг) после апдейтов. Например после монтирования cd вручную (автомат перестал работать) пропадают иконки рабочего стола и все картинка начинает мигать и дергаться…
С трудом понял что дело в nautilus, запуская который (когда примонтирован cd) я через пару секунд получал ошибку undefined symbol g_mount_is_shadowed.
Ранее подобное наблюдалось когда после очередного апдейта “вешался” gdm и было невозможно зайти. Наконец решил разобраться.
Секрет оказался прост, я в свое время ставил некоторый софт отдельно от репозитариев (в т.ч. nessus из исходников, скайп из внешнего пакета). Коварные создатели тех пакетов прописали некоторые файлы в /usr/local/lib – в том числе так называемый glib
Соответственно в /lib у меня была новая версия glib, но некоторые приложения при старте сначала проверяли папку /usr/local/lib в которой оставались ошметки старых либов, о которых пакетный менеджер естесственно не знал. Поэтому с новыми приложениями использовались старые либы и соответственно приложения не работали.
А находится такое достаточно просто;
which nautilus
ldd /usr/bin/nautilus | grep /usr/local
после этого я перенес все либы из /usr/local в другое место (а можно было и грохнуть) и nautilus завелся, диски сами примонтировались и все заработало.
Кстати интересно, по идее это наверное типовой сценарий проблем, при установке софта из внешних источников. По идее маинтернеры дистрибутивов могли бы после установки софта, проверять что либы для нового софта используются из репозитариев а не локальные версии.. Хотя наверное это не юникс-вей, когда лишних действий не производится.. Потому что определенный смысл в том чтобы при апдейте продолжать использовать локальные либы тоже есть….
5 Responses
Одна из причин по которой мне по душе Archlinux – простота создания нового пакета. Это позволяет избежать потерянных или продублированных библиотек. В принципе, в крайнем случае некоторый софт можно ставить в домашнюю директорию (это касается любого дистра).
Имеется ввиду что в Арче невозможно нахождение разных версий либов в папке /lib и /usr/local/lib? Или в смысле что это контролируется пакетным менеджером?
Т.е. в принципе реально поставить приложение в домашнюю папку, положив туда же версию glib для данного конкретного приложения?
Я просто не знаком с Арчем, я в плане дистрибутивов “тормоз” =) я пока “нормально” по моим меркам не пойму дебиан, не хочу дергаться в стороны – чтобы еще больше не путаться… А дебиан фоном тоже меняется…
Недавно кстати сам netf0x =) поставил Арч и очень был доволен, присылал мне скриншот использования памяти (что то 220 метров с иксами) и говорил что он субъективно шустрее дебиана и Ко. Вероятно за счет оптимизации бинарных пакетов под i686… В общем последнее время Арч активно врывается в мое внимание
Вообще говоря многие дистрибутивы для таких вещей придумали /opt/ куда надо ставить все неродное. И поправить переменную окружения PATH. Конкретный дистрибутив тут не причем, да и менеджер пакетов не должен озабачиваться поиском всех либ что мог насовать пользователь. Иначе установка софта будет превращаться в томительные ожидания завершения дисковых операций..
Порядок поиска библиотек настраивается:
man ld.so
man ldconfig
В частности /etc/ld.so.conf
А глюк забавный, сразу и не догадаешься
netf0x:
Вообще-то в Linux /usr/local как раз для всякой неродной мутотени и предназначен
selivan:
о! Спасибо!