Назад | Перейти на главную страницу

Как вывести список пакетов, нуждающихся в обновлении, в формате для `yum update-to`

Как я могу получить список пакетов с ожидающими обновлениями в CentOS7, разделенных пробелами, в формате, необходимом для передачи в качестве аргумента в yum update-to команда?

Я хочу обновить все пакеты на своем производственном сервере под управлением CentOS7. Прежде чем обновлять их при производстве, я хочу обновить их при постановке и убедиться, что изменения не нарушают работу наших серверных приложений. После проверки мы запланируем заявку на изменение для производства и запустим тот же / проверенный yum update-to команда (в отличие от потенциально недетерминированных и неидемпотентных yum update command) в производство позднее.

Итак, я пытаюсь [a] определить все пакеты, для которых доступно обновление на моем сервере, и [b] подготовить команду, используя yum update-to в котором будут перечислены именно пакеты и их версии, которые необходимо обновить.

Вот пример yum update-to обязательный синтаксис команды:

yum update-to dbus-1.10.24-13.el7_6 dbus-libs-1.10.24-13.el7_6 java-1.8.0-openjdk-1.8.0.242.b08-1.el7 java-1.8.0-openjdk-headless-1.8.0.242.b08-1.el7 tzdata-java-2019c-1.el7 unzip-6.0-21.el7

Проблема в том, что yum update --assumeno и yum list updates оба выводят список пакетов в совершенно отличном формате, чем то, что yum update-to надеется.

Вот пример вывода вышеуказанных команд, связанных с пакетами в примере выше:

[root@cent7 ~]# yum update --assumeno | grep -E 'dbus|java|unzip'
---> Package dbus.x86_64 1:1.6.12-17.el7 will be updated
---> Package dbus.x86_64 1:1.10.24-13.el7_6 will be an update
---> Package dbus-libs.x86_64 1:1.6.12-17.el7 will be updated
---> Package dbus-libs.x86_64 1:1.10.24-13.el7_6 will be an update
---> Package java-1.8.0-openjdk.x86_64 1:1.8.0.181-3.b13.el7_5 will be updated
---> Package java-1.8.0-openjdk.x86_64 1:1.8.0.242.b08-1.el7 will be an update
--> Processing Dependency: gtk2(x86-64) for package: 1:java-1.8.0-openjdk-1.8.0.242.b08-1.el7.x86_64
---> Package java-1.8.0-openjdk-headless.x86_64 1:1.8.0.181-3.b13.el7_5 will be updated
---> Package java-1.8.0-openjdk-headless.x86_64 1:1.8.0.242.b08-1.el7 will be an update
--> Processing Dependency: pcsc-lite-libs(x86-64) for package: 1:java-1.8.0-openjdk-headless-1.8.0.242.b08-1.el7.x86_64
--> Processing Dependency: cups-libs(x86-64) for package: 1:java-1.8.0-openjdk-headless-1.8.0.242.b08-1.el7.x86_64
---> Package tzdata-java.noarch 0:2017b-1.el7 will be updated
---> Package tzdata-java.noarch 0:2019c-1.el7 will be an update
---> Package unzip.x86_64 0:6.0-16.el7 will be updated
---> Package unzip.x86_64 0:6.0-21.el7 will be an update
 dbus                     x86_64 1:1.10.24-13.el7_6              base     245 k
 dbus-libs                x86_64 1:1.10.24-13.el7_6              base     169 k
 java-1.8.0-openjdk       x86_64 1:1.8.0.242.b08-1.el7           base     293 k
 java-1.8.0-openjdk-headless
 tzdata-java              noarch 2019c-1.el7                     base     187 k
 unzip                    x86_64 6.0-21.el7                      base     171 k
[root@cent7 ~]# 
[root@cent7 ~]# yum list updates | grep -E 'dbus|java|unzip'
dbus.x86_64                           1:1.10.24-13.el7_6                base    
dbus-libs.x86_64                      1:1.10.24-13.el7_6                base    
java-1.8.0-openjdk.x86_64             1:1.8.0.242.b08-1.el7             base    
java-1.8.0-openjdk-headless.x86_64    1:1.8.0.242.b08-1.el7             base    
tzdata-java.noarch                    2019c-1.el7                       base    
unzip.x86_64                          6.0-21.el7                        base    
[root@cent7 ~]# 

Как мне перевести вывод пакетов и их версий из yum update --assumeno или yum list updates в формате, принятом yum update-to?

Это решение с sed и awk работает:

[root@cent7 ~]# pkgs=`yum -q list updates 2>&1 | tail -n+2 | awk '{print $1 "|" $2}' | sed 's/\.[^.]*|\(.*\:\)*/-/' | tr "\n" " "`
[root@cent7 ~]# echo "yum update-to $pkgs"
yum update-to dbus-1.10.24-13.el7_6 dbus-libs-1.10.24-13.el7_6 java-1.8.0-openjdk-1.8.0.242.b08-1.el7 java-1.8.0-openjdk-headless-1.8.0.242.b08-1.el7 tzdata-java-2019c-1.el7 unzip-6.0-21.el7 
[root@cent7 ~]# 

Но я надеюсь, что кто-то сможет придумать лучшее решение, в котором меньше взлома. В идеале решение будет таким, которое сообщает yum для вывода формата в более удобном для партии формате.