Назад | Перейти на главную страницу

rpm2cpio пропускает файлы из RPM

Эти шаги выполняются из коробки с CentOS 6.5. Я просто попытался преобразовать пакет RPM в архив CPIO и был удивлен, обнаружив файлы, перечисленные в RPM, но отсутствующие в архиве. Вот предпринятые шаги.

Перечислить пути в RPM:

$ rpm -qlp sssd-1.9.2-82.4.el6_4.x86_64.rpm | sort > rpm.lst

Преобразуйте RPM в архив CPIO:

$ rpm2cpio sssd-1.9.2-82.4.el6_4.x86_64.rpm > sssd-1.9.2-82.4.el6_4.x86_64.cpio

Сохраните список файлов в архиве. В sed фильтр требуется для удаления первых точек из имен путей. Это не требуется для списка RPM.

$ cpio -i -t < sssd-1.9.2-82.4.el6_4.x86_64.cpio | sed -e 's|^.||' | sort > cpio.lst

Наконец, разница, показывающая недостающие файлы:

$ diff -u cpio.lst rpm.lst

--- cpio.lst        2015-07-16 19:54:06.020494348 +0530
+++ rpm.lst         2015-07-16 19:53:38.012494371 +0530
@@ -2,6 +2,7 @@
 /etc/rc.d/init.d/sssd
 /etc/rwtab.d/sssd
 /etc/sssd
+/etc/sssd/sssd.conf
 /usr/bin/sss_ssh_authorizedkeys
 /usr/bin/sss_ssh_knownhostsproxy
 /usr/lib64/ldb/modules/ldb/memberof.so
@@ -102,6 +103,8 @@
 /var/lib/sss
 /var/lib/sss/db
 /var/lib/sss/mc
+/var/lib/sss/mc/group
+/var/lib/sss/mc/passwd
 /var/lib/sss/pipes
 /var/lib/sss/pipes/private
 /var/lib/sss/pubconf

Почему файлы присутствуют в RPM, но отсутствуют в архиве CPIO? Мой интерес был особенно в /etc/sssd/sssd.conf потому что я хотел посмотреть образец файла конфигурации. Мы используем sssd пакет, который старше, чем исходящий из CentOS. Я повторил описанные выше шаги с пакетом от CentOS. Результат был таким же.

Эти файлы являются пустыми, поэтому они не включены в архив cpio, но перечислены в rpm, даже после того, как вы установили rpm, и если вы проверите его с помощью rpm -V sssd - у него будет нормальный вывод, потому что он указан в rpmdb таким образом, даже когда файлы удалены, вот фрагмент из SRPM:

p.s. очень интересный случай!

Запись для sssd.conf из sssd файл спецификации:

%ghost %attr(0600,root,root) %config(noreplace) %{_sysconfdir}/sssd/sssd.conf

Цитата из Максимальная частота вращения о %ghost директива:

Добавив эту директиву в строку, содержащую файл, RPM будет знать о файле-призраке, но не будет добавлять его в пакет. Однако он все еще должен быть в корне сборки.

Следовательно, rpm2cpio это часть того же пакета, что и rpm пропускает файлы-призраки при преобразовании в архив CPIO.