2015-09-11 3 views
-1

Я пытаюсь определить программное обеспечение, установленное на серверах CentOS, до сих пор я «не подошел» со следующими два основных решениямиОпределения установленных пакетов программного обеспечения на Centos машине

  1. Разбирает файловую систему для исполняемых файлов и библиотек
  2. Выполнить что-то вроде rpm -qa

Первый из них занимает много времени, в то время как второй не относится ко всем моим делам. Например, я хочу «искать» пакеты, даже если сервер не запущен, и я могу получить доступ только к своей файловой системе в качестве удаленного тома, моментального снимка или изображения.

Что я думаю о том, чтобы попытаться разобрать те же базы данных/файлы, которые rpm -qa считывает данные.

После запуска strace -o /tmp/rpm-strace.out rpm -qa Я нашел (не будучи уверенным), что /var/lib/rpm/Packages и /var/lib/rpm/Names - это возможные места для этой «базы данных», но я не могу разобрать ни один из этих 2 файлов.

Кто-нибудь знает, как разбирать эти файлы? Есть ли альтернатива для достижения того, чего я хочу?

Примечание: Вся идея возможна под Ubuntu, так как задается вопрос this 'Unix & Linux'.

Отказ от ответственности: Этот вопрос может быть более подходящим для сайта serverfault.

ответ

2

Вам необходимо использовать rpm для анализа базы данных rpm. Если у вас есть доступ к файловой системе, вы могли бы просто использовать chroot для запуска rpm внутри соответствующего корневого контекста:

chroot /my/server/filesystem rpm -qa 

Эти файлы являются различные виды файлов базы данных BerkeleyDB. Предполагая, что среда выполнения имеет ту же версию BerkeleyDB доступной, вы можете использовать что-то вроде bsddb модуль Python, чтобы читать их:

>>> import bsddb 
>>> name = bsddb.btopen('/var/lib/rpm/Name') 
>>> for pkg in name.keys(): 
... print pkg 
... 
GConf2 
GeoIP 
GeoIP-GeoLite-data 
GeoIP-GeoLite-data-extra 
GitPython 
GraphicsMagick 
[...] 

Но это ужасная идея, и вы не должны делать это, потому что, кто знает, если у базы данных Name есть то, что вы ищете? Возможно, он включает удаленные пакеты, которые как-то помечены как удаленные, поэтому rpm -qa проигнорирует их. Вам, вероятно, нужно будет посмотреть источники rpm, чтобы точно определить, как вещи хранятся.

+0

Как я уже сказал, я предполагаю, что вышеупомянутые файлы хранят информацию, которую я хочу. Итак, вы правы, это ужасная идея, но я должен попробовать ее и посмотреть, работает ли она. Тем не менее, я думаю, что 'chroot/my/server/filesystem rpm -qa' - это путь. – Athafoud

+0

«rpm -qa --root/my/server/filesystem» работает аналогично. – msuchy

1

команда my (fedora) rpm принимает параметр --dbpath, чтобы указать другой каталог с базой данных. Существует также пакет rpm-python для управления базой данных из python.

+0

По какой-то причине это не работает в моей Centos Machine. Я также пытаюсь использовать '-root' как @msuchy, но результат все тот же. – Athafoud

Смежные вопросы