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 показывает отсутствующие файлы:

$ 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. Результат был таким же.

2 ответа

Решение

Запись для sssd.conf от sssd Спек-файл:

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

Цитирование из максимальных оборотов в минуту %ghost директива:

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

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

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

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

Другие вопросы по тегам