Эти шаги выполняются из коробки с 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.