Команда apt в Ubuntu

15.11.2019

Теги: LinuxUbuntuБазаДанныхКомандаУстановка

Команда apt

APT обозначает Advanced Package Tool и представляет собой набор инструментов для установки и удаления приложений и обновления системы. Утилита apt фактически работает с базой данных доступных пакетов. Если база данных не обновляется, система не будет знать, имеются ли новые пакеты. Вот почему обновление репозитория должно быть первым, что нужно сделать сразу после установки системы.

$ sudo apt update

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

$ sudo apt upgrade

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

$ apt list --upgradeable

Самый быстрый и удобный способ обновить систему:

$ sudo apt update && sudo apt upgrade -y

Все установленные пакеты:

$ apt list --installed

Установить новый пакет:

$ sudo apt install package-name

Установить несколько пакетов:

$ sudo apt install package-1 package-2 package-3

Удалить пакет:

$ sudo apt remove package-name

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

$ sudo apt purge package-name

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

$ sudo apt autoremove

Узнать больше о пакете перед установкой или удалением:

$ apt show package-name

Поиск пакета с использованием регулярных выражений:

$ apt search php
$ apt search mysql-server-5.?
$ apt search httpd*
$ apt search ^apache
$ apt search ^nginx$

Полное обновление системы:

$ sudo apt full-upgrade

Команда полного обновления выполняет функцию обновления, но будут удалены установленные пакеты, если это необходимо для обновления системы в целом.

Команда apt clean очищает локальный репозиторий от полученных файлов пакетов. Очищается содержимое каталогов /var/cache/apt/archives и /var/cache/apt/archives/partial. Единственные файлы, которые он оставляет в /var/cache/apt/archives — это файлы блокировки и подкаталог.

Команда apt autoclean, как и apt clean, очищает локальный репозиторий от извлеченных файлов пакетов, но удаляет только те файлы, которые больше не могут быть загружены и практически бесполезны. Это помогает сохранить кэш от переполнения.

Команда apt-cache

При установке пакета команда apt загружает пакет и его зависимости в формате .deb и сохраняет его в директории /var/cache/apt/archives. Во время загрузки apt хранит пакет в директории /var/cache/apt/archives/partial. Когда пакет загружен полностью, он перемещается в директорию /var/cache/apt/archives.

Справка по команде apt-cache:

$ apt-cache --help
Использование: apt-cache [параметры] команда
               apt-cache [параметры] show пакет1 [пакет2 …]

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

Основные команды:
  showsrc - показать информацию о пакете с исходным кодом
  search - найти пакеты, имя которых удовлетворяет регулярному выражению
  depends - показать необработанную информацию о зависимостях пакета
  rdepends - показать информацию об обратных зависимостях пакета
  show - показать информацию о пакете в удобочитаемой форме
  pkgnames - показать имена всех пакетов в системе
  policy - показать текущую политику выбора пакетов

Добавление репозитория

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

  • Открытый ключ https://artifacts.elastic.co/GPG-KEY-elasticsearch
  • Репозиторий https://artifacts.elastic.co/packages/7.x/apt stable main
$ curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-7.x.gpg
$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/elastic-7.x.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list > /dev/null
$ sudo apt update

Репозитории пакетов

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

  • Main — свободное ПО, официально поддерживаемое компанией Canonical
  • Restricted — проприетарное ПО (в основном — драйверы устройств), официально поддерживаемое компанией Canonical
  • Universe — свободное ПО, официально не поддерживаемое компанией Canonical (но поддерживаемое сообществом пользователей)
  • Multiverse — проприетарное ПО, не поддерживаемое компанией Canonical

Существует четыре основных репозитория Ubuntu.

  • $release — это пакеты на момент выхода релиза
  • $release-security — пакеты критических обновлений безопасности
  • $release-updates — пакеты обновления системы (т.е. более поздние версии ПО, вышедшие уже после релиза)
  • $release-backports — бэкпорты более новых версий некоторого ПО, которое доступно только в нестабильных версиях Ubuntu

Здесь $releaese — название релиза Ubuntu, например jammy — Ubuntu 22.04 LTS.

Кроме официальных, существует множество репозиториев от авторов программ и от тех, кто не поленился собрать из исходников пакет и поделиться им с другими. PPA (Personal Package Archive) — обычно небольшой репозиторий, в который его хозяин складывает исходники, а пользователи на выходе получают уже готовый deb-пакет.

Все официальные репозитории записываются в файл репозиториев Ubuntu /etc/apt/sources.list. Для каждого PPA репозитория создается отдельный файл в директории /etc/apt/sources.list.d. PPA репозитории Ubuntu находятся на сайте, созданном Canonical — launchpad.net.

$ cat /etc/apt/sources.list | grep ^[^#]
deb http://ru.archive.ubuntu.com/ubuntu/ jammy main restricted
deb http://ru.archive.ubuntu.com/ubuntu/ jammy-updates main restricted
deb http://ru.archive.ubuntu.com/ubuntu/ jammy universe
deb http://ru.archive.ubuntu.com/ubuntu/ jammy-updates universe
deb http://ru.archive.ubuntu.com/ubuntu/ jammy multiverse
deb http://ru.archive.ubuntu.com/ubuntu/ jammy-updates multiverse
deb http://ru.archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu jammy-security main restricted
deb http://security.ubuntu.com/ubuntu jammy-security universe
deb http://security.ubuntu.com/ubuntu jammy-security multiverse

Каждая строка репозитория имеет вид

deb http://адрес_репозитория релиз ветка [ветка]

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

Для того, чтобы система могла использовать ключ, его нужно сохранить в файле /etc/apt/trusted.gpg или директории trusted.gpg.d с помощью команды apt-key (устарело, не рекомендуется).

$ apt-key add somerepo-signing.key

При использовании команды apt-key в последних версиях Ubuntu будет выдано предупреждение.

Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead

Причина в том, что при добавлении ключа OpenPGP, который используется для подписи репозитория, в файл /etc/apt/trusted.gpg или в файл директории /etc/apt/trusted.gpg.d, команда apt безоговорочно доверяет такому ключу, что дает возможность загрузить из стороннего репозитория пакеты, подписанные ключом другого репозитория и заменить таким образом любой пакет в системе.

Чтобы устранить брешь в безопасности была введена новая система, когда каждый репозиторий доверяет только собственному ключу, а сами ключи помещаются в специальное хранилище, к которому имеет доступ только суперпользователь. В настоящее время это директория /usr/share/keyrings, согласно документации там следует размещать ключи, дальнейшее управление которыми предполагается с помощью apt или dpkg.

Ключ может быть в двух форматах — текстовом и бинарном, то есть с ascii-armor или без. Термин ascii-armor — это привычный всем текстовый формат ключей в кодировке Base64. Такие ключи наиболее распространены, так как текстовый формат более удобен при передаче.

$ cat somerepo-signing.asc
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.22 (GNU/Linux)

mQENBE5OMmIBCAD+FPYKGriGGf7NqwKfWC83cBV01gabgVWQmZbMcFzeW+hMsgxH
W6iimD0RsfZ9oEbfJCPG0CRSZ7ppq5pKamYs2+EJ8Q2ysOFHHwpGrA2C8zyNAs4I
QxnZZIbETgcSwFtDun0XiqPwPZgyuXVm9PAbLZRbfBzm8wR/3SWygqZBBLdQk5TE
fDR+Eny/M1RVR4xClECONF9UBB2ejFdI1LD45APbP2hsN/piFByU1t7yK2gpFyRt
97WzGHn9MV5/TL7AmRPM4pcr3JacmtCnxXeCZ8nLqedoSuHFuhwyDnlAbu8I16O5
XRrfzhrHRJFM1JnIiGmzZi6zBvH0ItfyX6ttABEBAAG0KW5naW54IHNpZ25pbmcg
a2V5IDxzaWduaW5nLWtleUBuZ2lueC5jb20+iQE+BBMBAgAoAhsDBgsJCAcDAgYV
CAIJCgsEFgIDAQIeAQIXgAUCV2K1+AUJGB4fQQAKCRCr9b2Ce9m/YloaB/9XGrol
kocm7l/tsVjaBQCteXKuwsm4XhCuAQ6YAwA1L1UheGOG/aa2xJvrXE8X32tgcTjr
KoYoXWcdxaFjlXGTt6jV85qRguUzvMOxxSEM2Dn115etN9piPl0Zz+4rkx8+2vJG
F+eMlruPXg/zd88NvyLq5gGHEsFRBMVufYmHtNfcp4okC1klWiRIRSdp4QY1wdrN
1O+/oCTl8Bzy6hcHjLIq3aoumcLxMjtBoclc/5OTioLDwSDfVx7rWyfRhcBzVbwD
oe/PD08AoAA6fxXvWjSxy+dGhEaXoTHjkCbz/l6NxrK3JFyauDgU4K4MytsZ1HDi
MgMW8hZXxszoICTTiQEcBBABAgAGBQJOTkelAAoJEKZP1bF62zmo79oH/1XDb29S
YtWp+MTJTPFEwlWRiyRuDXy3wBd/BpwBRIWfWzMs1gnCjNjk0EVBVGa2grvy9Jtx
JKMd6l/PWXVucSt+U/+GO8rBkw14SdhqxaS2l14v6gyMeUrSbY3XfToGfwHC4sa/
Thn8X4jFaQ2XN5dAIzJGU1s5JA0tjEzUwCnmrKmyMlXZaoQVrmORGjCuH0I0aAFk
RS0UtnB9HPpxhGVbs24xXZQnZDNbUQeulFxS4uP3OLDBAeCHl+v4t/uotIad8v6J
SO93vc1evIje6lguE81HHmJn9noxPItvOvSMb2yPsE8mH4cJHRTFNSEhPW6ghmlf
Wa9ZwiVX5igxcvaIRgQQEQIABgUCTk5b0gAKCRDs8OkLLBcgg1G+AKCnacLb/+W6
cflirUIExgZdUJqoogCeNPVwXiHEIVqithAM1pdY/gcaQZmIRgQQEQIABgUCTk5f
YQAKCRCpN2E5pSTFPnNWAJ9gUozyiS+9jf2rJvqmJSeWuCgVRwCcCUFhXRCpQO2Y
Va3l3WuB+rgKjsQ=
=EWWI
-----END PGP PUBLIC KEY BLOCK-----

Выяснить тип ключа можно с помощью команды file.

$ file somerepo-signing.asc # текстовой
PGP public key block Public-Key (old)
$ file somerepo-signing.gpg # бинарный
OpenPGP Public Key Version 4, Created…

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

$ wget https://example.com/key/somerepo-signing.asc
$ sudo gpg --dearmor < somerepo-signing.asc > /usr/share/keyrings/somerepo-archive-keyring.gpg

Скачать ключ, преобразовать в бинарный формат и записать в хранилище — все одной командой.

$ curl https://example.com/key/somerepo-signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/somerepo-archive-keyring.gpg > /dev/null

Старые ключи

В последних версиях Ubuntu при использовании команды add-apt-repository (входит в пакет software-properties-common) можно столкнуться с ошибкой.

Key is stored in legacy trusted.gpg keyring

Эта ошибка означает, что ключ стороннего репозитория хранится в устаревшем хранилище ключей /etc/apt/trusted.gpg. Нужно удалить ключ из старого хранилища и поместить в новое.

$ apt-key list
/etc/apt/trusted.gpg
--------------------
pub   rsa4096 2011-10-13 [SC]
      B97B 0AFC AA1A 47F0 44F2  44A0 7FCC 7D46 ACCC 4CF8
uid         [ неизвестно ] PostgreSQL Debian Repository

/etc/apt/trusted.gpg.d/ondrej-ubuntu-php.gpg
--------------------------------------------
pub   rsa1024 2009-01-26 [SC]
      14AA 40EC 0831 7567 56D7  F66C 4F4E A0AA E526 7A6C
uid         [ неизвестно ] Launchpad PPA for Ondřej Surý

Ключ одного репозитория в файле /etc/apt/trusted.gpg, ключ другого репозитория в файле /etc/apt/trusted.gpg.d/ondrej-ubuntu-php.gpg. Экспортируем оба ключа из старого хранилища, преобразуем в бинарный формат и сохраняем в новое хранилище. Старые ключи удаляем, они больше не нужны.

$ sudo apt-key export "B97B 0AFC AA1A 47F0 44F2  44A0 7FCC 7D46 ACCC 4CF8" | sudo gpg --dearmour -o /usr/share/keyrings/postgresql-archive-keyring.gpg
$ sudo apt-key export "14AA 40EC 0831 7567 56D7  F66C 4F4E A0AA E526 7A6C" | sudo gpg --dearmour -o /usr/share/keyrings/ondrej-ubuntu-php-archive-keyring.gpg
$ sudo apt-key del "B97B 0AFC AA1A 47F0 44F2  44A0 7FCC 7D46 ACCC 4CF8"
$ sudo apt-key del "14AA 40EC 0831 7567 56D7  F66C 4F4E A0AA E526 7A6C"

Теперь нужно связать репозитории с ключами, для этого находим в директории /etc/apt/sources.list.d соответствующие файлы.

# файл /etc/apt/sources.list.d/pgdg.list, репозиторий PostgreSQL
deb [signed-by=/usr/share/keyrings/postgresql-archive-keyring.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main
# файл /etc/apt/sources.list.d/ondrej-ubuntu-php-jammy.list, репозиторий
deb [signed-by=/usr/share/keyrings/ondrej-ubuntu-php-archive-keyring.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu/ jammy main

Поиск: Linux • Ubuntu • База данных • Установка • apt • Пакет • Удаление • Обновление • Команда

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.