3.1. Введение
Дистрибутив Debian известен своей исключительной стабильностью и надежностью, а также замечательной системой управления пакетами/разрешения зависимостей apt. Установка новых приложений осуществляется очень просто:
# apt-get программа |
Выборка и установка библиотек, от которых зависит работа приложения, производятся автоматически. Apt — изощренная, интеллектуальная программа, а официальный архив программного обеспечения Debian поддерживает жесткие стандарты качества пакетов. Официальный программный архив Debian содержит более 12 000 программ; это больше, чем у любой другой платформы.
Dpkg —аналог RPM для Debian, обладающий дополнительными возможностями; он также выполняет базовую настройку конфигурации. Например, при установке Postfix dpkg запрашивает кое-какую информацию о системе, устанавливает стартовые и конфигурационные файлы и инициализирует программу.
Debian существует в трех разных версиях: стабильной, тестовой и нестабильной (также существует четвертая версия для искателей приключений — экспериментальная). Они обозначаются терминами Woody, Sarge и Sid. Версия Woody чрезвычайно консервативна. Пакеты допускаются в версию Woody только после обширной проверки зависимостей и исправления всех дефектов безопасности. Версии Sarge и Sid содержат новые пакеты, не прошедшие столь подробного тестирования. «Заплатки» безопасности быстро выпускаются для Woody и весьма нерегулярно — для Sarge и Sid.
Какую версию использовать? Наиболее очевидный выбор — стабильная версия (Woody), надежная, как скала. Тем не менее за надежность приходится расплачиваться: программы в Woody на месяцы, а иногда и на годы отстают от даты официального выпуска. Woody идеально подходит для серверов. Для настольных систем и рабочих станций более актуальны тестовая версия (Sarge) и нестабильная версия (Sid). И несмотря на устрашающие названия («тестовая», «нестабильная»), они работают вполне нормально.
Кодовые обозначения выглядят симпатично, но не стоит использовать их в конфигурационных файлах. Нестабильной версии всегда будет соответствовать обозначение Sid, но Woody и Sarge не всегда будут связываться со стабильной и тестовой версиями — когда-нибудь текущая тестовая версия Sarge будет повышена до статуса стабильной, а текущая версия Woody уйдет на покой. При грамотном сопровождении система Debian постоянно обновляется без переустановки, поэтому не стоит нарушать ее работу использованием кодовых обозначений, которые со временем изменятся.
Далее перечислены кодовые названия версий. Все они позаимствованы из фильма «История игрушек»:
- Buzz — Базз Световой Год, космонавт (1.1);
- Rex — тираннозавр Рекс (1.2);
- Bo — Бо Пип (1.3.x);
- Hamm — Хэм, свинья-копилка (2.0);
- Slink — собака Слинки (2.1);
- Potato — мистер Картофельная Голова (2.2).
А теперь версии 3.x:
- Woody — ковбой (стабильная версия);
- Sarge — командир армии зеленых солдатиков (тестовая версия);
- Sid — испорченный мальчишка, ломающий игрушки (нестабильная версия).
3.13. Разрешение конфликтов зависимостей в Debian
Проблема
Программа не устанавливается из-за проблем с зависимостями, или команда apt-get dist-upgrade оставляет пакеты, которые нужно удалить.
Решение
Существует несколько команд, которые могут пригодиться для решения этой задачи; в этом разделе они перечисляются в том порядке, в котором их стоит попробовать.
Допустим, проблемы возникли с пакетом libpam-modules, который не желает обновляться:
# apt-get install libpam-modules ... The following packages have unmet dependencies: libpam-modules: Depends: libdb3 (>=3.2.9-19.1) but 3.2.9-19 is to be installed E: Broken packages |
Если вы работаете в смешанной системе, для начала попробуйте указать версию:
# apt-get install -t stable libpam-modules |
Если это не помогает или система не является смешанной, попробуйте воспользоваться системой разрешения конфликтов Debian:
# apt-get -f install |
Затем выполните команду:
# dpkg --configure -a |
И снова повторите команду:
# apt-get -f install |
Если будет получен следующий ответ, значит, попытка завершилась неудачей:
Reading Package Lists... Done Building Dependency Tree... Done 0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded. |
Теперь проверьте, что произойдет при удалении существующего пакета libpam-modules:
# apt-get remove --dry-run libpam-modules Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: adduser adminmenu apache at base-config courier-imap courier-imap-ssl courier-pop courier-pop-ssl cron cupsys cupsys-driver-gimpprint dict-elements dict-foldoc dict-gcide dict-jargon dict-vera dict-wn dictd gdm2... .... WARNING: The following essential packages will be removed This should NOT be done unless you know exactly what you are doing! login libpam-modules (due to login) |
В данном случае исправление конфликтов зависимостей потребует едва ли не полной перестройки системы. Чаще проблемы ограничиваются несколькими пакетами. В этом случае начинайте удалять наименее важные из них, пока конфликты зависимостей не будут разрешены, а затем переустановите все пакеты, которые вам нужны.
Если apt-get -u dist-upgrage отображает какие-либо задержанные (held) пакеты, от них лучше избавиться. Пакеты удерживаются из-за конфликтов зависимостей, которые не удается разрешить apt. Попробуйте воспользоваться следующей командой для поиска и исправления конфликтов:
# apt-get -o Debug::pkgProblemResolver=yes dist-upgrade |
Если исправить конфликты не удается, команда завершается с сообщением
0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded. |
Удаляйте held-пакеты один за одним, каждый раз запуская dist-upgrade, пока не останется ни одного задержанного пакета. Затем установите заново все необходимые пакеты. Не забудьте использовать ключ —dry-run, чтобы заранее знать обо всех последствиях:
# apt-get remove --dry-run libsdl-perl |
Комментарий
В «монолитных» системах подобные конфликты версий встречаются редко. Пользователи смешанных систем сталкиваются с ними чаще. Чтобы предотвратить их, будьте чрезвычайно осмотрительны при выборе устанавливаемых программ — при первой установке Debian потратьте немного времени и выберите каждый необходимый пакет.
3.4. Установка пакетов в системе на базе Debian
Проблема
Все архивы программного обеспечения, компакт-диски и т. д. не принесут никакой пользы, если вы не умеете устанавливать программы. Итак, вы хотите знать, как установить новый пакет в Debian.
Решение
Воспользуйтесь командой apt-get install:
# apt-get install tuxkart |
Установка пакета с перезаписью файлов:
# apt-get install --reinstall tuxkart |
Чтобы установить сразу несколько программ, перечислите их, разделяя пробелами:
# apt-get install tuxkart gltron frozen-bubble tuxracer nethack galaga |
Загрузка программ без установки или распаковки:
# apt-get -d install tuxkart |
Чтобы протестировать команду перед выполнением, присоедините к строке ключ —dry-run:
# apt-get install tuxkart gltron frozen-bubble tuxracer nethack galaga --dry-run |
Комментарий
Для определения имен пакетов используйте страницу поиска Debian по адресу http://www.debian.org/distrib/packages/. Имена пакетов Debian часто отличаются от своих аналогов из RPM. Например, программа CyrusSASL оформляется в пакет sasl-2.x.rpm, а в Debian она разбивается на несколько пакетов с именами libsasl-*.
Не забудьте выполнить команду apt-get update после изменения /etc/apt/sources.list и периодически запускайте ее, чтобы получать обновленную информацию из архивов пакетов.
apt-get загружает и устанавливает (а при необходимости и удаляет) все пакеты, необходимые для разрешения всех зависимостей.
3.7. Обновление пакетов в Debian
Проблема
Требуется обновить пакет в системе Debian, потому что новая версия обладает расширенными возможностями или в ней исправлены ошибки.
Решение
Воспользуйтесь командой apt-get install:
# apt-get install gltron Reading Package Lists... Done Building Dependency Tree... Done The following packages will be upgraded: gltron 1 upgraded, 0 newly installed, 0 to remove and 78 not upgraded. Need to get 89.5kB of archives. After unpacking 266kB of additional disk space will be used. Get:1 ftp://ftp.debian.org sid/main gltron 3.53 Fetched 89.5kB in 5s (16.8kB/s) Preconfiguring packages... (Reading database... 141286 files and directories currently installed.) Preparing to replace adduser 3.52 (using .../archives/adduser_3.53_all.deb)... Unpacking replacement gltron... Setting up adduser (3.53)... # |
Обновление нескольких пакетов:
# apt-get install tuxkart gltron frozen-bubble tuxracer nethack galaga |
Комментарий
Команды обновления отдельных пакетов не существует. Команда apt-get install всегда устанавливает последнюю версию пакета.
3.11. Поиск программ, установленных в системе Debian
Проблема
Требуется узнать, какие пакеты установлены в системе, к какому пакету относятся те или иные файлы и что находится в отдельных пакетах.
Решение
Воспользуйтесь средствами обработки запросов dpkg.
Следующая команда выводит список всех установленных пакетов и направляет его в файл:
$ dpkg -l | tee dpkglist |
Поиск всех пакетов, удовлетворяющих критерию поиска, и вывод информации об их состоянии:
$ dpkg -l '*gnome*' Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed |/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad) ||/ Name Version Description +++-============================================================== pn gnome <none> (no description available) un gnome-about <none> (no description available) ii gnome-applets 2.4.2-1 Various applets for GNOME 2 panel rc gnome-bin 1.4.2-18 Miscellaneous binaries used by GNOME |
Поиск установленных пакетов, удовлетворяющих критерию поиска:
$ dpkg -l | grep gnome |
Вывод списка файлов, входящих в пакет:
$ dpkg -L gnome-applets . /usr/share /usr/share/lintian /usr/share/lintian/overrides /usr/share/lintian/overrides/gnome-applets ... |
Следующая команда определяет, к какому пакету относится файл:
$ dpkg -S boing.wav tuxkart-data: /usr/share/games/tuxkart/wavs/boing.wav |
Вывод полной информации о пакете:
$ dpkg -s kpoker Package: kpoker Status: install ok installed Priority: optional Section: games Installed-Size: 428 Maintainer: Daniel Schepler <[email protected]> Source: kdegames Version: 4:3.1.5-1 .... |
Комментарий
Таблица, выводимая командой dpkg -l, выглядит довольно загадочно, поэтому я приведу расшифровку.
$ dpkg -l gnome* Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed |/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad) ||/ Name Version Description +++-============================================================== pn gnome <none> (no description available) un gnome-about <none> (no description available) ii gnome-applets 2.4.2-1 Various applets for GNOME 2 panel rc gnome-bin 1.4.2-18 Miscellaneous binaries used by GNOME |
В строке pn gnome поднимитесь от буквы p наверх по «стрелке». Она приведет вас к строке Desired=Unknown/Install/Remove/Purge/Hold с расшифровками первого символа (Purge в данном случае).
От следующего столбца, n, стрелка ведет к строке Status. По ней можно определить, что символ n означает Not/Installed.
В третьем столбце отображается код ошибки. В нашем случае он пуст (и хорошо). Как указано в конце строки, любые символы верхнего регистра в столбцах Status и Err ни к чему хорошему не приведут.
Получаем: пакет gnome когда-то был установлен в системе, но потом он был удален.
Код un означает, что пакет никогда не устанавливался.
Код ii означает, что пакет установлен.
Код rc означает, что пакет был установлен, а затем удален, но после него остались конфигурационные файлы. Состав этих файлов определяется легко:
$ dpkg -L gnome-bin /etc/logcheck/ignore.d.server/gnome-bin /etc/logcheck/ignore.d.workstation/gnome-bin |
3.10. Создание смешанной системы Debian
Проблема
Требуется установить базовую систему в стабильной версии, а также некоторые программы из тестовой версии. Другими словами, вы хотите иметь абсолютно надежную базовую систему, но в некоторых программах вам необходимы дополнительные возможности, присутствующие только в более новых версиях.
Решение
Отредактируйте файл /etc/apt/sources.list так, чтобы в нем содержались ссылки на источники как для стабильной, так и тестовой версий (за информацией о файле sources.list обращайтесь к разделу 3.2. Затем отредактируйте /etc/apt/apt.conf и задайте версию по умолчанию (в нашем примере это стабильная версия). Затем при установке или обновлении пакетов нужная версия выбирается при помощи флага -t.
Отредактированный (или созданный) файл /etc/apt/apt.conf должен выглядеть примерно так:
// Версия системы по умолчанию. // Допустимые значения: woody, sarge, sid // (или stable, testing, unstable) APT::Default-Release "stable"; |
Далее производится обновление списков пакетов:
# apt-get update |
Сейчас по умолчанию используется стабильная версия, поэтому указывать ее при установке пакетов не обязательно. Следующая команда устанавливает Tuxkart из стабильной версии:
# apt-get install tuxkart |
Для установки пакета из тестовой версии (Sarge) воспользуйтесь ключом -t:
# apt-get -t testing install tuxkart |
Чтобы гарантированно получить конкретную версию, укажите номер пакета:
# apt-get install tuxkart=0.2.0-3 |
Комментарий
Сопровождение смешанной системы требует осторожности, особенно если в качестве базовой версии используется Woody. По мере «старения» Woody могут возникнуть проблемы двоичной совместимости с Sarge/Sid
Различия между ключевыми системными файлами (такими как libc и gcc) могут стать настолько серьезными, что пакеты Sarge/Sid не будут устанавливаться в Woody. Если это произойдет, попробуйте построить пакеты по исходным текстам (см. раздел 3.6).
3.14. Создание локального архива Debian
Проблема
Требуется создать в локальной сети хранилище пакетов для общего пользователя. Локальный архив особенно полезен в том случае, если пользователи сети совместно используют низкоскоростное подключение к Интернету. Вместо того чтобы загружать файлы из Интернет-архивов, рабочие станции Debian загружают их из локального архива.
Решение
Воспользуйтесь программой apt-proxy:
# apt-get proxy |
Apt-proxy запускается автоматически после установки.
Теперь отредактируйте секцию add_backend/debian/ файла /etc/apt-proxy/apt-proxy.conf так, чтобы она содержала ссылки на географически близкие зеркала (список зеркал с пакетами находится по адресу http://www.debian.org/mirror/list).
Затем отредактируйте файл /etc/apt/sources.list на клиентских компьютерах так, чтобы он содержал ссылку на сервер apt-proxy. По умолчанию используется порт 9999:
deb http://ip-or-hostname:9999/main stable main contrib non-free deb http://ip-or-hostname:9999/non-US stable/non-US main contrib non-free deb http://ip-or-hostname:9999/security stable/updates main contrib non-free |
Запустите apt-get update на клиентских машинах, и локальный архив начнет работать. Каждый раз, когда клиентский компьютер в локальной сети устанавливает программу, эта программа будет кэшироваться на сервере apt-proxy. Последующие запросы того же пакета будут обслуживаться из локального кэша.
Комментарий
Большинству параметров в файле /etc/apt-proxy/apt-proxy.conf, кроме источников пакетов, можно оставить значения по умолчанию. Исключение составляет частота «обновлений», определяющая периодичность загрузки списка пакетов. По умолчанию соответствующая секция выглядит так:
# Максимальная частота обновлений (в минутах) # Высокие значения снижают нагрузку. BACKEND_FREQ=240 |
Я обычно устанавливаю значение этого параметра равным 1440; ежедневной проверки вполне достаточно. Действительно важные события происходят не так часто. Проверку следует производить хотя бы раз в день главным образом для своевременной установки обновлений безопасности.
См. также
apt-proxy(8), apt-proxy.conf(5); официальный список зеркал Debian (http://www.debian.org/mirror/); домашняя страница apt-proxy (http://apt-proxy.sourceforge.net/).
3.6. Установка программ в Debian по исходным текстам
Проблема
Требуется откомпилировать программу в системе (вместо установки двоичных файлов Debian). Возможно, вы хотите отредактировать код программы или запустить пакет из тестовой или нестабильной версии в стабильной (перекомпиляция обеспечивает построение правильных зависимостей).
Решение
Воспользуйтесь командой apt-get source и содействием dpkg.
Для начала загрузите заголовки и библиотеки, от которых зависит устанавливаемая программа, в каталог, в котором будет строиться пакет:
# cd /usr/src # apt-get build-dep tuxkart |
Загрузка и сборка пакета:
# apt-get -b source tuxkart |
Установка пакета:
# dpkg -i tuxkart.deb |
Комментарий
Построение пакетов .deb по исходным текстам чаще всего выполняется с целью использования пакетов из тестовой или нестабильной версии в стабильной. Перекомпиляция настраивает зависимости для стабильной версии.
Если потребуется установить программу, отсутствующую в архивах Debian, постройте .deb при помощи CheckInstall — утилиты, создающей пакеты RPM, .deb и Slackware (см. раздел 4.5).