Ubuntu. Репозитории и прикрепление
Репозитории пакетов
Репозитории 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://адрес_репозитория релиз ветка [ветка]
Для Ubuntu 24.04 файл /etc/apt/sources.list
теперь пустой. Вместо него предлагается использовать файл /etc/apt/sources.list.d/ubuntu.sources
, формат которого тоже изменился. Если раньше репозиторий задавался одной строкой, то теперь это несколько строк. Допускается использовать старый формат файлов .list
, но предпочтение следует отдавать новому формату .sources
.
$ cat /etc/apt/sources.list.d/ubuntu.sources Types: deb URIs: http://ru.archive.ubuntu.com/ubuntu/ Suites: noble noble-updates noble-backports Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg Types: deb URIs: http://security.ubuntu.com/ubuntu/ Suites: noble-security Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Открытый OpenPGP-ключ
Пакеты из репозитория передаются по открытым каналам и перед тем, как устанавливать их в систему, следует убедиться в их подлинности. Для этого все пакеты в репозитории подписаны закрытым OpenPGP ключом репозитория, а чтобы проверить их подлинность, потребуется открытый OpenPGP ключ.
Для того, чтобы система могла использовать ключ, его нужно сохранить в файле /etc/apt/trusted.gpg
или директории trusted.gpg.d
. Проблема в том, что в этом случае команда apt
безоговорочно доверяет такому ключу, что дает возможность загрузить из стороннего репозитория пакеты, подписанные ключом другого репозитория и заменить таким образом любой пакет в системе.
Чтобы устранить брешь в безопасности была введена новая система, когда каждый репозиторий доверяет только собственному ключу, а сами ключи помещаются в специальное хранилище, к которому имеет доступ только суперпользователь. В настоящее время это директория /usr/share/keyrings
, согласно документации там следует размещать ключи, дальнейшее управление которыми предполагается с помощью apt
или dpkg
.
Ключ может быть в двух форматах — текстовом и бинарном, то есть с ascii-armor или без. Термин ascii-armor — это привычный всем текстовый формат ключей в кодировке Base64. Такие ключи наиболее распространены, так как текстовый формат более удобен при передаче.
$ cat repo-sign.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 repo-sign.asc # текстовой PGP public key block Public-Key (old)
$ file repo-sign.gpg # бинарный OpenPGP Public Key Version 4, Created…
Ключи в хранилище должны быть в бинарном формате, а для этого нужно понимать, в каком виде был получен исходный ключ. В большинстве случаев это будет текстовый ключ с ascii-armor — и нужно преобразовать его в бинарный перед сохранением. Адрес ключа репозитория обычно можно узнать в документации продукта, затем потребуется его скачать и установить в новое хранилище.
$ wget https://example.com/key/repo-sign.asc $ sudo gpg --dearmor < repo-sign.asc > /usr/share/keyrings/repo-archive-keyring.gpg
Скачать ключ, преобразовать в бинарный формат и записать в хранилище — все одной командой.
$ curl -s https://example.com/key/repo-sign.asc | gpg --dearmor | \ > sudo tee /usr/share/keyrings/repo-archive-keyring.gpg > /dev/null
После добавления ключа нужно создать файл .list
или .sources
в директории /etc/apt/sources.list.d
и выполнить команду apt update
.
Примеры добавления репозитория
Репозиторий веб-сервера Nginx — сохраняем ключ в /usr/share/keyrings/nginx-archive-keyring.gpg
и создаем файл /etc/apt/sources.list.d/nginx.list
.
$ curl -s https://nginx.org/keys/nginx_signing.key | gpg --dearmor | \ > sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg > /dev/null
$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ > http://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" | \ > sudo tee /etc/apt/sources.list.d/nginx.list > /dev/null
Для использования пакетов из репозитория Nginx вместо распространяемых в дистрибутиве — нужно настроить закрепление
$ sudo nano /etc/apt/preferences.d/99nginx Package: * Pin: origin nginx.org Pin: release o=nginx Pin-Priority: 900
$ sudo apt update
Репозиторий базы данных MariaDB — сохраняем ключ в /usr/share/keyrings/mariadb-archive-keyring.gpg
и создаем файл /etc/apt/sources.list.d/mariadb.list
.
$ curl -s https://supplychain.mariadb.com/mariadb-keyring-2019.gpg | \ > sudo tee /usr/share/keyrings/mariadb-archive-keyring.gpg > /dev/null
Версия MariaDB 11.4
для Ubuntu 22.04 jammy
$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/mariadb-archive-keyring.gpg] \ > https://dlm.mariadb.com/repo/mariadb-server/11.4/repo/ubuntu jammy main" | \ > sudo tee /etc/apt/sources.list.d/mariadb.list > /dev/null
Для использования пакетов из репозитория MariaDB вместо распространяемых в дистрибутиве — нужно настроить закрепление
$ sudo nano /etc/apt/preferences.d/99mariadb Package: * Pin: origin dlm.mariadb.com Pin-Priority: 900
$ sudo apt update
Приоритет репозитория
Допустим, мы прописали дополнительный репозиторий для Nginx, но как системе понять из какого репозитория брать пакет для установки? Ведь пакеты для Nginx есть и в системном репозитории и в репозитории от самого Nginx. Чтобы ответить на этот вопрос придумали приоритеты репозиториев.
apt
назначает пакетам с более высокой версией более высокий приоритет — если в новом репозитории есть более новая версия, то именно она будет первым кандидатом на установку.
Чтобы задать приоритет репозитория нужно создать файл /etc/apt/preferences.d/XXrepo_name
, где XX
это номер файла, чем он выше, тем обработается позднее, то есть будет иметь приоритет над другими файлами.
$ sudo nano /etc/apt/preferences.d/99nginx Package: * Pin: origin nginx.org Pin: release o=nginx Pin-Priority: 900
Package
— имя пакета. Можно использовать *
, чтобы применить приоритет для всех пакетов из этого репозитория. Также можно указать несколько имён через пробел.
Pin
— опции прикрепления. Существует много опций, мы рассмотрим лишь некоторые.
origin
— имя автора или поставщикаrelease o=nginx
— означает, что в файлеRelease
репозитория есть поставщик с именемnginx
Pin-Priority
— задает приоритет установки пакета.
То есть, Package
и Pin
— это условия для назначения приоритета, а Pin-Priority
— это действие (назначение приоритета). В нашем примере получается следующее — если имя пакета любое, но владелец репозитория nginx.org
и в файле Release
прописано Origin:nginx
, то для таких пакетов установить приоритет 900
.
Приоритет может быть в следующих диапазонах:
P >= 1000
— пакет будет установлен из этого репозитория, даже если это приведет к понижению версии уже установленного пакета990 <= P < 1000
— пакет будет установлен из этого репозитория, если не установлена более новая версия500 <= P < 990
— пакет будет установлен, если нет пакета принадлежащего к целевому выпуску или не установлена более новая версия100 <= P < 500
— пакет будет установлен, если нет кандидатов из других репозиториев или установленного пакета более новой версии0 < P < 100
— пакет будет установлен, только если он ещё не установлен (любой версии) и если нет кандидатов из других репозиториевP < 0
— пакет не будет установлен ни при каких условияхP = 0
— не используется
Приоритеты с 500 по 990 и с 990 по 1000 очень похожи. Чтобы их отличить — нужно понять, что такое целевой выпуск. Для Ubuntu это название версии дистрибутива. Например для Ubuntu 24.04 — noble
, для Ubuntu 22.04 — jammy
, для Ubuntu 20.04 — fossa
.
Чтобы понять, из какого репозитория будет установлен пакет, нужно выполнить команду
$ apt-cache policy nginx nginx: Установлен: (отсутствует) Кандидат: 1.26.1-2~jammy Таблица версий: 1.26.1-2~jammy 900 900 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages 1.26.1-1~jammy 900 900 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages 1.26.0-1~jammy 900 900 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages 1.24.0-1~jammy 900 900 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages 1.22.1-1~jammy 900 900 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages 1.22.0-1~jammy 900 900 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages 1.20.2-1~jammy 900 900 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages 1.18.0-6ubuntu14.4 500 500 http://ru.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages 1.18.0-6ubuntu14.3 500 500 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages 1.18.0-6ubuntu14 500 500 http://ru.archive.ubuntu.com/ubuntu jammy/main amd64 Packages
Обратите внимание, что приоритет установки из репозитория Nginx равен 900, а приоритет репозитория Ubuntu равен 500.
$ apt-cache policy mariadb-server mariadb-server: Установлен: (отсутствует) Кандидат: 1:11.4.2+maria~ubu2204 Таблица версий: 1:11.4.2+maria~ubu2204 900 900 https://dlm.mariadb.com/repo/mariadb-server/11.4/repo/ubuntu jammy/main amd64 Packages 1:11.3.2+maria~ubu2204 900 900 https://dlm.mariadb.com/repo/mariadb-server/11.4/repo/ubuntu jammy/main amd64 Packages 1:10.6.18-0ubuntu0.22.04.1 500 500 http://ru.archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages 500 http://ru.archive.ubuntu.com/ubuntu jammy-updates/universe i386 Packages 500 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 Packages 500 http://security.ubuntu.com/ubuntu jammy-security/universe i386 Packages 1:10.6.7-2ubuntu1 500 500 http://ru.archive.ubuntu.com/ubuntu jammy/universe amd64 Packages 500 http://ru.archive.ubuntu.com/ubuntu jammy/universe i386 Packages
- Команда apt в Ubuntu
- Установка WireGuard на Ubuntu 20.04 LTS. Часть вторая из двух
- Установка WireGuard на Ubuntu 20.04 LTS. Часть первая из двух
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 12 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 11 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 10 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 9 из 12
Поиск: Linux • Ubuntu • Команда • Установка • Ключ • apt • Пакет