Команда apt в Ubuntu
Команда 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
— свободное ПО, официально поддерживаемое компанией CanonicalRestricted
— проприетарное ПО (в основном — драйверы устройств), официально поддерживаемое компанией CanonicalUniverse
— свободное ПО, официально не поддерживаемое компанией 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 • Пакет