dnf эквивалент «yum update --security»


13

yum update --securityустанавливает только обновления безопасности. Я думаю, что это расширение от плагина yum-security.

Есть ли эквивалентная команда dnf? (dnf заменил yum в Fedora 22)


1
JFTR: bugzilla.redhat.com/show_bug.cgi?id=1234930 , эта функция доступна только в DNF 2 и готовящейся к выпуску Fedora 26
Sérgio

1
Теперь обновите dnf --enablerepo = updates-testing --advisory = FEDORA-2019-7cafbe66ba
Сержио

Ответы:


7

Основано на http://forums.fedoraforum.org/showthread.php?t=305905

#!/bin/bash

SECURITY_UPDATES_LIST=$( dnf --refresh -q updateinfo list sec | awk '{print $3}' )
SECURITY_UPDATES_NUM=`echo "$SECURITY_UPDATES_LIST" | sed '/^$/d' | wc -l`

if [ "$SECURITY_UPDATES_NUM" -eq 0 ]; then
  exit
fi

dnf upgrade -y $SECURITY_UPDATES_LIST
  • --refresh принудительная синхронизация репо
  • -y установить автоматически
  • SECURITY_UPDATES_NUM уточненный / исправленный метод подсчета, работает для 0/1 / бесконечность

1
Так же, как однострочный в bash ( -yи --refreshможет быть добавлен):up=$(sudo dnf -q updateinfo list sec | awk '{print $3}'); [[ $up ]] && sudo dnf upgrade $up
marcin

В качестве однострочного псевдонимаalias security-update="pkgs=\$(sudo dnf --refresh -q updateinfo list sec | awk '{print \$3}'); [[ \$pkgs ]] && sudo dnf upgrade -y \$pkgs"
Уэстон Гангер

10

Вы можете использовать dnf-automatic с тремя настройками:

apply_updates = yes
download_updates = yes
upgrade_type = security

(Файл конфигурации по умолчанию - /etc/dnf/automatic.conf)

или используя:

dnf updateinfo list security

чтобы получить все доступные обновления, затем обновите их вручную.


1

Вы можете поместить dnf updateinfo list updates securityцикл for в скрипт cli или bash. Я все еще настоятельно рекомендую просмотреть обновления безопасности, но вы всегда можете разрешить добавить -yкомандуdnf update

это то, что работает для меня в зависимости от некоторых потребностей:

for i in $(dnf updateinfo list updates security | grep -Ei ^fedora | cut -d' ' -f3) ; do dnf update $i; done

Или немного короче с awk (учтите, что это не работает с --refresh)

for i in $(dnf updateinfo list updates security | awk 'NR>1 {print $3}') ; do dnf update $i; done

для днф --refresh

for i in $(dnf updateinfo list updates security| dnf updateinfo list updates security| awk 'NR>1 {print $3}') ; do dnf update $i; done

0

Предложенные ранее методы не удовлетворяли в моем случае. Вы можете попробовать это, и это, возможно, более совершенным. Создайте файл с именем «dnfupdate-security», затем вставьте строки Python ниже или выполните cmd:

cmd1: sudo touch / usr / bin / dnfupdate-security && sudo chmod + x / usr / bin / dnfupdate-security

cmd2: sudo gedit / usr / bin / dnfupdate-security

Затем вставьте код Python в файл 'dnfupdate-security', сохраните его

Выполнение cmd: sudo dnfupdate-security

#!/usr/bin/python
"""
DESCRIPTION: Check for security updates and insert all the packages into "dnf update" as argument.
"""
import os

updateList = ''; x = ''

for x in os.popen("dnf -q updateinfo list sec | awk '{print $3}'"):
    x = x.strip()
    updateList = updateList+' '+x

if x != '':
    os.system('dnf update '+updateList)
else:
    print 'No security updates available at this time!'

1
"более совершенный"?
don_crissti

Это более совершенное решение дает IndentationError (потому что import osнаходится не в начале строки (даже если вы удалите 3 начальных пробела из каждой строки). И даже если я исправлю несоответствующие отступы, я получу SyntaxError.
Anthon

Отбрасывание старых ответов - это не то, что вы должны делать. Некоторые люди могут думать то же самое о вашем коде, то есть это отстой.
MelBurslan

Вся критика принята положительно. Я сделал несколько правок. Я проверил все, и это должно работать на системах, основанных на fedora / redhat ... Я не хотел сказать, что метод раньше не работал, но в моем случае - отстой ?! :)
LecTos Lacius

поэтому вы помещаете команды оболочки из ответа Tomot в сценарии Python, изменяющиеся dnf upgrade -yна dnf update. Есть еще существенные отличия?
Marcin
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.