Решение проблемы падения менеджера пакетов YaST (YaST2) после обновления системы.Данному глюку уже "миллионы" лет. Еще с версии 10.3 сталкивался с ним и так и не нашел тогда на него решения. Что это за глюк? Думаю достаточно взглянуть на рисунок 1 и все станет ясно.
Рисунок 1. Симптомы падения менеджера пакетов YaST.
Вкратце — ругается на ошибку сегментирования (segmentation fault) в модуле inst_packages.
Путем долгого рытья иностранных форумов было перепробовал, все что они там писали — но толку мало. Спасала лишь переустановка системы.
И все было бы ничего, забил бы я на этот досадный глюк (ибо сам был виноват — нечего было ставить самую свежую сборку YaST из сетевого репозитария
ftp://ftp5.gwdg.de/pub/opensuse/repositories/YaST:/), но вдруг, ни с того ни с сего я стал замечать что после обновления системы даже с базовым набором репозитариев (которые обязательно включают оффициальный репозитарий обновления Update (
http://ftp5.gwdg.de/pub/opensuse/update/11.0) происходит та же фигня!
Экспериментально-аналитическим путем пришел к выводу — в репозитарий обновления попали битые версии системы управления пакетами. Что делать? Да на самом деле все очень просто — нужно восстановить те пакеты, которые стояли в системе до обновления. Но как это сделать? Ведь графическая утилита управления пакетами не работет! О ужас!!!
Да ничего не ужас. Благо есть консольная утилита которая работает на ncurses в текстовом режиме. Вот она то как раз нам и поможет. Но для начала можно с удобством в графическом режиме проделать фокус — надо отключить репозитарий обновления. Для этого запускаем "YaST – менеджер репозитариев" (рисунок 2) и в нем отключаем Update репозитарий.
Пусть вас не смущает что у меня везде указаны адреса локального фтп — я для корпоративной сети выкачиваю локальные копии всех нужных мне репозитариев. Это и не только потому что инет экономлю, но и потому что в корпоративной сети его практически нет (разве 15 кб/с это интернет для тех кто работает с Linux?).
Рисунок 2. Менеджер репозитариев (напротив update — сняли галочку в поле "Разрешить").
Продолжим.
Следующий этап — запускаем консоль от имени root и в ней уже набираем yast и жмем Enter.
Загрузится наш верный спаситель — смотри рисунок 3.
Поскольку по умолчанию у рута стоит англоязычный профиль (а мне его менять незачем — мало ли, вдруг кириллица заглючит..) - картинка будет соответствующая. Да в общем что ту страшного? В консоли работать — надо знать хотя бы базовый английский.
Для тех кто впервые видит консоль и никогда не видел DOS и не работал с программами написанными в нем подскажу — перемещаться по полям ввода/кнопкам в программе нужно по клавише TAB, выполнить действие на кнопке по клавише Enter или ПРОБЕЛ, можно также по хоткею Alt-<желтым подсвеченная буква>.
Ну в общем по делу — нам надо выбрать в поле ФИЛЬТР (Filter) режим поиска (Search) – для этого становимся в поле и выбираем режимы стрелками курсора верх и вниз.
ВАЖНЫЙ МОМЕНТ: не выбирайте режим Repositories (Репозитарии) — иначе YaST свалится точно также как он вываливается в графическом режиме!
Рисунок 3. Поиск пакетов в YaST.
Теперь перейдя в поле Search Phrase (строка поиска) вводим в него часть названия пакета которую мы хотим найти , а именно yast . Переходим табом на кнопку [Search] и жмем Enter.
В списке справа выведется все найденное. Наша задача — принудительно обновить все пакеты. Для этого идем на кнопку [Actions] (Действия) и выбираем там "Все пакеты" (All packages) – Обновить все принудительно (Update All Unconditionally) – точь в точь как на рисунке!
После этого все буковки "i" на рисунке превратятся в ">" что означает действие обновления версии пакета.
Следующим делом обновим пакеты zypper-а. Zypper – это утилита на базе которой в SuSE построено управление пакетами. Если она вылетает — … думаю объяснять не надо. А именно она и вылетела. Проделываем то же самое что и в предыдущем шаге, но в поиск вбиваем строку zypp . Также в действиях говорим обновить все пакеты принудительно. Появится сообщение (смотрим на рисунок 4 если есть сомнения) о том, что устанавливаемая версия зиппера (в данном случае обновляемая до старой версия) требует иную версию решателя зависимостей (satsolver-tools) и предлагает варианты решения данной пролблемы. В нашем случае необходимо обновить также и решатель до более старой версии — выбираем "downgrade of satsolver-tools …. бла-бла-бла" и нажимаем OK (не забудьте перейти сначала на кнопку OK по клавише Tab !!!).
Рисунок 4. Поиск пакетов в YaST.
Если вдруг ругани на обновление satsolver-tools не было, но все-равно (на всякий случай) нужно проверить это вручную — опять в строке поиска ввести уже satsolver и посмотреть на наличие ">" возле пакета. Если такого значка нету — принудительно обновите все выведенные пакеты как и до этого делали (Рисунок 5).
Рисунок 5. Поиск пакетов в YaST.
После всех вышеперечисленных действий нужно нажать на кнопку "принять" (Accept) и собственно говоря выполнить обновление до старых версий выбранных пакетов.
Вот собственно и все. Метод универсальный, подойдет для решения проблем на любой версии дистрибутива (у меня, как вы уже поняли 11.0) — главное перед этой операцией отключить репозитарий содержащий пакеты с "битыми" версиями пакетного менеджера.
Что именно в них битого — можно только догадываться, но я так подозреваю что поменялась система хранения информации в базе данных, новая версия которой не уживается со старой.
После этого мы уже можем со спокойной совестью включить в менеджере репозитариев собственно репозитарий обновлений и запустить менеджер пакетов.
РЕКОМЕНДАЦИЯ: отключите к чертовой матери автоматическое обновление системы, все эти апплеты КДЕ-шные и тому подобное — не к добру все это. Лучше самому следить за пакетами. Уже не раз сталкивался с тем что ява поломанная начиная с версии 1.6u10 , теперь вот еще менеджер пакетов поломали... В общем, конечно, вам решать - но не говорите что я не предупреждал!
Обновление системы лучше всего делать следующим образом:
1) выбираем Фильтр — "Репозитарии" — ставим курсор на @System – обновить все пакеты если есть версия новее.
2) выбираем "Фильтр — Резюме установки" и видим картинку как на рисунке 6.
Рисунок 6. Здесь и видны все те гадостные пакеты которые встали в системе и "помогли" свалить менеджер пакетов.
Щелкаем по каждому злостному пакету (все yast + zypper + satsolver) правой кнопкой мыши и указываем оставить пакеты незатронутыми, после чего будем наблюдать такую картинку - рисунок 7.
Вот только после этого можно со спокойной совестью нажать на кнопку "Принять" и запустить обновление системы и быть уверенным что в следующий раз менеджер пакетов успешно загрузится. Конечно можно ставить галки на пакетах "Заблокировать" — но оно по дурному работает и иногда тупо отменяется системой если есть пакет поновее. Я так понял блокировка — это только для защиты от удаления пакета, а не для защиты от обновления версии.. и в этом вся беда.
Если забудете при обновлении отменить обновку этих пакетов — придется повторять все что я написал с самого начала!
Ну. как говорится — флаг вам в руки и попутный ветер в спину! Работайте!
П.С.: если знаете как сообщить разработчикам чтобы они исключили эти пакеты из репозитария обновления — поможете всему сообществу!
Рисунок 7. Черными галочками отмечены пакеты, которые обновлять нельзя ни в коем случае!
Все!
Автор статьи SwitNJ - open-suse.ru
Обсуждение
на ФОРУМЕ здесь