Все кто хоть раз попробовал в работе систему управления пакетов принятую в Ubuntu, вероятно отказаться уже от нее не сможет. Сейчас попробуем снять все вопросы, связанные устройством и работой репозитария пакетов дистрибутива Ubuntu.
Вообще справедливости стоит отметить, что систему управления пакетов Ubuntu унаследовал от Debian. Кстати и не только он, еще и ALTLinux, MEPIS, Linspire и некоторые другие. Поэтому все описанное касается и этих дистрибутивов. Под репозитарием понимается специальное хранилище пакетов. Все файлы в нем снабжены индексными списками, которые описывают находящиеся в них пакеты. Эта информация используется менеджером пакетов, позволяя легко найти пакет по его описанию, установить и обновить.
Описание репозитариев
Пакеты в репозитарии структурированы по назначению, платформе и прочим характеристикам. Список репозитариев приведен в файле /etc/apt/sources.list. Заглянем внутрь (у меня сейчас Kubuntu 7.04, но разницы никакой, мы разбираемся в принципе).
$ cat /etc/apt/sources.list
#deb cdrom:[Kubuntu 7.04 _Feisty Fawn_ — Beta i386 (20070322.1)]/ feisty main restricted
deb http://ua.archive.ubuntu.com/ubuntu/ feisty main restricted
deb-src http://ua.archive.ubuntu.com/ubuntu/ feisty main restricted
deb http://ua.archive.ubuntu.com/ubuntu/ feisty-updates main restricted
deb http://ua.archive.ubuntu.com/ubuntu/ feisty universe multiverse
deb http://ua.archive.ubuntu.com/ubuntu/ feisty-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu feisty-security main restricted
Разберем, что получилось. Первая строка указывает на CD-ROM, точнее на диск с конкретной меткой. Чтобы добавить имеющийся у вас диск в этот файл, достаточно вставить его в привод и набрать команду «sudo apt-cdrom add» программа попросит вставить диск и нажать Enter. Далее в файле описываются репозитарии находящиеся на узлах в Интернет. В первой строчке идет тип пакета, если стоит deb это указывает, что будут загружаться пакеты с уже скомпилированными программами. А deb-src говорит, что используются пакеты с исходными текстами. При большом количестве записей, во время обновления списка пакетов командой «sudo apt-get update» суммарный объем скачанных файлов может превышать 10 Мб, поэтому если не планируется сборка/пересборка пакетов, строки deb-src можно смело комментировать, чтобы уменьшить нагрузку на канал и время на обновления списка. Следующая запись означает зеркало, с которого будет загружаться обновления. Официальный репозитарий Ubuntu располагается по адресу http://archive.ubuntu.com/ubuntu/. При установке дистрибутива в зависимости от региона выбирается одно из его многочисленных зеркал, на что указывает префикс. Например, украинское зеркало имеет адрес http://ua.archive.ubuntu.com/ubuntu/, российское вместо ua использует ru. Поэтому, читая некоторые зарубежные материалы, следует их переносить на местные реалии. Если в статье говориться, что для установки добавьте в список сервер http://gb.archive.ubuntu.com/ubuntu/. Это не значит, что нужно бросаться сразу выполнять такой совет. У вас уже вбито свое локальное зеркало. Хотя здесь не все так просто, как это кажется на первый взгляд.
Во первых зеркала обновляются не мгновенно, а через некоторый период времени. Хотя это не страшно. Интересней скорость доступа к зеркалу. Так команда traceroute показывает 14 промежуточных улов в случае с вариатом ua, при этом сервер находится в Лондоне, IP-адрес совпадает с официальным archive.ubuntu.com, а пакет пробегает чуть меньше 6 тысяч километров.
То есть фактически украинское зеркало совпадает с официальным репозитарием. Причем скорость закачки днем у меня, как правило, равна приблизительно 128 кбайт/сек, а ночью ровно в два раза ниже (вероятно просыпаются заокеанские пользователи).
Если использовать итальянский сервер с префиксом gb, пакет проходит 12 узлов и на 1000 км меньше. Польский pl сервер «находится» в 6126 км, через 14 промежуточных узлов, но отклик просто отличный. Полный список репозитариев можно найти по адресу
Следующей строкой идет название версии дистрибутива для 7.10 это Gutsy, 7.04 — feisty, 6.10 – edgy, 6.06 – dapper и так далее. Такая строка показывает, что будут использованы основные и тщательно оттестированные пакеты, собираемые самими разработчиками. К названию дистрибутива может быть добавлено одно из 4 окончаний:
– backports – не протестированные, но часто очень полезные пакеты;
– proposed – предлагаемые, но пока не протестированные обновления;
– security — обновления безопасности;
– updates – обновления прошедшие стадию proposed.
То есть на каждый дистрибутив 5 возможных значений. В большинстве домашних систем использование всех категорий пакетов не является рациональным, часто кроме обязательного main достаточно оставить backports.
И наконец последняя позиция, представлена еще 4 характеристиками, причем их свободно можно поместить в одной строке:
– main – пакеты со свободно лицензией поддерживаемые разработчиками Ubuntu;
– universe — пакеты со свободной лицензией, но поддерживаемые сторонними разработчиками;
– multiverse – пакеты с несвободной лицензией поддерживаемые сторонними разработчиками;
– restricted – пакеты с несвободной лицензией, которые не могут быть изменены, например двоичные драйвера.
Если набрать в строке веб-браузера указанный адрес, то можно обнаружить, что последние два компонента в описании репозитария, являются подкаталогами каталога dists.
Если продвигаться далее, то найдем еще каталоги, соответствующие архитектуре и локализации. Но добавлять тип архитектуры и локализацию в описание репозитария не нужно, все эти данные будут получены автоматически по текущим настройкам. Сразу же возникает вопрос, что делать, если была установлена версия под i386, а процессор AMD64. Все просто. Открываем файл /etc/apt/apt.conf.d/01ubuntu и в секции APT добавляем следующую строку:
Architecture «amd64»;
Либо в любом месте:
APT::Architecture «amd64»;
Сохраняем изменения, обновляем список пакетов и пробуем получить небольшой файл, если пакет имеет в названии «amd64» все прошло как надо. Теперь можно обновить всю систему командой:
$ sudo apt-get dist-upgrade
Примеры всех параметров этого файла, можно найти в каталоге /usr/share/doc/apt/examples/.
Сами же пакеты лежат на сайте в другом подкаталоге pool и рассортированы по несколько иному принципу, но так как менеджер пакетов скрывает всю эту структуру, трогать ее мы не будем.
Добавление репозитариев
Добавить новый репозитарий можно несколькими способами. Самый простой открыть в любом текстовом редакторе (через sudo) файл /etc/apt/sources.list и вбить нужную строку руками. Причем следует помнить, что чем ближе к началу файла запись, тем большим преимуществом пользуется репозитарий. В Adept выбираем Вид -Управление репозитариями переходим на Third-party Software и нажимаем кнопку Add и вставляем строку.
На других вкладках включается автоматическое обновление списка пакетов, выбираются категории пакетов основного репозитария и используемое зеркало. Страница Authentication предназначена для загрузки GPG ключей применяемых для проверки подписи пакетов. Последнее делать вовсе не обязательно, пакеты будут устанавливаться и без этого, но так вы будете уверены, что их собрал именно тот человек, с ресурса которого он получен, да и менеджер пакетов не будет задавать лишних вопросов. Месторасположение файлов ключей обычно указывается на главной странице ресурса. Его можно добавить и в командной строке. Например:
wget http://seveas.imbrandon.com/1135D466.gpg -O- | sudo apt-key add —
В Synaptic репозитарий добавляется через Setting – Repositories .
После того как репозитории добавлены, следует обновить список пакетов. В консоли это делается командой:
$ sudo apt-get update
В Synaptic достаточно нажать кнопку Reload, в Adept – Получить обновления.
Информация об репозитариях и пакетах собирается в каталоге /var/lib/apt/lists в виде файлов имя, которого соответствует названию архива.
$ ls /var/lib/apt/lists
ua.archive.ubuntu.com_ubuntu_dists_feisty-backports_main_binary-i386_Packages
…
Заглянув сюда можно получить информацию о любом пакете. Впрочем заглядывать и не обязательно. За вас это сделают утилиты, например введя «sudo apt-cache showpkg gcc-4.1» можно узнать все о пакете gcc.
Создание локального репозитария
Создать локальную копию репозитария можно одной командой (требуется пакет debmirror):
$ /usr/bin/debmirror —nosource -m —passive —host=archive.ubuntulinux.org —root=ubuntu —method=ftp —progress —dist=feisty,feisty-security,feisty-updates,feisty-backports —ignore-release-gpg —section=main,restricted,multiverse,universe —arch=i386,amd64
Большая часть параметров понятна из объяснений выше. Те у кого жирный канал и много свободного места на диске могут попробовать.
Чаще возникает обратная ситуация, скачать пакеты в одном месте и установить в другом. Чтобы не прибегать в таком случае к команде вроде «sudo dpkg -i ./*.deb» то есть установить все файлы с расширением deb находящиеся в текущем каталоге, лучше создать свой репозитарий которым пользоваться как обычно apt-get. Чтобы создать список пакетов нам понадобится утилита dpkg-scanpackages входящая в состав dpkg-dev.
$ sudo apt-get install dpkg-dev
Теперь создаем каталог, в который сваливаем все пакеты.
$ mkdir archives
Заходим внутрь.
$ cd archives
И даем команду.
$ dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
По окончании будет выдан список пакетов и их число.
И чтобы добавить новый репозитарий в sources.list прописываем путь к созданному каталогу:
deb file:/home/grinder/archives ./
Сохраняем изменения и вводим «sudo apt-get update» если в /var/lib/apt/lists добавился новый каталог можно поздравлять себя с победой. Теперь можно этот каталог копировать на другие системы. Естественно при добавлении в него пакетов процедуру придется повторить.
В Интернет можно найти достаточно описания того, как перенести свой репозитарий на CD/DVD, занимают они понескольку страниц. Я бы предложил вариант проще – использовать утилиту APTonCD
$ sudo apt-get install aptoncd
И вызываем через меню Система. Пользоваться программой очень просто. Вj вкладке Create нажимаем кнопку Create APTonCD, будет просканирован каталог /var/cache/apt/archives и все файлы будут добавлены в проект. Далее нажимаем Add Packages и указываем на пакеты лежащие отдельно. Нажимаем Options и в Media Type выбираем тип образа CD или DVD, а в Destination Folder каталог, куда будет помещен ISO-образ.
Нажимаем OK, программа создаст образ и запросит записать его на носитель. Просто супер. На вкладке Restore можно скопировать (то есть восстановить) все файлы обратно, добавить CD-ROM.
Как видите репозитарий пакетов Ubuntu одновременно мощная и в то же время простая в использовании система. Надеюсь, теперь проблем с установкой пакетов у вас не возникнет. Linux forever!
З.Ы.
Интересный совет нашел
Как обновить только пакеты находящиеся в архиве APT
Для того чтобы заставить apt обновить систему используя только пакеты из кэша /var/cache/apt/archives,
а не лезть за ними в интернет, нужно выполнить:
apt-get -no-download -ignore-missing upgrade
Если пакета нет в кэше, он не будет поставлен.
Permalink