Вопрос или проблема
У меня есть проблемный RPM, который удаляет файлы установки при обновлении. Я хочу выполнить yum update pkg-name
, но не хочу запускать секцию %preun
. Это возможно с помощью yum? Если да, то какой флаг?
Я установил плагин yum-downloadonly
:
# yum install yum-downloadonly
А затем я указал ему скачать пакет в /opt
:
# yum update pkg-name -y --downloadonly --downloaddir=/opt
Опция -y
означает “Предположить да”
Затем я выполнил rpm -i --nopreun /opt/pkgname
Не с yum
, но вы можете скачать rpm и попробовать запустить
rpm с опцией “--noscripts
“.
ИЗМЕНЕНИЕ: по вашему комментарию, существует также переключатель --nopreun
для команды rpm
С помощью yum нет, но вы можете использовать yumdownloader
для получения пакета и всех зависимостей (доступно в пакете yum-utils
), а затем вручную запустить rpm
.
Попробуйте
yum --setopt=tsflags=noscripts remove $pkgname
Это не выполнит никаких скриптов.
Ответ или решение
Для ответа на вопрос о том, существует ли эквивалент флага --nopreun
из команды rpm
при использовании yum
, важно рассмотреть специфику работы этих инструментов управления пакетами в системах на основе RPM.
Понимание контекста
При обновлении пакета с помощью yum
, программа по умолчанию выполняет скрипты, связанные с установкой и удалением пакетов, такие как %pre
, %post
, %preun
и %postun
. Это может быть проблемой, если в скрипте %preun
присутствуют команды, которые, например, удаляют важные установки или данные, что может привести к непредсказуемым последствиям при апгрейде.
Решение проблемы с yum
На данный момент функциональность yum
, которая позволила бы полностью пропустить выполнение определённых скриптов, включая preun
, не предусмотрена. Однако вы можете использовать комбинированный подход, включающий загрузку пакета без установки скриптов, если ваш основной приоритет заключается в обновлении пакета без выполнения его скриптов.
Применение команды yumdownloader
Для начала, стоит упомянуть о том, что вы можете воспользоваться yumdownloader
, который является частью пакета yum-utils
. Эта утилита позволяет загружать пакеты без их установки. Пример использования:
yum install yum-utils
yumdownloader pkg-name
После загрузки RPM-файла вы можете использовать команду rpm
с флагом --nopreun
.
Установка RPM с --nopreun
Сначала скачайте нужный пакет, а затем установите его с использованием rpm
:
rpm -i --nopreun ./pkgname.rpm
Этот процесс позволит обойти проблемы, связанные с удалением файлов во время процесса обновления.
Альтернативные варианты
Если вы не хотите вручную загружать пакет через yumdownloader
, вы можете попробовать следующие методы для управления скриптами:
-
Флаги
tsflags
: Например, можно установить флаг--setopt=tsflags=noscripts
. Это не совсем то же самое, что и--nopreun
, но позволит избежать выполнения всех скриптов:yum --setopt=tsflags=noscripts update pkg-name
-
Использование
yum
для удаления: Если ваш пакет необходимо удалить перед обновлением, и вы хотите, чтобы все скрипты были проигнорированы, используйте:yum --setopt=tsflags=noscripts remove pkg-name
Заключение
Таким образом, в текущей реализации yum
нет прямого эквивалента команды rpm --nopreun
, который позволял бы избежать выполнения предшествующих скриптов при обновлении пакетов. Однако использовать yumdownloader
для предварительной загрузки пакета, а затем установить его через rpm
, или работать с флагами, как описано выше, может стать отличной альтернативой. Эти методы помогут избежать нежелательных последствий, связанных с выполнением скриптов, и позволят более контролируемо подходить к управлению пакетами в вашей системе.