Debian как установить старую версию пакета

Обновлено: 04.07.2024

Используем APT Pinning для закрепления пакетов в Debian и Ubuntu

Достаточно часто при работе с Linux-системами возникает потребность в установке пакетов в версии отлично от той, что находится в репозиториях. Чаще всего для этих целей используется ручная установка нужной версии пакета с последующей заморозкой (при необходимости) или сборка пакета из исходников. В тоже время в основанных на Debian дистрибутивах существует штатная система закрепления пакетов APT Pinning, использование которой более предпочтительно, тем более что работать с ней совсем несложно.

Прежде всего давайте разберемся, почему использовать ручную установку пакетов нежелательно. Конечно, если речь идет о какой-то отдельной библиотеке для внутренних нужд, скажем для сборки PostgreSQL от 1С, то нет никакого смысла городить огород, можно смело поставить пакет вручную и благополучно про него забыть. Совсем другое дело если вы таким образом установите какую-либо публичную службу, скажем, веб-сервер Apache или интерпретатор PHP.

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

Как показывает практика - любая уязвимая система рано или поздно будет взломана. Причем узнать об этом вы можете в последнюю очередь, когда вашему хостеру или провайдеру придет претензия на то, что ваш сервер рассылает спам, участвует в DDoS-атаке или занимается еще какой-нибудь неблаговидной деятельностью.

Чем же хорош APT Pinning? Эта технология основана выборе источника пакетов на основании заданных вами предпочтений. Т.е. вполне реально становиться подключить репозитории с нужными версиями пакетов, правильно настроить предпочтения и получать все обновления пакетов оттуда используя штатные механизмы. Это сразу снимает целый пласт проблем, связанных с поддержкой, если нужный пакет получает обновления ваша система тоже их получит.

С чего начать? С источников пакетов, чаще всего это репозитории других версий этого дистрибутива, но можно подключить любые иные: репозитории разработчиков ПО, PPА (для Ubuntu) и т.п. Для их подключения нужно добавить адреса источников пакетов в список репозиториев системы.

Список репозиториев хранится в /etc/apt/sources.list, если мы откроем это файл, например, в Debian 8, то увидим следующее:

apt-pinning-001.jpg

По умолчанию подключено три репозитория: основной, обновления и обновления безопасности. Репозитории deb-src содержат исходные коды для сборки пакетов. Из типов репозиториев подключен только main - ПО, отвечающие критериям свободного ПО Debian. Также существуют репозитории contrib - ПО которое не соответствует критериям свободного ПО Debian и non-free - несвободное ПО. Поэтому полный набор репозиториев будет выглядеть так:

Как несложно заметить данный набор принадлежит к актуальному на текущий момент дистрибутиву Debain 8 "Jessie", для других выпусков следует заменить jessie на кодовое имя другого дистрибутива.

Кроме кодовых имен Debian позволяет использовать класс релиза: stable, oldstable, testing, unstable. Текущий дистрибутив - это stable, предыдущий - oldstable, разрабатываемый - testing, нестабильный (sid) - unstable. Однако на практике такие обозначения не используются, так как если у вас вместо jessie указано stable, то с выходом следующего стабильного дистрибутива - stretch - произойдет автоматическое обновление на него, что на рабочих серверах может привести к неожиданным последствиям. Хотя если вы энтузиаст, то можете прописать везде testing и быть постоянно на переднем крае прогресса.

В Ubuntu набор репозиториев выглядит немного иначе:

apt-pinning-002.jpg

На первый взгляд репозиториев больше и вообще все более запутано. Однако все на самом деле очень просто. Как и в Debian нас интересуют три репозитория основной, обновления и обновления безопасности. Которые в свою очередь делятся на main - свободное ПО и restricted - несвободное ПО, поддерживаемые Canonical, а также universe и multiverse - свободное и несвободное ПО поддерживаемое сообществом.

В итоге список основных репозиториев можно привести к виду:

В Ubuntu версия дистрибутива задается только по кодовому имени, в нашем случае это trusty - Ubuntu 14.04 LTS (Trusty Tahr).

Добавить новые репозитории можно двумя способами: дописать их в основной файл /etc/apt/sources.list, либо создать новый файл с расширением .list в папке /etc/apt/sources.list.d, например, precise.list для репозиториев Ubuntu 12.04 и т.п., все файлы из этой папки с правильным расширением будут автоматически подключены к списку источников.

После того как вы добавили новые репозитории нужно обновить список пакетов:

Теперь самое время разобраться, как происходит выбор пакета для установки. Для этого можно выполнить команду:

Давайте внимательно рассмотрим скриншот ниже, где мы выполнили указанную команду для пакета Nginx:

apt-pinning-003.jpg

В вывод команды попали все доступные пакеты, как из репозитория Debian, так и из репозитория Nginx. Но к установке предложен (и установлен) - 1.9.14, как наиболее новый. Еще обратите внимание на цифры перед именами источников. Это приоритет (вес) пакета. Пакеты в репозиториях имеют приоритет 500, установленные - 100. К установке всегда предлагается самый новый пакет с самым высоким приоритетом.

Значения веса приоритета могут быть следующими:

  • P >= 1000 - пакет будет установлен, даже если это приведет к понижению версии уже установленного пакета
  • 990 <= P < 1000 - пакет будет установлен, если не установлена более новая версия
  • 500 <= P < 990 - пакет будет установлен, если нет пакета принадлежащего к целевому выпуску или не установлена более новая версия
  • 100 <= P < 500 - пакет будет установлен, если нет кандидатов из других источников или установленного пакета более новой версии
  • 0 < P < 100 - пакет будет установлен, если нет других кандидатов и установленных пакетов любой версии
  • P < 0 - пакет не будет установлен ни при каких условиях
  • P = 0 - неопределенное состояние, не используется

Использовать вес выше 1000 следует с осторожностью, особенно если предпочтения включают отбор по маске, в этом случае вы можете без запроса провести понижение сразу целого набора пакетов (по зависимостям), что может привести к неожиданным результатам.

Вес от 990 до 1000 также производит обновление уже установленных пакетов, но только в случае повышения их версии. Опасность бесконтрольного применения этих двух режимов заключается в том, что могут быть поломаны зависимости, и в связи с этим удалены, сторонние пакеты, что может привести к полной или частичной неработоспособности системы.

Отдельно остановимся на различиях между весом в диапазоне 500 - 990 и 990 - 1000.

Так при весе от 500 и выше новый пакет будет всегда установлен и заменит уже существующий пакет если действие будет явно задано пользователем. Таким образом команды:

обновят пакет или набор пакетов до самых последних версий при весе от 500 и выше. Например, у нас на Debian 7 установлен apache 2.2, добавим репозитории от Debain 8 и посмотрим кандидата на установку:

apt-pinning-004.jpg

При этом мы можем установить пакету apache2 любой вес от 500 до 1000, результат будет тот же самый. Так в чем же тогда разница между 500-990 и 990-1000?

Разница состоит в понятии целевого выпуска, который по умолчанию не задан, поэтому поведение системы с весами от 500 до 1000 будет одинаковым. Чтобы задать целевой выпуск создадим в папке /etc/apt/apt.conf.d пустой файл без расширения, скажем, default и внесем в него следующую строку:

Это установит в качестве целевого установленный выпуск Debian 7. Проверим что будет теперь:

apt-pinning-005.jpg

Даже несмотря на то, что мы присвоили apache2 из jessie вес 900, кандидатом на установку остается пакет из wheezy, так как принадлежит целевому выпуску. Чтобы изменить ситуацию, нужно присвоить пакету вес от 990 до 1000:

apt-pinning-006.jpg

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

Разобравшись с тем, как действуют приоритеты, самое время научиться указывать их самостоятельно. Для указания приоритета следует создать файл без расширения в папке /etc/apt/preferences.d и поместить в него ряд директив. Мы рекомендуем называть файлы по имени закрепляемых пакетов и не писать все настройки в один файл. Это позволит более гибко управлять процессом закрепления пакетов.

В самом файле следует разместить один или несколько наборов следующих директив:

Имя пакета может быть задано как целиком, так и по маске, например, apache2*. Допускается также указание нескольких имен через пробел.

В качестве опций прикрепления могут выступать источник пакетов, версия и их происхождение. Например, следующий набор директив закрепит Perl на уровне линейки 5.10, а заданный вес пакета 1001 позволит понизить уже установленную версию (при необходимости).

И наконец привязка к определенному выпуску, например все пакеты по маске apache2* брать из репозиториев выпуска wheezy:

Для Debian допустимо также использовать конструкцию:

Для Ubuntu значение обоих ключей n и a совпадает и должно содержать кодовое имя релиза.

Чтобы не быть голословными рассмотрим несколько практических сценариев.

Понижение версии пакетов

Наиболее часто требуется понизить версию Apache с 2.4 до 2.2, например, для нужд 1С предприятия. Поэтому прежде всего в систему следует добавить репозитории от предыдущего выпуска, который содержит нужную версию Apache, это wheezy для Debian или precise для Ubuntu. Дальше можно пойти двумя путями, например, задать вес 1001 и произвести замену нужных пакетов:

Это потенциально опасная операция, поэтому перед тем как производить установку следует выполнить ее тестирование:

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

apt-pinning-007.jpg

Если все в порядке, то можно проводить установку. Однако мы не рекомендовали бы использовать вес больше 1000, так как остается опасность случайного понижения пакетов, скажем при обновлениях. Более безопасно установить вес от 990 до 1000 и предварительно удалить уже установленные пакеты.

Для того, чтобы удалить пакеты сначала нужно получить их список, для этого служит команда dpkg -l с последующим отбором по имени пакета.

Установленные пакеты удаляем командой:

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

Однако учтите, что данная операция уничтожит все настройки и данные относящиеся к пакету, в случае с MySQL или PostgreSQL это приведет к полной потере данных, поэтому предварительно сделайте копии нужного содержимого и настроек.

После чего можно установить пакет, предварительно его протестировав.

apt-pinning-009.jpg

Конечный результат тот же, но сам процесс более безопасен, так как процесс установки только добавляет пакеты в систему, удаление пакетов производится вручную, что дает дополнительный контроль. В дальнейшем уже установленные пакеты будут получать обновления в рамках поддержки своего выпуска, но при этом не стоит опасаться того, что какие-либо пакеты могут быть понижены без нашего ведома, скажем вследствии ошибки в настройке закрепления пакетов.

Повышение версии пакетов

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

Вообще правильным способом повышения пакета является его сборка в окружении текущего дистрибутива из исходных кодов репозитория deb-src от нового выпуска. Однако этот метод выходит за рамки данной статьи.

Мы же покажем вам практический пример попытки повышения версии пакета. Прежде всего, подключив репозитории от более свежего выпуска, не забудьте указать целевой выпуск или понизить их приоритет, например, следующими директивами:

Это предпочтение мы рекомендуем расположить в отдельном файле, чтобы избежать его случайного изменения или удаления, после чего, в один явно не очень прекрасный день, вы можете "случайно" обновить дистрибутив на рабочем сервере с непредсказуемыми последствиями. Собственно, поэтому мы советуем указывать целевой выпуск, так как шанс непреднамеренно изменить данную настройку гораздо ниже.

Хорошо, дистрибутивы добавили, приоритеты выставили, кандидатов проверили, вроде бы все нормально. Попробуем установить пакет в тестовом режиме:

apt-pinning-010.jpg

Сразу сталкиваемся с проблемами зависимостей. Кроме того, пакет требует обновления dpkg, который является одним из ключевых компонентов системы. В этом случае пробуем установить зависимости вручную и получаем целый список пакетов, требующих повышения:

apt-pinning-011.jpg

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

Ну вот, вроде бы все добавлено, как видим в список предпочтений попали самые неожиданные пакеты (а мы хотели только обновить Apache):

apt-pinning-012.jpg

Тестируем установку и видим весьма неожиданный результат:

apt-pinning-013.jpg

Да, если оставить все как есть, то новый Apache мы поставим, но при этом удалим часть системных утилит. Это произойдет по причине поломанных зависимостей. Какой выход? Обновить их до версий из нового выпуска, т.е. снова начинаем решать квест с зависимостями. В этом, несомненно увлекательном процессе, самое главное - вовремя остановиться, оценить степень изменения дистрибутива и подумать о полноценном переходе на новую версию, вместо того, чтобы сооружать некое чудовище Франкенштейна.

Выводы

Как видим, технология APT Pinning дает в руки администратора весьма мощный и гибкий инструмент по управлению версиями пакетов. Но его использование требует должной осторожности и определенного уровня знаний, так как с одинаковым успехом позволяет как осуществить задуманное, так и привести систему в полностью неработоспособное состояние. К практическим аспектам применения данного метода мы относим понижение версии пакетов или закрепление версий из сторонних репозиториев. Использовать его для повышения пакетов мы категорически не рекомендуем, разве что в исследовательских и образовательных целях.

Иногда бывает нужно установить старую версию какого-либо пакета. Самый простой (хоть и неправильный) путь это скачать нужную версию и установить ее вручную, но тогда придется самостоятельно разбираться с огромным количеством зависимостей. Поэтому самый правильный путь – это прописать дополнительные репозитории и настроить исключения для нужных пакетов.

В данной статье будем понижать версию PHP с 5.4.x до 5.3.x

Мы будем ставить пакет PHP из дистрибутива squeeze (в более новых ветках используется PHP 5.4.x)

Чтобы добавить нужные репозитории открываем /etc/apt/sources.list

И добавляем в конец репозитории:

Теперь нам нужно зафиксировать версии пакетов, чтобы не ставились более новые. Для этого мы укажем в файле /etc/apt/preferences.d/preferences из какого репозитория брать нужные нам пакеты.

Package: php5*
Pin: release a=oldstable
Pin-Priority: 700

Package: libapache2-mod-php5
Pin: release a=oldstable
Pin-Priority: 700

Package: *
Pin: release a=stable
Pin-Priority: 600

Для понижения версии PHP нам потребуются все пакеты, которые начинаются с php5, а так же libapache2-mod-php5.
Объяснение строк:

Package: php5* – пакеты, которые попадают под маску php5*
Pin: release a=oldstable – берутся из репозиториев предыдущей версии дистрибьютива (Можно зафиксировать текущую версию и запретить ее изменять. Для этого нужно написать Pin: version 5.3.3-7+squeeze19, где 5.3.3-7+squeeze19 – это версия пакета).
Pin-Priority: 700 – приоритет установки. Чем больше – тем предпочтительней правило.

Таким же образом выдаем указания для пакета (libapache2-mod-php5) и для всех остальных (*). Теперь обновляем информацию в apt:

и устанавливаем наши пакеты:

Теперь остается перезапустить Apache и все готово.

service apache restart
или в более новых версиях
service apache2 restart

P.S. Полезные команды:
Посмотреть версии всех пакетов, установленных в системе:

Посмотреть доступные версии в репозиториях:

просто установить нужную версию:

где:
php5 – имя пакета
5.3.3-7+squeeze19 – версия.

Удалить пакет вместе с файлами конфигурации:

P.S.
По умолчанию PHP для апача состоит из пакетов:

libapache2-mod-php5
php5
php5-cgi
php5-cli
php5-common
php5-gd
php5-mcrypt
php5-mysql
php5-suhosin

Если конфигурация более сложная, то нужно проверять зависимости пакетов. Иначе они все могут не установиться. Посмотреть зависимости пакета можно командой:

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

Пакет для понижения версии в Linux

Нормально то, что всегда обновляйте программные пакеты чтобы получить более свежие версии этих. Обычно разработчики стремятся к тому, чтобы с появлением новых версий они становились все лучше и лучше. Но так бывает не всегда. Иногда предыдущие версии пакета могут быть более стабильными, работать лучше по какой-то причине или даже из-за того, что пользователю больше нравится версия до обновления, потому что в ней есть что-то, что в новой версии больше не реализуется.

Если это ваш случай, в этом урок мы покажем вам, как вы можете перейти на более раннюю версию любого пакета, то есть откатить обновление и получить предыдущую версию, установленную в вашей системе. Таким образом, у вас не будет проблем, если новые версии вас подведут. Ну что ж, приступим!

Поскольку не существует общего метода для всех дистрибутивов, я покажу, как это можно сделать с помощью самые популярные менеджеры пакетов. Кстати, если вы используете другие методы, такие как YaST, Synaptic и т. Д., Процедуры также возможны, но графически и намного более интуитивно понятны. Здесь я объясню методы через консоль, которые вызывают наибольшую путаницу .

apt-get: Debian / Ubuntu и производные

Для всех дистрибутивы на основе пакетов DEB а с помощью диспетчера пакетов apt-get вы можете легко перейти с более современной версии на более старую. Например, мы возьмем пакет firefox в качестве эталона, представив, что мы хотим вернуться от текущей версии к предыдущей. В этом случае вы можете выполнить следующие команды:

  • Вы можете получить информация о пакете firefox (или что-то еще, вам просто нужно изменить имя на соответствующее в вашем случае), например, предыдущие установленные версии и т. д., вы можете использовать следующую команду:
  • Как только вы хорошо знаете предыдущая версия, которую вы хотите установить, вы можете использовать следующую команду для установки нужного пакета. В нашем случае в предыдущей команде мы получили пакет с именем firefox = 57.3-build1-0ubuntu1, который мы хотим установить:
  • После этого у вас уже будет установлена ​​предыдущая версия этой программы. Вы знаете, что если нет указать версию Используя APT, вы устанавливаете последнюю версию, доступную в репозитории этого пакета. В данном случае мы указали конкретную версию.

Помните, что возможно, что сосуществуют два разных пакета версий на GNU / Linux без проблем. Итак, если вы хотите иметь две разные версии одного и того же пакета, вы можете это сделать .

pacman: Arch Linux и производные

Если у вас есть Arch Linux, то вам придется иметь дело с pacman как с менеджером пакетов. Этот инструмент также позволяет вам вернуться к предыдущей версии, если хотите. Способ сделать это немного другой, но такой же простой:

  • Искать ев кеше пакета доступные версии, вы можете проверить запись. Чтобы отфильтровать результаты только для пакетов firefox в нашем случае (но вы уже знаете, что можете заменить имя пакета на то, которое хотите . ), вы можете использовать:
  • Теперь, когда вы знаете, какая версия вам нужна, вы можете использовать следующую команду установить это:

zypper: SUSE / openSUSE и производные

В мире SUSE, вы можете использовать менеджер пакетов zypper. Это также простой способ получить пакет в предыдущей версии. В нашем случае с Mozilla Firefox это будет примерно так:

  • Первым делом нужно обратиться к кешу пакетов аналогично тому, как мы это делали для Arch, с помощью следующей команды, чтобы узнать предыдущие версии пакета в наличии:
  • Как только предыдущая версия будет найдена, вы сможете установить эту версию используя zypper следующим образом:

dnf: Red Hat / CentOS / Fedora и производные

Наконец, в дистрибутивах на основе Fedora yum или dnf будут использоваться. Чтобы отменить обновление пакета и вернуться к предыдущей версии с пониженной версией, вы можете использовать следующие команды:

  • В этом случае первым делом нужно будет увидеть предыдущие версии пакета, который вы пытаетесь установить в репозитории DNF. В нашем примере вы можете использовать эту команду для получения списка:
  • Теперь, когда вы внимательно посмотрите на имя версия, которую вы хотите установить, вам просто нужно скопировать его из данных, выданных в выводе предыдущей команды, и вставить в следующую. Например:

Вы также можете использовать снимки или снимки вернуться к предыдущим версиям. Для этого вы можете использовать следующие команды, которые они будут делать, соответственно, получать историю, затем получать информацию о транзакции из истории с ее идентификатором (что вы хотите в вашем случае), а затем возвращаться к статусу этой транзакции с указанием идентификатора (в нашем примере 32):

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

Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Полный путь к статье: Любители Linux » Общие » Программное обеспечение Linux » Переход на более раннюю версию: возврат к предыдущей версии программного пакета.

8.1. Какие программы для управления пакетами имеются в Debian?

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

Важно понимать, что высокоуровневые инструменты управления пакетами, такие как aptitude или synaptic , для управления пакетами используют apt , который, в свою очередь, использует dpkg для управления пакетами системы.

See Chapter 2. Debian package management of the Debian reference for more information about the Debian package management utilities. This document is available in various languages and formats, see the Debian Reference entry in the DDP Users' Manuals overview.

8.1.1. dpkg

Это основная программа управления пакетами. dpkg может вызываться с многими параметрами. Наиболее часто используемые из них:

Показать список всех параметров: dpkg --help

Показать управляющий файл (и другую информацию) для указанного пакета: dpkg --info foo_VVV-RRR.deb

Установить пакет на жёсткий диск (т. е. распаковать и настроить): dpkg --install foo_VVV-RRR.deb

Распаковать архив Debian на жёсткий диск (но не настраивать): dpkg --unpack foo_VVV-RRR.deb . Учтите, что в результате данной операции пакет не обязан быть в рабочем состоянии; для правильной работы может потребоваться внесение изменений в некоторые файлы. Данная команда удаляет любую ранее установленную версию программы и запускает сценарий preinst указанного пакета (см. Раздел 7.6, «Зачем нужны сценарии preinst, postinst, prerm и postrm?»).

Настроить пакет, который был распакован ранее: dpkg --configure foo . Кроме всего прочего, эта команда запускает сценарий postinst указанного пакета (см. Раздел 7.6, «Зачем нужны сценарии preinst, postinst, prerm и postrm?»). Она также обновляет файлы, перечисленные в conffiles . Обратите внимание, что в качестве аргумента для параметра configure указывается имя пакета (т. е. foo), а не имя файла-архива Debian (т. е. foo_VVV-RRR.deb).

Распаковать файл с именем "blurf" (или группу файлов с именем "blurf*") из архива Debian: dpkg --fsys-tarfile foo_VVV-RRR.deb | tar -xf - 'blurf*'

Удалить пакет (но не его файлы настроек): dpkg --remove foo

Удалить пакет (вместе с файлами настроек): dpkg --purge foo

Вывести состояние установки пакетов, содержащих в имени строку (или регулярное выражение) «foo*»: dpkg --list 'foo*'

8.1.2. APT

APT is the Advanced Package Tool , an advanced interface to the Debian packaging system which provides the apt-get program. It provides commandline tools for searching and managing packages, and for querying information about them, as well as low-level access to all features of the libapt-pkg library. For more information, see the User's Guide in /usr/share/doc/apt-doc/guide.html/index.html (you will have to install the apt-doc package).

Starting with Debian Jessie, some frequently used apt-get and apt-cache commands have an equivalent via the new apt binary. This means some popular commands like apt-get update , apt-get install , apt-get remove , apt-cache search , or apt-cache show now can also be called simply via apt , say apt update , apt install , apt remove , apt search , or apt show . The following is an overview of the old and new commands:

Инструмент apt совмещает функциональность apt-get и apt-cache, а также по умолчанию использует красивый цветной формат вывода, что очень удобно. Для использования в сценариях или для продвинутого использования предпочтительнее использовать apt-get (а иногда он просто необходим).

apt-get provides a simple way to retrieve and install packages from multiple sources using the command line. Unlike dpkg , apt-get does not understand .deb files, it works with the packages proper name and can only install .deb archives from a source specified in /etc/apt/sources.list . apt-get will call dpkg directly after downloading the .deb archives [5] from the configured sources.

Часто используемые команды apt-get :

To update the list of packages known by your system, you can run:

(вы должны регулярно запускать эту команду для обновления списка пакетов)

Установить пакет foo и все его зависимости:

Удалить пакет из системы:

Удалить из системы пакет и все его файлы настроек:

To list all packages for which newer versions are available, run:

Обновить все пакеты в системе (без установки дополнительных пакетов или удаления пакетов):

Обновить все установленные в системе пакеты с установкой или удалением дополнительных пакетов, если это потребуется для обновления какого-то пакета:

(Команда upgrade оставит старую установленную версию пакета, если для разрешения новых зависимостей при обновлении потребуется установка дополнительных пакетов. Команда full-upgrade менее консервативна.)

Note that you must be logged in as root to perform any commands that modify packages.

Note that apt-get now also installs recommended packages as default, and thanks to its robustness it's the preferred program for package management from console to perform system installation and major system upgrades.

В комплект инструментов apt входит также программа для обработки запросов по списку пакетов apt-cache . Её можно использовать для поиска пакетов, имеющих определённую функциональность, с помощью простых текстовых запросов или регулярных выражений, а также для получения списка зависимостей из системы управления пакетами. Часто используемые команды apt-cache :

Найти пакеты, содержащие в своём описании слово :

Показать подробную информацию о пакете:

Показать зависимости пакета:

To print detailed information on the versions available for a package and the packages that reverse-depends on it:

For more information, install the apt package and read apt (8) , apt-get (8) , sources.list (5) and install the apt-doc package and read /usr/share/doc/apt-doc/guide.html/index.html .

8.1.3. aptitude

aptitude — это менеджер пакетов для систем Debian GNU/Linux, он предоставляет интерфейс к инфраструктуре управления пакетами apt. aptitude представляет собой текстовый интерфейс на основе библиотеки curses. Действия можно выполнять как из визуального интерфейса, так и из командной строки.

aptitude может использоваться для лёгкого и быстрого выполнения задач по управлению пакетами. Она позволяет пользователю просматривать список пакетов и выполнять такие задачи по управлению пакетами как установка, обновление и удаление.

Помимо функциональности apt-get , aptitude имеет много других дополнительных возможностей:

обеспечивает лёгкий доступ ко всем версиям пакета;

позволяет легко отслеживать устаревшее ПО, занося его в «список устаревших пакетов и пакетов, созданных локально»;

включает достаточно мощную систему поиска и ограничения отображаемых пакетов. Пользователи, знакомые с mutt , освоятся быстро, так как синтаксис регулярных выражений был навеян этой программой;

можно использовать для установки заранее сформированных наборов для определённых задач. Подробности см. в Раздел 8.1.5, «tasksel»;

aptitude in full screen mode has su functionality embedded and can be run by a normal user. It will call su (and ask for the root password, if any) when you really need administrative privileges.

С aptitude можно работать, используя визуальный интерфейс (просто запустить aptitude ), или непосредственно из командной строки. Используемый синтаксис командной строки очень похож на синтаксис apt-get . Например, для установки пакета foo , можно выполнить aptitude install foo .

Note that aptitude is the preferred program for daily package management from the console.

For more information, read the manual page aptitude (8) and install the aptitude-doc package.

8.1.4. synaptic

synaptic is a graphical package manager. It enables you to install, upgrade and remove software packages in a user friendly way. Along with most of the features offered by aptitude, it also has a feature for editing the list of used repositories, and supports browsing all available documentation related to a package. See the Synaptic Website for more information.

8.1.5. tasksel

Иногда бывает трудно найти подходящий комплект пакетов для выполнения определённой задачи. Разработчики Debian определили задачи , представляющие собой наборы из нескольких пакетов Debian, предназначенных для определённой деятельности. Задачи можно устанавливать с помощью программы tasksel или aptitude .

Typically, the Debian installer will automatically install the task associated with a standard system and a desktop environment. The specific desktop environment installed will depend on the CD/DVD media used, most commonly it will be the GNOME desktop ( gnome-desktop task). Also, depending on your selections throughout the installation process, tasks might be automatically installed in your system. For example, if you selected a language other than English, the task associated with it will be installed automatically too and if the installer recognises you are installing on a laptop system the laptop task will also be installed.

8.1.6. Другие инструменты управления пакетами

8.1.6.1. dpkg-deb

Вывести список допустимых параметров: dpkg-deb --help

Определить, какие файлы содержатся в файле-архиве Debian: dpkg-deb --contents foo_VVV-RRR.deb )

Извлечь файлы из указанного архива Debian в определённый пользователем каталог: dpkg-deb --extract foo_VVV-RRR.deb tmp извлечёт все файлы из foo_VVV-RRR.deb в каталог tmp/ . Это удобно для просмотра содержимого пакета в отдельном каталоге без его установки в основное дерево каталогов.

Извлечь из пакета файлы с управляющей информацией: dpkg-deb --control foo_VVV-RRR.deb tmp .

Учтите, что любые пакеты, просто распакованные командой dpkg-deb --extract , будут установлены некорректно, для установки следует использовать dpkg --install .

More information is given in the manual page dpkg-deb (1) .

8.2. Говорят, что Debian способен обновить работающую программу; как это делается?

Ядро (файловая система) в системах Debian GNU/Linux поддерживает замену файлов, даже когда они используются.

Мы также предоставляем программу start-stop-daemon , которая используется для запуска служб при загрузке компьютера или их останова при изменении уровня выполнения (например, при переключении из многопользовательского в однопользовательский или для выключения компьютера). Эта же программа используется сценариями установки при установке нового пакета со службой, для остановки работающей службы и её перезапуска при необходимости.

8.3. Как узнать, какие пакеты установлены в системе Debian?

Чтобы получить список всех установленных пакетов, выполните команду

Эта команда выведет для каждого пакета однострочную сводку, включающую два символа состояния (объясняемые в заголовке), имя пакета, установленную версию и краткое описание.

To learn the status of packages whose names match any pattern beginning with "foo", run the command:

Чтобы получить более подробный отчёт о состоянии определённого пакета, выполните команду:

8.4. How do I display the files of an installed package?

Чтобы вывести список файлов установленного пакета foo , выполните команду

Учтите, что файлы, созданные сценариями установки, не отображаются.

8.5. Как определить пакет, которому принадлежит определённый файл?

Чтобы определить, в каком пакете содержится файл с именем foo , выполните одну из следующих команд:

dpkg --search foo

Эта команда ищет foo в установленных пакетах. (В настоящий момент это эквивалентно поиску всех файлов с расширением .list в каталоге /var/lib/dpkg/info/ и выводу имён всех пакетов, которые содержат заданное имя файла, и отклонений.)

Более быстрая альтернатива этому — программа dlocate .

zgrep foo Contents-ARCH.gz

Эта команда ищет файлы, содержащие в своих полных именах путей подстроку foo . Файлы Contents-ARCH.gz (где ARCH представляет нужную архитектуру) расположены в основных каталогах пакетов (main, non-free, contrib) на FTP-сайте Debian (то есть, в /debian/dists/buster ). Файл Contents относится только к тем пакетам, что расположены в структуре подкаталогов того же каталога, где находится и он сам. Поэтому, чтобы найти пакет, содержащий файл foo , пользователю нужно искать более чем в одном файле Contents .

Преимущество этого метода над dpkg --search состоит в том, что будут найдены файлы в тех пакетах, которые могут быть не установлены в вашей системе.

apt-file search foo

If you install the apt-file package, similar to the above, it searches files which contain the substring or regular expression foo in their full path names. The advantage over the example above is that there is no need to retrieve the Contents-ARCH.gz files as it will do this automatically for all the sources defined in /etc/apt/sources.list when you run (as root) apt-file update .

8.6. Why is `foo-data' not removed when I uninstall `foo'? How do I make sure old unused library-packages get purged?

Some packages are split in program (`foo') and data (`foo-data') (or in `foo' and `foo-doc'). This is true for many games, multimedia applications and dictionaries in Debian and has been introduced since some users might want to access the raw data without installing the program or because the program can be run without the data itself, making `foo-data' optional.

Подобное относится и к библиотекам: обычно они устанавливаются, так как пакеты приложений зависят от них. Когда пакет приложения вычищается, пакет библиотеки может остаться в системе. Или когда пакет приложения больше не зависит, скажем, от libdb4.2, а зависит от libdb4.3, то пакет libdb4.2 может остаться в системе при обновлении пакета приложения.

In these cases, `foo-data' doesn't depend on `foo', so when you remove the `foo' package it will not get automatically removed by most package management tools. The same holds true for the library packages. This is necessary to avoid circular dependencies. However, if you use apt-get (see Раздел 8.1.2, «APT») or aptitude (see Раздел 8.1.3, «aptitude») as your package management tool, they will track automatically installed packages and give the possibility to remove them, when no packages making use of them remain in your system.

[5] Notice that there are ports that make this tool available with other package management systems, like Red Hat package manager, also known as rpm

При установке программного обеспечения система управления пакетами проверяет и при необходимости устанавливает «зависимости» (dependencies), которые подобраны создателями пакета. Эти зависимости указаны в файле control, имеющемся в каждом пакете.

Программы для управления пакетами в Debian

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

Важно понимать, что высокоуровневые инструменты управления пакетами, такие как aptitude или dselect , для управления пакетами используют apt , который, в свою очередь, использует dpkg .

Подробнее об инструментах управления пакетами Debian написано в Chapter 2. Debian package management справочнике Debian.

8.1.1 dpkg

Это основная программа управления пакетами. dpkg может вызываться с многими параметрами. Наиболее часто используемые из них:

8.1.2 APT

APT (Advanced Package Tool) — расшифровывается как усовершенствованный инструмент управления пакетами, в него входит программа apt-get . Эта программа позволяет легко получать и устанавливать из командной строки пакеты из разных источников. В отличие от dpkg , программа apt-get не понимает файлы .deb, она работает с именами пакетов, и может устанавливать архивы .deb только из источников, указанных в файле /etc/apt/sources.list . После скачивания архивов .deb команда apt-get запускает dpkg .[5].

Часто используемые команды apt-get :

    Обновить список пакетов, имеющихся в источниках:

  • Обновить все пакеты в системе (без установки дополнительных пакетов или удаления пакетов):
  • Установить пакет foo и все его зависимости:
  • Удалить пакет из системы:
  • Удалить из системы пакет и все его файлы настроек:

upgrade оставит старую установленную версию пакета, если для разрешения новых зависимостей при обновлении потребуется установка дополнительных пакетов. Команда

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

Обратите внимание, что в настоящее время apt-get по умолчанию устанавливает рекомендуемые пакеты, и эта программа является предпочтительной для управления пакетами из консоли при выполнении установки или больших обновлений системы вследствие её ошибкоустойчивости.

В комплект инструментов apt входит также программа для обработки запросов по списку пакетов apt-cache . Её можно использовать для поиска пакетов, имеющих определённую функциональность, с помощью простых текстовых запросов или регулярных выражений, а также для получения списка зависимостей из системы управления пакетами. Часто используемые команды apt-cache :

  • Найти пакеты, содержащие в своём описании слово :
  • Показать подробную информацию о пакете:
  • Показать зависимости пакета:
  • Показать подробную информацию о доступных версиях пакета и о пакетах, от него зависящих (об обратных зависимостях пакета):

Дополнительную информацию можно найти в справочных страницах apt-get(8) , sources.list(5) из пакета apt и в файле /usr/share/doc/apt-doc/guide.html/index.html из пакета apt-doc .

8.1.3 aptitude

aptitude — это пакетный менеджер для систем Debian GNU/Linux, предоставляющий пользовательский интерфейс для инфраструктуры управления пакетами apt. aptitude имеет текстовый интерфейс, написанный с использованием библиотеки curses, позволяет удобно и быстро выполнять задачи управления пакетами.

Помимо функциональности dselect и apt-get , aptitude реализует много других дополнительных возможностей, которых нет ни в одной из этих программ:

  • обеспечивает лёгкий доступ ко всем версиям пакета;
  • позволяет легко отслеживать устаревшее ПО, занося его в «список устаревших пакетов и пакетов, созданных локально»;
  • включает достаточно мощную систему поиска и ограничения отображаемых пакетов. Пользователи, знакомые с mutt , освоятся быстро, так как синтаксис регулярных выражений был навеян этой программой;
  • можно использовать для установки заранее сформированных наборов для определённых задач. Подробности см. вtasksel, раздел 8.1.5;
  • в полноэкранном режиме имеет встроенную функциональность команды su и может запускаться от обычного пользователя. Когда действительно понадобятся права администратора, вызовет su (и, если нужно, запросит пароль суперпользователя).

С aptitude можно работать, используя визуальный интерфейс (просто запустить

aptitude ), или непосредственно из командной строки. Используемый синтаксис командной строки очень похож на синтаксис apt-get . Например, для установки пакета foo , можно выполнить

aptitude install foo .

Заметим, что aptitude является предпочтительной программой для ежедневного управления пакетами из консоли.

Более подробную информацию можно найти в справочной странице aptitude(8) и в пакете aptitude-doc .

8.1.4 synaptic

synaptic — это менеджер пакетов с графическим интерфейсом. Он позволяет устанавливать, обновлять и удалять пакеты ПО через дружественный интерфейс. Помимо обеспечения всех возможностей aptitude, он также позволяет редактировать список используемых репозиториев, и поддерживает обзор всей доступной документации по пакету. Подробности см. на веб-сайте Synaptic .

8.1.5 tasksel

Иногда бывает трудно найти подходящий комплект пакетов для выполнения определённой задачи. Разработчики Debian определили

задачи , представляющие собой наборы из нескольких пакетов Debian, предназначенных для определённой деятельности. Задачи можно устанавливать с помощью программы tasksel или aptitude .

Обычно программа установки Debian автоматически устанавливает задачу создания стандартной системы и окружения рабочего стола. Тип устанавливаемого окружения рабочего стола зависит от используемого носителя CD/DVD, как правило это рабочий стол GNOME (задача

8.1.6 Другие инструменты управления пакетами

8.1.6.1 dselect

Данная программа предоставляет меню-ориентированный интерфейс для системы управления пакетами Debian. Для woody и более ранних версий это был основной интерфейс управления пакетами для первоначальной установки системы, но сейчас пользователям вместо неё предлагается использовать aptitude . Некоторым пользователям может быть более удобно пользоваться aptitude , к тому же это рекомендуемая замена для dselect при масштабных обновлениях. Подробности об aptitude см. в aptitude, раздел 8.1.3.

Основные возможности dselect :

  • помогает пользователю выбрать пакеты для удаления или установки, обеспечивает, что устанавливаемые пакеты не будут конфликтовать с другими, и что для каждого пакета будут установлены все пакеты, необходимые для его правильной работы;
  • предупреждает пользователя о несогласованности или несовместимости их выбора;
  • определяет правильную последовательность установки пакетов;
  • автоматически выполняет установку или удаление;
  • помогает пользователю пройти процесс настройки каждого из пакетов.

После запуска dselect показывает пользователю меню из 7 пунктов, каждый из которых выполняет определённое действие. Пользователь может выбрать одно из действий, перемещая с помощью клавиш со стрелками полосу подсветки, а затем нажав клавишу <enter> для выбора выделенного действия.

Что пользователь увидит далее, зависит от выбранного действия. Если он выбрал какое-то действие, но не

Метод (Access) или

Выбрать (Select) , то dselect просто продолжит выполнение указанного действия. Например, если пользователь выбрал действие

Удалить (Remove) , то dselect выполнит удаление всех файлов, помеченных для удаления пользователем, которые он выбрал в меню

Выбрать (Select) ранее.

Выбрать (Select) позволяют войти в дополнительные меню. В обоих случаях, меню представляют собой экран, разделённый надвое; в верхней части представлен список выбираемых пунктов, в нижней части выводится описание («справка») по каждому пункту.

Доступна подробная справка; к ней можно обратиться в любой момент, нажав клавишу «?».

Порядок представления действий в первом меню dselect соответствует тому порядку, в котором пользователь обычно выполняет действия для установки пакетов. Однако, любое действие из главного меню пользователь может выбирать как угодно часто (или совсем не выбирать — в зависимости от того, что он хочет сделать).

  • Начните с выбора метода доступа (Access Method). Здесь выбирается способ, с помощью которого пользователь получает доступ к пакетам Debian; например, у некоторых есть компакт-диски с пакетами Debian, другие же скачивают эти пакеты по FTP. Выбранный «метод доступа» сохраняется и после выхода из dselect , поэтому, если он не изменился, то нет необходимости вызывать этот пункт меню каждый раз.
  • Затем обновите (Update) список доступных пакетов. Для этого dselect читает файл «Packages.gz», который находится в верхнем уровне дерева каталогов, в котором хранятся пакеты Debian (если его там нет, dselect предложит его создать).

Для удаления: пакеты можно удалить двумя способами.

  • Удалить (removed): эта команда удаляет большинство файлов принадлежащих пакету, но оставляет файлы, помеченные как настроечные (см. Зачем нужен файл conffile?, раздел 7.5) и информацию о настройке пакета. Выполняется нажатием клавиши «-».
  • Вычистить (purged): команда удаляет все файлы пакета. Выполняется нажатием клавиши «_».

Заметим, что невозможно удалить «все пакеты». Если вы попытаетесь это сделать, то система будет сокращена до первоначально установленных базовых пакетов.

Для «фиксации» Фиксация выполняется нажатием «=», и указывает dselect не выполнять обновление пакета, даже если установленная версия устарела по сравнению с той, что имеется в используемом вами хранилище пакетов Debian (указанном через метод доступа (Access Method), и инициализируемом при выполненииобновления (Update)).

Если пакет зафиксирован, то вернуть его в нормальное состояние можно, нажав «:». Это указывает dselect , что пакет может быть обновлён, если доступна более новая версия. Такая настройка используется по умолчанию.

Вы можете выбирать различный порядок показа пакетов, используя клавишу «o» для переключения между режимами сортировки. Изначально пакеты отсортированы по приоритету; в пределах каждого приоритета пакеты представлены в порядке появления в каталоге (также называемого разделом), в котором они хранятся. При задании такого порядка сортировки, сначала могут отображаться пакеты из раздела A (как пример), потом какие-то из раздела B, а за ними ещё пакеты (с меньшим приоритетом) из раздела A.

Также можно получить описание значений меток в верхней части экрана, нажав клавишу «v». Данное действие увеличивает объём выводимого текста, и он выходит за правую границу экрана. Для прокрутки текста можно пользоваться клавишами со стрелками вправо и влево.

  • Возвратившись после выбора пакетов в главное меню, вы можете выбрать «Установить» (Install) для установки и настройки выбранных пакетов. Если вы отметили пакеты для удаления, то можете выбрать пункт «Удалить» (Remove). В любой момент времени можно выбрать пункт «Выход» (Quit) для выхода из dselect; при этом выбор пакетов, отмеченных для установки и удаления, dselect сохранит.

8.1.6.2 dpkg-deb

Данная программа позволяет манипулировать файлами-архивами Debian (

.deb файлами). Часто используемые команды:

foo_VVV-RRR.deb в каталог

Учтите, что любые пакеты, просто распакованные командой

Дополнительную информацию можно найти в справочной странице dpkg-deb(1) .

8.1.6.3 dpkg-split

Эта программа делит большие пакеты на файлы меньшего размера (например, для записи на дискеты), а также может использоваться для объединения набора разделённых файлов обратно в один файл. Она может использоваться только в системах Debian (т. е. в системах, содержащих пакет dpkg ), т. к. вызывает программу

dpkg-deb для разделения файла пакета на отдельные компоненты.

Например, для того чтобы разделить большой .deb файл на N частей, нужно:

8.2 Говорят, что Debian способен обновить работающую программу; как это делается?

Ядро (файловая система) в системах Debian GNU/Linux поддерживает замену файлов, даже когда они используются.

Мы также предоставляем программу start-stop-daemon , которая используется для запуска служб при загрузке компьютера или их останова при изменении уровня выполнения (например, при переключении из многопользовательского в однопользовательский или для выключения компьютера). Эта же программа используется сценариями установки при установке нового пакета со службой, для остановки работающей службы и её перезапуска при необходимости.

8.3 Как узнать, какие пакеты установлены в системе Debian?

Чтобы получить список всех установленных пакетов, выполните команду

Эта команда выведет для каждого пакета однострочную сводку, включающую два символа состояния (объясняемые в заголовке), имя пакета, установленную версию и краткое описание.

Чтобы узнать состояние пакетов, имена которых начинаются с «foo», выполните команду:

Чтобы получить более подробный отчёт о состоянии определённого пакета, выполните команду:

8.4 Как посмотреть список файлов установленного пакета?

Чтобы вывести список файлов установленного пакета

foo , выполните команду

Учтите, что файлы, созданные сценариями установки, не отображаются.

8.5 Как определить пакет, которому принадлежит определённый файл?

Чтобы определить, в каком пакете содержится файл с именем

foo , выполните одну из следующих команд:

имя_файла в установленных пакетах. (Это, в настоящий момент, эквивалентно поиску всех файлов с расширением

.list в каталоге

/var/lib/dpkg/info/ и выводу имён всех пакетов, которые содержат заданное имя файла и отклонения (diversions).)

Более быстрая альтернатива этому — программа dlocate .

Contents-ARCH.gz (где ARCH представляет нужную архитектуру) расположены в основных каталогах пакетов (main, non-free, contrib) на FTP-сайте Debian (то есть, в

Contents относится только к тем пакетам, что расположены в структуре подкаталогов того же каталога, где находится и он сам. Поэтому, чтобы найти пакет, содержащий файл

foo , пользователю нужно искать более чем в одном файле

Преимущество этого метода над

foo . Преимущество этой команды перед приведёнными ранее в том, что вам не нужно будет получать файлы

Contents-ARCH.gz , так как это будет сделано автоматически для всех источников, описанных в /etc/apt/sources.list , при запуске (с правами суперпользователя) команды

8.6 Почему при удалении «foo» не удаляется «foo-data»? Как вычистить старые неиспользуемые пакеты библиотек?

Некоторые пакеты разделены на программы («foo») и данные («foo-data») (или на «foo» и «foo-doc»). Так в Debian сделано для многих игр, мультимедийных приложений и словарей, и объясняется это тем, что некоторым пользователям может быть нужно получить только данные без установки программ, или эти программы могут работать без данных, что делает их установку необязательной.

Подобное относится и к библиотекам: обычно они устанавливаются, так как пакеты приложений зависят от них. Когда пакет приложения вычищается, пакет библиотеки может остаться в системе. Или когда пакет приложения больше не зависит, скажем, от libdb4.2, а зависит от libdb4.3, то пакет libdb4.2 может остаться в системе при обновлении пакета приложения.

В таких случаях «foo-data» не зависит от «foo», поэтому при удалении пакета «foo» большинство инструментов управления пакетами не станет удалять его автоматически. То же самое относится и к пакетам библиотек. Это необходимо для избежания циклических зависимостей. Тем не менее, если для управления пакетами вы используете программу aptitude (см. aptitude, раздел 8.1.3), то она отслеживает автоматически устанавливаемые пакеты и удаляет их, когда в системе не остаётся пакетов, от них зависящих.

Управление пакетами в Debian: 1 комментарий

Чистого эксперимента не проводил, смотрел на одном из доступных серваков — было похоже на правду, доверился хакерам из рассылки — убеждали меня что только под убунтой криво работает. Если есть сомнения, тогда проведу эксперимент Проверил на чистой установке Debian 6.0.5 — сразу после установки эта команда выдаёт кучу пакетов, так что вы правы — не то, поправил статью, благодарю за бдительность

Читайте также: