Я хотел обновить некоторые RPM в моей системе на базе Redhat / Linux. Некоторые пакеты RPM могут уже существовать, некоторые должны быть установлены недавно, а некоторые необходимо обновить до более высокой версии с помощью команды обновления RPM.
Например :
I have placed rpms to be installed in folder <rpms>
/rpms/X-1.rpm (This is already installed in system)
/rpms/Y-1.rpm (This is NOT present in system. This is NEW)
/rpms/Z-2.rpm (This is need to be upgraded to higher version available,
Z-1.rpm is installed in system)
/rpms/Q-1.rpm (This is already installed in system)
Я запускаю команду ниже в файле оболочки (.sh)
$rpm -Uvh /rpms/*
Это показано ниже после выполнения
Preparing... ################################### [100%]
package X-1 is already installed
package Q-1 is already installed
Но он не устанавливает Y-1 и не может перейти на Z-2.
Пожалуйста, дайте мне знать, что нужно сделать с командой -Uvh, чтобы она работала? Какое было бы наилучшее решение для вышеуказанного сценария?
да, yum (или даже dnf, если он доступен) было бы лучше, если вы все еще хотите использовать rpm, вы можете попробовать добавить --replacepkgs, он переустановит уже существующие пакеты presnet, но, по крайней мере, не будет игнорировать два других
Я не вижу причин, по которым люди отстают, чтобы закрыть вопрос. Пожалуйста, не следуйте за толпой, чтобы закрыть вопрос. -Uvh команда пропускает установку, и я не нахожу объяснений ни в одном документе RedHat. Поэтому я пришел сюда.
@larsks Но команда rpm должна обновить все rpm, упомянутые в каталоге, но она пропускает новые и обновленные rpm. Он просто находит существующие. Думаю, что проблема с командой rpm.
@OomphFortuity: я бы ожидал, что команда будет работать, но разве нет другого выхода? обычно rpm должен указывать причину, по которой он не устанавливает эти пакеты.
Вариант --replacepkgs - это то, что вы ищете (но я бы просто переместил rpms, которые уже установлены, из папки rpms/)





rpm отказывается запускать неправильно заданную (потому что два запрошенных пакета уже установлены) команду и, следовательно, пропускает возможные установки / обновления.
Вы ожидаете, что rpm интуитивно поймет, что вы имели в виду под командой.
По сути, нет способа точно определить, что было задумано, по скорости вращения.
Вы хотели переустановить уже установленные (и, возможно, измененные / поврежденные) пакеты или нет? (Используйте --force или --reinstall, чтобы переустановить уже установленные пакеты).
Вы хотели обновить только уже установленные пакеты, игнорируя удаленные пакеты? (Используйте --freshen.)
Вы хотите, чтобы rpm предполагал, что пакеты в списке аргументов --upgrade будут установлены, даже если нет предыдущей версии для обновления (как запрошено)?
Поведение «Делай то, что я имею в виду» (DWIM) не может быть реализовано для всеобщего удовлетворения. RPM придерживается консервативного подхода и завершает работу, не устанавливая Y-1 и не обновляя Z-2, базовый союз ничего не делает и возвращает код ошибки.
Вам действительно следует использовать
yumдля обработки обновлений (потому что он будет обрабатывать обновленные зависимости и потому что yum поддерживает метаданные, которые не поддерживаются rpm).