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