Linux
Шрифт:
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 выдаст причину, по которой невозможно выполнить какое-то действие. При установке пакета – это, как правило, уже упомянутые неудовлетворенные зависимости либо отсутствие необходимых библиотек или установленных пакетов (или они в системе есть, но не той версии). Эти проблемы решаются просто – установите соответствующие пакеты или обновите их до необходимой версии.
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
Для получения списка файлов пакета (и каталогов, куда они будут установлены) используется команда:
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. Однако они имеют обычно значительно меньшую функциональность.
Midnight Commander
Midnight Commander – помимо функций файлового менеджера, работы с архивами и большого количества других возможностей, Midnight Commander способен получить информацию из пакетов форматов RPM и DEB, установить или обновить пакет. Конечно, это не заменит полноценного менеджера пакетов, но быстро поставить или обновить несколько пакетов или посмотреть информацию о пакете также иногда бывает полезно. На рис. 8.2 изображено содержимое RPM-пакета, надо только нажать клавишу <Enter> в нужном месте.