transactional-update
コマンドを使用したSLE Microの管理
- 概要
transactional-update
コマンドを使用すると、読み込み専用ファイルシステムを変更できます。変更は別個のスナップショットで実行され、そのスナップショットでブートするまで実行中のシステムには影響しません。- 目的
SLE Microとその更新を管理し、更新の失敗によるシステムのダウンタイムのリスクを最小限に抑えながら、簡単にロールバックできるようにする必要があります。
- 所要時間
transactional-update
コマンドの理解に30分ほどを要します。- 目標
transactional-update
の仕組みと、これを使用してシステムを管理する方法を理解します。- 要件
SLE Microの実行中のインスタンス。
root
特権。
1 トランザクション更新 #
1.1 トランザクション更新とは #
ベースオペレーティングシステムの安定性と一貫性を維持するため、SLE Microでは、読み込み専用ルートファイルシステムを使用しています。したがって、たとえばzypper
コマンドを使用しても、ルートファイルシステムを直接変更することはできません。SLE Microでは、ルートファイルシステムに1つ以上の変更を適用可能な「トランザクション更新」が代わりに導入されています。
transactional-update
のデフォルトの動作では、変更のたびに現在のルートファイルシステムから新しいスナップショットが作成されます。この変更を適用するにはホストの再起動が必要です。再起動することなくtransactional-update
コマンドを複数回実行して、スナップショットにさらに変更を加えることはできません。このような操作を行うと、以前のスナップショットの変更を含まない独立した別個のスナップショットが作成されます。
1.2 トランザクション更新の動作 #
パッケージのインストール、何らかの更新、パッチの適用といったシステムの変更操作でtransactional-update
コマンドを呼び出すたびに、次のアクションが実行されます。
現在のルートファイルシステムまたは指定したスナップショットから、新しい読み書きスナップショットが作成されます。
すべての変更が適用されます(更新、パッチ、パッケージのインストール)。
このスナップショットが読み込み専用モードに切り替わります。
変更が正常に適用されると、新しいルートファイルシステムのスナップショットがデフォルトとして設定されます。
再起動すると、新しいスナップショットでシステムがブートします。
1.3 トランザクション更新の利点 #
アトミックであることから、更新は正常に完了した場合にのみ適用されます。
変更は別個のスナップショットに適用されるため、実行中のシステムには影響しません。
変更を容易にロールバックできます。
1.4 transactional-update
コマンド内の環境 #
transactional-update
コマンドを実行するたびに、新しいスナップショットが変更されます。スナップショットの環境は、transactional-update
コマンドを実行したシェルの環境と異なることがあります。たとえば、現在の作業ディレクトリ($PWD
)が、transactional-update
を実行するディレクトリではなく、/
に設定されていることがあります。
スナップショットから/var
ディレクトリにアクセスすることはできません。このディレクトリはスナップショットにも含まれません。ただし、スナップショットからは除外されていても、transactional-update
環境でアクセスできるディレクトリもあります(/root
ディレクトリなど)。
2 transactional-update
コマンドの使用 #
transactional-update
コマンドでは、更新のアトミックなインストールまたは削除が可能です。すべてが正常にインストールされている場合にのみ更新が適用されます。transactional-update
は、システムのスナップショットを作成し、それを使用してシステムを更新します。このスナップショットは後で復元できます。再起動後にのみ、すべての変更がアクティブになります。
transactional-update
コマンドの構文は次のとおりです。
transactional-update [option]
[general_command] [package_command] standalone_command
transactional-update
の実行
transactional-update
コマンドの実行でどのコマンドもオプションも指定しないと、システム自体が更新されます。
使用できるコマンドパラメータについて、次で詳しく説明します。
transactional-update
オプション #-
--interactive, -i
パッケージのコマンドで指定すると、対話モードをオンにすることができます。
-
--non-interactive, -n
パッケージのコマンドで指定すると、非対話モードをオンにすることができます。
-
--continue [number], -c
--continue
オプションでは、再起動せずにルートファイルシステムに複数の変更を適用できます。詳細については、3項 「再起動せずに複数の変更を適用する方法」を参照してください。--continue
オプションには、既存のスナップショットを新しいスナップショットのベースとして選択できる便利な機能もあります。次の例では、transactional-update
を実行して、スナップショット13に基づいてスナップショットに新しいパッケージをインストールしてから、もう一度実行して別のパッケージをインストールする方法を示しています。>
sudo
transactional-update pkg install package_1
>
sudo
transactional-update --continue 13 pkg install package_2
-
--no-selfupdate
transactional-update
の自己更新を無効にします。-
--drop-if-no-change, -d
ルートファイルシステムに変更がなかった場合、
transactional-update
で作成されたスナップショットを破棄します。/etc
ディレクトリに変更があった場合、その変更を現在のファイルシステムにマージします。-
--quiet
stdout
にtransactional-update
コマンドを出力しません。-
--help, -h
transactional-update
コマンドのヘルプを出力します。-
--version
transactional-update
コマンドのバージョンを表示します。
2.1 一般コマンド #
このセクションでは、transactional-update
の汎用のコマンドを一覧にします。
-
grub.cfg
GRUBブートローダ設定ファイルの再構築に使用します。
-
bootloader
ブートローダを再インストールします。
-
initrd
initrd
の再構築に使用します。-
kdump
ハードウェアやストレージを変更する場合に、Kdump initrdの再構築が必要になることがあります。
-
shell
終了する前に新しいスナップショットで読み書きシェルを開きます。通常、このコマンドはデバッグの目的で使用します。
-
reboot
transactional-update
コマンドが完了するとシステムを再起動します。-
run <command>
指定されたコマンドを新しいスナップショットで実行します。
-
setup-selinux
対象のSELinuxポリシーをインストールして有効にします。
3 再起動せずに複数の変更を適用する方法 #
transactional-update
コマンドは、トランザクションシステムのルートファイルシステムに変更を適用します。デフォルトの動作では、変更のたびに現在のルートファイルシステムから新しいスナップショットが作成され、再起動して変更が適用されます。
再起動せずにルートファイルシステムに複数の変更を適用するには、次の各セクションで説明するいくつかのオプションがあります。
3.1 transactional-update
--continue
オプション #
再起動せずに複数の変更を適用するには、--continue
オプションを指定したtransactional-update
コマンドを使用します。このコマンドを実行するたびに、それまでのスナップショットに対するすべての変更と新しい変更を収めた別のスナップショットが作成されます。最後のスナップショットにはすべての変更が記録されています。変更を適用するには、システムを再起動します。これにより、最後のスナップショットが新しいルートファイルシステムになります。
3.2 transactional-update run
コマンド #
通常、transactional-update
run
コマンドでは単一のコマンドのみが実行されます。ただし、bash
などのコマンドシェルで複数のコマンドを連結すれば、このコマンドを使用して、単一のトランザクションセッションでそれら複数のコマンドを実行できます。次に例を示します。
>
sudo
transactional-update run bash -c 'ls && date; if [ true ]; then echo -n "Hello "; echo '\''world'\''; fi'
transactional-update run
コマンドには、3.3項 「transactional-update
シェル」での説明にあるtransactional-update shell
コマンドと同じ制限があります。入力したコマンドが/var/log/transactional-update.log
ファイルに記録される点のみが異なります。
3.3 transactional-update
シェル #
transactional-update shell
コマンドは、transactional-update環境でシェルを開きます。このシェルでは、ファイルシステムを変更するLinuxコマンドのほとんどすべてを入力できます。たとえば、zypper
コマンドによる複数のパッケージのインストールや、読み込み専用ファイルシステムに属するファイルの変更などができます。また、それまでにtransactional-update
コマンドで指定した変更が正しいことも確認できます。
このトランザクションシェルにはいくつかの制限があります。たとえば、systemd
コマンドによるサービスの開始操作と停止操作や、マウントされていない/var
パーティションの変更などはできません。また、シェルセッションで入力したコマンドは/transactional-update.log
ファイルに記録されません。
ファイルシステムに対するすべての変更は、単一のスナップショットに収められます。ファイルシステムの変更が完了し、exit
コマンドを使用してシェルを終了したら、変更を適用するためにホストを再起動する必要があります。
4 スナップショットのクリーンアップの実行 #
transactional-update
を使用して、未使用のファイルシステムスナップショットや、参照されていない/etc
オーバーレイディレクトリをクリーンアップできます。
transactional-update
は、次のクリーンアップコマンドを認識します。
-
cleanup-snapshots
このコマンドは、すべての未使用スナップショットにSnapperの削除対象としてマークを付けます。
-
cleanup-overlays
このコマンドは、
/var/lib/overlay
ディレクトリ内にある/etc
のすべての未使用オーバーレイレイヤを削除します。-
cleanup
このコマンドは、
cleanup-snapshots
コマンドとcleanup-overlays
コマンドを組み合わせたものです。
4.1 クリーンアップの仕組み #
transactional-update cleanup
コマンドを実行すると、クリーンアップアルゴリズムを持たない、すべての古いスナップショットにクリーンアップアルゴリズムが設定されます。すべての重要なスナップショットにもマークが付けられます。このコマンドを使用すると、/var/lib/overlay
内の参照されていない(したがって未使用の)すべての/etc
オーバーレイディレクトリも削除されます。
number
クリーンアップアルゴリズムが設定されたスナップショットは、/etc/snapper/configs/root
で次のパラメータによって設定されているルールに従って削除されます。
- NUMBER_MIN_AGE
自動的に削除できるスナップショットの最小保持期間(秒単位)を定義します。
- NUMBER_LIMIT/NUMBER_LIMIT_IMPORTANT
保存するスナップショットの最大数を定義します。指定した最大値を超えるスナップショットは、クリーンアップアルゴリズムによって削除されます。スナップショットとファイルシステムの領域は考慮されません。また、最小値を超えるスナップショットも、スナップショットとファイルシステムの制限に達するまで削除されます。
スナップショットのクリーンアップは、systemd
によっても定期的に実行されます。
5 製品の登録 #
transactional-update register
コマンドを使用して、製品の登録とそのサブスクリプションの管理に関するすべてのタスクを処理できます。以下のオプションを指定できます。
-
--list-extensions
システムで利用可能な拡張機能を一覧表示します。この出力を使用して、製品のアクティベーションで使用する製品識別子を探し出すことができます。
-
-p, --product
アクティベーションの対象とする製品を指定できます。製品識別子の形式は<name>/<version>/<architecture>です。たとえば、
sle-module-live-patching/15.3/x86_64
と指定します。対応するコマンドの形式は次のとおりです。>
sudo
transactional-update register -p sle-module-live-patching/15.3/x86_64-
-r, --regcode
指定された登録コードでシステムを登録します。このコマンドは、サブスクリプションを登録し、ソフトウェアリポジトリを有効にします。
-
-d, --de-register
システムの登録を解除します。
-p
オプションが指定されている場合は拡張機能の登録を解除します。-
-e, --email
SUSE Customer Centerで登録に使用する電子メールアドレスを指定します。
-
--url
登録サーバのURLを指定します。URLは設定に保存され、以降のコマンド呼び出しで使用されます。次に例を示します。
>
sudo
transactional-update register --url https://scc.suse.com-
-s, --status
現在の登録ステータスをJSON形式で表示します。
-
--write-config
指定されたオプション値を
/etc/SUSEConnect
設定ファイルに書き込みます。-
--cleanup
古いシステム資格情報を削除します。
-
--version
バージョンを出力します。
-
--help
コマンドの使用方法を表示します。
6 ソフトウェアパッケージの管理 #
transactional-update
を使用して、ソフトウェアパッケージをインストール、更新、または削除できます。
SLE Microでは、製品の登録後に利用可能なリポジトリからソフトウェアパッケージを取得します。
transactional-update
では、次のコマンドを使用してソフトウェアパッケージを管理します。
pkg
コマンドとZypperのオプション
transactional-update pkg
コマンドでは、使用するサブコマンドに対応するZypperのオプションを使用できます。たとえば、transactional-update pkg install
は、zypper install
が理解するすべてのオプションを理解します。
-
pkg install
zypper install
コマンドを使用して、使用可能なチャネルから個々のパッケージをインストールします。このコマンドは、Program Temporary Fix (PTF) RPMファイルをインストールするために使用することもできます。このコマンドのデフォルトオプションは--interactive
です。>
sudo
transactional-update pkg install package_name
または
>
sudo
transactional-update pkg install rpm1 rpm2
ソフトウェアパターンをインストールするには次のように指定します。
>
sudo
transactional-update pkg install -t pattern pattern_name
-
pkg remove
zypper remove
コマンドを使用してアクティブなスナップショットから個々のパッケージを削除します。このコマンドは、PTF RPMファイルを削除するために使用することもできます。このコマンドのデフォルトオプションは--interactive
です。>
sudo
transactional-update pkg remove package_name
-
pkg update
zypper update
コマンドを使用してアクティブなスナップショットから個々のパッケージを更新します。ベースファイルシステムのスナップショットの一部であるパッケージのみを更新できます。このコマンドのデフォルトオプションは--interactive
です。>
sudo
transactional-update pkg update package_name
-
patch
利用可能なパッチを確認してインストールします。このコマンドのデフォルトオプションは
--non-interactive
です。-
dup
システムをアップグレードします。このコマンドのデフォルトオプションは
--non-interactive
です。-
up
インストールされているパッケージをより新しいバージョンに更新します。このコマンドのデフォルトオプションは
--non-interactive
です。-
migration
選択したターゲットにシステムを移行します。通常、SUSE Customer Centerからシステムを登録している場合に、システムのアップグレードに使用します。
7 システムのロールバックの実行 #
GRUB 2ではbtrfsスナップショットからブートできます。そのため、新しいスナップショットが正しく機能しない場合、機能する古いスナップショットを使用できます。
スナップショットをブートする場合、スナップショットに含まれているファイルシステムの該当部分が読み込み専用でマウントされます。スナップショットから除外されている他のすべてのファイルシステムと該当部分は読み書き可能でマウントされ、変更できます。
システムの初期インストールの終了時に、ブート可能な初期スナップショットが作成されます。このスナップショットをブートすることで、いつでもその状態に戻ることができます。スナップショットは、first root file system
という記述で識別できます。
システムロールバックを実行するには2つの方法があります。
実行中のシステムからデフォルトのスナップショットを設定できます。詳細については、手順2「実行中のシステムからのロールバック」を参照してください。
特に現在のスナップショットが壊れている場合は、新しいスナップショットでブートして、それをデフォルトに設定できます。詳細については、手順3「機能するスナップショットへのロールバック」を参照してください。
現在のスナップショットが機能している場合は、次のシステムロールバック手順を使用できます。
デフォルトとして設定するスナップショットを特定し、その番号をメモします。
>
sudo
snapper listそのスナップショットをデフォルトとして設定します。
>
sudo
transactional-update rollback snapshot_numbersnapshot numberを省略すると、現在のスナップショットがデフォルトとして設定されます。
ヒント: 機能する最後のスナップショットの設定機能する最後のスナップショットをデフォルトとして設定するには、
rollback last
を実行します。システムを再起動して、新しいデフォルトのスナップショットでブートします。
次の手順は、現在のスナップショットが壊れていて、そのスナップショットでブートできない場合に使用します。
システムを再起動し、[
Start bootloader from a read-only snapshot
]を選択します。ブートするスナップショットを選択します。スナップショットは作成日に従ってソートされ、最新のスナップショットが一番上に表示されます。
システムにログインし、すべてが期待どおりに機能しているかどうかを確認します。スナップショットから除外されたディレクトリに書き込まれたデータはそのまま残ります。
ブートしたスナップショットがロールバックに適さない場合は、システムを再起動して別のスナップショットを選択します。
スナップショットが期待どおりに機能する場合は、次のコマンドを実行して、ロールバックを実行できます。
>
sudo
transactional-update rollback
その後、再起動します。
8 自動トランザクション更新の管理 #
自動更新は、1日1回実行されるsystemd.timer
によって制御されます。これは、すべての更新に適用され、マシンが再起動する必要があることをrebootmgrd
に知らせます。更新が実行される時刻を調整できます。systemd.timer(5)のマニュアルを参照してください。
8.1 自動更新の無効化 #
デフォルトでは、自動更新が有効化されています。ただし、次のコマンドで無効化できます。
>
sudo
systemctl --now disable transactional-update.timer
8.2 失敗した更新の通知の設定 #
自動のtransactional-update
が失敗した場合、失敗したスナップショットは削除されます。その間にシステムが再起動されるため、最後の自動更新が失敗したことを確認できません。したがって、自動のtransactional-update
の失敗を通知するsystemd
サービスを設定できます。この設定手順は、次の手順にまとめることができます。
必要なパッケージがシステムに存在しない場合はインストールする。詳細については、8.2.1項 「必要なパッケージのインストール」を参照してください。
systemd-status-mail
サービスを設定する。詳細については、8.2.2項 「systemd-status-mail
サービスの設定」を参照してください。
8.2.1 必要なパッケージのインストール #
通知を設定するには、パッケージmailx
とsystemd-status-mail
が必要です。これらのパッケージはデフォルトでシステムに存在します。ただし、これらのパッケージをインストールしていない場合は、次のコマンドを実行してインストールします。
>
sudo
transactional-update pkg in systemd-status-mail mailx
システムを再起動します。
8.2.2 systemd-status-mail
サービスの設定 #
systemd-status-mail
サービスを設定するには、設定ファイルを作成するか、jeos-config
ツールを使用できます。
8.2.2.1 jeos-config
を使用したサービスの設定 #
電子メール通知を設定するには、次に説明するようにjeos-config
ツールを使用できます。
設定ウィンドウを開くには、次のコマンドを実行します。
>
sudo
jeos-config status_mailダイアログで、必要に応じて項目を設定します。
8.2.2.2 設定ファイルの編集によるサービスの設定 #
デフォルトの設定ファイルは、/usr/etc/default/systemd-status-mail
にあります。これを変更するには、/etc/default/
にコピーを作成して次の項目を編集します。
- ADDRESS
必須エントリ。通知の送信先の電子メールアドレスを指定します。次に例を示します。
ADDRESS=“tux@example.com”
- FROM
通知メールの送信者の電子メールアドレス。アドレスが有効であることを確認します。次に例を示します。
FROM=“geeko@example.com”
- MAILER
通知を送信するメールアプリケーションのタイプ。次のように、
mailx
の値を使用します。MAILER=“mailx”
- RELAYHOST
mailxで使用するメールリレーを指定します。
RELAYHOST=“mail.example.com:587”
- MAILX_OPTIONS
必要なオプションを指定し、メールプロバイダが通知メールを確実に受け入れるようにします。
MAILX_OPTIONS="-Sverbose -Ssmtp-use-starttls -Ssmtp-auth=login -Ssmtp-auth-user='tux@example.com' -Ssmtp-auth-password='TopSecret'"
9 法的事項 #
Copyright © 2006–2024 SUSE LLC and contributors. All rights reserved.
この文書は、GNUフリー文書ライセンスのバージョン1.2または(オプションとして)バージョン1.3の条項に従って、複製、頒布、および/または改変が許可されています。ただし、この著作権表示およびライセンスは変更せずに記載すること。ライセンスバージョン1.2のコピーは、「GNUフリー文書ライセンス」セクションに含まれています。
SUSEの商標については、https://www.suse.com/company/legal/を参照してください。その他の第三者のすべての商標は、各社の所有に帰属します。商標記号(®、™など)は、SUSEおよび関連会社の商標を示します。アスタリスク(*)は、第三者の商標を示します。
本書のすべての情報は、細心の注意を払って編集されています。しかし、このことは正確性を完全に保証するものではありません。SUSE LLC、その関係者、著者、翻訳者のいずれも誤りまたはその結果に対して一切責任を負いかねます。