Репозитории
Концепция установки программного обеспечения в Linux очень сильно отличается от Windows. Здесь тоже можно скачать программу на просторах интернета и просто запустить, ничего не устанавливая, но никто так не делает. Программы устанавливаются из надежных источников - официальных репозиториев поддерживаемых и обновляемых разработчиками дистрибутива или сообществом пользователей. Если в двух словах, то репозитории - это такие большие сборники программ, в котором они хранятся в специальном формате и могут быть автоматически скачены и установлены менеджером пакетов.
В основном репозитории Ubuntu можно поделить на два типа - официальные и репозитории сторонних разработчиков. В официальных репозиториях находятся только стабильные программы, причем их версии не будут обновляться, они могут получать только обновления безопасности. Сторонние репозитории ubuntu могут создаваться кем угодно и их автор может обновлять и добавлять программное обеспечение в репозиторий когда нужно. PPA
репозитории созданы с целью упростить процесс создания сторонних репозиториев.
Каждый репозиторий поддерживает несколько веток. Первая группа веток - это версия дистрибутива. Для каждой версии дистрибутива - отдельное программное обеспечение.
Вторая группа веток более интересная. Дело в том что есть несколько веток для различного рода программного обеспечения:
main
основная ветка, стабильное официально поддерживаемое Canonical ПОrestricted
официально поддерживаемое ПО распространяемое не под лицензией GPLuniverse
программы, поддерживаемые сообществом Ubuntumultiverse
ветка проприетарного программного обеспечения
Такой структуры придерживаются официальные репозитории, сторонние могут же иметь другую структуру или просто ветку main
.
Репозитории можно поделить еще на два типа:
Репозитории с бинарными файлами
, готовыми собранными пакетамиРепозитории исходного кода
, откуда можно скачать исходный код программ и собрать его на своем компьютере
Настройка репозиториев
Что бы закачать программу из репозитория, нужно установить две вещи:
Репозиторий
Ключ от репозитория
Сразу для понимания самой проблемы, определимся зачем нужны эти самые ключи. А нужны они всего лишь для одной цели — защита репозитория от подмены злоумышленником в нем информации по технологии открытых/закрытых ключей. Наша система хранит у себя первую часть ключа (открытый ключ), а сам репозиторий откуда мы берем файлы подписан второй частью ключа (закрытый ключ), который нам не доступен.
Загрузка ключа
Наша система хранит у себя открытые ключи репозиториев в нескольких местах:
- Файл
/etc/apt/trusted.gpg
один большой файл, в котором может быть информация о нескольких ключах сразу (устаревший метод) - Папка
/etc/apt/trusted.gpg.d/
в директории может находится много файлов с разными названиями, подобных указанному в первом пункте (устаревший метод) - Папка
/usr/share/keyrings
в директории может находится много файлов с ключами, которые будут иметь разные названия
С помощью метода gpg
вы всегда должны загружать ключ перед добавлением в список источников пакетов. Необходимо указать путь к загруженному ключевому файлу в списке источников. Если вы не загрузили ключ, репозиторий будет не доступен.
Для примера добавим ключ от репозитория Docker, который будет помещен в директорию /usr/share/keyrings/
под именем docker.gpg
. В следующем примере используется curl
для загрузки ключа, при этом загрузка передается в gpg
команду. gpg
вызывается с флагом --dearmor
для преобразования ключа PGP
в формат файла GPG
, флаг -o
используется для указания выходного файла:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
Если загруженный файл уже был в формате GPG
, вы можете вместо этого загрузить файл напрямую в /usr/share/keyrings/
. В этом случае curl
передаст tee
файл для сохранения в правильном месте.:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /usr/share/keyrings/docker.gpg
Загрузка репозитория
Наша система хранит у себя репозитории в нескольких местах:
- Файл
/etc/apt/sources.list
один большой файл, в котором может быть информация о нескольких репозиториях сразу (устаревший метод) - Папка
/etc/apt/sources.list.d/файл.list
в директории может находится много файлов с разными репозиториями, подобных указанному в первом пункте (рекомендуемый метод) - Папка
/etc/apt/sources.list.d/файл.sources
в директории может находится много файлов с разными репозиториями, подобных указанному в первом пункте (новый метод)
С загруженным ключом в правильном формате, можно добавить репозиторий, явно привязав его к полученному ключу. Для этого есть три метода.
Добавление в sources.list
напрямую (устаревший метод)
Включает вставку строки, представляющей источник, непосредственно в основной файл /etc/apt/sources.list
. В этом файле есть несколько источников, включая исходники по умолчанию, поставляемые с Ubuntu.
Откройте /etc/apt/sources.listс
с помощью nano
или предпочитаемого вами текстового редактора:
sudo nano /etc/apt/sources.list
Затем добавьте внешний репозиторий в конец файла:
deb [arch=amd64 signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu stable main
Эта строка содержит следующую информацию об источнике:
Создание .list
файла в sources.list.d
(рекомендуемый метод)
Создается новый файл в sources.list.d
каталоге. Команда apt
анализирует этот каталог, метод позволяет физически изолировать добавления репозитория в отдельные файлы. Если вам когда-нибудь понадобится удалить это дополнение или внести изменения, вы можете удалить этот файл вместо редактирования центрального sources.list
файла.
Для этого используется echo
и tee
команда для создания нового файла и вставки соответствующий строки. Файл будет называться docker.gpg
:
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu stable main" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Создание .sources
файла в sources.list.d
(новый метод)
Создается новый файл в sources.list.d
каталоге с разрешением .sources
, вместо .list
. Этот метод является относительно новым и использует deb822
многострочный формат, создаем файл:
sudo nano /etc/apt/sources.list.d/docker.sources
Затем добавляем внешний репозиторий и ключ, используя deb822
формат:
/etc/apt/sources.list.d/docker.sourcesTypes: deb
Architectures: amd64
Signed-By: /usr/share/keyrings/docker.gpg
URIs: https://download.docker.com/linux/ubuntu
Suites: stable
Components: main
Расшифровка запросов
deb
указывает, что исходный код использует обычную архитектуру Debianarch=amd64
указывает архитектуры, в которые будут загружены данныеsigned-by=/usr/share/keyrings/docker.gpg
ключ, используемый для авторизации этого источника, здесь он указывает на ваш.gpg
файл, хранящийся в/usr/share/keyrings
https://download.docker.com/linux/ubuntu stable main
это URI, представляющий точное местонахождение данных в репозитории/etc/apt/sources.list.d/docker.list
расположение и имя создаваемого нового файла/dev/null
используется, когда вывод команды не требуется. Указаниеtee
пропускает вывод
Установка пакета из внешнего репозитория
Для начала нужно запустить команду apt update
, чтобы система могла просмотреть основной sources.list
файл, а также все файлы .list
и .sources
файлы в формате sources.list.d
:
sudo apt update
Затем установите свой пакет:
sudo apt install docker
Настройка PPA репозиториев
PPA
репозитории находятся на сайте, созданном Canonical
. Linux способен автоматически различать, находить репозитории и скачивать ключи. Достаточно указать адрес ppa
при добавлении репозитория:
ppa:shutter/ppa
На самом деле PPA
репозитории такие, же как и обычные репозитории. Если вы хотите добавить репозиторий вручную, вы можете узнать apt
строку и ключ
, раскрыв спойлер Technical details about this PPA
на странице описания репозитория:
Настройка репозиториев в GUI
Управление репозиториями можно осуществлять с помощью утилиты Управление приложениями
.
На первой вкладке вы можете включить или отключить ветки официальных репозиториев, а также выбрать ближайшее к вам зеркало:
Для добавления репозитория, перейдите на вкладку Другое ПО
, на этой вкладке вы можете видеть весь список репозиториев которые были подключены к системе:
Для добавления репозитория, нажмите кнопку Добавить
:
Здесь в единственном поле нужно ввести apt
строку репозитория и нажать кнопку Добавить источник
:
apt
строка репозитория имеет такой синтаксис:
deb http://адрес_репозитория версия_дистрибутива ветки
Например:
deb https://apt-mo.trafficmanager.net/repos/dotnet/ trusty main
С версией дистрибутива все понятно, это кодовое имя
, с веткой тоже все понятно, это main
.
Для сторонних репозиториев необходимо импортировать ключ для правильной работы в системе, если ключ не добавить, то во время обновления репозиториев система выдаст ошибку проверки подписи. Это делается, чтобы никто не мог подменить пакеты и вы не установили вирусов. Перейдите на вкладку Аутентификация
затем выберите Импортировать ключ из файла
:
Как правило, в описании репозитория, если для него требуется ключ, указана ссылка где его можно скачать. Скачать ключ можно с помощью браузера, или консольной утилитой wget
:
wget http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0xFC6D7D9D009ED615
Если вы запутались и не знаете как вернуть состояние по умолчанию, можно просто нажать кнопку Восстановить
чтобы восстановить репозитории:
Список репозиториев
Просмотреть все репозитории можно фактически в двух местах.
В общем файле sources.list
:
sudo nano /etc/apt/sources.list
В одном из файлов в папке:
cd /etc/apt/sources.list.d/
Удаление репозиториев
Команда для удаления обычного репозитория:
add-apt-repository --remove 'deb [arch=amd64,arm64,ppc64el] http://mirror.mephi.ru/mariadb/repo/10.5/ubuntu focal main'
Команда для удаления PPA-репозитория:
apt-add-repository --remove ppa:repository/ppa
После редактирования списка репозиториев не забудьте обновить список пакетов:
apt update