Система пакетов использует собственную базу данных для слежения за
установленными, не установленными и доступными для установки пакетами.
Программа apt-get
использует эту базу данных для определения пути
установки пакетов, требуемых пользователем, и для определения того, какие
дополнительные пакеты нужны, чтобы выбранные пакеты работал корректно.
Чтобы обновить этот список, вы должны использовать команду apt-get
update
. Эта команда просматривает списки пакетов в архивах, указанных в
файле /etc/apt/sources.list; см. более полные сведения об этом
файле в Файл /etc/apt/sources.list,
раздел 2.1.
Было бы неплохо запускать эту команду регулярно, чтобы ваша система всегда была в курсе об обновлениях доступных пакетов, особенно обновлениях безопасности.
Наконец-то, ожидание окончено! Ваш sources.list готов и списки доступных
пакетов обновлены, теперь вам только остается дать команду
apt-get, чтобы установить предпочитаемый пакет. Например, вы
можете запустить:
apt-get install xchat
APT будет искать в своей базе данных наиболее свежие версии пакетов и будет
скачивать их из соответствующих архивов так, как они указаны в
sources.list. В случаях, когда пакет зависит от другого -- как в
варианте ниже -- APT проверит зависимости и установит необходимые пакеты. См.
пример:
[root]@[/] # apt-get install nautilus
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
bonobo libmedusa0 libnautilus0
The following NEW packages will be installed:
bonobo libmedusa0 libnautilus0 nautilus
0 packages upgraded, 4 newly installed, 0 to remove and 1 not upgraded.
Need to get 8329kB of archives. After unpacking 17.2MB will be used.
Do you want to continue? [Y/n]
Пакет nautilus
зависит от совместно-используемых библиотек,
поэтому APT скачает их из архива. Если бы вы указали имена этих библиотек в
командной строке apt-get, то APT не стал бы спрашивать у вас
разрешения продолжать установку; он бы автоматически решил, что вы хотите
установить все эти пакеты.
Это означает, что APT запрашивает подтверждения только тогда, когда нужно установить пакеты, которые не были перечислены в командной строке.
Вам могут быть полезны следующие опции apt-get:
-h справка
-d только загрузить - не устанавливать и не распаковывать архивы
-s ничего не делать реально, имитировать выполнение
-y предполагается ответ Yes на все вопросы, сами вопросы не выводить
-f продолжать, даже если проверка целостности не удачна
-u плюс ко всему показывать список обновленных пакетов
В одной строке можно задавать несколько пакетов. Скачанные из сети файлы помещаются в каталог для дальнейшей установки /var/cache/apt/archives.
Также, вы можете указывать пакеты для удаления в той же командной строке.
Просто поместите '-' сразу после имени удаляемого пакета, например:
[root]@[/] # apt-get install nautilus gnome-panel-
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
bonobo libmedusa0 libnautilus0
The following packages will be REMOVED:
gnome-applets gnome-panel gnome-panel-data gnome-session
The following NEW packages will be installed:
bonobo libmedusa0 libnautilus0 nautilus
0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded.
Need to get 8329kB of archives. After unpacking 2594kB will be used.
Do you want to continue? [Y/n]
Более подробную информацию об удалении пакетов можно найти в разделе Удаление пакетов, раздел 3.3.
Если вы обнаружили, что пакет испортился, или просто хотите переустановить
файлы пакета более новой доступной версии, то вы можете использовать опцию
--reinstall, например:
[root]@[/] # apt-get --reinstall install gdm
Reading Package Lists... Done
Building Dependency Tree... Done
0 packages upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1 not upgraded.
Need to get 0B/182kB of archives. After unpacking 0B will be used.
Do you want to continue? [Y/n]
При создании этого руководства APT имел версию 0.5.3, которая была текущей
версией в Debian `unstable' (sid) на время написания. Если вы
установили эту версию, то вам доступны некоторые дополнительные возможности: вы
можете использовать команды типа apt-get install пакет/дистрибутив
для установки пакетов из указанных дистрибутивов, или apt-get install
пакет=версия. Например:
apt-get install nautilus/unstable
установит nautilus из дистрибутива `unstable' (нестабильный), даже если вы работаете на `stable' (стабильном). Для 'distribution' допускаются значения stable, testing и unstable.
Вы можете предпочесть использование ключа -t для выбора целевого
дистрибутива, указывающего apt-get
предпочесть указанный
дистрибутив при обработке зависимостей.
ВАЖНО: `unstable' версия Debian - это самая первая версия, в которой появляются новейшие версии пакетов Debian. Этот дистрибутив подвергается воздействию изменений, сделанных в пакетах, и маленьким, и большим, каждое из которых может воздействовать на множество пакетов или систему в целом. По этой причине, эта версия дистрибутива не должна использоваться неопытными пользователями или теми, кто ожидает стабильности.
Дистрибутив `testing' (тестируемый) несколько лучше `unstable' в отношении стабильности, но на производстве лучше все-таки использовать стабильный дистрибутив.
Если пакет вам больше не нужен, то вы можете удалить его из вашей системы,
используя APT. Чтобы это сделать просто введите: apt-get remove
package. Например:
[root]@[/] # apt-get remove gnome-panel
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
gnome-applets gnome-panel gnome-panel-data gnome-session
0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded.
Need to get 0B of archives. After unpacking 14.6MB will be freed.
Do you want to continue? [Y/n]
Из вышеприведенного примера можно видеть, что APT также предлагает удалить пакеты, от которых зависит пакет, предлагаемый вами к удалению. Способа удалить пакет при помощи APT без удаления пакетов, от которых он зависит, нет.
Вышеприведенная команда apt-get
удалит пакеты, но оставит их
настроечные файлы, если они есть. Для полного удаления пакета запустите:
[root]@[/] # apt-get --purge remove gnome-panel
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
gnome-applets* gnome-panel* gnome-panel-data* gnome-session*
0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded.
Need to get 0B of archives. After unpacking 14.6MB will be freed.
Do you want to continue? [Y/n]
Обратите внимание на '*' после имен. Это указывает на то, что будут удалены настроечные файлы для каждого из этих пакетов.
Аналогично действию install, вы можете инвертировать действие
remove для определенных пакетов. В случае удаления, если вы
добавите знак '+' справа от имени пакета, то пакет будет
установлен, а не удален.
[root]@[/] # apt-get --purge remove gnome-panel nautilus+
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
bonobo libmedusa0 libnautilus0 nautilus
The following packages will be REMOVED:
gnome-applets* gnome-panel* gnome-panel-data* gnome-session*
The following NEW packages will be installed:
bonobo libmedusa0 libnautilus0 nautilus
0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded.
Need to get 8329kB of archives. After unpacking 2594kB will be used.
Do you want to continue? [Y/n]
Обратите внимание на то, что apt-get
распечатывает дополнительные
пакеты, которые будут установлены (т.е., пакеты, которые будут установлены для
правильной работы запрашиваемых к установке пакетов), удаляемые пакеты и затем
пакеты, которые будут установлены (также включая дополнительные пакеты).
Обновления пакетов - это конек системы APT. Это может быть сделано одной командой: apt-get upgrade. Вы можете использовать эту команду для обновления пакетов в том же самом дистрибутиве, равно как и при обновлении существующего дистрибутива до нового, хотя для последнего действия предназначена команда apt-get dist-upgrade; см. подробности в разделе Обновление нового выпуска, раздел 3.5.
Эту команду полезно запускать с опцией -u. Эта опция заставляет
APT показывать полный список пакетов, предназначенных для обновления. Без нее
вы будете обновляться вслепую. APT последние версии каждого из пакетов и
установит их в правильном порядке. Поэтому очень важно запустить перед этим
apt-get update. См. раздел Обновление списка
доступных пакетов, раздел 3.1. Вот пример:
[root]@[/] # apt-get -u upgrade
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages have been kept back
cpp gcc lilo
The following packages will be upgraded
adduser ae apt autoconf debhelper dpkg-dev esound esound-common ftp indent
ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev
libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0
libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc
29 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 5055B/5055kB of archives. After unpacking 1161kB will be used.
Do you want to continue? [Y/n]
Процесс очень прост. Обратите внимание, что в первых строках apt-get говорит, что некоторые пакеты были kept back. Это означает, что новые версии некоторых пакетов не будут установлены по некоторым причинам. Возможными причинами могут быть битые зависимости (пакет, от которого он зависит не доступен для скачивания) или новые зависимости (пакет последней версии зависит от новых пакетов).
В первом случае прозрачного решения не существует. Для второго случая, должна помочь команда apt-get install для указанного в вопросе пакета, так ка это приведет к скачиванию зависимости. Даже более прозрачное решение сосотоит в использовании dist-upgrade. См. раздел Обновление нового выпуска, раздел 3.5.
Эта возможность APT позволяет вам обновлять всю систему Debian за один прием, или через Internet, или с нового CD (купленного или скачанного в виде образа ISO).
Это действие также используется при изменении отношений между установленными пакетами. Команда apt-get upgrade оставит эти пакеты нетронутыми (kept back).
Например, предположим, что вы используете выпуск 0 стабильной версии Debian и
вы покупаете CD с выпуском 3. Вы можете использовать APT для обновления вашей
системы с этого нового CD. Для этого используйте команду
apt-cdrom
(см. раздел Добавление CD-ROM в файл sources.list, раздел
2.4) для добавления CD в ваш файл /etc/apt/sources.list и
запустите apt-get dist-upgrade.
Важно иметь в виду, что APT всегда высматривает новейшие версии пакетов. Поэтому, если в вашем /etc/apt/sources.list были указаны архивы, которые имеют более новые версии пакетов, чем версия этого CD, то APT должен скачивать пакеты с них.
В примере из раздела Обновление пакетов, раздел 3.4,
мы видели, что некоторые пакеты были kept back. Сейчас мы решим
эту проблему с помощью действия dist-upgrade:
[root]@[/] # apt-get -u dist-upgrade
Reading Package Lists... Done
Building Dependency Tree... Done
Calculating Upgrade... Done
The following NEW packages will be installed:
cpp-2.95 cron exim gcc-2.95 libident libopenldap-runtime libopenldap1
libpcre2 logrotate mailx
The following packages have been kept back
lilo
The following packages will be upgraded
adduser ae apt autoconf cpp debhelper dpkg-dev esound esound-common ftp gcc
indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0
libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev
liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit
procps psmisc
31 packages upgraded, 10 newly installed, 0 to remove and 1 not upgraded.
Need to get 0B/7098kB of archives. After unpacking 3118kB will be used.
Do you want to continue? [Y/n]
Обратите внимание, что сейчас пакеты были обновлены, а также установлены новые
пакеты (новые зависимости пакетов). Обратите внимание также, что lilo
по-прежнему остается kept back. Вероятно здесь более серьезная
причина, чем новая зависимость. Мы можем ее найти командой:
[root]@[/] # apt-get -u install lilo
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2
logrotate mailx
The following packages will be REMOVED:
debconf-tiny
The following NEW packages will be installed:
cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2
logrotate mailx
The following packages will be upgraded
lilo
1 packages upgraded, 9 newly installed, 1 to remove and 31 not upgraded.
Need to get 225kB/1179kB of archives. After unpacking 2659kB will be used.
Do you want to continue? [Y/n]
Как было указано выше, lilo имеет новый конфликт с пакетом
debconf-tiny
, который означает, что он не может быть установлен
(или обновлен) без удаления debconf-tiny.
Чтобы узнать как сохраняется или удаляется пакет, вы можете использовать:
# apt-get -o Debug::pkgProblemResolver=yes dist-upgrade
Reading Package Lists... Done
Building Dependency Tree... Done
Calculating Upgrade... Starting
Starting 2
Investigating python1.5
Package python1.5 has broken dep on python1.5-base
Considering python1.5-base 0 as a solution to python1.5 0
Holding Back python1.5 rather than change python1.5-base
Investigating python1.5-dev
Package python1.5-dev has broken dep on python1.5
Considering python1.5 0 as a solution to python1.5-dev 0
Holding Back python1.5-dev rather than change python1.5
Try to Re-Instate python1.5-dev
Done
Done
The following packages have been kept back
gs python1.5-dev
0 packages upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
Таким образом легко заметить, что пакет python1.5-dev не может быть установлен из-за неудовлетворительной зависимости: python1.5.
dselect
- это программа, которая помогает пользователям выбирать
пакеты Debian для инсталляции. Он выглядит в чем-то громоздким и даже
раздражает, но со временем вы можете привыкнуть к его консольному, основанному
на ncurses интерфейсу.
Одной из особенностью dselect является ее умение работать с "рекомендуемыми" и "предлагаемыми" пакетами при установке выбранных пакетов. Чтобы использовать эту программу, запустите `dselect' от имени root. Выберите в качестве метода доступа 'apt'. В действительности в этом нет необходимости, но если вы не используете CD-ROM и хотите скачивать пакеты из Интернет, то это наилучший способ для dselect.
Чтобы достичь более глубоких знаний по эксплуатации dselect, прочтите
документацию по dselect на странице Debian
http://www.debian.org/doc/ddp
.
Когда закончите выбирать в dselect, используйте команду:
apt-get -u dselect-upgrade
как в нижеприведенном примере:
[root]@[/] # apt-get -u dselect-upgrade
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
lbxproxy
The following NEW packages will be installed:
bonobo console-tools-libs cpp-3.0 enscript expat fingerd gcc-3.0
gcc-3.0-base icepref klogd libdigest-md5-perl libfnlib0 libft-perl
libgc5-dev libgcc300 libhtml-clean-perl libltdl0-dev libsasl-modules
libstdc++3.0 metamail nethack proftpd-doc psfontmgr python-newt talk tidy
util-linux-locales vacation xbill xplanet-images
The following packages will be upgraded
debian-policy
1 packages upgraded, 30 newly installed, 1 to remove and 0 not upgraded.
Need to get 7140kB of archives. After unpacking 16.3MB will be used.
Do you want to continue? [Y/n]
Сравните это с результатом работы команды apt-get dist-upgrade на той же
системе:
[root]@[/] # apt-get -u dist-upgrade
Reading Package Lists... Done
Building Dependency Tree... Done
Calculating Upgrade... Done
The following packages will be upgraded
debian-policy
1 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 421kB of archives. After unpacking 25.6kB will be freed.
Do you want to continue? [Y/n]
Обратите внимание на то, что многие из вышеуказанных пакетов были установлены потому, что другие пакеты "предлагали" или "рекомендовали" их. Другие были установлены или удалены (в случае, например, lbxproxy) в результате сделанного нами выбора во время работы в dselect. Dselect может быть мощным инструментом, когда используется вместе с APT.
Люди часто используют тестируемый дистрибутив, потому что он более сьабилен, чем нестабильный и более новый, чем стабильный. Однако пользователи, которые хотят работать с последними версиями некоторых пакетов, но при этом не доверяют им из-за боязни дестабилизировать всю систему, имеют возможность работать со смешанными тестируемыми/стабильными системами. Или по-другому - более консервативным пользователям возможно нужна смешанная стабильная/тестируемая система.
Чтобы этого добиться, поместите следующую строку в
/etc/apt/apt.conf
:
APT::Default-Release "testing";
Затем, при установке пакетов из нестабильного дистрибутива, просто используйте
ключ -t:
# apt-get -t unstable install имя_пакета
Не забывайте, что для того, чтобы использовать пакеты этой версии Debian, нужно
внести дополнения в файл /etc/apt/sources.list
. Применительно к
нашему примеру, нам нужно добавить строки источников для дистрибутива
unstable после аналогичных строк для дистрибутива
testing.
apt-show-versions
обеспечивает безопасный путь обновления системы
для пользователей смешанных дистрибутивов, без получения лишних частей
нестабильного дистрибутива, чем это требуется в действительности. К примеру,
можно обновить только нестабильные пакеты командой:
# apt-get install `apt-show-versions -u -b | grep unstable`
Могло случиться так, что вы изменяете что-то в пакете и не имеете времени или не хотите портировать эти изменения в новую версию программы. Или, к примеру, вы может быть просто собиретесь обновить ваш дистрибутив Debian до версии 3.0, на при этом хотите по-прежнему использовать некоторые пакеты из Debian 2.2. Вы можете "приколоть" (pin) установленные версии пакетов так, чтобы они не обновлялись.
Это делается просто. Вам всего лишь надо отредактировать файл /etc/apt/preferences.
Его формат прост:
Package: <package>
Pin: <pin definition>
Pin-Priority: <pin's priority>
Например, чтобы предотвратить модификацию пакета sylpheed
версии
0.4.99, которую я поправил на предмет "reply-to-list", я ввел
следующее:
Package: sylpheed
Pin: version 0.4.99*
Обратите внимание, что я использовал * (звездочка). Это "маска"; она означает, что я хочу "приколоть" (pin) все версии, начиная с 0.4.99. Это нужно потому, что в Debian-версиях пакетов в номере версии присутствует "номер редакции Debian", а я не хочу отменять установку этих редакций. Так, например, версии 0.4.99-1 и 0.4.99-10 будут установлены, как только станут доступны. Обратите внимание, что если вы внесли свои изменения в пакет, то такой способ вам не подойдет.
Поле Pin-Priority необязательно; если оно не указано, то по умолчанию оно равно 989.
Давайте рассмотрим работу приоритетов. Приоритет менее 0 указывает, что пакет никогда не должен устанавливаться. Приоритет от 0 до 100 означает пакеты, которые не установлены и которые не имеют доступных версий. Они не входят в процесс выбора версий. Приоритет 100 назначается установленному пакету - для замены установленной версии пакета другой версией, заменяющий пакет должен иметь приоритет выше 100.
Приоритеты выше 100 указывают, что пакет должен быть установлен. Обычно, установленная версия пакета изменяется только при обновлении до новой версии. Любые приоритеты от 100 до 1000 (включительно) определяют это типичное поведение. Пакет с таким приоритетом не будет даунгрейдиться до доступной версии с меньшим номером версии. Для примера, если у меня установлен sylpheed 0.5.3 и определен pin на sylpheed 0.4.99 с приоритетом 999, то пакет 0.4.99 не будт установлен из-за значения pin. Чтобы можно было установить пакет меньшей версии, значение pin должно иметь приоритет выше 1000.
pin может быть определен для version, release или origin пакета.
При указании pin для версий, как мы видели, для указания нескольких версий за один раз поддерживаются литеральные номера версий, равно как и маски.
Опция release зависит от файла Release из репозитория APT или с CD. Эта опция может не использоваться вовсе, если вы используете репозитории пакетов, которые не обеспечивают этот файл. Вы можете увидеть содержимое файлов Release, которые вы используете в каталоге /var/lib/apt/lists/. Параметры для опции release: a (archive -- архив), c (components -- компоненты), v (version -- версия), o (origin -- источник) и l (label -- метка).
Пример:
Package: *
Pin: release v=2.2*,a=stable,c=main,o=Debian,l=Debian
Pin-Priority: 1001
В этом примере, мы выбираем версию 2.2* Debian (которая может быть 2.2r2, 2.2r3
-- это "точечные выпуски", которые обычно включают исправления
безопасности и другие важные обновления), стабильный репозиторий,
раздел main (как противовес contrib или
non-free) и источник и метку Debian. Источник (o=) определяет,
кто создал данный файл Release, метка (l=) определяет имя дистрибутива: Debian
для самого Debian и Progeny для дистрибутива Progeny, например. Пример файла
Release:
$ cat /var/lib/apt/lists/ftp.debian.org.br_debian_dists_potato_main_binary-i386_Release
Archive: stable
Version: 2.2r3
Component: main
Origin: Debian
Label: Debian
Architecture: i386
APT HOWTO
1.8.2 - Ноябрь 2002
kov@debian.org