Как мне получить разделенный пробелами список пакетов с ожидающими обновлениями в CentOS7 в формате, который требуется для передачи в качестве аргумента yum update-to
?
Я хочу обновить все пакеты на своем производственном сервере под управлением CentOS7. Прежде чем обновлять их при производстве, я хочу обновить их при постановке и убедиться, что изменения не нарушают работу наших серверных приложений. После проверки мы запланируем заявку на изменение для производства и запустим ту же команду / vetted yum update-to
(в отличие от потенциально недетерминированного и неидемпотентного yum update
) команда) на производстве позже.
Поэтому я пытаюсь [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
выводить формат в более удобном для пакетной обработки формате.