RPM
Материал из База знаний проекта Russian Fedora
Содержание |
Введение
RPM - это одновременно формат пакетов и программа, для управления ими. Программа позволяет устанавливать, удалять, обновлять программное обеспечение, а также многое другое.
Изначально разработанный компанией Red Hat для Red Hat Linux, RPM стал использоваться во многих дистрибутивах Linux и был портирован на другие операционные системы: Novell NetWare (с версии 6.5 SP3), IBM AIX (с версии 5) и прочие.
Для хранения файлов в формате RPM используется архивный контейнер cpio, с использованием сжатия утилитой gzip. В более поздних версиях может быть использован архиватор star и сжатие с помощью bzip2, LZMA или XZ. Начиная с версии RPM 5.0 возможно использование архиватора XAR.
База данных RPM
База данных RPM ведётся в каталоге /var/lib/rpm. Она состоит из одиночной базы данных (Packages), в которой хранится вся информация о пакетах, и множества маленьких баз (__db.001, __db.002 и т. д.), которые служат для индексации и содержат в себе сведения о том, какие файлы менялись и создавались при установке и удалении пакетов.
Если база данных несколько испортится (что может произойти, если процесс установки или удаления был «убит» или закончилось место на разделе), то её можно восстановить, введя команду
rpm --rebuilddb
Если база была уничтожена — рекомендуется достать копию из заранее сделанного бэкапа или восстановить при помощи
rpm -ivh --justdb
по списку пакетов, заранее полученному командой rpm -qa | sort.
Возможны полуэвристические методы восстановления базы по списку файлов в пакетах репозитория, из которого была установлена система, но лучше до этого не доводить.
Названия пакетов
Каждый пакет RPM имеет название, которое состоит из нескольких частей:
- Название программы
- Версия программы
- Номер релиза (количество раз пересборки программы одной и той же версии). Также часто используется для обозначения дистрибутива, под который собран этот пакет, например fc4 (Fedora Core 4).
- Архитектура, под которую собран пакет (i386, ppc и т. д.)
Собранный пакет обычно имеет такой формат названия:
<название>-<версия>-<релиз>.<архитектура>.rpm
Например:
nano-0.98-2.i386.rpm
Иногда в пакет входят исходные коды. Такие пакеты не содержат информации об архитектуре, она заменяется на src. Например:
libgnomeuimm2.0-2.0.0-3.src.rpm
Библиотеки чаще всего распространяются в двух отдельных пакетах. Первый содержит собранный код, второй (обычно к нему добавляют -devel) содержит заголовочные файлы и другие файлы, необходимые разработчикам. Необходимо следить за тем, чтобы версии этих двух пакетов совпадали, иначе библиотеки могут работать некорректно. Пакеты с расширением noarch.rpm не зависят от конкретной архитектуры компьютера. Обычно они содержат графику и тексты, используемые другими программами.
Команды
Основные команды:
- Установка пакета(install)
rpm -i [опции] <пакет>
- Обновление пакета(Update)
rpm -U [опции] <пакет>
- Удаление пакета(erase)
rpm -e [опции] <пакет>
Полезные команды:
- Получить список пакетов, где в названии встречается <имя_пакета>
rpm -qa | grep <имя_пакета>
- Обновить или установить пакет(UpdateVerify и h отвечает за вывод процесса установки)
rpm -Uhv package.rpm
- Вывод списка всех установленных пакетов и их размеров, версии и релиза
rpm -qa --queryformat '%010{SIZE}\t%{NAME}-%{VERSION}-%{RELEASE}\n' —
- Выводит название дистрибутива, в котором установлен пакет. (опция -q для установленного в систему пакета, опция -qp для неустановленного)
rpm -q --queryformat %{DISTRIBUTION} package.rpm
- Название пакета, в котором встречается требуемый файл(зачастую когда появляется сообщение-что требуемая команда не найдена-необходимо установить пакет, в котором содержится программа соответствующая команде)
rpm -q --whatprovides fullpathtofile
- Получить список пакетов установленных из сторонних репозиториев
rpm -qa --qf '%{NAME} %{VENDOR}\n' | grep -v RussianFedora
- Сбросить права доступа на файлы в пакете:
rpm --setperms <packagename>
- Посмотреть лог изменений пакета
rpm -q --changelog <packagename> | less
- Получить документацию, связанную с пакетом или по отдельному файлу из пакета
rpm -qd <packagename> rpm -qdf /path/to/file
- Посмотреть все пакеты с данным релизом, или данного поставщика пакета
rpm -qa release="*rf*" rpm -qa packager="Johnny*"
- Извлечение только одного файла, без установки пакета
rpm2cpio logrotate-1.0-1.i386.rpm |cpio -ivd etc/logrotate.conf
- Вывод пакетов по дате установки:
rpm -qa --last
Для владельцев х86_64
Эту простую мелочь довольно легко выполнить, и она будет очнь полезна людям, использующих x86_64 системы. Одна строка в файле ~/.rpmmacros спасет от неприятностей в дальнейшем.
echo "%_query_all_fmt %%{name}-%%{version}-%%{release}.%%{arch}" >> ~/.rpmmacros
Дополнительные опции
Дополнительные опции для установки и обновления
- -oldpackage - Разрешить замену нового старым.
- -replacefiles - Разрешить замену любых файлов. Будьте осторожны.
- -replacepkgs - Устанавливать пакет, даже если он уже установлен.
- -force - Все три предыдущих вместе.
- -nodeps - Не проверять зависимости перед установкой.
- -allfiles - Устанавливать все файлы, не обращая внимание, на их возможное отсутствие.
- -notrigger - Запретить триггеры (программы, которые запускаются автоматически после установки).
- -excludedocs - Не устанавливать документацию.
- -includedocs - Обратно предыдущему.
- -test - Только проверить будущую установку.
Дополнительные опции для удаления:
- -allmatches - Удаление всех версий пакета.
- -noscript - Запрет preunistall и postuninstall.
- -nodeps - Не проверять зависимости.
- -notrigger - Запрет триггеров.
- -test - Только проверка.
