インストールおよびセットアップクイックスタート
SUSE Linux Enterprise High Availability Extension 15 SP4

# インストールおよびセットアップクイックスタート #

発行日: 2025 年 12 月 11 日

このマニュアルでは、crmシェルで提供されているブートストラップスクリプトを使用して、非常に基本的な2ノードクラスタをセットアップする手順を説明します。仮想IPアドレスをクラスタリソースとして設定する手順や、共有ストレージ上でSBDをノードフェンシングメカニズムとして使用する手順も記載されています。

著者: Tanja Roth、Thomas Schraitle
改訂履歴: インストールおよびセットアップクイックスタート

## 1 使用シナリオ #

このマニュアルに記載されている手順に従うと、次のプロパティを持つ2ノードクラスタの最小セットアップになります。

- ネットワーク経由で相互に接続された2つのノード: `alice` (IP: `192.168.1.1`)および`bob` (IP: `192.168.1.2`)。

- 実行している物理ノードがどれであれ、クライアントからの該当サービスへの接続を可能にする浮動仮想IPアドレス(`192.168.2.1`)。

- SBDフェンシングメカニズムとして使用される共有ストレージデバイス。これにより、スプリットブレインシナリオを回避します。

- アクティブなホストが停止した場合における、一方のノードから他方のノードへのリソースのフェールオーバー(「アクティブ/パッシブ」セットアップ)。

ブートストラップスクリプトを使用してクラスタを設定したら、グラフィカルインタフェースであるHawk2を使用してクラスタを監視します。これは、SUSE® Linux Enterprise High Availability Extensionに搭載されているクラスタ管理ツールの1つです。リソースのフェールオーバーが機能するかどうかの基本的なテストとして、一方のノードをスタンバイモードにし、仮想IPアドレスが2つ目のノードに移行されるかどうかを確認します。

この2ノードクラスタは、テスト目的で使用することも、後で拡張可能な最小クラスタ設定として使用することもできます。運用環境でクラスタを使用する前に、ご自分の要件に従ってクラスタを変更してください。

## 2 システム要件 #

この項では、1項で説明されているシナリオの重要なシステム要件について説明します。運用環境で使用するためにクラスタを調整する方法については、Book “管理ガイド”, Chapter 2 “システム要件と推奨事項”の一覧を参照してください。

### 2.1 ハードウェア要件 #

サーバ

  2.2項 「ソフトウェアの必要条件」で指定されているソフトウェアがインストールされた2台のサーバ。

  サーバはベアメタルでも仮想マシンでも構いません。各サーバが同一のハードウェア設定(メモリ、ディスクスペースなど)になっている必要はありませんが、アーキテクチャは同じである必要があります。クロスプラットフォームのクラスタはサポートされていません。

通信チャネル

  クラスタノードあたり、少なくとも2つのTCP/IP通信メディア。ネットワーク機器は、クラスタ通信に使用する通信手段(マルチキャストまたはユニキャスト)をサポートする必要があります。通信メディアは100Mbit/s以上のデータレートをサポートする必要があります。サポートされるクラスタセットアップでは、2つ以上の冗長通信パスが必要です。これは次のように実行できます。

  - ネットワークデバイスボンディング(推奨)。

  - Corosync内の2つ目の通信チャネル。

ノードフェンシング/STONITH

  「スプリットブレイン」シナリオを回避するため、クラスタにはノードフェンシングメカニズムが必要です。スプリットブレインシナリオでは、クラスタノードは、お互いを認識していない2つ以上のグループに分割されます(ハードウェアまたはソフトウェアの障害か、ネットワーク接続の切断による)。フェンシングメカニズムにより、問題のあるノードを分離します(通常はノードをリセットするか、ノードの電源をオフにすることによって分離します)。これをSTONITH (「Shoot the other node in the head」)と呼びます。ノードフェンシングメカニズムは、物理デバイス(電源スイッチ)でも、SBD (ディスクによるSTONITH)のようなメカニズムとウォッチドッグを組み合わせたものでも構いません。SBDを使用するには共有ストレージが必要です。

### 2.2 ソフトウェアの必要条件 #

クラスタの一部になるすべてのノードには、少なくとも次のモジュールと拡張機能が含まれている必要があります。

- Basesystem Module 15 SP4

- Server Applications Module 15 SP4

- SUSE Linux Enterprise High Availability Extension 15 SP4

### 2.3 その他の要件と推奨事項 #

時刻同期

  クラスタノードはクラスタ外のNTPサーバに同期する必要があります。SUSE Linux Enterprise High Availability Extension 15以降、Chronyは、NTPでデフォルトで実装されるようになりました。詳細については、SUSE Linux Enterprise Server 15 SP4の『管理ガイド』を参照してください。

  ノードが同期されていない場合、クラスタが正常に動作しないことがあります。また、同期が行われていないと、ログファイルとクラスタレポートの分析が非常に困難になります。ブートストラップスクリプトを使用するときにNTPがまだ設定されていない場合、警告が表示されます。

ホスト名およびIPアドレス

  - 静的IPアドレスを使用します。

  - `/etc/hosts`ファイルにあるすべてのクラスタノードを、完全修飾ホスト名およびショートホスト名で一覧表示します。クラスタのメンバーが名前で互いを見つけられることが重要です。名前を使用できない場合、内部クラスタ通信は失敗します。

SSH

  すべてのクラスタノードはSSHによって互いにアクセスできる必要があります。`crm report` (トラブルシューティング用)などのツールおよびHawk2の履歴エクスプローラは、ノード間でパスワード不要のSSHアクセスを必要とします。それがない場合、現在のノードからしかデータを収集できません。

  クラスタのセットアップにブートストラップスクリプトを使用した場合、SSHキーは自動的に作成されてコピーされます。

## 3 ブートストラップスクリプトの概要 #

次のコマンドは、最低限の時間と手動介入しか必要のないブートストラップスクリプトを実行します。

- `crm cluster init`を使用して、クラスタ通信に必要な基本パラメータを定義します。これによって1ノードクラスタの実行が可能になります。

- `crm cluster join`を使用して、クラスタにノードを追加します。

- `crm cluster remove`を使用して、クラスタからノードを削除します。

すべてのブートストラップスクリプトは`/var/log/crmsh/crmsh.log`にログを記録します。ブートストラッププロセスの詳細については、このファイルを確認してください。ブートストラッププロセス中に設定されたオプションは、YaSTクラスタモジュールで後で変更できます。詳細についてはBook “管理ガイド”, Chapter 4 “YaSTクラスタモジュールの使用”を参照してください。

ブートストラップスクリプト`crm cluster init`が確認および設定するコンポーネントは、次のとおりです。

NTP

  NTPがブート時に開始するよう設定されていない場合、メッセージが表示されます。SUSE Linux Enterprise High Availability Extension 15以降、Chronyは、NTPでデフォルトで実装されるようになりました。

SSH

  クラスタノード間でパスワード不要のログインを行うためのSSHキーを作成します。

Csync2

  クラスタ内のすべてのノードで設定ファイルを複製するようにCsync2を設定します。

Corosync

  クラスタ通信システムを設定します。

SBD/ウォッチドッグ

  ウォッチドッグが存在するかどうかをチェックし、SBDをノードフェンシングメカニズムとして設定するかどうか確認メッセージを表示します。

仮想浮動IP

  Hawk2でのクラスタ管理用の仮想IPアドレスを設定するかどうか確認メッセージを表示します。

ファイアウォール

  クラスタ通信に必要なポートをファイアウォールで開きます。

クラスタ名

  クラスタの名前を定義します。デフォルトでは`hacluster`です。これはオプションで、主にGeoクラスタで役立ちます。通常、クラスタ名は場所を反映し、Geoクラスタ内のサイトを識別しやすくします。

QDevice/QNetd

  このセットアップについてはここでは説明しません。QNetdサーバを使用するには、Book “管理ガイド”, Chapter 12 “QDeviceとQNetd”の説明に従って、ブートストラップスクリプトを使用して設定します。

## 4 SUSE Linux Enterprise High Availability Extensionのインストール #

High Availability Extensionでクラスタの設定と管理を行うためのパッケージは、`High Availability`インストールパターン(コマンドラインでは`sles_ha`で指定)に含まれています。このパターンは、SUSE Linux Enterprise High Availability ExtensionがSUSE® Linux Enterprise Serverの拡張としてインストールされている場合にのみ使用できます。

拡張をインストールする方法の詳細については、SUSE Linux Enterprise Server 15 SP4の『導入ガイド』を参照してください。

手順 1: `High Availability`パターンのインストール #

このパターンがまだインストールされていない場合は、次の手順に従います。

1. 次のように、Zypperを使用してコマンドラインでインストールします。

       root # zypper install -t pattern ha_sles

2. クラスタの一部になるすべてのマシンにHigh Availabilityパターンをインストールします。

   注記: すべてのパーティへのソフトウェアパッケージのインストール

   SUSE Linux Enterprise Server 15 SP4およびSUSE Linux Enterprise High Availability Extension 15 SP4を自動インストールする場合は、AutoYaSTを使用して既存のノードのクローンを作成します。AutoYaSTを使用して既存のノードをクローンします。詳細については、Book “管理ガイド”, Chapter 3 “High Availability Extensionのインストール”, Section 3.2 “AutoYaSTによる大量インストールと展開”を参照してください。

3. SUSEカスタマセンターにマシンを登録します。詳細については、SUSE Linux Enterprise Server 15 SP4の『アップグレードガイド』を参照してください。

## 5 フェンシングメカニズムとしてのSBDの使用 #

SAN (ストレージエリアネットワーク)などの共有ストレージが存在する場合、それらのストレージを使用してスプリットブレインシナリオを回避できます。そのためには、SBDをノードのフェンシングメカニズムとして設定します。SBDは、ウォッチドッグサポートと`external/sbd` STONITHリソースエージェントを使用します。

### 5.1 SBDの要件 #

`crm cluster init`で最初のノードをセットアップする際に、SBDを使用するかどうかを決定できます。使用する場合、共有ストレージデバイスのパスを入力する必要があります。デフォルトで、`crm cluster init`は、SBDに使用するデバイス上に自動的に小容量のパーティションを作成します。

SBDを使用するには、次の要件を満たしている必要があります。

- 共有ストレージデバイスのパスが永続的で、クラスタ内のすべてのノードで一致している必要があります。`/dev/disk/by-id/dm-uuid-part1-mpath-abcedf12345`などの固定デバイス名を使用してください。

- SBDデバイスでホストベースのRAIDやLVM2を使用したり、SBDデバイスをDRBD*インスタンス上に存在させることは「できません」。

共有ストレージの設定方法の詳細については、SUSE Linux Enterprise Server 15 SP4の『Storage Administration Guide』を参照してください。

### 5.2 SBDのsoftdogウォッチドッグの有効化 #

SUSE Linux Enterprise Serverでは、カーネル内のウォッチドッグサポートはデフォルトで有効化されています。これは、ハードウェア固有のウォッチドッグドライバを提供する、さまざまなカーネルモジュールを標準装備しています。High Availability Extensionはウォッチドッグに「フィード」するソフトウェアコンポーネントとしてSBDデーモンを使用します。

次の手順では、`softdog`ウォッチドッグを使用します。

重要: softdogの制限

softdogドライバはCPUが最低1つは動作中であることを前提とします。すべてのCPUが固まっている場合、システムを再起動させるsoftdogドライバのコードは実行されません。これに対して、ハードウェアウォッチドッグはすべてのCPUが固まっていても動作し続けます。

運用環境でクラスタを使用する前に、`softdog`モジュールを、ご使用のハードウェアに最適なハードウェアモジュールに置き換えることを強くお勧めします。

ただし、ハードウェアに適合するウォッチドッグがない場合、カーネルウォッチドッグモジュールとして`softdog`を使用することができます。

1. 5.1項 「SBDの要件」の説明に従って、永続的な共有ストレージを作成します。

2. softdogウォッチドッグを有効にします。

       root # echo softdog > /etc/modules-load.d/watchdog.conf
       root # systemctl restart systemd-modules-load

3. softdogモジュールが正しくロードされているかどうかをテストします。

       root # lsmod | grep dog
       softdog                16384  1

スプリットシナリオを避けるために、SBDフェンシングメカニズムが正常に機能しているかどうかをテストすることを強くお勧めします。このテストを実行するには、Corosyncクラスタ通信をブロックします。

## 6 最初のノードの設定 #

`crm cluster init`スクリプトで最初のノードを設定します。ここでは最小限の時間と手動介入しか必要ありません。

手順 2: `crm cluster init`を使用して最初のノード(`alice`)を設定する #

1. クラスタノードとして使用する物理または仮想マシンに`root`としてログインします。

2. 実行によって、ブートストラップスクリプトを開始します。

       root # crm cluster init --name CLUSTERNAME

   CLUSTERNAMEプレースホルダを、クラスタの地理的な場所のような、意味のある名前で置き換えます(たとえば、`amsterdam`)。これによってサイトを識別しやすくなるため、後でGeoクラスタを作成する場合に特に役立ちます。

   クラスタ通信にユニキャスト(デフォルト)の代わりにマルチキャストが必要な場合は、オプション`--multicast`(または`-U`)を使用します。

   このスクリプトは、NTP設定とハードウェアウォッチドッグサービスを確認します。また、SSHアクセスとCsync2の同期に使用される公開および秘密SSHキーが生成され、それぞれのサービスが起動されます。

3. クラスタ通信層(Corosync)を設定します。

   1. バインドするネットワークアドレスを入力します。デフォルトでは、スクリプトは`eth0`のネットワークアドレスを提案します。または、たとえば`bond0`のアドレスなど、別のネットワークアドレスを入力します。

   2. 提案されたポート(`5405`)を受け入れるか、別のポートを入力します。

4. SBDをノードフェンシングメカニズムとして設定します。

   1. <`y`>キーを押して、SBDを使用することを確認します。

   2. SBDに使用するブロックデバイスのパーティションの永続的なパスを入力します。5項 「フェンシングメカニズムとしてのSBDの使用」を参照してください。パスはクラスタ内のすべてのノード全体で一致している必要があります。

5. Hawk2でクラスタを管理するための仮想IPアドレスを設定します(この仮想IPリソースは、後でフェールオーバーが正常に実行されるかどうかをテストするために使用します)。

   1. <`y`>キーを押して、仮想IPアドレスを設定することを確認します。

   2. Hawk2の管理IPとして使用する、未使用のIPアドレス(`192.168.2.1`)を入力します。

      Hawk2で個々のクラスタノードにログインする代わりに、その仮想IPアドレスに接続できるようになります。

最後に、スクリプトはPacemakerサービスを開始し、クラスタをオンラインにして、Hawk2を有効にします。Hawk2に使用するURLが画面に表示されます。

1ノードクラスタが実行するようになります。状態を表示するには、次の手順に従います。

手順 3: Hawk2 Webインタフェースへのログイン #

1. 任意のコンピュータで、Webブラウザを起動し、JavaScriptとクッキーが有効なことを確認します。

2. URLとして、Hawk Webサービスを実行するクラスタノードのIPアドレスまたはホスト名を入力します。または、手順2「`crm cluster init`を使用して最初のノード(`alice`)を設定する」のステップ 5で設定した仮想IPアドレスのアドレスを入力します。

       https://HAWKSERVER:7630/

   注記: 証明書の警告

   初めてURLにアクセスしようとするときに証明書の警告が表示される場合は、自己署名証明書が使用されています。自己署名証明書は、デフォルトでは信頼されません。

   証明書を検証するための詳細情報については、クラスタのオペレータに問い合わせてください。

   続行するには、ブラウザに例外を追加して警告をバイパスします。

3. Hawk2のログイン画面で、ブートストラップ手順で作成されたユーザのユーザ名とパスワードを入力します(ユーザ`hacluster`、パスワード`linux`)。

   重要: セキュリティ保護されたパスワード

   デフォルトのパスワードはできるだけ早くセキュリティ保護されたパスワードに変更します。

       root # passwd hacluster

4. ログインをクリックします。ログイン後、Hawk2 Webインタフェースに［ステータス］画面がデフォルトで表示され、クラスタの現在の状態の概要が表示されます。

   図 1: Hawk2の1ノードクラスタの状態 #

## 7 2つ目のノードの追加 #

1ノードクラスタが正常に稼働している場合、手順 4に従って、`crm cluster join`ブートストラップスクリプトを使用して2つ目のクラスタノードを追加します。スクリプトは既存のクラスタノードへのアクセスのみが必要で、ご使用のマシンで自動的に基本セットアップを完了します。詳細については、`crm cluster join`のマニュアルページを参照してください。

ブートストラップスクリプトは、SBDやCorosyncなど、2ノードクラスタに固有な設定を変更します。ブートストラップスクリプトは、SBDやCorosyncなど、2ノードクラスタに固有な設定を変更するために使用します。

手順 4: `crm cluster join`を使用して2つ目のノード(`bob`)を追加する #

1. クラスタを参加させることになる物理または仮想マシンに`root`としてログインします。

2. 実行によって、ブートストラップスクリプトを開始します。

       root # crm cluster join

   NTPがブート時に開始するよう設定されていない場合、メッセージが表示されます。このスクリプトは、ハードウェアウォッチドッグデバイスも確認します(SBDを設定する場合は重要です)。デバイスがないときは警告が表示されます。

3. それでも継続を選択する場合、既存のノードのIPアドレスが求められます。最初のノードのIPアドレスを入力します(`alice`、`192.168.1.1`)。

4. 両方のマシン間にパスワードなしのSSHアクセスを設定していない場合、既存のノードの`root`パスワードが求められます。

   指定されたノードにログインした後、スクリプトはCorosync設定をコピーし、SSH、Csync2を設定して、新しいクラスタノードとしてご使用のマシンをオンラインにします。それとは別に、Hawk2に必要なサービスを開始します。

Hawk2でクラスタの状態を確認します。ステータス › ノード に、2つのノードが緑色の状態で表示されます(図2「2ノードクラスタの状態」を参照してください)。

図 2: 2ノードクラスタの状態 #

## 8 クラスタのテスト #

8.1項 「リソースフェールオーバーのテスト」は、現在リソースを実行しているノードを`standby`に設定した場合に、クラスタによって仮想IPアドレスが他方のノードに移動されるかどうかを確認する簡単なテストです。

ただし、現実的なテストでは、スプリットブレイン状況を回避するフェンシングメカニズムのテストなど、特定のユースケースとシナリオが含まれます。フェンシングメカニズムを正しく設定していない場合、クラスタは正常に動作しません。

運用環境でクラスタを使用する前に、ユースケースに応じて、または`ha-cluster-preflight-check`スクリプトを使用して、クラスタを十分にテストしてください。

### 8.1 リソースフェールオーバーのテスト #

簡単なテストとして、次の手順でリソースフェールオーバーを確認します。

手順 5: リソースフェールオーバーのテスト #

1. ターミナルを開き、使用している仮想IPアドレス`192.168.2.1`に対してpingを実行します。

       root # ping 192.168.2.1

2. 手順3「Hawk2 Webインタフェースへのログイン」の説明に従って、クラスタにログインします。

3. Hawk2のステータス › リソース で、仮想IPアドレス(リソース`admin_addr`)がどのノードで実行されているかを確認します。ここでは、リソースが`alice`で実行されていることを想定しています。

4. `alice`をスタンバイモードにします(図3「スタンバイモードのノード`alice`」を参照してください)。

   図 3: スタンバイモードのノード`alice` #

5. ステータス › リソース の順にクリックします。リソース`admin_addr`は`bob`にマイグレートされました。

マイグレーション中は、仮想IPアドレスに対して連続してpingが実行されます。これは、クラスタセットアップと浮動IPが正常に機能していることを示します。Ctrl–Cを押して`ping`コマンドをキャンセルします。

### 8.2 ha-cluster-preflight-checkコマンドを使用したテスト #

コマンド`ha-cluster-preflight-check`は、クラスタの標準化されたテストを実行します。クラスタ障害をトリガーし、設定を検証して問題を検出します。クラスタを運用環境で使用する前に、このコマンドを使用して、すべてが予期するように動作しているか確認することをお勧めします。

このコマンドは以下のチェックをサポートします。

- 環境チェック: `-e`/`--env-check`。. このテストは次をチェックします。

  - ホスト名は解決できますか?

  - タイムサービスは有効になっていて、開始されていますか?

  - 現在のノードにはウォッチドッグが設定されていますか?

  - `firewalld`サービスが開始されていて、クラスタ関連のポートが開いていますか?

- クラスタの状態チェック: `-c`/`--cluster-check`。. クラスタのさまざまな状態とサービスをチェックします。このテストは次をチェックします。

  - クラスタサービス(Pacemaker/Corosync)が有効になっていて、実行されていますか?

  - STONITHが有効になっていますか? STONITH関連のリソースが設定されていて、開始されているかどうかもチェックします。SBDを設定している場合、SBDサービスは開始されていますか?

  - クラスタにはクォーラムがありますか? 現在のDCノードと、オンライン、オフライン、およびアンクリーンなノードを表示します。

  - 開始した、停止した、あるいは障害が発生しているリソースがありますか?

- スプリットブレインチェック: `--split-brain-iptables`。. Corosyncポートをブロックすることにより、スプリットブレインシナリオをシミュレートします。1つのノードが予期されるようにフェンシングできるかどうかをチェックします。

- SBD、Corosync、およびPacemakerのデーモンを強制終了する: `-kill-sbd`/`-kill-corosync`/`-kill-pacemakerd`。. このようなテストを実行した後で、レポートを`/var/lib/ha-cluster-preflight-check`で見つけることができます。このレポートには、テストケースの説明、アクションのログ記録が含まれ、起こり得る結果が説明されています。

- フェンスノードチェック: `--fence-node`。. コマンドラインから渡される特定のノードをフェンスします。

たとえば、環境をテストするには、次のコマンドを実行します。

    root # crm_mon -1
    Stack: corosync
    Current DC: alice (version ...) - partition with quorum
    Last updated: Fri Mar 03 14:40:21 2020
    Last change: Fri Mar 03 14:35:07 2020 by root via cibadmin on alice

    2 nodes configured
    1 resource configured

    Online: [ alice bob ]
    Active resources:

     stonith-sbd    (stonith:external/sbd): Started alice

    root # ha-cluster-preflight-check -e
    [2020/03/20 14:40:45]INFO: Checking hostname resolvable [Pass]
    [2020/03/20 14:40:45]INFO: Checking time service [Fail]
     INFO: chronyd.service is available
     WARNING: chronyd.service is disabled
     WARNING: chronyd.service is not active
    [2020/03/20 14:40:45]INFO: Checking watchdog [Pass]
    [2020/03/20 14:40:45]INFO: Checking firewall [Fail]
     INFO: firewalld.service is available
     WARNING: firewalld.service is not active

`/var/log/ha-cluster-preflight-check.log`で結果を検査することができます。

## 9 詳細の参照先 #

本製品の他のマニュアルは、https://documentation.suse.com/sle-ha/で入手できます。設定および管理タスクの詳細については、包括的な『管理ガイド』を参照してください。

## 10 法的規制の通知 #

Copyright © 2006– 2025 SUSE LLC and contributors.All rights reserved.

この文書は、GNUフリー文書ライセンスのバージョン1.2または(オプションとして)バージョン1.3の条項に従って、複製、配布、および/または改変が許可されています。ただし、この著作権表示およびライセンスは変更せずに記載すること。ライセンスバージョン1.2のコピーは、「GNUフリー文書ライセンス」セクションに含まれています。

SUSEの商標については、http://www.suse.com/company/legal/を参照してください。その他の第三者のすべての商標は、各社の所有に帰属します。商標記号(®、 ™など)は、SUSEおよび関連会社の商標を示します。アスタリスク(*)は、第三者の商標を示します。

本書のすべての情報は、細心の注意を払って編集されています。しかし、このことは絶対に正確であることを保証するものではありません。SUSE LLC、その関係者、著者、翻訳者のいずれも誤りまたはその結果に対して一切責任を負いかねます。

# A GNU licenses #

This appendix contains the GNU Free Documentation License version 1.2.

## GNU Free Documentation License #

Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

##### 0. PREAMBLE #

The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or non-commercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

We have designed this License to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

##### 1. APPLICABILITY AND DEFINITIONS #

This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.

The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

##### 2. VERBATIM COPYING #

You may copy and distribute the Document in any medium, either commercially or non-commercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and you may publicly display copies.

##### 3. COPYING IN QUANTITY #

If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

##### 4. MODIFICATIONS #

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.

3. State on the Title page the name of the publisher of the Modified Version, as the publisher.

4. Preserve all the copyright notices of the Document.

5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

8. Include an unaltered copy of this License.

9. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

11. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

13. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.

14. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.

15. Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

##### 5. COMBINING DOCUMENTS #

You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".

##### 6. COLLECTIONS OF DOCUMENTS #

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

##### 7. AGGREGATION WITH INDEPENDENT WORKS #

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

##### 8. TRANSLATION #

Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

##### 9. TERMINATION #

You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

##### 10. FUTURE REVISIONS OF THIS LICENSE #

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See https://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

##### ADDENDUM: How to use this License for your documents #

    Copyright (c) YEAR YOUR NAME.
    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.2
    or any later version published by the Free Software Foundation;
    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    A copy of the license is included in the section entitled “GNU
    Free Documentation License”.

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with...Texts.” line with this:

    with the Invariant Sections being LIST THEIR TITLES, with the
    Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.