Как заставить RPM игнорировать неустановленные пакеты при выполнении команды rpm --erase?

Как заставить RPM игнорировать неустановленные пакеты при выполнении команды rpm --erase?

У меня есть список из примерно 30 «нежелательных» пакетов, которые я всегда стираю/удаляю/удаляю в недавно установленной системе Linux на основе RPM.

Однако, когда я пробую --eraseкоманду, например (намеренно сокращено)

# rpm -e sos abrt abrt-libs abrt-python abrt-dbus abrt-addon-xorg abrt-tui abrt-addon-ccpp abrt-cli abrt-console-notification abrt-addon-kerneloops abrt-retrace-client abrt-addon-vmcore abrt-addon-pstoreoops abrt-addon-python
error: package abrt is not installed
error: package abrt-libs is not installed
error: package abrt-python is not installed
error: package abrt-dbus is not installed
error: package abrt-addon-xorg is not installed
error: package abrt-tui is not installed
error: package abrt-addon-ccpp is not installed
error: package abrt-cli is not installed
error: package abrt-console-notification is not installed
error: package abrt-addon-kerneloops is not installed
error: package abrt-retrace-client is not installed
error: package abrt-addon-vmcore is not installed
error: package abrt-addon-pstoreoops is not installed
error: package abrt-addon-python is not installed
Exit 14

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

Конечно, я мог бы попытаться обойти это, например

echo sos abrt abrt-libs abrt-python abrt-dbus abrt-addon-xorg abrt-tui abrt-addon-ccpp abrt-cli abrt-console-notification abrt-addon-kerneloops abrt-retrace-client abrt-addon-vmcore abrt-addon-pstoreoops abrt-addon-python | xargs --max-args=1 rpm -e

но я бы предпочел игнорировать несуществующие пакеты.

Как это сделать? --forceне работает при стирании:

# rpm -e --force sos abrt abrt-libs abrt-python abrt-dbus abrt-addon-xorg abrt-tui abrt-addon-ccpp abrt-cli abrt-console-notification abrt-addon-kerneloops abrt-retrace-client abrt-addon-vmcore abrt-addon-pstoreoops abrt-addon-python
rpm: only installation and upgrading may be forced
Exit 1

решение1

Я думаю, это то, что вы искали. Эта версия просто выводит список пакетов, которые соответствуют установленным.

#- for pkg in sos abrt abrt-libs abrt-python abrt-dbus abrt-addon-xorg abrt-tui abrt-addon-ccpp abrt-cli abrt-console-notification abrt-addon-kerneloops abrt-retrace-client abrt-addon-vmcore abrt-addon-pstoreoops abrt-addon-python; do rpm --quiet -q "$pkg" && echo "$pkg"; done
abrt
abrt-libs
abrt-dbus
abrt-addon-xorg
abrt-tui
abrt-addon-ccpp
abrt-cli
abrt-console-notification
abrt-addon-kerneloops
abrt-retrace-client
abrt-addon-vmcore
abrt-addon-pstoreoops

Вы можете использовать вышеприведенную информацию для создания списка имен пакетов, которые затем можно будет использовать rpmдля стирания (т. е. удаления):

#- rpm -e --nodeps $(for pkg in sos abrt abrt-libs abrt-python abrt-dbus abrt-addon-xorg abrt-tui abrt-addon-ccpp abrt-cli abrt-console-notification abrt-addon-kerneloops abrt-retrace-client abrt-addon-vmcore abrt-addon-pstoreoops abrt-addon-python; do rpm --quiet -q "$pkg" && echo "$pkg"; done)
Removed /etc/systemd/system/multi-user.target.wants/abrt-journal-core.service.
Removed /etc/systemd/system/multi-user.target.wants/abrt-xorg.service.
Removed /etc/systemd/system/multi-user.target.wants/abrt-vmcore.service.
Removed /etc/systemd/system/multi-user.target.wants/abrt-oops.service.
Removed /etc/systemd/system/multi-user.target.wants/abrtd.service.

Обратите внимание, что эта простая версия не обрабатывает обработку зависимостей. Если вам нужно обрабатывать зависимости, вам, вероятно, следует просто переключиться на DNF (или YUM), поскольку именно для этого и были созданы эти инструменты.

Связанный контент