9 交易更新 #
交易更新在 SUSE Linux Enterprise Server 中以技術預覽形式提供,當根檔案系統為唯讀時,可使用技術更新來更新 SLES。交易更新具有原子性 (僅當所有更新都成功時,才會套用所有更新),且支援復原。它不影響正在執行的系統,因為只有在將系統重新開機後,才會啟用變更。由於重新開機是中斷性操作,管理員必須判定重新開機的開銷是否高於中斷正在執行服務的開銷。如果重新開機的開銷過高,則不要使用交易更新。
交易更新由 transactional-update
程序檔每天執行。該程序檔將檢查可用的更新。如果存在任何更新,則它會在背景中建立根檔案系統的新快照,然後從發行通道擷取更新。完全更新新快照後,該快照將被標示為作用中快照,並在下一次將系統重新開機後,成為新的預設根檔案系統。當 transactional-update
設定為自動執行 (預設行為) 時,該程序檔還會將系統重新開機。更新執行時間以及重新開機維護時間均為可設定組態。
只能更新屬於根檔案系統快照的套件。如果套件中包含不屬於該快照的檔案,更新可能會失敗或中斷系統。
無法更新需要接受授權的 RPM。
9.1 技術預覽的限制 #
技術預覽的功能存在某些限制。transactional-update
對於以下套件不起作用:
依預設, nginx 預設 index.html 頁面可能不可用
tomcat-webapps 和 tomcat-admin-webapps
phpMyAdmin
sca-appliance-*
mpi-selector
emacs 可正常工作 (Emacs 遊戲除外)
bind 和 bind-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 支援人員。