GNU/Linux >> Znalost Linux >  >> Linux

Správa záplat Linuxu:Jak vycouvat z neúspěšné opravy

Udržování aktuálních serverů je jednou z hlavních povinností správce systému. Aktualizace však ne vždy fungují tak, jak očekáváte, takže je stejně důležité, abyste věděli, jak a) vrátit opravu, aby se server vrátil do předchozího stavu, ab) aplikovat opravy v podmnožinách, abyste získali větší flexibilitu.

Tento článek se zaměřuje na opravy na úrovni operačního systému provedené pomocí nástrojů pro správu balíčků YUM/DNF na Red Hat Enterprise Linux (RHEL). Pro tuto ukázku je spuštěný server RHEL 7.7 aktualizován na RHEL 7.9 pomocí yum a poté se vrátil zpět k verzi RHEL 7.7. Vždy se doporučuje provádět pravidelné zálohování serverů a ukázky uvedené v tomto článku slouží pouze pro vzdělávací účely.

Zkontrolujte, zda na serveru nejsou čekající opravy/aktualizace

Pokud nepoužíváte nástroj pro správu systémů, jako je Red Hat Satellite, musíte servery otestovat na případné aktualizace ručně.

Pro tento článek zvažte server RHEL 7.7:

[root@rhel77 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.7 (Maipo) 

Použijte check-update příkaz k neinteraktivní kontrole zbývajících aktualizací na vašem serveru:

[root@rhel77 ~]# yum check-update Loaded plugins: product-id, search-disabled-repos, subscription-manager NetworkManager.x86_64                                        1:1.18.4-3.el7                          rhel-7-server-rpms NetworkManager-config-server.noarch                          1:1.18.4-3.el7                          rhel-7-server-rpms NetworkManager-libnm.x86_64                                  1:1.18.4-3.el7                          rhel-7-server-rpms NetworkManager-team.x86_64                                   1:1.18.4-3.el7                          rhel-7-server-rpms kernel-tools-libs.x86_64                                     3.10.0-1127.19.1.el7                    rhel-7-server-rpms kexec-tools.x86_64                                           2.0.15-43.el7                           rhel-7-server-rpms kmod.x86_64                                                  20-28.el7                               rhel-7-server-rpms kmod-libs.x86_64                                             20-28.el7                               rhel-7-server-rpms kpartx.x86_64                                                0.4.9-131.el7                           rhel-7-server-rpms krb5-libs.x86_64                                             1.15.1-46.el7                           rhel-7-server-rpms …. …. …. systemd.x86_64                                               219-73.el7_8.9                          rhel-7-server-rpms systemd-libs.x86_64                                          219-73.el7_8.9                          rhel-7-server-rpms systemd-sysv.x86_64                                          219-73.el7_8.9                          rhel-7-server-rpms tcpdump.x86_64                                               14:4.9.2-4.el7_7.1                      rhel-7-server-rpms teamd.x86_64                                                 1.29-1.el7                              rhel-7-server-rpms tuned.noarch                                                 2.11.0-8.el7                            rhel-7-server-rpms tzdata.noarch                                                2020a-1.el7                             rhel-7-server-rpms util-linux.x86_64                                            2.23.2-63.el7                           rhel-7-server-rpms yum.noarch                                                   3.4.3-167.el7                           rhel-7-server-rpms yum-utils.noarch                                             1.1.31-54.el7_8                         rhel-7-server-rpms Obsoleting Packages iwl7260-firmware.noarch                                      25.30.13.0-76.el7                       rhel-7-server-rpms     iwl7265-firmware.noarch                                  22.0.7.0-72.el7                         installed     

[ Také by se vám mohlo líbit: Red Hat Insights:Správa zranitelnosti ]

Když byl napsán tento článek, RHEL 7.9 byla nejnovější verze RHEL 7 a prováděla yum update by tento server RHEL 7.7 převedl na RHEL 7.9:

[root@rhel77 ~]# yum -y update
Loaded plugins: product-id, search-disabled-repos, subscription-manager
Resolving Dependencies
--> Running transaction check
---> Package NetworkManager.x86_64 1:1.18.0-5.el7 will be updated
---> Package NetworkManager.x86_64 1:1.18.8-1.el7 will be an update
---
Complete! 

Po úspěšném restartu zkontrolujte verzi RHEL a ověřte, že je server aktualizován na 7.9:

[root@rhel77 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.9 (Maipo) 

Obnovení aktualizací

Nejprve zkontrolujte historii transakce pomocí yum příkaz:

[root@rhel77 ~]# yum history
Loaded plugins: product-id, search-disabled-repos, subscription-manager
ID     | Login user               | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     8 | root <root>              | 2020-11-01 23:10 | I, O, U        |  157 EE 

Sloupce Action(s) a Altered poskytují informace o tom, jaké změny nastaly s touto transakcí.

Akce:

  • I – Nainstalován nový balíček
  • O – Balíček je zastaralý
  • U – Balíček je aktualizován

Změněno:

  • 157 balíčků bylo změněno
  • EE – V transakci se vyskytly nějaké chyby/upozornění

Pomocí yum history packages-list ukazuje změny, ke kterým došlo z pohledu daného balíčku.

Jako systemd je první proces spuštěný v RHEL verze 7 a vyšší, tento balíček je chráněn pomocí /etc/yum/protected.d/systemd.conf :

[root@rhel77 ~]# cat /etc/yum/protected.d/systemd.conf
systemd 

Vraťte poslední transakci pomocí yum history undo :

[root@rhel77 ~]# yum history undo last
Loaded plugins: product-id, search-disabled-repos, subscription-manager
Undoing transaction 8, from Sun Nov  1 23:10:56 2020
    Updated     NetworkManager-1:1.18.0-5.el7.x86_64                        @?rhel-7-server-rpms
    Update                     1:1.18.8-1.el7.x86_64                        @rhel-7-server-rpms
    Updated     NetworkManager-config-server-1:1.18.0-5.el7.noarch          @?rhel-7-server-rpms
    Update                                   1:1.18.8-1.el7.noarch          @rhel-7-server-rpms
    Updated     NetworkManager-libnm-1:1.18.0-5.el7.x86_64                  @?rhel-7-server-rpms
....
Resolving Dependencies
--> Running transaction check
…
--> Finished Dependency Resolution
Error: Trying to remove "systemd", which is protected 

Pozor :Následující proces není podporován a není testován. Vyřešte všechny problémy, které vzniknou při přechodu na nižší verzi, obnovením ze zálohy nebo přeinstalací.

Přesuňte yum konfigurační soubor, který chrání systemd:

[root@rhel77 ~]# mv /etc/yum/protected.d/systemd.conf /etc/yum/protected.d/systemd.conf.bak 

Znovu spusťte yum history undo last příkaz:

[root@rhel77 ~]# yum history undo last
Loaded plugins: product-id, search-disabled-repos, subscription-manager
Undoing transaction 8, from Sun Nov  1 23:10:56 2020
....
Skipping the running kernel: kernel-3.10.0-1160.2.2.el7.x86_64
....

Dependencies Resolved

=======================================================================================================================
 Package                                    Arch       Version                           Repository               Size
=======================================================================================================================
Installing:
 iwl7265-firmware                           noarch     22.0.7.0-72.el7                   rhel-7-server-rpms      7.3 M
Removing:
 bc                                         x86_64     1.06.95-13.el7                    @rhel-7-server-rpms     215 k
 iwl7260-firmware                           noarch     25.30.13.0-79.el7                 @rhel-7-server-rpms      87 M
 linux-firmware                             noarch     20200421-79.git78c0348.el7        @rhel-7-server-rpms     394 M
Downgrading:
 NetworkManager                             x86_64     1:1.18.0-5.el7                    rhel-7-server-rpms      1.9 M
 NetworkManager-config-server               noarch     1:1.18.0-5.el7                    rhel-7-server-rpms      149 k
 NetworkManager-libnm    
…

Transaction Summary
=======================================================================================================================
Install      1 Package
Remove       3 Packages
Downgrade  152 Packages
…
Running transaction
  Installing : libgcc-4.8.5-39.el7.x86_64                                                                        1/308
  Installing : 1:grub2-common-2.02-0.80.el7.noarch                                                               2/308
  Installing : redhat-release-server-7.7-10.el7.x86_64                                                           3/308
warning: /etc/os-release saved as /etc/os-release.rpmsave
  Installing : setup-2.8.71-10.el7.noarch                                                                        4/308
warning: /etc/shadow created as /etc/shadow.rpmnew
  Installing : 1:grub2-pc-modules-2.02-0.80.el7.noarch   
....
yum-utils.noarch 0:1.1.31-52.el7                   

Complete! 

Restartujte server

Zkontrolujte verzi RHEL a jádra:

[root@rhel77 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.7 (Maipo)

[root@rhel77 ~]# rpm -q kernel
kernel-3.10.0-1062.el7.x86_64
kernel-3.10.0-1160.2.2.el7.x86_64

[root@rhel77 ~]# uname -r
3.10.0-1160.2.2.el7.x86_64 

Server používá nejnovější verzi jádra z RHEL 7.9. Výchozí jádro můžete změnit pomocí grub2-set-default příkaz.

Aplikujte opravu v podmnožinách, abyste získali větší flexibilitu vrácení zpět

Připnutí RHEL ke konkrétní verzi je jedním ze způsobů, jak zabránit aktualizaci systému na nejnovější vedlejší verzi. Subscription Manager lze použít k nastavení verze RHEL:

[root@rhel77 ~]# subscription-manager release --list
+-------------------------------------------+
          Available Releases
+-------------------------------------------+
7.0
7.1
7.2
7.3
7.4
7.5
7.6
7.7
7.8
7.9
7Server 

Před připnutím verze zkontrolujte dostupné aktualizace a stav úložiště:

[root@rhel77 ~]# yum update
...
Transaction Summary
=======================================================================================================================
Install    2 Packages (+2 Dependent packages)
Upgrade  152 Packages


[root@rhel77 ~]# subscription-manager repos --list-enabled
Repo ID:   rhel-7-server-rpms
Repo Name: Red Hat Enterprise Linux 7 Server (RPMs)
Repo URL:  https://cdn.redhat.com/content/dist/rhel/server/7/latest/$basearch/os
Enabled:   1 

Připněte verzi k RHEL 7.8, vymažte yum cache a zkontrolujte povolená úložiště:

[root@rhel77 ~]# subscription-manager release --set=7.8

[root@rhel77 ~]# yum clean all

[root@rhel77 ~]# subscription-manager repos --list-enabled
Repo ID:   rhel-7-server-rpms
Repo Name: Red Hat Enterprise Linux 7 Server (RPMs)
Repo URL:  https://cdn.redhat.com/content/dist/rhel/server/7/7.8/$basearch/os
Enabled:   1 

Je to zřejmé z adresy URL úložiště výstup výše, že nyní používá 7.8 a ne latest .

Spusťte yum update a zkontrolujte, zda jsou dostupné změny v aktualizacích:

[root@rhel77 ~]# yum update
....
Transaction Summary
=======================================================================================================================
Install    2 Packages (+1 Dependent package)
Upgrade  136 Packages 

Záplatování v podmnožinách

Historie možnost pomocí yum používá transakci k vrácení/zrušení operace. Aktualizace balíčků jako podmnožin tedy poskytuje flexibilitu pro jejich vrácení zpět. Je to lepší přístup než aktualizace systému jako celku.

Aktualizujte balíček 'device-mapper' pomocí update device-mapper .

[root@rhel77 ~]# yum update device-mapper

Loaded plugins: product-id, search-disabled-repos, subscription-manager
Resolving Dependencies
--> Running transaction check
---> Package device-mapper.x86_64 7:1.02.158-2.el7 will be updated
--> Processing Dependency: device-mapper = 7:1.02.158-2.el7 for package: 7:device-mapper-libs-1.02.158-2.el7.x86_64
---> Package device-mapper.x86_64 7:1.02.170-6.el7 will be an update
--> Running transaction check
---> Package device-mapper-libs.x86_64 7:1.02.158-2.el7 will be updated
---> Package device-mapper-libs.x86_64 7:1.02.170-6.el7 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

=======================================================================================================================
 Package                        Arch               Version                        Repository                      Size
=======================================================================================================================
Updating:
 device-mapper                  x86_64             7:1.02.170-6.el7               rhel-7-server-rpms             297 k
Updating for dependencies:
 device-mapper-libs             x86_64             7:1.02.170-6.el7               rhel-7-server-rpms             325 k

Transaction Summary
=======================================================================================================================
Upgrade  1 Package (+1 Dependent package)

Total download size: 621 k
Is this ok [y/d/N]: 

Zkontrolujte historii pomocí yum history .

[root@rhel77 ~]# yum history
Loaded plugins: product-id, search-disabled-repos, subscription-manager
ID     | Login user               | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     2 | root <root>              | 2020-11-02 15:25 | Update         |    2   
     1 | System <unset>           | 2020-09-14 04:25 | Erase          |    1 EE
history list 

Získejte konkrétnější podrobnosti o transakci ID 2 pomocí yum history info 2 .

[root@rhel77 ~]# yum history info 2
Loaded plugins: product-id, search-disabled-repos, subscription-manager
Transaction ID : 2
Begin time     : Mon Nov  2 15:25:12 2020
Begin rpmdb    : 345:fc299a705f95203fda639ed1153803ad6771d7fb
End time       :            15:25:14 2020 (2 seconds)
End rpmdb      : 345:f8faef254573c0653a624c30ee393b08bb365ab2
User           : root <root>
Return-Code    : Success
Command Line   : update device-mapper
Transaction performed with:
    Installed     rpm-4.11.3-40.el7.x86_64                  installed
    Installed     subscription-manager-1.24.13-1.el7.x86_64 installed
    Installed     yum-3.4.3-163.el7.noarch                  installed
Packages Altered:
    Updated device-mapper-7:1.02.158-2.el7.x86_64      @?rhel-7-server-rpms
    Update                7:1.02.170-6.el7.x86_64      @rhel-7-server-rpms
    Updated device-mapper-libs-7:1.02.158-2.el7.x86_64 @?rhel-7-server-rpms
    Update                     7:1.02.170-6.el7.x86_64 @rhel-7-server-rpms
history info 

Nakonec zrušte poslední transakci pomocí yum history undo last .

[root@rhel77 ~]# yum history undo last

Loaded plugins: product-id, search-disabled-repos, subscription-manager
Undoing transaction 2, from Mon Nov  2 15:25:12 2020
    Updated device-mapper-7:1.02.158-2.el7.x86_64      @?rhel-7-server-rpms
    Update                7:1.02.170-6.el7.x86_64      @rhel-7-server-rpms
    Updated device-mapper-libs-7:1.02.158-2.el7.x86_64 @?rhel-7-server-rpms
    Update                     7:1.02.170-6.el7.x86_64 @rhel-7-server-rpms
Resolving Dependencies
--> Running transaction check
---> Package device-mapper.x86_64 7:1.02.158-2.el7 will be a downgrade
---> Package device-mapper.x86_64 7:1.02.170-6.el7 will be erased
---> Package device-mapper-libs.x86_64 7:1.02.158-2.el7 will be a downgrade
---> Package device-mapper-libs.x86_64 7:1.02.170-6.el7 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

=======================================================================================================================
 Package                        Arch               Version                        Repository                      Size
=======================================================================================================================
Downgrading:
 device-mapper                  x86_64             7:1.02.158-2.el7               rhel-7-server-rpms             294 k
 device-mapper-libs             x86_64             7:1.02.158-2.el7               rhel-7-server-rpms             322 k

Transaction Summary
=======================================================================================================================
Downgrade  2 Packages

Total download size: 616 k
Is this ok [y/d/N]: 

[ Bezplatný průvodce od společnosti Red Hat:5 kroků k automatizaci vašeho podnikání. ] 

To není konec

Být proaktivní je nejlepší způsob, jak se vyhnout vrácení neúspěšné opravy. Pravidelné zálohování na úrovni operačního systému a na úrovni aplikací je doporučeným způsobem, jak s jistotou vrátit změny zpět. Přečtěte si můj článek Povolení Sysadmin, jak používat ReaR pro zálohování a obnovu založené na bitové kopii.

Pro více informací o vrácení aktualizací v Red Hat Enterprise Linux se nezapomeňte podívat na zákaznický portál Red Hat.


Linux
  1. Linux – Jak zjistit jmenný prostor konkrétního procesu?

  2. Jak přiblížit a oddálit terminálovou konzoli v linuxu

  3. Jak zjistím, jakou verzi Linuxu používám?

  1. Jak zjistit seznam všech otevřených portů v Linuxu

  2. Jakou verzi Linuxu používám? Zde je návod, jak to zjistit

  3. Jak zjistit typ virtualizace linuxového VPS?

  1. Jak zjistit, co dělá příkaz Linuxu

  2. Jak zkontrolovat neúspěšné nebo špatné pokusy o přihlášení v Linuxu

  3. Jak zjistit verzi Intel Management Engine na Linuxu?