Определить список пакетов, не связанных с ОС, установленных на компьютере с RedHat Linux.

Мне было поручено идентифицировать новое (не операционное) программное обеспечение, установленное на нескольких компьютерах с Red Hat Enterprise Linux (RHEL). Может ли кто-нибудь предложить эффективный способ сделать это? Я делал это вручную, сравнивая список установленного программного обеспечения со списком на FTP-сайте Red Hat для соответствующей операционной системы:

ftp://ftp.redhat.com/pub /redhat/linux/enterprise/6Server/en/os/SRPMS/

Проблемы, с которыми я сталкиваюсь при использовании этого метода, заключаются в том, что он утомителен/отнимает много времени, и перечислены только исходные пакеты (например, я не могу сказать, установлен ли avahi-glib как часть пакета avahi). Если кто-нибудь может предложить более эффективный способ идентификации программного обеспечения, которое не поставляется с операционной системой на машине RHEL, мы будем очень признательны!

Вот что я придумал как более эффективный метод (хотя я еще не понял последнюю часть, и могут быть более эффективные методы). Если кто-нибудь может помочь мне с последним шагом этого метода или может поделиться лучшим методом, я был бы очень признателен!

Новый метод (в разработке):

  1. Скопируйте список пакетов с FTP-сайта Red Hat в текстовый файл (OSPackages.txt).

  2. Чтобы устранить проблему, связанную с перечислением только исходных пакетов RPM, также скопируйте список файлов из соответствующей соответствующей версии в http://vault.centos.org в текстовый файл и объедините эти данные с OSPackages.txt.

  3. Выполните команду rpm -qa > список1, yum -y список установлен > список2, ls /usr/bin > список3, ls /usr/share > список4, ls /usr/lib > список5.

  4. Используйте cat, чтобы объединить все файлы listX в файл InstalledPackages.txt.

  5. Используйте sort для сортировки уникальных записей, например: sort -u -k 1 InstalledPackages.txt > SortedInstalledPackages.txt

  6. Выполните сравнение между SortedInstalledPackages.txt и OSPackages.txt, используя регулярное выражение (-I regexp), чтобы определить имена пакетов (и исключить номера версий). Мне также нужно было бы сделать «одностороннюю разницу», например. игнорировать дополнительные пакеты ОС в OSPackages.txt, которых нет в файле установленных пакетов.

Примечание. Я задал следующий вопрос, чтобы помочь мне с этой частью, и считаю, что теперь я довольно близок к решению: Как выполнить одностороннее сравнение в Linux?

Если diff (или другая команда) может выполнить последний шаг, она должна создать список пакетов, которых нет в ОС. Это шаг, на котором я застрял, и буду признателен за дальнейшую помощь. Какую команду я бы использовал для выполнения шага 6?


person Jonathan    schedule 26.06.2013    source источник
comment
Что определяет, не-ОС или нет? Как будто его нет ни на одном носителе RHEL DVD?\   -  person Joe    schedule 26.06.2013
comment
Да, я считаю, что это хороший способ продолжить, что это не ОС, если она не входит на DVD RHEL. Главное, на что я смотрю, это определение того, какие дополнительные пакеты были установлены помимо основных пакетов операционной системы.   -  person Jonathan    schedule 26.06.2013
comment
Как бы вы определили что-то, что было скомпилировано из исходников и установлено для всей системы?   -  person devnull    schedule 26.06.2013
comment
@devnull - Это тоже хороший вопрос, в настоящее время я использую rpm -qa, чтобы получить список пакетов (но, вероятно, это не будет включать какие-либо пакеты, установленные непосредственно из исходного кода). Если кто-то может ответить и на этот вопрос (если есть ответ), был бы очень признателен. Возможно, выполнение ls в /usr/bin, /usr/share и /usr/lib было бы хорошим началом, хотя у меня нет времени вручную сравнивать все эти списки со своим списком программного обеспечения.   -  person Jonathan    schedule 26.06.2013


Ответы (4)


rpm -qa --last | less

В нем будут перечислены недавно установленные пакеты с датой установки.

person kallumama    schedule 18.07.2013
comment
Это прекрасно работает для пакетов, управляемых через rpm, и спасибо за ваше предложение! Это все же получит все? Будет ли это также список пакетов, выпущенных много лет назад? Другая проблема заключается в том, что он не делает различий между пакетами ОС и пакетами для установленных программ (таких как антивирус). - person Jonathan; 05.06.2014

yum предоставляет некоторую полезную информацию о том, когда и откуда был установлен пакет. Если у вас есть дата установки системы, вы можете вытащить пакеты, которые были установлены после этого, а также пакеты, которые были установлены из разных источников и мест.

Придя к этому с другой стороны, вы можете запросить rpm, чтобы узнать, какие пакеты предоставляют каждый из двоичных файлов в / sbin / lib и т. Д. - любой пакет, который не предоставляет «системный» двоичный файл или библиотеку, является частью вашего начального поставить на рассмотрение.

person ocurran    schedule 26.06.2013
comment
Вы случайно не знаете команды для выполнения этих операций? Я просмотрел справочные страницы для rpm и yum и не нашел ничего полезного. До сих пор я пробовал RPM -qai, который дает слишком много информации, и это было бы трудно пройти (если бы я мог указать только дату установки, это должно помочь). yum list недавний ничего не перечисляет. - person Jonathan; 26.06.2013

Получите список настроенных идентификаторов репозитория:

yum repolist | tail -n +3 | grep -v 'repolist:' | cut -f1 -d' '

Теперь определите, какие репозитории Red Hat являются допустимыми. Как только вы это сделаете, вы можете перечислить все пакеты из этого репозитория. Например, если бы мне нужно было сделать это для официальных репозиториев Fedora, я бы перечислил имена пакетов следующим образом:

yum list installed  --disablerepo="*" --enablerepo="fedora*"

Из этого списка вы узнаете, какой пакет вы установили.

for p in $PACKAGES; do rpmls $p; done

Или вот так:

yum list installed   --disablerepo="*" --enablerepo="fedora*" \
 | cut -f1 -d' ' \
 | ( while read p; do rpmls $p; done ) \
 | cut -c13-

Так что имейте список файлов, которые должны поступать из официальных репозиториев.

Теперь вы можете перечислить все установленные файлы, используя rpm:

rpm -qal

С этими двумя списками было бы легко сравнить содержимое двух выходных данных.

person Community    schedule 24.01.2014
comment
как мне проверить, какие из репозиториев являются действительными репозиториями Red Hat? - person Jonathan; 05.06.2014
comment
Вы можете найти допустимые репозитории, просмотрев сконфигурированные репозитории в /etc/yum.repos.d/. Проверьте файлы репо, которые начинаются с rhel* - person tuxdna; 05.06.2014

Если у redhat есть эквивалент /var/log/installer/initial-status.gz в системах Ubuntu, вы можете перенести его в tmp-файл, а затем выполнить поиск установленных пакетов и выполнить команду grep -v в tmp-файле.

Один из первых скриптов, которые я написал для изучения Linux, сделал то же самое в Ubuntu:

https://gist.github.com/sysadmiral/d58388e315a6c6384053aa6b0af66c5f

Это работает в Ubuntu и может работать в других системах на основе Debian или системах, использующих менеджер пакетов aptitude. Он не работает на Redhat/CentOS, но я добавил его здесь в качестве отправной точки.

Отказ от ответственности: он не будет собирать скомпилированные вручную вещи, то есть ваш менеджер пакетов должен знать об этом, чтобы этот скрипт мог это показать.

Отказ от ответственности: пожалуйста, извините за использование tee. Я все еще изучал веревки, когда писал это, и никогда не обновлял код ради ностальгии.

person sysadmiral    schedule 04.06.2014
comment
Я посмотрел и попробовал ваш сценарий и столкнулся со следующими проблемами: похоже, что команда aptitude отсутствует в моей системе. Я также не знаю, есть ли / где есть эквивалентный файл .gz в Red Hat / CentOS (например, он, по крайней мере, не в том же месте, как описано выше). По крайней мере, это хорошая отправная точка, и, вероятно, она отлично работает в Ubuntu. - person Jonathan; 04.06.2014