Найти используемые пакеты (ООН) на CentOS/Fedora?

Короче говоря: От весь (об/мин), которого установили пакеты, я хотел бы определить тех неиспользованных (например, с прошлых 6 месяцев).

В долго: у Меня есть количество машин с респектабельной служебной книжкой. Каждый раз, когда я обновляю от одного выпуска до другого, я удивлен, как хорошо процедура обновления идет.

Однако за эти годы много пакетов были установлены (через конфетку), много, которые я, больше знаю не используются. Я хочу избавиться от них, поскольку они оказывают негативное влияние на использование ресурсов и полную безопасность системы.

Я ищу лучший метод для нахождения неиспользованных пакетов.

Один путь состоял бы в том, чтобы вручную отсеять через установленные пакеты? Метод работает, и я изучаю много, но его чрезвычайно трудоемкое.

Таким образом, я ищу автоматизированный способ определить неиспользованные пакеты, таким образом, я могу убрать их вручную.

Я предполагаю, что один путь вперед состоял бы в том, чтобы контролировать все используемые файлы на сервере, связать их с пакетами и видеть то, что является оставшимся. Действительно ли там что-нибудь доступно с этой целью?

Там более изобретательные пути состоят в том, чтобы выполнить это?

3
задан 30 December 2014 в 12:00
2 ответа

Я не знаю, есть ли на это правильный ответ ...

Важно отметить, что посторонние пакеты часто устанавливаются во многих развертываниях Linux общего назначения.

Большинство инженеров не выбирают вручную отдельные пакеты программного обеспечения, которые устанавливаются, а выбирают логические группы приложений (веб-сервер, почтовый сервер, сервер NFS) или системные роли ( сервер, рабочая станция, минимальная) .

Существуют также зависимости, которые устанавливаются как часть вышеуказанного выбора. Само понятие «неиспользуемые» пакеты чревато из-за этого.

Безопасность зависит не только от того, что установлено ... Это больше функция того, что на самом деле работает в системе; а именно демоны, сетевые службы, открытые порты, процессы и т. д.

С точки зрения использования ресурсов, вы теряете дисковое пространство только из-за установки неиспользуемого программного обеспечения. Процесс не будет потреблять ресурсы ЦП или ОЗУ, пока не будет выполнен. Так что последствия невелики. Если бы я был работодателем / менеджером, я бы посоветовал обратить ваше внимание на другие вещи. Не это.

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

фрагмент из одного из моих списков пакетов кикстарта, с группами пакетов и несколькими дополнительными пакетами ...

%packages

@ base
@ core
@ cifs-file-server
@ compat-libraries
@ console-internet
@ development
@ mail-server
@ nfs-file-server
@ network-server
@ network-tools
@ system-management
@ system-admin-tools
@ web-server

yum-fastestmirror
rpm-devel
e2fsprogs
grub
kernel-devel
net-snmp-utils
screen
4
ответ дан 3 December 2019 в 04:44

Учитывая характер RPM и разделяемых библиотек, общих для нескольких пакетов, я бы выбрал подход к созданию списка пакетов, которые я действительно использую, и сравните это со списком установленных пакетов. Удаление неиспользуемых пакетов дает преимущества, такие как освобождение дискового пространства, уменьшение количества пакетов, которые облегчат повышение привилегий, уменьшение размера базы данных контрольных сумм, то есть OSSEC, помощника, tripwire.

Предположение :

  • время есть включен. Если вы используете параметр монтирования noatime, то время доступа к файлам не будет обновляться и не может быть использовано для определения того, к каким файлам осуществляется доступ. Обычно noatime устанавливается в файловой системе, чтобы избежать штрафа за запись.

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

Составьте список всех установленных RPM.

rpm -qa | sort -n > /dev/shm/all.txt

Создайте список недавно использованных файлов и сохраните счетчик. Мы приближаемся к новому году, так что вы можете посмотреть на прошлый год.

YEAR=`date -d "one year ago" '+%Y'`
# YEAR=2014
OFS="$IFS";IFS=$'\n';stat --printf="%y %n\n" $(ls -tr $(find /bin /boot /etc /lib /lib64 /sbin /usr /var -type f ! -name "*~" ! -name "*.gz" ! -name "*.tar")) | grep ^${YEAR} | awk {'print $NF'} > /dev/shm/recent.txt;IFS="$OFS";
FILECOUNT=`egrep -c ^.+ /dev/shm/recent.txt`

Скопируйте нашу базу данных RPM на RAM-диск, чтобы мы не злоупотребляли сервером. Убедитесь, что у вас есть как минимум 100 МБ свободного места или около того. например df -Ph / dev / shm

mkdir --mode=0700 /dev/shm/rpmdb
rsync -a /var/lib/rpm/. /dev/shm/rpmdb/.

Найдите пакеты RPM, связанные с нашим списком latest.txt. Это займет некоторое время. Бьюсь об заклад, кто-то может найти более эффективные, быстрые и умные способы сделать этот шаг. Я бы сделал это в сеансе просмотра экрана.

renice 19 -p $$ > /dev/null 2>&1
printf "${FILECOUNT} files to iterate through."
> /dev/shm/recent_packages.txt
for file in `cat /dev/shm/recent.txt`
do
rpm --dbpath /dev/shm/rpmdb -q --whatprovides ${file} >> /dev/shm/recent_packages.txt 2>/dev/null
# optional status indicator.
printf "."
done

Удалите из нашего списка файлы, не принадлежащие пакету RPM, из результатов поиска.

grep -v "not owned by" /dev/shm/recent_packages.txt | sort -n | uniq > /dev/shm/recent_sorted.txt

Различите результат. Опять же, это не совсем полезно само по себе. Вам нужно будет определить, почему файлы из этих пакетов не были доступны.

diff -u /dev/shm/recent_sorted.txt /dev/shm/all.txt | grep '^+'

Вы можете просмотреть содержимое RPM с помощью rpm -ql package .Вот результат на одной из моих виртуальных машин. Как видите, в моем случае это не совсем полезно.

+++ /dev/shm/all.txt    2014-12-31 20:50:06.521227281 +0000
+basesystem-10.0-4.el6.noarch
+dhcp-common-4.1.1-43.P1.el6.centos.x86_64
+filesystem-2.4.30-3.el6.x86_64
+rootfiles-8.1-6.1.el6.noarch

Мне нужно сохранить файловую систему и базовую систему, несмотря на то, что к этим файлам не обращались какое-то время. Примечание. В какой-то момент я включил noatime

. Я удалил dhcp-common и связанный с ним пакет dhclient, так как мне никогда не понадобится DHCP в моем конкретном случае использования. Я понимаю, что этот метод не совсем эффективен, но он должен дать вам отправную точку для каждой уникальной роли ваших серверов. С Новым годом!

9
ответ дан 3 December 2019 в 04:44

Теги

Похожие вопросы