LXF138:Управление пакетами
|
|
|
- Устранение неисправностей
Содержание |
Управление пакетами: проблемы решены
- Грэм Моррисон решает ряд основных проблем трех самых популярных менеджеров пакетов.
Mенеджер пакетов является неизбежным атрибутом всех современных дистрибутивов. Это потому, что для большинства из нас использование менеджера пакетов – единственный способ установки и удаления нового программного обеспечения, а также модернизации старых версий и добавления обновлений безопасности. Это интерфейс между настольным компьютером и миром свободного ПО, и без него мы погрязнем в компиляциях и запусках сомнительных бинарников из Интернета.
При внешней скромности, менеджеры пакетов решают сложные задачи. При установке программы вроде GIMP, к примеру, менеджер пакетов не только скачивает исполняемый файл и устанавливает его в вашей системе. Он определяет части ПО, общие с другими приложениями, установленными в вашей системе, а также новые, и устанавливает все эти зависимости наряду с запрошенными пакетами. При крупном обновлении, таком как KDE с версии 4.4 до 4.5, могут потребоваться сотни зависимостей, тысячи перекрестных ссылок на ресурсы и сложные последовательности загрузки пакетов, разрешение зависимостей, установка и удаление лишних файлов. И задача менеджера пакетов – обеспечить как можно более плавную, безопасную и эффективную работу. С учетом всей этой сложности, не удивительно, что какие-то вещи могут иногда пойти не так. К счастью, каждый из основных инструментов управления пакетами предоставляет свои методы для решения таких проблем.
Но прежде чем вступить в борьбу с ошибками, стоит отметить, что профилактика всегда лучше лечения, и практически все проблемы «пакетного менеджмента» бывают у людей, использующих либо неофициальные, либо бета-хранилища, сторонние пакеты или ручную установку. Лучший шанс не иметь подобных проблем – избегать этих методов. Большинство дистрибутивов серьезно заботятся о том, чтобы при установке обновлений ваша система не испортилась и чтобы пакеты, доступные с их собственных репозиториев, были максимально стабильными.
Yum
- Используют: Fedora, CentOS и Red Hat Enterprise Linux.
До того, как Ubuntu занял доминирующие позиции, Red Hat Package Manager (RPM) был ближе всех к стандартному формату ПО для установки, на который когда-либо могли рассчитывать пользователи Linux. Он и по-прежнему есть, если вы следите за спецификацией Linux Standard Base или у вас один из множества производных от Red Hat дистрибутивов, которые и сегодня придерживаются данного формата. Но наиболее популярным ныне является Fedora, дистрибутив сообщества, отпочкованный от коммерческого Red Hat. Уже много лет он использует RPM, но скрывает большую часть недостатков и сложность за графическим интерфейсом. В последних версиях применяется система PackageKit – это интерфейс высокого уровня для различных форматов пакетов, доступных для большинства дистрибутивов. В Kubuntu, например, вы обнаружите, что управление пакетами осуществляется через приложение KDE по умолчанию – KPackageKit, хотя внутри идет установка Deb-файлов. То же самое и с Fedora, разве что вместо Deb-файлов PackageKit использует все тот же старый RPM, вызывая движок Yum для обработки зависимостей точно так же, как на протяжении многих лет. В итоге ваша система Fedora может страдать от старых проблем, и лучший способ их решения – откат назад на Yum, старый интерфейс командной строки.
- В Какой пакет надо устанавливать?
- В отличие от других менеджеров пакетов, Yum вполне справляется с разрешением зависимостей пакетов для всех видов запросов. Одна из наиболее полезных команд – yum provides; через нее можно искать пакеты, которые будут устанавливать файл или каталог. Например, yum provides /usr/lib/libaa.so.1 произведет поиск пакета нужной библиотеки; можно также использовать символы подстановки для имен файлов и каталогов, что делает эту команду универсальной в решении задач для ручного разрешения зависимостей.
- В Как установить проблемные пакеты?
- Первым делом попробуйте самое общее исправление в Yum, через набор команд самодиагностики Yum. Сначала посмотрите, нет ли проблем с самим Yum, что можно сделать, набрав yum check. Если налицо конфликт пакетов, вы поймете, в чем решение, даже если это означает удаление проблематичного пакета до попытки переустановить нужный пакет. Раньше это работало; даже повторная установка того же пакета иногда помогает, если повреждены файл или база данных.
- Если нет очевидных признаков проблемы, наберите yum clean all для удаления кэша, применяемого Yum для ускорения установки пакетов. Этот кэш может вызвать проблемы, если кэшированные файлы устарели или как-то попорчены. Без них новая установка получит самые свежие из доступных файлов и информации; после этого скомандуйте yum update, чтобы заодно обновить и базу пакетов.
- Другая распространенная проблема – невозможность разрешения зависимости для определенного пакета. В выводе команды yum install это может быть показано как ошибка, где установленный пакет нельзя обновить до версии, требуемой для другого пакета, или до той, что считается доступной в Yum.
- Прежде чем перейти к более сложному решению, стоит убедиться, что обновлена и ваша система: ошибка может возникнуть, если произошли существенные изменения пакета в репозитории, а к вашей системе они еще не подгружены. Воспользуйтесь инструментом Software Update, скрытым в меню Администрирование [Administration], или наберите yum update в командной строке.
- Если это не работает, бывали примеры, когда день-другой ожидания помогали исправить неполадки с метаданными на сервере пакетов – это способно помочь вашей установке продолжить работу без дальнейших проблем. Но если вы знаете, что зависимость не важна, или что вы установили новую версию сами, вы можете попробовать спрятать голову в песок, добавив --skip-broken к команде yum install. Тогда проблемный файл будет просто обойден, а установка пакета продолжена. Это может сработать, а может и нет, в зависимости от важности зависимости. Еще можно попробовать запустить package-cleanup --problems для поиска битых локальных пакетов, способных повлиять на новый пакет.
- Если все это не поможет, можете найти и установить битую зависимость вручную, но придется прибегнуть к интерфейсу самого RPM.
- В Могу ли я обойти менеджер пакетов?
- Даже учитывая, что Yum управляет всеми зависимостями и обновлениями, все-таки можно установить свой собственный файл RPM-пакета – командой rpm. Обычно это необходимо только если ваш пакет не имеет зависимостей, или вы знаете, что это обновит или исправит битый пакет в текущей системе. Например, при ошибке обновления Yum, возникшей потому, что Yum не может найти достаточно свежую версию конкретного пакета, можно поискать этот пакет в Интернете и установить его вручную командой rpm.
- У нас недавно были проблемы с Fedora 12, которая упорно сообщала, что не может найти nspr-devel-4.8.6, почему и отказывалась от обновления. Решение – поискать онлайн корректный RPM, с учетом номера версии используемого дистрибутива (в нашем случае – fc12) и архитектуру процессора (i686). Мы просто ввели ‘nspr-devel-4.8.6 fc12 i686’ в строку поиска и загрузили полученный файл. Он устанавливается либо двойным щелчком по нему, или вызовом rpm -Uvh в командной строке. Если пакет является неофициальным, в командной строке надо также добавить --nofiles --nodigest, а в худшем случае, если RPM-пакет отказывается устанавливаться, но вы уверены, что пакет правильный – добавьте --force для установки приложения, невзирая на то, считает ли менеджер пакетов это хорошей идеей или нет.
Yeast Менеджер пакетов типа наведи-и-щелкни, который редко ошибается
Подобно Fedora, OpenSUSE использует RPM-пакеты для установки нового программного обеспечения. Но приложение для RPM отличается – оно называется Zypp и скрывается за всеобъемлющей в OpenSUSE графической системой настройки Yast. В результате вам дается намного меньше воли по устранению проблем по сравнению с другими дистрибутивами.
Оно бывает и неплохо. Например, графический интерфейс позволяет легко добавлять и удалять новые хранилища и GPG-ключи, необходимые для проверки подлинности пакетов.
Самая частая проблема с OpenSUSE состоит в том, что хранилище ПО больше не доступно. Это может произойти, если сайт недоступен в сети или если вы потеряете свой установочный диск, и тогда решением будет обратиться к Yast 2 Control Centre, чтобы удалить неподходящий репозиторий из списка доступных источников и обновить список пакетов. Если нужно больше контроля над системой, наберите команду zypper в командной строке. Это интерфейс инструмента управления пакетами, и его можно использовать для установки пакетов без оптических носителей – как с --no-cd. Если установочный пакет не сработает, используйте аргумент clean для очистки локального кэша, и вы узнаете больше о том, почему что-то не ладится, заглянув в журнал Zypp, который находится в /var/log/zipPer.log.
Если ничего не помогает, пользователи OpenSUSE могут применить те же команды, что и пользователи Fedora, и команда database rebuild должна работать.
Advanced Packaging Tool (APT)
- Используют: Debian и его производные, в особенности Ubuntu.
Не удалось найти искомый пакет? Иногда, особенно если вам неизвестно точное название, найти нужный пакет бывает непросто. Один из примеров – библиотека SDL, поскольку она поставляется как группа различных пакетов, которые требуют установки, только если вы намерены их использовать. Типичная игра SDL может включать перечень требований – например, модуль микшера – и их в менеджере пакетов не очень-то найдешь.
Если вы знаете, что ищете, например, библиотеку, убедитесь, что к поиску добавлен префикс lib. Synaptic не очень хорош для поиска подобных пакетов, и вы можете обнаружить, что искомое находится глубоко внизу списка – libsdl-mixer редко появляется в верхней части страницы результатов. В этих случаях может быть проще искать конкретный файл, не обращаясь к бестолковому поиску Synaptics. Но чтобы иметь возможность проделать этот трюк, нужно установить другой пакет. Он называется apt-file и запускается из командной строки. Наберите apt-file search libsdl-mixer, например, и вам будут представлены все пакеты, включающие данный файл. Это также удобно при поиске пакетов для удаления. Если вы знаете имя файла, найдите его и удалите пакет, установивший файл, либо в командной строке, либо из Synaptic.
- В А если выбранные пакеты не устанавливаются?
- Большинство основных систем управления пакетами используют локальную базу данных доступных им файлов. Это помогает при расчете зависимостей, поскольку менеджеру не нужно прибегать к оптическому диску или интернет-серверу, прежде чем он сможет сообщить пользователю, что нужно установить. Например, если вы используете графический интерфейс Synaptic в Ubuntu, будет проверена локальная база данных для зависимостей, затем откроется окно с сообщением, что нужно установить для вашего исходного пакета. Если следующий шаг не удается сделать – значит, пакеты, перечисленные в локальной базе данных, не коррелируют с теми, что находятся на удаленном сервере. Чаще всего это происходит с дистрибутивами вроде Ubuntu, а не Debian, потому что Ubuntu постоянно обновляется – если вы используете пакеты сторонних производителей любого рода или полуофициальные обновления KDE, есть хороший шанс, что рано или поздно вы поимеете проблемы с установкой связанных пакетов.
- Решить их легко: просто обновите базу данных. Это быстро и легко делается из Synaptic – нажатием на кнопку Reload. Synaptic обычно обновляет базу при запуске, но по какой-то причине обновление может быть пропущено. То же можно сделать из командной строки, набрав apt-get update. Командная строка часто является лучшим способом для устранения неполадок в пакетном инструментарии, потому что она стремится дать лучшую обратную связь, чем графический интерфейс, а также предлагает более широкий диапазон вариантов для решения проблемы.
- Если сбой не исчез или ваша система выдает ошибку при обновлении, исправьте базу данных системы apt-get. Сперва попробуйте команду apt-get -f install. Она попытается починить все пакеты со сломанными зависимостями, и это удобно, если что-то установлено только наполовину. Кроме того, попробуйте sudo dpkg --configure -a, что служит примерно тем же целям. Если конкретные пакеты все еще вызывают проблемы, лучшим решением будет удалить и переустановить их.
- В Что делать с ошибкой непроверенной GPG-подписи?
- Иногда пакет не устанавливается, и единственная ошибка, которую вы видите – жалобы на непроверенные подписи. Это, как правило, происходит только тогда, когда вы вручную добавили сторонний репозиторий – либо через Synaptic, либо вписав адрес репозитория в /etc/apt/sources.list без соответствующего ключа. Ошибка означает, что содержимое пакета нельзя проверить по ключу репозитория – другими словами, ваш дистрибутив не может быть абсолютно уверен, что локальная копия скачанного пакета такая же, как опубликованная в репозитории. В теории, удаленный сайт может быть взломан, а его пакеты заменены вредоносными альтернативами. Именно поэтому почти все хранилища подписывают пакеты секретным ключом, и поэтому ваш менеджер пакетов хочет и не может использовать публичный ключ для верификации пакета.
- Проблема в том, что этот ключ не был добавлен; простое решение – изменить способ добавления репозиториев в вашу систему. Например, воспользуйтесь командой add-apt-repository — она обычно добавляет информацию о пакетах и ключ к вашей локальной связке ключей (LXF137). Ввод sudo add-apt-repository ppa:chromium-daily добавит к примеру PPA-репозиторий браузера Chromium. Вы также можете добавить ключ, если вы уже добавили репозиторий, и избавиться от ошибок при обновлении и установке вашего пакета. Но надо знать имя сервера, на котором находится ключ, и хэш ключа – хотя имя должно войти в сообщение об ошибке, с которой вы сталкиваетесь. Затем введите apt-key --keyserver keyserver --recv-keys keyed и apt-get update.
- В Как установить скачанный Deb-файл?
- Для Debian-систем, эквивалент rpm для командной строки – dpkg, и он позволит вам установить файл Deb, если вы получили пакет в таком виде. Вам нужно всего лишь добавить аргумент -i, но большинство дистрибутивов сделают это автоматически, если вы нажмете на пакет из вашего окружения рабочего стола. Если нажать кнопку Tab после ввода dpkg, чтобы получить список всех команд, начинающихся с тех же букв, вы увидите, что команда идет с большим количеством утилит для создания, редактирования и извлечения содержимого файла Deb. Хотя ни одна не поможет с вашими проблемами непосредственно, можно найти дополнительные подсказки, если вы готовы разбить файл пакета на составные части и проверить каждый компонент. Это поможет не только установке, но и сообществу, когда вы передадите ему исправленную версию.
- Управление пакетами значительно улучшилось за последние пять лет, и сейчас является довольно прозрачным, за исключением проблемных случаев. Как и многие другие аспекты Linux, проблемы часто вызывают себя сами, либо из-за неподдерживаемых репозиториев или пакетов, либо из-за несовместимости с рабочей системой. Но если есть способ что-то сломать, должен быть способ и исправить это – а рост и зрелость менеджеров пакетов означает, что такое становится все легче.
Пакетный агностицизм Форматы пакетов для дистрибутивов не догма
Обычно предполагается, что пользователям Ubuntu требуются файлы пакетов Deb, а пользователи Fedora придерживаются RPM. Для официальных пакетов это верно, но вполне допустимо применение и других форматов пакетов, отличающихся от принятого в дистрибутиве. Можно, например, установить rpm на системе Ubuntu или dpkg для управления Deb-файлами на Fedora. При желании можно даже установить Yum на OpenSUSE.
Но лучшие и наиболее состоятельные результаты вы получите с помощью инструмента под названием Alien. Он не добавляется в вашу систему как новый инструмент управления пакетами, а позволит вам обойтись текущим, так как преобразует формат пакетов в принятый в вашей системе.
Например, вы можете быть пользователем Ubuntu, а игра, в которую вам хочется поиграть, предлагает только двоичные пакеты RPM. Тогда в Alien преобразуйте этот файл в Deb-формат, а затем установите игру на вашей системе, в комплекте с зависимостями, через Synaptic или PackageKit. Правда, тут присутствует элемент проб и ошибок, но для подавляющего большинства обычных приложений мы нашли Alien очень удачным.
После установки Alien введите alien -d -k, а затем расположение файла RPM для создания файла Deb, или замените -d на -r для создания RPM. Итоговый пакет можно затем установить либо двойным щелчком на файле, либо с помощью соответствующих инструментов командной строки. Если вы уверены, что вам повезет, можно просто использовать аргумент -i, чтобы преобразовать пакет в собственный формат вашего дистрибутива и установить его в один заход.