Мої п'ять копійок щодо RPM
Я вирішив вставити свої п'ять копійок щодо RPM - Менеджера Пакетів від Red Hat. Причина написання цієї статті проста - мені сподобалася програма deb-orphan для Дебіан і я вирішив написати подібну програму для дистрибутивів побудованих на RPM. Ця стаття підсумовує мій корисний досвід з цього питання.
Монетки
Копійка
Назву пакету, якому належить файл на диску. можна взнати командою rpm -qf
ФАЙЛ
:
(lvm@lisa:lvm)$ rpm -qf /etc/passwd
setup-2.5.12-1
Друга копійка
Інформацію про пакет можна отримати командою rpm -qi ПАКЕТ
:
(lvm@lisa:lvm)$ rpm -qi setup
Name : setup Relocations: (not relocateable)
Version : 2.5.12 Vendor: Red Hat, Inc.
Release : 1 Build Date: ср, 03-кві-2002 20:15:15 +0300
Install date: ср, 02-жов-2002 15:33:05 +0300 Build Host: stripples.devel.redhat.com
Group : System Environment/Base Source RPM: setup-2.5.12-1.src.rpm
Size : 34340 License: public domain
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Summary : A set of system configuration and setup files.
Description :
The setup package contains a set of important system configuration and
setup files, such as passwd, group, and profile.
Монета в дві копійки
Інформацію про пакет, в яки входить файл, можна взнати командою: rpm -qi `rpm -qf ФАЙЛ`
:
(lvm@lisa:lvm)$ rpm -qi `rpm -qf /etc/passwd`
Name : setup Relocations: (not relocateable)
Version : 2.5.12 Vendor: Red Hat, Inc.
Release : 1 Build Date: ср, 03-кві-2002 20:15:15 +0300
Install date: ср, 02-жов-2002 15:33:05 +0300 Build Host: stripples.devel.redhat.com
Group : System Environment/Base Source RPM: setup-2.5.12-1.src.rpm
Size : 34340 License: public domain
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Summary : A set of system configuration and setup files.
Description :
The setup package contains a set of important system configuration and
setup files, such as passwd, group, and profile.
Цю команду можна записати у простенькому командному файлі, щоб не набирати її щоразу:
#!/bin/sh
rpm -qi `rpm -qf $@`
збережіть цей текст у файлі з назвою rpm-qfi
у каталозі /usr/local/bin та надайте йому права на виконання. Тепер цією командою можна просто скористатися:
(lvm@lisa:lvm)$ rpm-qfi /etc/ntp.conf
Name : ntp Relocations: (not relocateable)
Version : 4.1.1 Vendor: Red Hat, Inc.
Release : 1 Build Date: пн, 08-кві-2002 13:31:06
+0300
Install date: пн, 18-лис-2002 18:48:17 +0200 Build Host: stripples.devel.re
dhat.com
Group : System Environment/Daemons Source RPM: ntp-4.1.1-1.src.rpm
Size : 2077318 License: distributable
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
URL : http://www.cis.udel.edu/~ntp
Summary : Synchronizes system time using the Network Time Protocol (NTP).
Description :
The Network Time Protocol (NTP) is used to synchronize a computer's
time with another reference time source. The ntp package contains
utilities and daemons that will synchronize your computer's time to
Coordinated Universal Time (UTC) via the NTP protocol and NTP servers.
The ntp package includes ntpdate (a program for retrieving the date
and time from remote machines via a network) and ntpd (a daemon which
continuously adjusts system time).
Install the ntp package if you need tools for keeping your system's
time synchronized via the NTP protocol.
Третя копійка
А що якщо нам потрібно взнати не всю інформацію, а лише якесь певне поле, таке як, наприклад, дата побудови чи інсталяції пакета? Нам на допомогу прийде ключик --query-format (або скорочено - --qf). Він дозволяє вказати, які саме поля з інформацією нас цікавлять і як їх виводити, наприклад команда %COMMAND_BEGIN% rpm -q --qf '%{name}: %{summary}\n' ПАКЕТ %COMMAND_END% виведе назву пакета та його короткий опис.
(lvm@lisa:lvm)$ rpm -q --qf '%{name}: %{summary}\n' mm
mm: A shared memory library.
Напишемо невеликий скриптик, який виводитиме назви пакетів разом з їх короткими описами:
#!/bin/sh
if [ "foo$1" = "foo-h" ]
then
echo "Usage:
$0 -h
$0 PACKAGE [PACKAGE...]
echo PACKAGE [PACKAGE...] | $0
"
exit 0
fi
if [ "foo$1" = "foo" ]
then
xargs -l 200 rpm -q --qf '%{name}: %{summary}\n'
else
rpm -q --qf '%{name}: %{summary}\n' $@
fi
і збережемо його під назвою rpm-summary
в каталозі /usr/local/bin.
Четверта копійка
Часто, коли не вистачає місця на диску, хочеться взнати, які саме пакети займають найбільше місця, щоб їх видалити. тому ми напишемо невелику програмульку, яка сортуватиме пакети за їх розміром (в порядку зростання розміру):
#!/bin/sh
if [ "foo$1" = "foo-h" ]
then
echo "Usage:
$0 -h
$0 PACKAGE [PACKAGE...]
echo PACKAGE [PACKAGE...] | $0
"
exit 0
fi
if [ "foo$1" = "foo" ]
then
xargs -l200 rpm -q -qf '%{size}:%{name}\n'
else
rpm -q -qf '%{size}:%{name}\n' $@
fi | sort -n | cut -d ':' -f 2
збережемо цю програму під назвою rpm-sort-by-size
в каталозі
/usr/local/bin/.
П'ята копійка
Тепер напишемо програму, яка видаватиме всі пакети, які не вимагаються для роботи іншими пакетами.
#!/bin/sh
rpm -qa|xargs -l200 rpm -q --whatrequires|fgrep 'no package requires'|cut -b 21-|xargs -l200 rpm -q --qf '%{name}\n'
і збережемо її під назвою rpm-orphan
у каталозі /usr/local/bin/.
Шкода, але параметр --whatrequires видає неточний результат, так як він перевіряє лише явні залежності, які були вказані у spec-файлах rpm-ок. Автоматичні залежності від бібліотек він не відслідковує, на жаль.
П'ятак
Тепер ми маємо декілька утиліт, якими можемо скористатися для:
виводу всіх крайніх (orphan) пакетів, які не вимагаються для роботи інших пакетів (пакети для розробників, прикладні програми, бібліотеки, які не використовуються):
(lvm@lisa:bin)$ rpm-orphan doxygen slocate gnome-media hwinfo ...
з сортуванням їх за розміром у порядку спадання:
(lvm@lisa:bin)$ rpm-orphan|rpm-sort-by-size|tac WyabdcRealPeopleTTS j2sdk kernel-source IBMJava2-SDK kernel-smp pinball ...
та з коротким описом навпроти кожного пакету:
(lvm@lisa:bin)$ rpm-orphan|rpm-sort-by-size|tac|rpm-summary WyabdcRealPeopleTTS: Wyabdc RealPeople TTS j2sdk: Java(TM) 2 Software Development Kit, Standard Edition kernel-source: The source code for the Linux kernel. IBMJava2-SDK: IBM╝ Developer Kit for Linux╝, Java[tm] 2 Technology Edition, Version 1.3 kernel-smp: The Linux kernel compiled for SMP machines. pinball: Emilia Pinball is free OpenGL pinball game.
та повидаляти ті, які нам вже не потрібні, командою
rpm -e ПАКЕТ
:(root@lisa:root)# rpm -e pinball
Ось і усе, що я хотів написати.
Автор
-- VolodymyrLisivka - 08-чер-2003
Коментарі
Не зрозумів що таке "Х-ова RPM утиліта" і чому вона "жаж".
Я, як правило, користуюся лише консольними утилітами - менше шансів що вони заглючать при оновлені системи. Але якщо дуже хочеться, то можна скористатися synaptic - цілком нормальний гуй.
-- MarianRachynskyi - 30-лип-2004
Дуже юзфульно - круто. Особливо цікаво, оскільки Х-ова RPM утиліта хоча б в РХ9 просто жаж!
-- IhorRudenko - 29-лип-2004
Під консоль робив. :) Я збільшив шрифт, так що воно має бути читабельніше.
-- VolodymyrLisivka - 08-лип-2003
Цікаво, але на чорному фоні майже нічого не видко. Чи це так задумано?
-- guest - 08-лип-2003