Текст книги "Linux"
Автор книги: Алексей Стахнов
Жанр: ОС и Сети, Компьютеры
сообщить о неприемлемом содержимом
Текущая страница: 16 (всего у книги 60 страниц) [доступный отрывок для чтения: 20 страниц]
Общая форма команды удаления пакета выглядит так:
rpm -е <название_пакета>
Опции:
• -allmatches – удалить все версии пакета, отвечающие <название_пакета>. Обычно если <название_пакета> отвечает нескольким пакетам, выдается сообщение об ошибке и удаление не производится;
• -noscripts – не исполнять pre– и post-установочные скрипты;
• -notriggers – не исполнять триггер-скриптов, взведенных на удаление данного пакета;
• -nodeps – не проверять зависимостей перед удалением пакетов;
• -test – не производить удаления, только протестировать возможность удаления. Полезна в сочетании с опцией – w.
Общая форма команды запроса RPM выглядит так:
rpm -q [опции-запроса]
Можно задать формат, в котором будет выводиться информация о пакете. Для этого используется опция – queryformat с последующей строкой формата. Форматы запроса представляют собой модифицированную версию стандартного форматирования printf (). Формат состоит из статических строк (которые могут включать стандартные escape-послеловательности языка программирования С для переводов строки, табуляций и других специальных символов) и форматов по типу используемых в printf ().
Есть два набора опций для запроса – выбор пакетов и выбор информации.
Запрос установленного пакета, называющегося <название_пакета>:
-q <название_пакета>
Опции:
• -a, -all – запрос всех установленных пакетов;
• -whatrequires <capability> – запрос всех пакетов, требующих <capability> для правильного функционирования;
• -whatprovides <virtuai> – запрос всех пакетов, предоставляющих <virtuai> сервис;
• -f <файл>, -file <файл> – запрос пакета, которому принадлежит файл <файл>;
• -g <группа>, -group <группа> – запрос пакетов из группы <группа>;
• -р <файл_пакета> – запрос (неустановленного) пакета <файл_пакета>. Файл <файл_пакета> может быть задан как FTP– или HTTP-адрес;
• -specfile <spec_file> – разбор и запрос <spec_file> так, как если бы это был пакет. Хотя не вся информация (например, списки файлов) доступна, этот тип запроса позволяет использовать RPM для извлечения информации из spec-файлов;
• -que rybyn umber <num> – запросить непосредственно запись базы данных номер <num>. Полезна для отладочных целей;
• -triggeredby <имя_пакета> – запрос всех пакетов, содержащих триггер-скрипты, активизируемые пакетом <имя_пакета>.
Опции выбора информации выглядят так:
• -i – выводит информацию о пакете, включая название, версию и описание. Использует – queryformat, если таковой задан;
• -R, – requires – выводит список пакетов, от которых зависит данный пакет;
• -provides – выводит список сервисов и библиотек, предоставляемых данным пакетом;
• -changeiog – выводит протокол изменений данного пакета;
• -l, -list – выводит список файлов, входящих в данный пакет;
• -s, -state – выводит состояние файлов в пакете (подразумевает -l). Каждый файл может находиться в одном из следующих состояний: нормальный, не установлен или заменен;
• -d, -docfiles – выводит список только файлов документации (подразумевает -l);
• -с, -configfiles – выводит список только конфигурационных файлов (подразумевает -l);
• -scripts – выводит специфические для данного пакета скрипты, используемые как часть процессов инсталляции/деинсталляции, если таковые есть;
• -triggers, -triggerscripts – показать все триггер-скрипты, если таковые имеются, содержащиеся в пакете;
• -dump – выводит информацию о файлах следующим образом: path size mtime md5sum mode owner group isconfig isdoc rdev symlink. Эта опция должна использоваться в сочетании по меньшей мере с одной из опций -l, -с, -d;
• -last – упорядочивает список пакетов по времени установки таким образом, что наиболее свежие пакеты находятся в верху списка;
• -filesbypkg – показывает все файлы в каждом пакете;
• -triggerscripts – показывает все триггер-скрипты для выбранных пакетов.
Общая форма команды проверки RPM выглядит так:
rpm -V [опции-верификации]
Или
rpm -у [опции-верификации]
Или
rpm -verify [опции-верификации]
В процессе проверки пакета информация об установленных файлах пакета сравнивается с информацией из оригинального пакета и из базы данных RPM. В числе прочих верификация проверяет размер, контрольную сумму MD5, права доступа, тип, хозяина и группу каждого файла. Обо всех несоответствиях сообщается. Опции выбора пакетов такие же, как и для инспекции пакетов.
Файлы, которые не устанавливались из пакета (например, файлы документации, исключенные из процесса инсталляции при помощи опции -excludedocs) молча игнорируются.
Крайне полезная опция для администратора. Эта опция позволит при сбое в системе обнаружить поврежденные файлы (конечно, не все – конфигурационные файлы или файлы, созданные пользователем, так проверить не удастся). В случае взлома системы можно вычислить, какие файлы взломщик модифицировал (например, login).
Опции, которые могут быть использованы в процессе верификации:
• -nofiles – игнорировать отсутствующие файлы;
• -nomd5 – игнорировать ошибки контрольной суммы MD5;
• -пордр – игнорировать ошибки подписи PGP.
Форматом вывода является строка из восьми символов. Каждый из них показывает результат сравнения одного из атрибутов файла со значением, записанным в базе данных RPM. Точка обозначает, что тест прошел. Следующие символы говорят об ошибках некоторых тестов:
• 5 – контрольная сумма MD5;
• S – размер файла;
• L – ссылка (Симлинк);
• Т – время модификации;
• D – устройство;
• U – владелец;
• G – группа;
• М – права доступа (включает права доступа и тип файла).
Общая форма команды проверки подписи RPM выглядит так:
rpm -checksig <файл_с_пакетом>
Эта команда проверяет встроенную в пакет PGP-подпись для подтверждения целостности и источника происхождения пакета. Информация о конфигурации PGP читается из конфигурационных файлов. Подробную информацию см. в разд. «Подписи PGP».
Общая форма команды построения пакета RPM выглядит так:
rpm -bO [опции-сборки] <spec_файл>
Или
rpm -tO [опции-сборки] <arc_файл>
Аргумент -b применяется в том случае, если для сборки пакета используется spec-файл. Если же команда rpm должна извлечь этот файл из архива gzip, используется аргумент -t. После первого аргумента ставится следующий: о, указывающий, какие этапы сборки и упаковки должны быть выполнены. Это один из:
• -bp – исполнить стадию %ргер spec-файла. Обычно это включает в себя распаковку исходного кода и прикладывание к нему патчей (от англ .patch — патч, заплатка, исправление);
• -bl – произвести проверку списка. В секции %files spec-файла производится расширение макросов и проверка перечисленных файлов на существование;
• -bc – исполнить стадию %buiid spec-файла (предварительно исполнив стадию %ргер). Обычно это сводится к исполнению некого эквивалента make;
• -bi – исполнить стадию % install spec-файла (предварительно исполнив стадии %ргер и %buiid). Обычно это сводится к исполнению некого эквивалента make install;
• -bb – собрать бинарный пакет (предварительно исполнив стадии %ргер, %build и % install);
• -bs – собрать только исходный пакет (предварительно исполнив стадии %prep, %build и %install);
• -ba – собрать бинарный (RPM) и исходный (SRPM) пакеты (предварительно исполнив стадии %prep, %build и % install).
Также могут быть использованы следующие опции:
• -short-circuit – исполнить непосредственно указанную стадию, пропустив предшествующие. Может быть использована только с -Ьс и -bi;
• -timecheck – установить возраст для timecheck (0 – чтобы запретить). Это значение также может быть установлено путем определения макроса _timecheck. Значение timecheck определяет максимальный возраст (в секундах) пакуемых в пакет файлов. Для всех файлов, которые старце этого возраста, будет выводиться предупреждение;
• -clean – удалить дерево, использованное для сборки, после того, как построены пакеты;
• -rmsource – удалить исходный код и spec-файл после сборки (может быть использовано отдельно, например, rpm -rmsource foo.spec);
• -test – не исполнять никаких стадий сборки. Полезно для тестирования spec-файлов;
• -sign – встроить в пакет PGP-подпись. Эта подпись может быть использована для проверки целостности и источника происхождения пакета. Подробную информацию см. в разд. «Подписи PGP»;
• -buiiroot <каталог> – использовать каталог <каталог> как корневой для сборки пакетов;
• -target <платформа> – при сборке пакета интерпретировать <платформа> как arch-vendor-os и соответственно установить макросы _target, _target_arch и _target_os.
Существуют два способа запуска RPM:
• rpm -recompile <файл_исходного_пакета>
• rpm -rebuild <файл_исходного_пакета>
Будучи вызванным любым из способов, RPM устанавливает указанный исходный пакет и исполняет стадии %prep, %buiid и %install. Кроме того, – rebuild собирает новый бинарный пакет. После того как сборка закончена, удаляется дерево, использованное для сборки (как с опцией – clean), исходный код и spec-файл.
Подпись RPM выполняется следующими командами:
• rpm -resign <файл_бинарного_пакета>
Опция resign генерирует и вставляет новые подписи в указанные пакеты. Все существующие подписи из пакетов удаляются.
• rpm -addsign <файл_бинарного_пакета>
Опция addsign генерирует и добавляет новые подписи в указанные пакеты. Все существующие подписи пакетов при этом сохраняются.
Чтобы использовать возможность подписи, RPM должен быть настроен для запуска PGP. Для этого следует создать свою собственную пару из публичного и секретного ключей. Необходимо также настроить следующие макросы:
• _signature – тип подписи. В настоящее время поддерживается только pgp;
• _pgp_name – имя «пользователя», чьи ключи вы хотите использовать для подписи ваших пакетов.
При сборке пакетов к командной строке добавляется опция -sign. У вас спросят пароль, и ваш пакет будет собран и подписан.
Общая форма команды перестроения базы данных RPM выглядит так:
rpm -rebuilddb
Для построения новой базы данных:
rpm -initdb
Этот режим поддерживает только две опции: -dbpath и -root.
RPM содержит простые клиенты FTP и HTTP для упрощения установки и изучения пакетов, доступных через Интернет. Файлы пакетов для установки, обновления и запроса могут быть указаны как FTP– или HTTP-адрес:
ftp://<user>:<password>@hostname:<port>/path/to/packagee.rpm
Если часть <password> опущена, пароль будет запрошен (по одному разу для каждой пары user/hostname). Если ни <user>, ни <password> не указаны, будет использован anonymous ftp. Во всех случаях осуществляется пассивная (PASV) пересылка по FTP.
RPM позволяет применять с адресом FTP следующие опции:
• -ftpproxy <hostname> – система <hostname> будет организована как proxy-сервер для всех пересылок, что позволяет производить FTP-соединения через firewall, использующий прокси для выхода во внешний мир. Эта опция может быть задана также настройкой макроса _ftpproxy;
• -ftpport <port> – задает номер TCP-порта, открываемого для FTP-соединений вместо порта по умолчанию. Эта опция может быть также задана настройкой макроса _ftpport.
RPM позволяет применять с адресом HTTP следующие опции:
• -httpproxy <hostname> – система <hostname> будет организована как proxy-сервер для всех пересылок, что позволяет производить HTTP-соединения через firewall, использующий прокси для выхода во внешний мир. Эта опция может быть задана также настройкой макроса _httpproxy;
• – httpport <port> – задает номер TCP-порта, открываемого для HTTP-соединений вместо порта по умолчанию. Эта опция может быть также задана настройкой макроса _httpport.
Следующие файлы необходимы при работе с пакетом RPM:
• /usr/lib/rpm/rpmrc;
• /etc/rpmrc;
• ~/.rpmrc;
• /var/state/rpm/packages;
• /var/state/rpm/pathidx;
• /var/state/ipm/nameidx;
• /tmp/rpm*.
В предыдущем разделе мы познакомились с опциями менеджера RPM. С легкостью установки программ в Windows не сравнить. Впрочем, пользователи вряд ли применяют даже десятую часть имеющихся опций, поэтому и не следует запоминать их все. Рассмотрим, что практически используется в работе с пакетами.
Установка пакетов осуществляется с помощью команды:
rpm -i <полное_имя_пакета>
Или
rpm -i <полное_имя_пакета> <полное_имя_пакета> <полное_имя_пакета> …
Например: rpm -i срр-2. 96–85. i386.rpm
Таким образом можно установить сразу несколько пакетов. Помимо удобства (сразу указывается список пакетов, и они устанавливаются сами) указание нескольких пакетов необходимо в том случае, если возникают неудовлетворенные зависимости. Попадаются пакеты, зависящие друг от друга. Без второго пакета не установить первый, а второй не устанавливается – требует установки первого. Простейшее решение – поставить пакеты командой:
rpm -i <полное_имя_пакета_1> <полное_имя_пакета_2>
Команда простая, работает хорошо, но если в системе уже установлен пакет, пусть и более ранней версии, вы получите предупреждение, а сам пакет не установится. Чтобы обновить пакет, используем следующую команду:
rpm -U <полное_имя_пакета>
Эта команда производит обновление пакета, если он уже установлен, или установку, если не установлен. Однако не всегда при обновлении необходимо устанавливать отсутствующий пакет. В таких случаях можно воспользоваться командой:
rpm -F <полное_имя_пакета>
Команда проверит, есть ли в системе соответствующий пакет, и если есть – произведет его обновление. При желании установку или обновление пакетов можно производить прямо с сервера FTP. Например, в локальной сети есть FTP-сервер с именем bluewater. Ваш администратор регулярно скачивает с FTP-сервера Red Hat обновления RPM и выкладывает их на FTP-сервер локальной сети. Вот команда, с помощью которой можно обновить свои пакеты (для определенности возьмем компилятор С++):
rpm -F ftp://bluewater/pub/linux/updates/redhat-7.l/cpp-2.96–85.i386.rpm
Однако у консольного менеджера RPM есть одна неприятная особенность – в случае успешности операции он ничего не сообщает на консоль. В принципе, это нестрашно, можно задать ключ – h, который выводит процент выполнения процедуры. Например:
rpm -ih срр-2.96–85.i386.rpm
Или
rpm -ivh cpp-2.96–85.i386.rpm
Если при работе с пакетом возникнут проблемы, RPM выдаст причину, по которой невозможно выполнить какое-то действие. При установке пакета – это, как правило, уже упомянутые неудовлетворенные зависимости либо отсутствие необходимых библиотек или установленных пакетов (или они в системе есть, но не той версии). Эти проблемы решаются просто – установите соответствующие пакеты или обновите их до необходимой версии. Впрочем, бывают и здесь свои трудности. Рассмотрим еще один пример. У автора на компьютере стоит Red Hat 7.1, а в нем удобная система GNOME, использующая менеджер окон Sawfish. Все хорошо функционирует, только есть одна проблема – при сборке пакета Sawfish сборщики (американцы, им простительно) напутали с кириллическими шрифтами – системное меню вместо кириллицы отображает знаки вопроса. Был найден пакет посвежее, в котором эта оплошность убрана, да еще и функциональности добавлено. Пакет содержал исходные коды, поэтому пришлось сначала собрать его в бинарном виде командой:
rpm -rebuild Sawfish-1.0–1.src.rpm
После приблизительно пяти минут компиляции в каталоге /usr/src/redhat/RPMS/i386/ образовался пакет Sawfish, который был запущен на обновление командой:
rpm -F Sawfish
А в результате получено сообщение: «Обновление пакета не произведено, поскольку в системе уже установлен пакет версии 0.36, которая больше, чем версия 1.02». По всей видимости, сборщики пакета что-то перепутали в его описании. Пришлось воспользоваться командой:
rpm -U -force Sawfish-1.0–1.i386.rpm
которая производит принудительное обновление пакета, не проверяя зависимостей. Ключом -force, однако, следует пользоваться достаточно осторожно, можно ненароком развалить всю систему.
Встречаются иногда сообщения и другого рода. При обновлении, например, пакета с исходным кодом ядра Linux версии 2.4.2 пакетом, содержащим исходный код ядра Linux версии 2.4.3, было выдано сообщение, которое в переводе на русский язык звучит так: "Не могу удалить каталог такой-то, потому что он не пуст". Однако пакет успешно обновился, а каталог, фигурирующий в сообщении, на самом деле был пуст. Так что не стоит сразу расстраиваться, достаточно часто сообщения, выдаваемые RPM, весьма безобидны.
Удаление пакетов из системы осуществляется элементарно, с помощью команды:
rpm -е <имя_пакета>
Обратите внимание – указывается только имя пакета. Если написать полное имя пакета, то RPM выдаст сообщение: «Такой пакет в системе не установлен». Немного нелогично, но так уж исторически сложилось: при установке необходимо указывать полное имя пакета, при удалении – только имя пакета без упоминания версии, релиза и т. п.
При удалении сперва проверяются зависимости, и пакет удаляется, если от него не зависит никакой другой установленный в системе пакет. В противном случае на экран выдаются имена пакетов, для функционирования которых нужен удаляемый пакет. Конечно, если вы все-таки решили удалить пакет, можно воспользоваться ключами -nodeps или -force, однако рекомендуется применять их с большой осторожностью.
Получить информацию о том, какая версия пакета установлена в системе, можно командой:
rpm -q <имя_пакета>
Например, на запрос rpm -q срр может быть получен такой ответ: срр-2.96–85.
Для получения расширенной информации о пакете необходимо выполнить команду:
rpm -qi <полное_имя_пакета>
Результат выполнения команды rpm -qi срр-2.96–85 на конкретном компьютере можно видеть ниже:
Name: срр Relocations: (not relocateable)
Version: 2.96 Vendor: Red Hat, Inc.
Release: 85 Build Date: Срд 09 Май 2001 21:04:50
Install date: Птн 31 Авг 2001 07:38:10 Build Host: porky.devel.redhat.com
Group: Development/Languages Source RPM: gcc-2.96–85.src.rpm
Size: 292618 License: GPL
Packager: Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
URL: http://gcc.gnu.org
Summary: The С Preprocessor.
Description:
Cpp is the GNU C–Compatible Compiler Preprocessor. Cpp is a macro processor which is used automatically by the С compiler to transform your program before actual compilation. It is called a macro processor because it allows you to define macros, abbreviations for longer constructs.
The С preprocessor provides four separate functionalities: the inclusion of header files (files of declarations that can be substituted into your program); macro expansion (you can define macros, and the С preprocessor will replace the macros with their definitions throughout the program); conditional compilation (using special preprocessing directives, you can include or exclude parts of the program according to various conditions); and line control (if you use a program to combine or rearrange source files into an intermediate file which is then compiled, you can use line control to inform the compiler about where each source line originated).
You should install this package if you are а С programmer and you use macros.
Для получения списка файлов пакета (и каталогов, куда они будут установлены) используется команда:
rpm -ql <полное_имя_пакета>
Например, rpm -qi срр-2.96–85 выведет на экран следующий список файлов:
/lib/cpp
/usr/bin/cpp
/usr/lib/gcc-lib
/usr/lib/gcc-lib/i386-redhat-linux
/usr/lib/gcc-lib/i386-redhat-linux/2.96
/usr/lib/gcc-lib/i386-redhat-linux/2.96/cpp0
/usr/lib/gcc-lib/i386-redhat-linux/2.96/tradcpp0
/usr/share/info/cpp.info-1.gz
/usr/share/info/cpp.info-2.gz
/usr/share/info/cpp.info-3.gz
/usr/share/info/cpp.info.gz
/usr/share/man/manl/cpp.1.gz
А если надо произвести обратную операцию – по имени файла узнать, к какому пакету он принадлежит? Выполним следующую команду:
rpm -qf /usr/bin/mc
В результате получим имя пакета:
mc-4.5.51–32.
Теперь о безопасности. Прежде чем производить установку пакета, полученного через Интернет, крайне желательно произвести его проверку, вдруг он поврежден?
Для этого можно воспользоваться командой
rpm -checksig <имя_пакета>
Эта команда проверяет PGP-подпись пакета.
Если ваша система – сервер или к компьютеру имеет доступ кто-то, в чьих действиях вы не уверены, необходимо регулярно производить проверку целостности установленных пакетов и зависимостей командой:
rpm -V gimp
В ответ можно получить, например, следующее:
.М...... /usr/lib/gimp/1.2/modules/libcolorsel_gtk.а
.М...... /usr/lib/gimp/1.2/modules/libcolorsel_triangle.a
.M...... /usr/lib/gimp/1.2/modules/libcolorsel_water.a
Результат говорит, что права доступа на эти файлы были модифицированы.
Для проверки всех установленных в системе пакетов можно воспользоваться командой:
rpm -Va
Вот результат:
S.5....T с /etc/printcap
.М...... /var/spool/at/.SEQ
отсутствует /etc/rpm/macros.dbl
.......Т /usr/share/pixmaps/netscape.png
SM5....Т /usr/X11R6/lib/X11/fonts/Speedo/encodings.dir
отсутствует /var/cache/ssl_j>cache_data.dir
.M....G. /dev/jsfd
......G. /dev/tty0
.....U.. /dev/vcs3
.....U.. /dev/vcsa3
S.5....T с /etc/X11/fs/config
отсутствует /usr/share/ssl/certs/stunnel.pem
S.5....T с /etc/openldap/ldap.conf
Совет
Если вы применяете дистрибутив, использующий пакеты RPM, избегайте установки программ компиляцией из исходного кода (не из пакетов RPM). Поскольку программа компилируется и устанавливается вручную, информация в базу данных установленных RPM не попадает. Следовательно, достаточно велика вероятность, что при установке или обновлении какого-нибудь пакета вы нарушите зависимости для скомпилированной вами программы, и она не будет работать.
Помимо консольного менеджера RPM, существуют еще несколько утилит, предоставляющих текстовый интерфейс и позволяющих работать с пакетами формата RPM. Однако они имеют обычно значительно меньшую функциональность.
Правообладателям!
Данное произведение размещено по согласованию с ООО "ЛитРес" (20% исходного текста). Если размещение книги нарушает чьи-либо права, то сообщите об этом.Читателям!
Оплатили, но не знаете что делать дальше?