跳至內容跳至頁面導覽:上一頁 [access key p]/下一頁 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文件 / 管理指南 / 一般任務 / 交易更新
適用範圍 SUSE Linux Enterprise Server 15 SP3

9 交易更新

交易更新在 SUSE Linux Enterprise Server 中以技術預覽形式提供,當根檔案系統為唯讀時,可使用技術更新來更新 SLES。交易更新具有原子性 (僅當所有更新都成功時,才會套用所有更新),且支援復原。它不影響正在執行的系統,因為只有在將系統重新開機後,才會啟用變更。由於重新開機是中斷性操作,管理員必須判定重新開機的開銷是否高於中斷正在執行服務的開銷。如果重新開機的開銷過高,則不要使用交易更新。

交易更新由 transactional-update 程序檔每天執行。該程序檔將檢查可用的更新。如果存在任何更新,則它會在背景中建立根檔案系統的新快照,然後從發行通道擷取更新。完全更新新快照後,該快照將被標示為作用中快照,並在下一次將系統重新開機後,成為新的預設根檔案系統。當 transactional-update 設定為自動執行 (預設行為) 時,該程序檔還會將系統重新開機。更新執行時間以及重新開機維護時間均為可設定組態。

只能更新屬於根檔案系統快照的套件。如果套件中包含不屬於該快照的檔案,更新可能會失敗或中斷系統。

無法更新需要接受授權的 RPM。

9.1 技術預覽的限制

技術預覽的功能存在某些限制。transactional-update 對於以下套件不起作用:

  • 依預設, nginx 預設 index.html 頁面可能不可用

  • tomcat-webappstomcat-admin-webapps

  • phpMyAdmin

  • sca-appliance-*

  • mpi-selector

  • emacs 可正常工作 (Emacs 遊戲除外)

  • bindbind-chrootenv

  • docbook*

  • sblim-sfcb*

  • texlive*

  • iso_ent

  • openjade

  • opensp

  • pcp

  • plymouth

  • postgresql-server-10

  • pulseaudio-gdm-hooks

  • smartmontools

系統安裝程式的更新程式元件不適用於唯讀檔案系統,因為此類檔案系統不支援交易更新。

其他注意事項:

  • 一般情況下,最好在更新系統之後儘早將機器重新開機。

  • 每次只能套用一項更新。在套用一項更新之後直至套用下一項更新之前,請務必重新開機。

  • 在交易更新之後直至將機器重新開機,都不應執行 update-alternatives

  • 在交易更新之後直至重新開機,都不要建立新的系統使用者或系統群組。允許建立一般使用者和群組 (UID > 1000,GID > 1000)。

  • YaST 尚不能識別交易更新。如果 YaST 模組需要安裝額外的套件,此操作將無法正常執行。而只是修改 /etc 中組態檔案的一般系統操作可正常進行。

  • 對於 php7-fastcgi,必須手動建立指向 /usr/bin/php-cgi 的符號連結 /srv/www/cgi-bin/php

  • ntp是要從較舊 SLES 版本移轉的 Legacy 模組的一部分。它在新的 SUSE Linux Enterprise Server 安裝中不再受支援,且已取代為 chrony。如果您繼續使用 ntp,需要進行全新安裝才能正常使用交易更新。

  • sblim-sfcb:整個 sblim 共生體系與交易更新不相容。

  • btrfs-defrag (來自 btrfsmaintenance 套件) 不適用於唯讀根檔案系統。

  • 對於 btrfs-balance/etc/sysconfig/btrfsmaintenance 中的變數 BTRFS_BALANCE_MOUNTPOINTS 必須從 / 變更為 /.snapshots

  • 對於 btrfs-scrub/etc/sysconfig/btrfsmaintenance 中的變數 BTRFS_SCRUB_MOUNTPOINTS 必須從 / 變更為 /.snapshots

9.2 啟用 transactional-update

必須在系統安裝期間啟用 Transactional Server 模組,然後選取 Transactional Server 系統角色。不支援稍後再於正在執行的系統中從 Transactional Server 模組安裝任何套件,此操作可能會使系統中斷。

請注意,不支援變更根分割區的子磁碟區配置,或者將根分割區的子目錄或子磁碟區置於其各自的分割區中 (/home/var/srv/opt 除外),此類操作很可能會使系統中斷。

9.3 管理自動更新

自動更新由每天執行一次的 systemd.timer 控制。此操作會套用所有更新,並告知 rebootmgrd 應將機器重新開機。您可以調整更新的執行時間,具體請參閱「systemd.timer(5)」。若要調整維護時間 (即 rebootmgrd 將系統重新開機的時間),請參閱「rebootmgrd(8)」。

您可以使用以下指令停用自動交易更新:

root # systemctl --now disable transactional-update.timer

9.4 transactional-update 指令

transactional-update 指令會啟用更新的原子性安裝或移除,即僅當所有更新都可以成功安裝時,才會套用這些更新。在套用更新之前,transactional-update 會建立系統的快照,您可以還原此快照。重新開機後,所有變更才會生效。

--continue

可使用 --continue 選項對現有快照進行多次變更,而無需重新開機。

預設的 transactional-update 行為是從目前根檔案系統建立新快照。如果您忘記執行某個操作,例如,忘記安裝某個新套件,必須重新開機以套用先前的變更,然後再次執行 transactional-update 以安裝忘記安裝的套件,並再次重新開機。不能在未進行重新開機的情況下多次執行 transactional-update 指令來向快照新增更多變更,因為這樣做只會建立多個獨立的快照,這些快照並不會包含先前快照中的變更。

您可使用 --continue 選項在不重新開機的情況下,進行任意次數的變更。每次會建立一個獨立的快照,且每個快照都包含您在先前快照中進行的所有變更以及新的變更。視需要重複此程序任意次數,當最終快照包含所需的全部變更時,再將系統重新開機,然後最終快照便會成為新的根檔案系統。

--continue 選項的另一個有用功能是,可讓您選取任一現有快照做為新快照的基礎快照。以下範例展示如何執行 transactional-update 在基於快照 13 的某個快照中安裝新套件,然後再次執行該指令來安裝另一個套件:

root # transactional-update pkg install package_1
root # transactional-update --continue 13 pkg install package_2

--continue [num] 選項會呼叫 snapper create --from,請參閱第 7.6.2 節 「建立快照」

cleanup

如果目前根檔案系統與作用中的根檔案系統為同一個 (在重新開機之後,transactional-update 建立包含更新的新快照之前),將為沒有清理演算法的所有舊快照設定一個清理演算法。如此可確保 Snapper 會刪除舊快照。(請參閱「snapper(8)」中有關清理演算法的章節。)此操作還會移除 /var/lib/overlay 中所有未參考的 (因此也未使用) /etc 覆蓋目錄:

root # transactional-update cleanup
pkg in/install

使用 zypper install 指令從可用通道安裝個別套件。此指令還可用於安裝程式暫時修復 (PTF) RPM 檔案。

root # transactional-update pkg install package_name

root # transactional-update pkg install rpm1 rpm2
pkg rm/remove

使用 zypper remove 指令從作用中快照移除個別套件。此指令還可用於移除 PTF RPM 檔案。

root # transactional-update pkg remove package_name
pkg up/update

使用 zypper update 指令更新作用中快照中的個別套件。只能更新屬於基礎檔案系統快照一部份的套件。

root # transactional-update pkg remove package_name
up/update

如果有新的可用更新,將會建立一個新快照,並使用 zypper up/update 更新該快照。

root # transactional-update up
dup

如果有新的可用更新,將會建立一個新快照,並使用 zypper dup –no-allow-vendor-change 更新該快照。然後,該快照將會啟用,並在重新開機後成為新的根檔案系統。

root # transactional-update dup
patch

如果有新的可用更新,將會建立一個新快照,並使用 zypper patch 更新該快照。

root # transactional-update patch
rollback

此選項會設定預設子磁碟區。在使用讀取/寫入檔案系統的系統上可呼叫 snapper rollback。在唯讀檔案系統上,如果未提供任何引數,目前系統將設定為新的預設根檔案系統。如果您指定了編號,則該快照將用做預設的根檔案系統。在唯讀檔案系統上,不會建立任何額外快照。

root # transactional-update rollback snapshot_number
grub.cfg

此選項會建立新的 GRUB2 組態。有時需要調整開機組態,例如,新增額外的核心參數。編輯 /etc/default/grub,執行 transactional-update grub.cfg,然後重新開機以啟用變更。您必須立即重新開機,否則,下一次執行 transactional-update 時會使用預設值覆寫新的 GRUB2 組態。

root # transactional-update grub.cfg
reboot

此參數在完成動作後會觸發重新開機。

root # transactional-update dup reboot
--help

此時會輸出包含選項和子指令的說明螢幕。

root # transactional-update --help

9.5 疑難排解

如果升級失敗,請執行 supportconfig 來收集記錄資料。將產生的檔案 (包括 /var/log/transactional-update.log) 提供給 SUSE 支援人員。