{{tag>shell utils system apt dpkg NO_PUBKEY}}

====== Менеджер пакетов APT: вопросы и ответы ======

  * [[system:dpkg|dpkg]] - работа с пакетами
  * [[:add-apt-repository]]
  * [[system:aptitude]]

====== Популярное ======

<code bash>
$ apt istall ifupdown
$ apt autoremove -f
$ apt purge ifupdown
$ apt-file search ifupdown
$ apt-file list ifupdown

</code>

==== Update apt-get ====

NO_PUBKEY
<code bash>
$ apt-get autoclean
$ apt-get autoremove
$ apt-get -f install
$ apt-key list | grep "expired:"
$ apt-get update
$ apt-get upgrade
$ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FCEF32E745F2C3D5


</code>


==== Upgrade aptitude ====

<code bash>
$ aptitude update
$ aptitude dist-upgrade
$ reboot
$ aptitude update
$ aptitude -f install
$ reboot
</code>

===== apt-cache policy =====

apt-cache policy mysql-client-8.0 mysql-community-client

<code>
mysql-client-8.0:
  Установлен: (отсутствует)
  Кандидат:   (отсутствует)
  Таблица версий:
mysql-community-client:
  Установлен: (отсутствует)
  Кандидат:   8.0.28-1ubuntu20.04
  Таблица версий:
     8.0.28-1ubuntu20.04 500
        500 http://repo.mysql.com/apt/ubuntu focal/mysql-8.0 amd64 Packages
</code>

===== Q: Downgrade или Как понизить версию пакета =====

  * apt-cache showpkg package-name
  * apt-get install packagename=version
  * apt-get install firefox=59.0.2+build1-0ubuntu1
  * apt-mark hold packagename
  * aptitude install packagename=version
  * apt-get install <package-name>=<package-version-number>
  * apt-get -t=<target release> install <package-name>

=====Q: Что такое apt?=====

A: apt - это Advanced Packaging Tool, система управления пакетами, то есть набор программ для установки, удаления, поиска бинарных пакетов определенных форматов.

=====Q: В каких дистрибутивах используется apt?=====

A: apt первоначально был разработан для дистрибутива Debian и формата пакетов deb. Ныне используется во всех клонах Debian (Ubuntu, Kubuntu, Mepis, Xandros), а также в некоторыхх rpm based дистрибутивах (например, в Altlinux).

=====Q: Как обновить дистрибутив =====

  * apt-get -f dist-upgrade


=====Q: Какие утилиты входят в состав пакета apt?=====

apt-cache - средство для работы с кэшами пакетов (например, поиса пакетов по ключевым словам), apt-extracttemplates, apt-sortpkgs, apt-cdrom, apt-ftparchive, apt-key, apt-config, apt-get - средство установки и удаления пакетов, apt-setup

=====Q: Как обновить список пакетов?=====

A: apt-get update пройдет по всему списку указанному у вас в /etc/apt/sources.list и обновит списки пакетов по всем репозиториям.

=====Q: Списки я обновил, как теперь обновить сами пакеты?=====

A: apt-get upgrade - менее "интеллектуальный" вариант, обновляющий пакеты, которые есть в системе;
apt-get dist-upgrade - более "интеллектуальный" вариант, который следит за тем, не сменили ли пакеты имя и пытающийся обновлять более важные пакеты даже ценой удаления менее важных.

=====Q: А я не хочу все обновлять, как мне обновить только один пакет?=====

A: Точно так же, как и установка пакета: apt-get install <пакет>

=====Q: Как удалить пакет?=====

A: apt-get remove <пакет>

=====Q: Как удалить все пакеты программы?=====

A: <text>apt-get remove --purge percona*****</text>

=====Q: А после удаления точно ничего от пакета не останется?=====

  * A: Для того, чтобы точно не осталось, лучше пользоваться apt-get remove --purge<пакет>
  * A: или apt-get purge <пакет>

=====Q: Как мне узнать, как называется пакет для какой-то определенной цели?=====

A: Попробуйте поиск по ключевым словам при помощи apt-cache search <слова>

=====Q: Мне принесли компакты дистрибутива, которых у меня не было, как мне их добавить?=====

A: apt-cdrom add должно помочь

=====Q: Мне кажется, что меня взломали и что-то сделали с <пакетом>=====

A: apt-get install --reinstall вернет пакет к изначальному состоянию, то есть такому, какой он был на свежеустановленной системе.

=====Q: Очень хочется создать локальное зеркало, в какую сторону смотреть?=====

A: apt-move скорее всего решит полностью вашу проблему, для него достаточно указать, где лежит архив файлов и куда выложить ваше зеркало.

=====Q: А подробнее про apt-move можно?=====

А: Можно:
apt-move update - переносит из /var/cache/apt/archives пакеты в директорию локального зеркала (указывается в /etc/apt-move.conf как переменная LOCALDIR=path_to).
По сути apt-move update является выполнением последовательности команд

$ apt-move get
$ apt-move move
$ apt-move delete
$ apt-move packages
apt-move get - формирует мастер-файл;
apt-move move - переносит пакеты из кэша apt в локальное зеркало;
apt-move delete - удаляет устаревшие пакеты;
apt-move packages - создает Packages.gz и Sources.gz дерева локального зеркала
Q: У меня пакеты все уже удалени из кэша, а друг тоже хочет весь "свежак", который у меня установлен...
A: Простой скрипт, выполненный в пустом каталоге, соберет в нем пакеты, которые установлены в системе:

<code bash>
dpkg --get-selections | \
  grep -v "deinstall" |  \
	awk '{print $1}' | \
	xargs dpkg-repack
</code>
=====Q: Есть подозрение, что из-за моих экспериментов в системе много мусора...=====

A: Попробуйте пакет debfoster, он при первом запуске спросит у вас о необходимости пакетов и удалит все лишнее.

=====Q: Где по умолчанию лежат пакеты, которые мне скачал apt-get?=====
A: в /var/cache/apt/archives

=====Q: Как мне поставить один *.deb пакет в систему?=====

A: При условии того, что удовлетворены все зависимости, dpkg -i <пакет> приведет к желаемому результату.

=====Q: Как заставить apt работать через proxy-сервер?=====

A: Либо установив переменную окружения при помощи

  * export "http://login:password@xxx.xxx.x.xx:yyyy" 
  * либо прописав в файл /etc/apt/apt.conf строку Acquire::http::Proxy "http://xxx.xxx.xx:yyyy" где xxx.xxx.xx - имя вашего прокси, yyyy - порт

nano /etc/apt/apt.conf.d/proxy.conf
<code bash>
Acquire::http::Proxy "http://192.168.10.5:8888/";
</code>

=====Q: Я хочу определить в каком пакете необходимый мне файл (например, libodbc.so).=====

А:
apt-file - утилита поиска по содержимому пакетов.
apt-file update - получает файл Contents-<ARCH>.gz, следует учесть, что исходя из того, что проект Debian довольно большой, то и файл получится соответствующий. apt-file search <файл> - поиск пакета с указанным файлом.

Пример:
<code>
apt-file search libodbc.so
unixodbc: usr/lib/libodbc.so.1
unixodbc: usr/lib/libodbc.so.1.0.0
unixodbc-dev: usr/lib/libodbc.so
</code>
 
=====Q: А как просмотреть полный список содержимого пакета?=====

А: apt-file list <пакет> - отображает содержимое указанного пакета

=====Q: Я больше не собираюсь использовать apt-file, а Contents-.gz занимает место на диске.=====
А: apt-file purge удалить все Contents-<ARCH>.gz.
По поводу дополнительных опций - man apt-file

=====Q: Как мне найти неиспользуемые (осиротевшие) пакеты?=====

А: deborphan без указания ключа осуществляет поиск в разделе библиотек, с указанием ключа -a поиск ведется во всех разделах. Имеется и интерфейс к deborphan - orphaner, поставляются в одном пакете.

=====Q: есть локальный репозиторий из дистрибутивных дисков. Packages.gz сделал, а вот как сделать Contents-<ARCH>.gz для того, чтобы apt-file'ом можно было пользоваться?=====

A:apt-ftparchive contents . | gzip > Contents-i386.gz
также с помощью apt-ftparchive можно создавать Sources.gz и Packages.gz
apt-ftparchive sources . | gzip > Sources.gz
apt-ftparchive packages .| gzip > Packages.gz
=====Q: хочется создать дистрибутив некоторых выбранных пакетов и залить его на болванки. При этом хочется поместить на болванки и пакеты, не установленные в моей системе. Как это объяснить apt-move?=====
  * A: Вариант номер один - посмотреть в сторону jidgo, возможно, он вас устроит
  * A: Вариант номер два - получить недостающие пакеты, но не устанавливать их в систему с помощью аpt-get install -d <пакеты>.

=====Q: У меня стоит мешанина из stable, testing, unstable и даже кое-что из experimental установил. Как мне сделать, чтобы все в таком виде и обновлялось?=====

A: Чтобы этого добиться, поместите следующую строку в /etc/apt/apt.conf:

 
APT::Default-Release "testing";
Затем, при установке пакетов из, например, нестабильного дистрибутива, просто используйте ключ -t:
$ apt-get -t unstable install имя_пакета

===== Q: Как узнать расширенное описание пакета? =====

  * apt-cache -f search apache2-utils
  * apt-cache show sysstat

===== Q: Как исправить зависимости в пакетах? =====

  * apt-get -f install

===== Q: Как apt-get заставить не обновлять пакет =====

==== apt-get ====

    * sudo apt-mark hold package_name
    * sudo apt-mark unhold package_name

==== aptitude ====

    * sudo aptitude hold package_name
    * sudo aptitude unhold package_name

==== dpkg ====

    * echo “wine hold” | dpkg --set-selections
    * echo “wine install” | dpkg --set-selections

==== /etc/apt/preferences ====

  * A: Внести изменения в /etc/apt/preferences
  * A: или в /etc/apt/preferences.d/название_пакета_или_сходное_по_спыслу
Пример:
<code>
Package: firefox-3.0
Pin: release n=hardy
Pin-Priority: -10

Package: firefox-3.0
Pin: release n=intrepid
Pin-Priority: 900

Package: php5-fpm
Pin: version 5.4*
Pin-Priority: 991
</code>
  * Пример: [[:php|downgrade php 5.5 to 5.4]]

===== Q: Как узнать, какие пакеты можно обновить? =====

  * apt-get install apt-show-versions
  * apt-show-versions

===== Q: Как узнать какие пакеты заморожены/стоит пометка о запрете обновления? =====

  * dpkg --get-selections|grep hold
===== Q: Как обновить из конкретного репозитория? =====

  * apt-get install php5/sid
  * apt-get install php5/unstable
  * apt-get -t unstable install php5

===== Q: Как узнать версию пакета? =====

  * apt-cache show -t stable php5-common|grep "Version:"
    * -t stable - указывает на используемый репозиторий (stable, unstable, sid итд)

===== Q: Как обновить только заданный пакет/программу? =====

  * apt-get install --only-upgrade bash :!:
  * apt-get install --only-upgrade postfix

===== Q: Как обновить обновить ключ? =====

  * apt-key list | grep "expired:" <code>
pub   2048R/7BD9BF62 2011-08-19 [expired: 2016-08-17]
</code>

<code bash>
$ apt-key adv --keyserver keys.gnupg.net --recv-keys F76221572C52609D
$ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F76221572C52609D
</code>

===== Q: Как игнорировать проверку ssl сертификата? =====

<code bash>
$ apt update -o Acquire::https::Verify-Peer=false
$ apt install mc -o Acquire::https::Verify-Peer=false
</code>
