Полный цикл в digital

Репозитории

Концепция установки программного обеспечения в Linux очень сильно отличается от Windows. Здесь тоже можно скачать программу на просторах интернета и просто запустить, ничего не устанавливая, но никто так не делает. Программы устанавливаются из надежных источников - официальных репозиториев поддерживаемых и обновляемых разработчиками дистрибутива или сообществом пользователей. Если в двух словах, то репозитории - это такие большие сборники программ, в котором они хранятся в специальном формате и могут быть автоматически скачены и установлены менеджером пакетов.

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

Каждый репозиторий поддерживает несколько веток. Первая группа веток - это версия дистрибутива. Для каждой версии дистрибутива - отдельное программное обеспечение.

Вторая группа веток более интересная. Дело в том что есть несколько веток для различного рода программного обеспечения:

  • main основная ветка, стабильное официально поддерживаемое Canonical ПО
  • restricted официально поддерживаемое ПО распространяемое не под лицензией GPL
  • universe программы, поддерживаемые сообществом Ubuntu
  • multiverse ветка проприетарного программного обеспечения

Такой структуры придерживаются официальные репозитории, сторонние могут же иметь другую структуру или просто ветку main.

Репозитории можно поделить еще на два типа:

  • Репозитории с бинарными файлами, готовыми собранными пакетами
  • Репозитории исходного кода, откуда можно скачать исходный код программ и собрать его на своем компьютере

Настройка репозиториев

Что бы закачать программу из репозитория, нужно установить две вещи:

  1. Репозиторий
  2. Ключ от репозитория

Сразу для понимания самой проблемы, определимся зачем нужны эти самые ключи. А нужны они всего лишь для одной цели — защита репозитория от подмены злоумышленником в нем информации по технологии открытых/закрытых ключей. Наша система хранит у себя первую часть ключа (открытый ключ), а сам репозиторий откуда мы берем файлы подписан второй частью ключа (закрытый ключ), который нам не доступен.

Загрузка ключа

Наша система хранит у себя открытые ключи репозиториев в нескольких местах:

  1. Файл /etc/apt/trusted.gpg один большой файл, в котором может быть информация о нескольких ключах сразу (устаревший метод)
  2. Папка /etc/apt/trusted.gpg.d/ в директории может находится много файлов с разными названиями, подобных указанному в первом пункте (устаревший метод)
  3. Папка /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

Загрузка репозитория

Наша система хранит у себя репозитории в нескольких местах:

  1. Файл /etc/apt/sources.list один большой файл, в котором может быть информация о нескольких репозиториях сразу (устаревший метод)
  2. Папка /etc/apt/sources.list.d/файл.list в директории может находится много файлов с разными репозиториями, подобных указанному в первом пункте (рекомендуемый метод)
  3. Папка /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 указывает, что исходный код использует обычную архитектуру Debian
  • arch=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

Если вы запутались и не знаете как вернуть состояние по умолчанию, можно просто нажать кнопку Восстановить чтобы восстановить репозитории:

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг