- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF144:Linux Training
Материал из Linuxformat.
- Тренинги Linux
Содержание |
Майк Сондерс ведет тренинги Linux
Тренинги Linux от Майка Сондерса |
---|
|
- Часть 4: На этом занятии мы поговорим о том, с чем приходится иметь дело всем администраторам: управление пакетами. Читайте дальше, чтобы узнать, как управлять пакетами RPM и Deb.
Установить программу в Linux – пара пустяков, верно? Просто запускаете любимый графический браузер, ставите галочки напротив нужных приложений, и они волшебным образом загружаются из Интернета и устанавливаются. Большинству пользователей этого и достаточно; но тем, кто намерен когда-нибудь стать настоящим сисадмином, нужно знать приемы управления пакетами в командной строке дотошно. (Заметьте: подробный рассказ о комадной строке ждет нас позже, сейчас мы сосредоточимся лишь на нескольких утилитах.)
Если вы новичок в мире Linux, стоит сказать о том, что такое пакет. Вообще-то это сжатый файл, который распаковывается в несколько файлов и каталогов. Многие пакеты содержат программы, некоторые – рисунки и документацию. Большие проекты (типа KDE) разбиваются создателями дистрибутивов на несколько пакетов, чтобы при исправлении ошибки в одной маленькой программе вам не пришлось повторно загружать весь рабочий стол.
Но в целом пакеты устроены сложнее обычных архивов. Например, они могут зависеть друг от друга или содержать скрипты, запускаемые при установке и удалении пакетов. На создание хорошего пакета уходит масса усилий, зато это упрощает жизнь пользователям.
Раздел 1: Способ Debian
Начнем с пакетов Deb, изначально появившихся в проекте Debian и ныне используемых во многих дистрибутивах на основе Debian – например, Ubuntu. Вот имя файла обычного пакета Debian: nano_2.2.4-1_i386.deb
Оно состоит из пяти частей. Первая – имя приложения, за которым следует номер версии (2.2.4). Следующая цифра -1 – это номер версии модификации пакета внутри дистрибутива, отдельный от номера версии приложения. Например, если пакет собран некорректно или в нем отсутствует какая-то документация, при повторной сборке это число будет увеличено до 2, 3 и т. д. Далее идет i386, указывающее архитектуру процессора, для которых предназначен пакет, и, наконец, суффикс .deb.
Пусть вы работаете в Debian 6 и у вас есть этот пакет Nano, который вы загрузили из Интернета и поместили в каталог home. Откройте терминал, выбрав пункт меню Приложения > Стандартные > Терминал (Applications > Accessories > Terminal), и введите su, чтобы переключиться на суперпользователя (администратора). Для установки пакета введите команду:
dpkg -i nano_2.2.4-1_i386.deb
Если не возникнет сложностей (например, у вас уже стоит более новая версия Nano или нет библиотеки, от которой он зависит), пакет установится успешно, и вы сможете запустить программу командой nano. Есть удобная утилита для установки одного или более ранее загруженных пакетов – Dpkg: если нужно установить несколько пакетов, скомандуйте dpkg -i *.deb/ (звездочка – особый символ: здесь она означает «все файлы с расширением .deb»).
Удалить пакет можно двумя способами. Команда:
dpkg -r nano
удалит программу, но оставит нетронутыми все файлы настройки (в данном случае, /etc/nanorc). Это полезно системным администраторам, которые работают с настройкой – можно избавиться от пакета, заменив его более пригодной версией, собранной из исходников, но сохранив файл настройки. Если вы хотите удалить все, выполните команду dpkg --purge nano.
Предварительно загруженные пакеты – большое удобство, но более гибкая альтернатива – apt-get. APT – Advanced Package Tool [продвинутая утилита управления пакетами], и ее возможности выходят за рамки простой установки и удаления пакетов. Интереснее всего то, что apt-get может загружать пакеты (и их зависимости) из Интернета. Скажем, вам нужен редактор Vim, но под рукой нет соответствующих пакетов Deb. Введите
apt-get install vim
APT добудет в Интернете должные пакеты для текущей версии дистрибутива и установит их. Перед началом загрузки дается шанс подтвердить операцию:
Требуется получить 7,005 kB архивов. Эта операция требует 27.6 MB дискового пространства. Хотите продолжать [Y/N]?
Сообщение говорит о последствиях этой операции для пространства на жестком диске (указан размер загружаемого пакета и размер распакованных файлов и каталогов). Для продолжения введите Y.
Откуда APT знает, где искать пакеты? Это может показаться какой-то черной магией, но в основе тут лежит четкая схема – репозитории. Репозиторий, по сути, представляет собой размещенный в сети структурированный набор пакетов для конкретной версии дистрибутива Linux. Работа этих пакетов в данной версии дистрибутива была проверена, и все необходимые зависимости включены. Репозитории могут представлять собой огромные архивы с тысячами пакетов – как репозиторий Debian – или небольшие частные наборы пакетов, скрытые в заводях Интернета.
Так как репозитории находятся в Интернете, для них можно задать URL-адреса. Загляните в файл /etc/apt/sources.list – вы увидите там строки наподобие такой:
После установки программ командой apt-get install загруженные пакеты сохраняются для повторного использования в кэше в каталоге /var/cache/apt/archives. При установке больших пакетов вроде KDE он может изрядно разбухнуть; для его очистки скомандуйте apt-get clean.
deb http://ftp.uk.debian.org/debian/ squeeze main
Здесь deb сообщает APT, что приведенный адрес является источником Deb-пакетов; далее следует сам адрес, а за ним – идентификатор версии дистрибутива, в данном случае squeeze, что означает Debian 6. Завершается строка категорией пакетов, к которым вы хотите получить доступ. Например, в Debian предусмотрены основная категория (main) – для пакетов, отвечающих принятым в дистрибутиве критериям свободы ПО, и категория «несвободные пакеты» (non-free) для менее открытых программ. Это основной источник программ, которые могут вам понадобиться, но есть и другой репозиторий – для обновлений с исправлениями ошибок и улучшениями безопасности. Его можно найти здесь:
deb http://security.debian.org/ squeeze/updates main
Все больше производителей ПО для Linux обзаводятся собственными репозиториями наряду с официальными. Если перед установкой пакета у вас появилась строка, похожая на приведенную выше, вставьте ее в файл /etc/apt/sources.list и сохраните изменения. APT кэширует информацию о пакетах для быстрого поиска, поэтому не сможет получить информацию о новых пакетах, пока вы не велите обновить кэш:
apt-get update
После этого вы сможете установить самые последние версии пакетов. (Чтобы установить все обновленные версии пакетов сразу, воспользуйтесь командой apt-get upgrade.) По локальному кэшу можно осуществлять поиск с помощью команды apt-cache с подходящим аргументом. Например:
apt-cache search chess
Эта команда выведет список всех доступных (присутствующих в репозиториях) пакетов со словом chess в названии или описании.
APT – невероятно мощная система, и ее функционал распределен среди нескольких утилит (введя apt и нажав Tab, вы увидите возможные варианты). Большая часть ее функционала сосредоточена в aptitude – это программа на базе Ncurses, которая предлагает возможности графического интерфейса, такие как меню, диалоговые окна и т. д., в текстовом режиме. В ней даже есть встроенный клон Minesweeper!
Список пакетов можно просмотреть с помощью клавиш управления курсором и Enter, и доступные сочетания клавиш приведены вверху. Для появления меню нажмите Ctrl+T. Aptitude отлично поможет, если вы зашли на удаленный компьютер по SSH и хотите выполнить некие действия, но не помните команды в точности: просто найдите ее в меню.
Ненадолго вернемся к Dpkg. Кроме установки и удаления пакетов, Dpkg умеет делать запросы к базе данных установленных пакетов. Например, так выводится список файлов, входящих в пакет nano:
dpkg -L nano
У пакетов Debian есть статус, отражающий степень их интеграции с системой. Это сложная тема, и она выходит за рамки LPI 101, но если коротко – пакет может быть полностью установлен, установлен наполовину или ожидать установки определенных параметров настройки. Также он может быть распакован (файлы уже извлечены, но установочные скрипты еще не запущены). Введите команду dpkg -l nano (на сей раз с маленькой буквой “L”), и увидите таблицу с информацией о пакете и немного простой текстовой графики, указывающей на два столбца ‘ii’ в начале. Это означает, что администратор хочет установить пакет (то есть он не будет удален при следующих обновлениях) и что фактически пакет установлен.
Для получения более подробной информации о пакете введите команду
dpkg -s nano
Она предоставит все, что следует знать о пакете: его версию, размер, архитектуру, зависимости и даже электронный адрес создателя пакета на случай появления проблем (хотя зачастую лучше обратиться к средствам отслеживания ошибок в составе дистрибутива). Здесь интересна строка provides [предоставление]. Nano, например, предоставляет возможность ‘editor’ [редактор], намеренно обобщенную: иногда утилитам командной строки требуется обратиться к редактору – неважно, к какому, и было бы глупо требовать конкретное имя редактора, скажем, Emacs или Vim. Вместо этого утилиты проверяют наличие пакета типа «редактор», и Nano их выручит.
Другая полезная команда – dpkg -S с именем файла. Она ищет файлы с указанным именем и говорит, в каком пакете они находятся. Например, команда dpkg -S vmlinuz найдет в системе файл ядра vmlinuz и покажет, из какого пакета он берется при установке.
Наконец, пара слов о настройке пакетов. Как вы знаете, у многих программ есть текстовые файлы настройки в каталоге /etc, допускающие правку вручную. Все это прекрасно, но многие пакеты Deb стараются упростить задачи администратора, предоставляя определенный уровень автоматизации. Например, при установке через apt-get почтового сервера Postfix появляется окно мастера, который проведет вас по этапам установки – и вам не придется изучать формат соответствующего файла настройки. Если вам когда-либо потребуется изменить настройки и вы решите сделать это способом Debian, просто скомандуйте
dpkg-reconfigure postfix
Раздел 2: RPM
Система, вступившая в жизнь как Red Hat Package Manager (Менеджер пакетов Red Hat), сегодня приняла рекурсивную аббревиатуру (RPM Package Manager), чтобы подчеркнуть нейтралитет по отношению к дистрибутивам. RPM применяется огромным количеством дистрибутивов, и, вероятно, формат просуществует еще долго – особенно будучи предпочтительным форматом пакетов Базы стандартов Linux [Linux Standard Base]. В этом руководстве мы пользуемся CentOS 5, высоконадежной поддерживаемой сообществом сборкой Red Hat Enterprise Linux.
Для базового управления пакетами в RPM используется, как вы могли ожидать, команда rpm. Она позволяет работать с загруженными пакетами. Например, вы загрузили пакет для NASM:
rpm -Uvh nasm-0.98.39-1.i386.rpm
Вы видите, что структура имени файла – такая же, как и у Deb-пакетов: сначала имя пакета, затем версия (в данном случае 0.98.39), а далее собственная версия куратора пакетов (1). За ней следуют архитектура и расширение .rpm.
Посмотрите на флажки, прилагаемые к команде: особенно важен -U, то есть «обновление» [upgrade]. Для установки пакета сгодится команда rpm -i, но она будет обижаться, если уже установлена более старая версия пакета; с флагом -U можно установить новый пакет или обновить существующий – и вы обойдетесь всего одной командой.
Если вы хотите проверить, не поврежден ли загруженный файл RPM, скомандуйте rpm --checksig filename. Удалить пакет тоже нетрудно – командой rpm -e nasm.
Существует несколько способов получить информацию о пакете. Для еще не установленного RPM-файла введите команду
rpm -qpi nasm-0.98.39-1.i386.rpm
Для уже установленных пакетов уберите флаг p и используйте только основу имени пакета. Аналогичная предыдущей команда для установленного пакета NASM будет выглядеть так:
rpm -qR nasm
Получить список файлов, установленных пакетом, можно командой rpm -ql nasm. К какому пакету файл принадлежит, определит команда rpm -qf /path/to/file. Команда rpm невероятно разносторонняя, как и ее кузина dpkg. Чтобы исследовать ее возможности, откройте man-страницу команды (man rpm).
Стоит также отметить, что распаковать пакеты RPM можно и без установки, предварительно конвертировав их в архивы CPIO. Например:
rpm2cpio nasm-0.98.39-1.i386.rpm > data.cpio cpio -id < data.cpio
Эти команды распакуют архив в текущий каталог, и там могут возникнуть каталоги usr, etc и др.
rpm удобна для работы с локальными пакетами, но есть и утилита, которая автоматизирует загрузку пакетов и их зависимостей из Интернета и во многом напоминает APT в Debian. Это Yum – Yellowdog Updater Modified [Модифицированная утилита обновления от Yellowdog]; когда-то она делалась для другого дистрибутива. Например, если вы хотите установить Z Shell, но у вас нет локальных пакетов, скомандуйте
yum install zsh
Yum проверит свой кэш с информацией о пакетах, определит требуемые зависимости и попросит вас нажать Y для продолжения работы, в ответ на что загрузит и установит требуемые пакеты. Список пакетов, соответствующих ключевому слову, можно получить командой yum list с ключевым словом, а получить информацию о пакете перед установкой – командой yum info с именем пакета.
C Yum особенно удобно отслеживать обновления ОС: команда yum update покажет вам список пакетов, которые были обновлены с момента вашей установки. И как она находит эти пакеты?
Список всех установленных пакетах в системе на базе Debian выдаст команда dpkg -l. В дистрибутивах на базе RPM введите команду rpm -qa. Списки очень длинные, и удобно будет перенаправить вывод в текстовый файл – rpm -qa > list.txt.
Ответ – в каталоге /etc/yum.repos.d. Там вы найдете текстовые файлы с расширением .repo, содержащие данные репозиториев – хранилищ пакетов в Интернете. Например, в системе CentOS, с которой мы работаем на этом уроке, есть репозитории для всех основных пакетов CentOS и соответствующих обновлений.
Сюда можно добавить собственные записи, если вы найдете программу с репозиторием для вашего дистрибутива, но потом не забудьте выполнить команду yum makecache для обновления локальной информации. Yum потрясающе гибок в настройке – ищите его параметры в файле /etc/yum.conf.
Преобразование пакетов с Alien
RPM и Deb – два самых популярных формата пакетов в мире Linux, но они не очень-то дружат. Конечно, можно установить утилиты Dpkg в систему с RPM (или команду rpm в Debian) и попытаться установить пакеты с их помощью, но результаты будут не самыми лучшими: ждите большого ущерба системе.
Более разумный вариант – воспользоваться утилитой Alien, доступной в репозиториях Debian. Эта удобная утилита преобразует файлы Deb в RPM и наоборот. Например:
alien --to-deb nasm-2.07-1.i386.rpm
Она создает файл nasm_2.07‑2_i386.deb, который можно установить рассмотренной нами командой dpkg -i. Впрочем, установится пакет корректно или нет – это отдельная история: пакеты бывают так привязаны к дистрибутивам, что ни в какую не соглашаются нормально работать в других местах.
Alien всего лишь изменяет формат сжатия и метаданных для заданного формата пакетов; это не гарантирует, что пакет сможет работать в файловой системе нового дистрибутива или что скрипты, запускаемые до или после установки, отработают корректно.
С годами удалось достичь заметного успеха в конвертации небольших программ с минимумом зависимостей. Возможно, вам тоже повезет. С большими программами, как правило, ничего не получается, а попытка заменить критические системные файлы (типа glibc) их версиями из другого дистрибутива – весьма неумное решение.
Сборка пакетов из исходных кодов
Большинство двоичных пакетов, с которыми вы столкнетесь, были созданы из исходных кодов. Процесс создания пакетов гораздо сложнее простой упаковки двоичного файла архиватором gzip, и тут требуются скрипты и файлы настройки. В дистрибутивах на базе Debian первым делом установите необходимые утилиты:
apt-get install dpkg-dev build-essential fakeroot
Теперь скажите Debian, что хотите получить доступ к исходному коду, а не только к двоичным файлам – открыв /etc/apt/sources.list и заменив deb в его строках на deb-src. Например:
deb-src http://ftp.uk.debian.org/debian/ squeeze main
(В зависимости от вашей системы эти утилиты уже могут быть установлены по умолчанию.) Затем загружайте исходные файлы программы командой apt-get source package, заменив package названием программы. Оригинал исходного кода последней версии программы будет загружен, извлечен из архива и залатан в зависимости от дистрибутива. Командой cd package-* вы перейдете в каталог с распакованными файлами. Для сборки некоторых пакетов нужны библиотеки и дополнительные утилиты, которые можно установить командой apt-get build-dep package.
Внеся в исходный код все требуемые правки или сменив параметры оптимизации компилятора в строке CFLAGS в debian/rules, соберите пакет:
dpkg-buildpackage
Завершив сборку, перейдите в каталог уровнем выше командой cd.. и просмотрите его содержимое командой ls. Вы найдете один или несколько свежесобранных пакетов Deb, которые теперь можно распространить.
Для систем с RPM можно установить утилиту Yumdownloader – через нее вы получите пакеты SRPM (пакеты с исходными кодами RPM) командой yumdownloader -source package (замените package на имя программы). SRPM содержит исходный код с инструкциями по сборке (файл SPEC), а также необходимые настройки и заплатки для конкретного дистрибутива.
Затем собирайте двоичные пакеты командой rpmbuild --rebuild filename.src.rpm. В зависимости от собираемой программы получится один или несколько двоичных RPM-пакетов,которые вы сможете распространять или установить.
Проверьте себя!
Раз вы прочли это руководство, усвоили все идеи и попробовали свои варианты приведенных команд, не проверить ли, как вы ответите на вопросы в ситуации, похожей на экзамен?
- Какая команда удаляет Deb-пакет вместе с файлами настройки?
- В каком файле есть список всех репозиториев, используемых в дистрибутивах на базе Debian?
- Какая команда выдает подробную информацию о пакете в Debian?
- Какой командой можно конвертировать файл RPM в Deb?
- Какая команда удаляет пакет в системе на базе RPM?
- Где проживают описания репозиториев Yum?
- Как обновляется кэш пакетов при помощи Yum?