Это старая версия документа.


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

Введение

Если Вы в прошлом пользовались операционными системами Windows или Mac OS, Вы скорее всего привыкли к тому, что программное обеспечение поставляется в виде одного или нескольких установочных файлов, распространяемых на CD/DVD или через интернет. Для Ubuntu GNU/Linux так же существует подобный способ распространения ПО, однако, это в большинстве своем проприетарные и закрытые программы.

Большая часть ПО в Ubuntu запакована в специальные .deb файлы, в которых содержатся программы и необходимые библиотеки. Эти файлы Вы можете найти в интернете, на CD/DVD (например установочный СD Ubuntu содержит много .deb файлов).

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

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

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

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

Автор рекомендует следующий способ поиска и установки ПО:
  1. Исходим из того, что у Вас есть некая задача, которую должна решить некая программа, при этом Вы не знаете существует ли она вообще и если существует — как она называется. Вероятно Вы можете назвать программы-аналоги из других ОС.
  2. При помощи интернет-поисковика (например Google) Вы можете найти различные варианты желаемой программы. Например набрав «[название программы в Windows] для Ubuntu».
  3. Как правило вы найдете несколько названий программ (их может быть достаточно много — отобрать лучшие можно по отзывам пользователей), у большинства из которых есть собственная веб-страничка, на которой можно узнать дополнительные характеристики программы или посмотреть скриншоты.
  4. Определившись с программой, просто запустите Synaptic (или аналог) и поищите ее по названию. Скорее всего вы сможете ее найти и установить.
  5. Так же возможно что разработчики поддерживают свой репозиторий с пакетами для вашей версии Ubuntu на launchpad.net или на своём сайте, обычно в подобных репозиториях содержаться более свежие версии программ, поэтому если вы хотите получить самую последнюю версию - внимательно посмотрите на сайт программы и воспользуйтесь поиском по launchpad.net
  6. И только если Вы не нашли нужную программу в репозиториях стоит пробовать другие пути установки.

Зачастую, версии ПО, доступные через репозиториии, не всегда самые свежие, однако эти версии как правило лучше интегрированы в Ubuntu и в некоторых случаях более стабильны.

Репозитории Ubuntu

В Ubuntu всё программное обеспечение делится на четыре секции, называемые компонентами, чтобы отразить разницу в лицензии и уровне доступной поддержки. Пакеты распределяются по компонентам таким образом:
Main — свободное ПО, официально поддерживаемое компанией Canonical.
Restricted — проприетарное ПО (в основном — драйверы устройств), официально поддерживаемое компанией Canonical.
Universe — свободное ПО, официально не поддерживаемое компанией Canonical (но поддерживаемое сообществом пользователей).
Multiverse — проприетарное ПО, не поддерживаемое компанией Canonical.

Существует четыре основных репозитория Ubuntu.
$release1) — это пакеты на момент выхода релиза.
$release-security — пакеты критических обновлений безопасности.
$release-updates — пакеты обновления системы (т.е. более поздние версии ПО, вышедшие уже после релиза).
$release-backportsбэкпорты более новых версий некоторого ПО, которое доступно только в нестабильных версиях Ubuntu.

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

Пакет (например *.deb файл) размещается на общедоступном интернет-ресурсе (например archive.ubuntu.com). Затем информация о пакете заносится в файл Packages, который, в свою очередь, для удобства работы пакуется в Packages.gz

Пример записи в файле Packages для пакета abiword:

Package: abiword
Priority: optional
Section: gnome
Installed-Size: 7808
Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Masayuki Hatta (mhatta) <mhatta@debian.org>
Architecture: i386
Version: 2.6.6-0ubuntu1
Replaces: abiword-gnome
Provides: abiword-gnome
Depends: libaiksaurus-1.2-0c2a (>= 1.2.1+dev-0.12), libaiksaurusgtk-1.2-0c2a 
(>= 1.2.1+dev-0.12), libart-2.0-2 (>= 2.3.18), libatk1.0-0 (>= 1.20.0), libc6
(>= 2.7), libcairo2 (>= 1.2.4), libenchant1c2a (>= 1.4.2), libexpat1 (>= 1.95.8),
libfontconfig1 (>= 2.4.0), libfreetype6 (>= 2.3.5), libfribidi0 (>= 0.10.9),
libgcc1 (>= 1:4.1.1), libglade2-0 (>= 1:2.6.1), libglib2.0-0 (>= 2.18.0),
libgnomecanvas2-0 (>= 2.11.1), libgnomeprint2.2-0 (>= 2.17.0), libgnomeprintui2.2-0
(>= 2.17.0), libgsf-1-114 (>= 1.14.11), libgtk2.0-0 (>= 2.15.0), libice6 (>= 1:1.0.0),
libidn11 (>= 0.5.18), libjpeg62, libloudmouth1-0 (>= 1.1.4-2), libncurses5 
(>= 5.6+20071006-3), libots0, libpango1.0-0 (>= 1.22.0), libpng12-0 (>= 1.2.13-4),
libpopt0 (>= 1.14), libreadline5 (>= 5.2), librsvg2-2 (>= 2.22.3), libsm6, 
libstdc++6 (>= 4.2.1), libwmf0.2-7 (>= 0.2.8.4), libwpd8c2a, libwpg-0.1-1, libwv-1.2-3 
(>= 1.2.4), libx11-6, libxft2 (>> 2.1.1), libxml2 (>= 2.6.27), zlib1g (>= 1:1.1.4), 
abiword-common (>= 2.6.6-0ubuntu1), gsfonts
Recommends: abiword-plugin-grammar, abiword-plugin-mathview, abiword-help, 
aspell-en | aspell-dictionary, poppler-utils
Suggests: abiword-plugin-goffice
Conflicts: abiword-gnome
Filename: pool/main/a/abiword/abiword_2.6.6-0ubuntu1_i386.deb
Size: 2969028
MD5sum: f70817557ecbf4183b498fd98051ec03
SHA1: 8c666220527fe78328b5f94fec93fd62eddd332f
SHA256: 47de1dcf28866a33c0e4baefadb2d29ff9046ba4e4ae6e600801e5e3a6ec40c7
Description: efficient, featureful word processor with collaboration
 AbiWord is a full-featured, efficient word processing application.
 It is suitable for a wide variety of word processing tasks, and
 is extensible with a variety of plugins.
 .
 This package includes many of the available import/export plugins allowing
 AbiWord to interact with ODT, WordPerfect, and other formats.  It also
 includes tools plugins, offering live collaboration with AbiWord users
 on Linux and Windows (using TCP or Jabber/XMPP), web translation and
 dictionary support, and more.
 .
 Additional plugins that require significant amounts of extra software to
 function are in the various abiword-plugin-* packages.
Homepage: http://www.abisource.com/
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Origin: Ubuntu
Task: xubuntu-desktop

Файлов Packages.gz может быть несколько (например, по одному для каждой архитектуры). Файл Release содержит описание репозитория в целом и ссылки на различные Packages.gz

Общая же схема работы выглядит примерно так:

  1. Пользовательский компьютер подключается к репозиторию, и при наличии защиты, проверяет его истинность (см. главу "Защита репозиториев").
  2. Читает файл Release, находит и скачивает необходимые Packages.gz
  3. На основе скачанных Packages.gz обновляет локальную базу данных пакетов.
  4. Теперь пользовательский компьютер «знает» где находится тот или иной пакет и при необходимости легко может его скачать и установить.

Подключение репозитория

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

Некоторые репозитории помимо нужных Вам пакетов могут содержать экспериментальные сборки различного системного ПО, в том числе и ядер linux. Т.к. версия этих экспериментальных пакетов как правило выше, чем установленная у Вас, Менеджер Обновлений может попытаться «обновить» систему с этих репозиториев, что в свою очередь может повредить Вашу систему. Поэтому внимательно читайте описание подключаемого репозитория и информацию в Менеджере Обновлений.

При помощи графического интерфейса

Для подключения репозитория, перейдите: Система→Администрирование→Источники приложений. В появившемся окне выберите вкладку «ПО сторонних производителей», нажмите кнопку «Добавить».

"..нажмите кнопку Добавить"

В появившемся окне заполните поле «Строка APT:» и нажмите кнопку «Добавить источник».

"..и нажмите кнопку Добавить источник"

Источник будет добавлен и включен, нажмите кнопку «Закрыть».

"..нажмите кнопку Закрыть"

Т.к. был подключен новый источник программного обеспечения необходимо обновить информацию о пакетах. Появится окно, с предложением это сделать. Нажмите «Обновить».

"Нажмите Обновить"

После обновления информации о пакетах окно «Источники приложений» закроется, и скорее всего вы получите ошибку о неподписанном источнике приложений, тем не менее, вы сможете устанавливать пакеты, содержащиеся в свежеподключенном репозитории стандартными средствами. Для устранения ошибки неподписанного репозитория см. пункт про защиту репозиториев ниже.

При помощи консоли

Системный список репозиториев содержится в файле /etc/apt/sources.list. Для того, чтобы добавить репозиторий - отредактируйте этот файл, например так:

$ sudo nano /etc/apt/sources.list

и добавьте туда APT строку. Чем «выше» (т.е. ближе к началу файла) стоит строка, тем больший приоритет получит добавленный репозиторий. Должно получиться примерно так:

deb http://my.cool.repo.ubu/ubuntu jaunty main
# deb cdrom:[Ubuntu 9.04 _Jaunty Jackalope_ - Release i386 (20090420.1)]/ jaunt$
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.

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

## Major bug fix updates produced after the final release of the
## distribution.
deb http://ru.archive.ubuntu.com/ubuntu/ jaunty-updates main restricted
deb-src http://ru.archive.ubuntu.com/ubuntu/ jaunty-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://ru.archive.ubuntu.com/ubuntu/ jaunty universe
deb-src http://ru.archive.ubuntu.com/ubuntu/ jaunty universe
deb http://ru.archive.ubuntu.com/ubuntu/ jaunty-updates universe
deb-src http://ru.archive.ubuntu.com/ubuntu/ jaunty-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://ru.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb-src http://ru.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb http://ru.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse
deb-src http://ru.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

## Uncomment the following two lines to add software from the 'backports'
## repository.
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
# deb http://ru.archive.ubuntu.com/ubuntu/ jaunty-backports main restricted uni$
# deb-src http://ru.archive.ubuntu.com/ubuntu/ jaunty-backports main restricted$

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu jaunty partner
# deb-src http://archive.canonical.com/ubuntu jaunty partner

deb http://security.ubuntu.com/ubuntu jaunty-security main restricted
deb-src http://security.ubuntu.com/ubuntu jaunty-security main restricted
deb http://security.ubuntu.com/ubuntu jaunty-security universe
deb-src http://security.ubuntu.com/ubuntu jaunty-security universe
deb http://security.ubuntu.com/ubuntu jaunty-security multiverse
deb-src http://security.ubuntu.com/ubuntu jaunty-security multiverse
deb http://archive.ubuntu.com/ubuntu/ jaunty main

где первой строкой идет добавляемый нами репозиторий.
Сохраните файл и закройте редактор. Для nano нужно нажать Ctrl+X, подтвердить сохранение изменений - Y и убедившись, что имя сохраняемого файла /etc/apt/sources.list нажать Enter.

Далее следует обновить список пакетов. Для этого выполните:

$ sudo apt-get update

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

W: Ошибка: http://site.com jaunty Release: Следующие подписи не могут быть проверены, так как недоступен открытый ключ: NO_PUBKEY 1234567890ADBD

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

Защита репозиториев

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

В Ubuntu по умолчанию доверенными являются репозитории на установочных дисках и основные интернет репозитории — archive.ubuntu.com. При наличие на пользовательском компьютере нескольких подключенных репозиториев, предпочтение отдается доверенным.

При подключении репозитория, защищенного цифровой подписью Вам нужно скачать (обычно с ресурса, рассказывающего про этот репозиторий, или с сервера ключей, что является более предпочтительным в любом случае) открытый ключ и добавить его в систему. Иногда для скачивания предоставляется доступный для установки пакет, который в свою очередь при своей установке сам прописывает ключ репозитория. Если вы скачиваете ключ с сайта репозитория, то вы получите обычный файл с расширением .key, .gpg или другим. Добавить его в систему из можно так:

$ sudo apt-key add repo.key

Где repo.key — полученный вами ключ репозитория.

Или при помощи графического интерфейса — запустите «Источники приложений» (Система→Администрирование→Источники приложений), перейдите на вкладку «Аутентификация» и нажмите на кнопку «Импортировать файл ключа…» - откроется диалог выбора файла. Выберите файл ключа и нажмите ОК.

Добавление ключа

Однако гораздо более предпочтительным является добавление ключа со специального защищённого сервера. Обычно, когда заходит речь о ключе, даётся его непонятный с первого взгляда буквенно-цифровой идентификатор вида 123ABCDEFG456 (строчка из произвольных цифр и букв латинского алфавита в верхнем регистре). Это - уникальное имя (идентификатор) ключа. Иногда ключ описывается строчкой вида 1024R/123ABCD, тогда идентификатором является часть после слеша. Так вот, ключи преимущественно храняться на специальных серверах, откуда любой может их получить. Ключи для репозиториев Ubuntu принято хранить на keyserver.ubuntu.com. Для получения и импортирования в систему ключа с сервера необходимо выполнить команду:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 12345678

Где вместо keyserver.ubuntu.com можно подставить адрес другого сервера ключей, а вместо 12345678 необходимо написать идентификатор нужного вам ключа.

Совет: для того, чтобы разом попытаться импортировать все недостающие ключи репозиториев, выполните в консоли:
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com `sudo aptitude update 2>&1 | grep -o '[0-9A-Z]\{16\}$' | xargs`

Ссылки

1)
под $release понимается кодовое имя текущей версии Ubuntu, например для 9.04 это jaunty