Воззрения кота Manual’а. Deb-пакеты. Часть 3. Репозитории

Алексей Федорчук

manul-logo-100Поскольку пакетные менеджеры, которым будут посвящены части четвёртая и пятая, работают не с единичными пакетами, как описанные в прошлой части установщики, а с их репозиториями, они предваряются описанием воззрений кота Manual’а на официальные и неофцициальные репозитории дистрибутивов семейства Ubuntu, а также на методы их использования.

Репозитории

Пакеты, входящие в дистрибутив (или, если угодно, образующие дистрибутив), валяются не абы как — они организованы в репозитории. Что это такое?

В переводе на русский язык слово репозиторий означает «хранилище» — и именно его рекомендуют употреблять языковые пуристы. Однако, как это обычно бывает по жизни, в народе утвердилось иное их именование — repo или, говоря по нашему, по бразильскому кириллическому, «репы». Почему во множественном числе — станет понятно из дальнейшего рассказа.

Сам по себе репозиторий действительно можно в первом приближении определить как место хранения пакетов, специально собранных для данного дистрибутива, к которому возможен свободный (мы ведь ведём речь только о свободных системах, верно?) доступ.

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

Иными словами, пакеты в репозитории должны сопровождаться базами данных — теми самыми, которые используются системой управления пакетами данного дистрибутива.

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

В последние годы получила распространение точка зрения, что право на гордое имя настоящего дистрибутива даёт только собственный репозиторий пакетов, при его отсутствии ты в лучшем случае ремикс дрожащая, а то и вообще жалкий респин. Причём дистрибутив, претендующий на всенародную любовь, обязан иметь репозиторий тем более всеобъёмлющий, чем шире его претензии.

Автор этих строк и сам активно поддерживает озвученный взгляд. Почему до сих пор так и не набрался наглости величать нашу Cintu дистрибутивом. Ибо она основывается, с одной стороны, на официвальных репозиториях проекта Ubuntu, с другой — на нескольких PPA-репозиториях с Launchpad’а, которые и будут последовательно рассмотрены в ближайших разделах.

Устройство репозиториев Ubuntu

Официальные репозитории Ubuntu располагаются по адресу: archive.ubuntu.com/ubuntu. Это — «головное» хранилище пакетов, имеющее многочисленные региональные зеркала, принадлежность которых к стране указывается стандартным двухсимвольным префиксом, например ru.archive.ubuntu.com/ubuntu/ — российское зеркало.

Проще всего с устройством репозиториев с точки зрения применителя можно ознакомиться просмотром их списка в файле /etc/apt/sources.list, который создаётся автоматически при инсталляции. В Ubuntu и любом её «чистом» (не обязательно официальном) клоне, в том числе и в Cintu, при согласии с предлагаемыми в ходе стандартной установки умолчаниями он в обязательном порядке содержит следующие строки:

deb http://ru.archive.ubuntu.com/ubuntu/ xenial main restricted
deb http://ru.archive.ubuntu.com/ubuntu/ xenial universe
deb http://ru.archive.ubuntu.com/ubuntu/ xenial multiverse

Здесь первый компонент в каждой строке, deb, означает, что речь идёт о бинарных пакетах (про пакеты с исходниками я скажу чуть позже). Далее следует «базовый» URL репозитория, соответствующий тому зеркалу сервера, которое было выбрано при установке системы — в наших условиях оно будет или российским (как в примере), или официальным http://archive.ubuntu.com/ubuntu/. Последнее отнюдь не является показателем русофобии — известны прецеденты, когда обновления ысех зеркал существенно запаздывали супротив официоза.

Далее указывается кодовое имя релиза (в примере — xenial) и его отдельных веток, коими по умолчанию будут:

  • просто xenial — в неё входят собственно пакеты дистрибутива;
  • xenial-updates — «обычные» обновления пакетов, связанные со сменой версий, сборок и исправлением ошибок;
  • xenial-security — как нетрудно догадаться, обновления, латающие «дыры» в безопасности системы.

Кроме того, каждом релизе Ubuntu имеются ещё две ветки — в 16.04 они носят имена xenial-backport и xenial-proposed: обе они содержат обновлённые версии некоторых пакетов из последующих релизов, первая — уже офциально «утверждённые», вторая — проходящие «обкатку».

Для подключения ветки с backport’ированными пакетами при установке любого «чистого» клона Ubuntu нужно отметить соответствующую опцию, что в Cintu и авторских редакциях Neon’а сделано по умолчанию. Ветку xenial-proposed можно (если нужно — а иногда такая необходимость возникает) подключить только вручную, внеся в файл /etc/apt/sources.list такую строку:

deb http://ru.archive.ubuntu.com/ubuntu/ xenial-proposed main restricted universe multiverse

Наконец, в то же файле /etc/apt/sources.list есть и такая строка:

# deb-src http://archive.canonical.com/ubuntu xenial partner

Это репозиторий для пакетов, в том числе и коммерческих, разрабатываемых партнёрами фирмы Canonical. Как можно видеть, по умолчанию после стандартной утсановки она закомментирована. Я, кажется, никогда ничего из этого репозитория не устанавливал, и потому и в Cintu, и в Neon’е он онтлючён. Для включения с него надо снять символ комментария.

Далее в каждой втеке репозиториев идёт перечень категорий пакетов. Их четыре:

  • main — полностью свободные пакеты, официально поддерживаемые разработчиками Ubuntu;
  • restricted — пакеты, также официально поддерживаемые дистрибутивом, но не вполне свободные;
  • universe — полностью свободные программы, официально дистрибутивом не поддерживаемые и развивающиеся силами независимых разработчиков;
  • multiverse — пакеты, аналогично universe официально не поддерживаемые и, подобно restricted, не вполне свободные.

«Не вполне свобода» пакетов из категорий restricted и multiverse выражается в ограничениях на их распространение (например, мультимедиа-кодеки, использующие алгоритмы, патентованные в отдельных странах) или могут распространяться только в бинарном виде (например, фирменные драйверы для видеокарт).

До сих пор речь шла о репозиториях бинарных пакетов. Однако существуют и параллельные им репозитории с исходниками. Они подлючаются, если отметить соответствующую опцию при первичной установке системы, чего нет ни в Cintu, ни в Neon’е. Так что если исходники потребуются — надо снять символы комментария со строк

# deb-src http://ru.archive.ubuntu.com/ubuntu/ xenial main restricted

И им подобных.

PPA-репозитории

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

Для доступа к PPA-репозиториям фирмой Canonical разработан специальный онлайновый инструмент — Launchpad, размещённый на одноимённом сайте. Это — не открытая и не свободная система. Более того, она имеет и платную версию, предназначенную для разработчиков коммерческих пакетов. Однако нас, как применителей, это не касаются.

Описания подлючённых PPA-репозиториев даются в отдельных файлах каталога /etc/apt/sources.list.d/, называемых в соответсвие с ppa-именем пакета и суффиксом *.list. Откуда оно берётся, будет сказано позднее. А пока — как оно выглядит.

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

Возможны и более причудливые имена, например, ppa:mystic-mirage/komodo-edit — репозиторий текстового редактора Komodo Edit. Важно, что они в обязательном порядке включают «префикс» ppa:, который в имени соответствующего list-файла отбрасывается. Зато завершается последний обязательным компонентом — именем релиза. Например, для Komodo Edit имя list-файла, соответствующего релизу 16.04 — mystic-mirage-ubuntu-komodo-edit-xenial.list.

Внутри такого файла — обычно две строки. Например, для пакета komodo-edit они будут такими:

deb http://ppa.launchpad.net/mystic-mirage/komodo-edit/ubuntu xenial main
deb-src http://ppa.launchpad.net/mystic-mirage/komodo-edit/ubuntu xenial main

То есть в одном файле описывается и репозиторий бинарников, и репозиторий исходников. Если последний отсутствует — соответствующей строки не будет. Впрочем, в PPA-репозиториях пакетов без исходников не водится. А вот среди «не вполне свободного» софта встречаются, примером чему — браузер Vivaldi: файл vivaldi.list выглядит следующим образом:

deb http://repo.vivaldi.com/stable/deb/ stable main

Однако случаи, когда приходится искать пакеты за пределами PPA-репозиториев, достаточно редки. Ибо в них, как в Греции есть всё — и ещё немного больше, чем всё. Правда, чтобюы воспользоваться этим «греческим сокровищем», PPA-репозитории нужно подключить, о чём будет говориться в следующем разделе.

Подключение PPA-репозиториев

Подключение PPA-репозиториев во всех «чистых» клонах семейства Ubutnu можно выполнить разными способами. Первый из них — «ручной», о котором я скажу в конце этого раздела. Ничего принципиально сложного в еём нет, однако и прибегать к нему приходится редко. Ибо в Ubuntu и её клонах имеется специальная утилита add-apt-repository — сценарий на Python’е, автоматизирующий данный процесс. Иногда в сети можно встретить для него имяapt-add-repository, но это не более чем символическая ссылка на реальный скрипт.

Поскольку очевидно, что для подключения репозиториев требуются права администратора, команда эта должна быть дана в такой форме:

    $ sudo add-apt-repository [ppa-name]

где [ppa-name] — так называемое PPA-имя, которое только и требуется знать для нужного репозитория. Как его определить?

Можно, конечно, походить по форумам Ubuntu’йской тематики, можно сделать запрос к Гоше или Яше, указав имя искомого пакета, можно… да много чего можно сделать, чтобы по прошествии изрядного или ещё большего времени получить нужный результат. А можно, действуя методично и планомерно, прибегнуть к универсальному способу, который и описывается ниже.

Первый шаг — заход на Launchpad.net. Далее в поле поиска следует набрать имя требующегося пакета или его фрагмент, например, systemback:

dpkges-part_03_001

Далее в списке выдачи результатов нужно отыскать нужную строку — Systemback: Kendek (почему, будет сказано в соответствующем трактате)

dpkges-part_03_002

Теперь — по ссылке, и прочитать раздельчик, озаглавленный Adding this PPA to your system, где искомое ppa-имя будет выделено полужирным шрифтом:

dpkges-part_03_004

Его и следует подставить в качестве аргумента команды:

    $ sudo add-apt-repository ppa:nemh/systemback

Дабы развеять все сомнения, можно пройти по ссылке Read about installing. Появится всплывающее окошко, в котором процедура добавления PPA-репозитория будет описана подробно, с иллюстрациями:

dpkges-part_03_004

После выполнив предыдущей команды нужно ни в коем случае не забыть проделать процедуру апдейта, о чём, впрочем, есть напомингание на странице:

    $ sudo apt update

Теперь можно устанавливать пакеты из новообретённого репозитория. А ознакомиться со списком оных можно сразу. Правда, в данном примере — всего один пакет, но зато для всех актуальных релизов, включая и нужный нам Xenial:

dpkges-part_03_006

Впрочем, как было сказано в начале раздела, можно обойдясь без команды add-apt-repository: отыскав нужный репозиторий (пусть для разнообразия это будет PPA Цветко Цветкова с пакетами Cinnamon 3.2 для релиза Xenial), развернуть строку Technical details about this PPA:

dpkges-part_03_007

Строки из поля ниже просто копируются в новый текстовый файл, создаваемый в каталоге /etc/apt/sources.list.d под именем tsvetko_tsvetkov-ubuntu-cinnamon-3-2-xenial.list. После чего следует добавить gpg-ключ — это символы после слеша в строке Signing key:. Что делается тремя командами:

    $ sudo gpg --keyserver keyserver.ubuntu.com --recv DA2717C1
    $ sudo gpg --export --armor DA2717C1 > /tmp/public.key
    $ sudo sudo apt-key add public.key

Две последние команды можно совместить в одном конвейере:

    $ sudo sudo gpg --export --armor DA2717C1 | apt-key add --

И теперь остаётся только не забыть про обновление локального кеша:

    $ sudo apt update

Не правда ли, любой из предложенных способов проще, чем беготня по форумам и блогам? Да и Гошу с Яшей не стоит беспокоить по пустякам.

Редко, но бывает так, что приходится устанавливать пакеты из какого-либо иного источника, нежели PPA-репозитории. Но в этом случае грамотно сделанный пакет при установке сам добавляет свой репозиторий в общий список — так, например, происходит при установке биаузеров Vivaldi и Opera. Либо, на худой конец, сопровождается сведениями о том, как это сделать самостоятельно (пример чему будет приведён в трактате про Virtualbox). Если ни того, ни другого не имеет места быть — возникает вопрос: а стоит ли связываться с таким пакетом?

[Общее содержание]

Воззрения кота Manual’а. Deb-пакеты. Часть 3. Репозитории: 1 комментарий

  1. Низкий поклон Вам за такое мелкоразжеванное изложение.

Добавить комментарий