第4章 ソースからのDRBDの構築とインストール

目次

4.1. DRBDソースのダウンロード
4.2. 公開DRBDソースリポジトリからソースをチェックアウトする
4.3. ソースからDRBDを構築する
4.3.1. ビルドの前提条件を確認する
4.3.2. カーネルソースツリーの準備
4.3.3. DRBDビルトツリーの準備
4.3.4. DRBDユーザ空間ユーティリティのビルド
4.3.5. カーネルモジュールとしてDRBDをコンパイルする
4.4. DRBD RPMパッケージのビルド
4.5. DRBD Debianパッケージの構築

4.1. DRBDソースのダウンロード

DRBDの最新リリースと過去のリリースのソースtarファイルは、http://oss.linbit.com/drbd/ からダウンロードできます。ソースtarファイルは慣例に従い drbd-x.y.z.tar.gz という名前です。x、y、zは、それぞれメジャーリリース、マイナーリリース、バグフィックスリリースの番号です。

ソースtarファイルをダウンロードする際のDRBDの圧縮ソースアーカイブのサイズは0.5MB未満です。現在の作業用ディレクトリにダウンロードして圧縮解除するには、次のコマンドを実行します。

$ wget http://oss.linbit.com/drbd/8.4/drbd-latest.tar.gz
$ tar -xzf drbd-latest.tar.gz
[注記]注記

ソースtarファイルをダウンロードする際の wget の使用は単に一例です。好みのダウンローダを使用することができます。

/usr/src/usr/local/src など、通常、ソースコードを格納するディレクトリにDRBDを展開することをお勧めします。本書の例では /usr/src を使用しています。

4.2. 公開DRBDソースリポジトリからソースをチェックアウトする

DRBDのソースコードは公開 Git リポジトリに置かれています。これは http://git.drbd.org/ でオンラインブラウズできます。リポジトリから特定のDRBDリリースをチェックアウトするには、まず、好みのDRBDブランチを 複製 します。この例では、DRBD 8.4ブランチから複製します。

$ git clone git://git.drbd.org/drbd-8.4.git

ファイアウォールがポート9418へのTCP接続を許可しないように設定されている場合は、HTTP経由でチェックアウトすることもできます(HTTP経由でGitを使う場合はGitネイティブのプロトコルよりも遅くなる点に注意してください。そのため可能な限りネイティブプロトコル使用を推奨します)。

$ git clone http://git.drbd.org/drbd-8.4.git

いずれのコマンドの場合も、drbd-8.4 というGitチェックアウト用サブディレクトリが作成されます。特定のDRBDリリースに相当するソースコードの状態に移動するには、次のコマンドを実行します。

$ cd drbd-8.4
$ git checkout drbd-8.4.<x>
  1. ここで、<x> は構築するDRBDのポイントリリースです。

これで、特定のバージョンの展開されたDRBDソースtarファイルと同等のものがチェックアウト用ディレクトリに格納され、ソースからDRBDを構築できるようになります。

同じリリースの展開されたソースtarファイルとGitチェックアウトには、以下に示す2つの小さな違いがあります。

  • Gitチェックアウトには debian/ サブディレクトリが含まれますが、ソースtarファイルには含まれません。これは、tarファイルに独自のDebian用ファイル追加したいというDebianメンテナからの要求に応じたものです。
  • ソースtarファイルには前もって処理されたmanページが含まれますが、Gitチェックアウトには含まれません。したがって、GitチェックアウトからDRBDを構築する場合は、manページを構築するための完全なDocbookツールチェーンが必要です。ソースtarファイルから構築する場合は必要ありません。

4.3. ソースからDRBDを構築する

4.3.1. ビルドの前提条件を確認する

ソースからDRBDを構築するには、ビルドするホストが次の前提条件を満たす必要があります。

  • make、gcc、glibc開発ライブラリ、flex スキャナジェネレータがインストールされている必要があります。
[注記]注記

モジュールをコンパイルするために使用する gcc は、実行中のカーネルを構築したものと同じバージョンを使用してください。システムに複数バージョンの gcc がある場合でも、DRBDの構築システム<link linkend="s-build-customcc">に特定のバージョンの gcc を選択する機能が含まれています。

  • git checkoutから直接ビルドする場合は、GNU Autoconfが必要になります。ソースtarファイルからビルドする場合は必要ありません。
  • ディストリビューションが提供するストックカーネルを実行している場合は、合致するコンパイル済みカーネルヘッダパッケージをインストールする必要があります。これらは通常 kernel-dev,kernel-headerslinux-headers のような名前です。この場合は「カーネルソースツリーの準備」を飛ばして「DRBDビルトツリーの準備」へ進みます。
  • ディストリビューションのストックカーネルを実行していない場合(ソースから構築したカスタム構成を持つカーネルでシステムが実行されている場合)は、カーネルソースファイルをインストールする必要があります。ディストリビューションのパッケージインストールメカニズムにこの機能が含まれている場合があります。カーネルソースのディストリビューションパッケージは一般に kernel-source のような名前です。
[注記]注記

RPMベースのシステムの場合は、このパッケージは kernel-source-version.rpm のような名前です。kernel-version.src.rpm と紛らわしいので注意してください。DRBDを構築するためにインストールするのは、前者のパッケージです。

kernel.orgアーカイブのVanillaカーネルのtarファイルは、linux-version-tar.bz2という名前です。これは、/usr/src/linux-version ,に展開し、シンボリックリンク /usr/src/linux でこのディレクトリを指定するようにします。

このように、(ヘッダではなく)カーネルソースに対してDRBDを構築する場合は、「カーネルソースツリーの準備」に進みます。

4.3.2. カーネルソースツリーの準備

DRBDを構築するためにソースツリーを準備するには、まず、展開したカーネルソースが置かれたディレクトリに移動します。これは通常は /usr/src/linux-version、または /usr/src/linux というシンボリックリンクです。

$ cd /usr/src/linux

次の手順は必須ではありませんが、実行することをお勧めします。この手順を実行する前に、必ず、既存の .config ファイルを安全な場所にコピーしてください。この手順により、カーネルソースツリーを実質的に元の状態に戻し、以前の構築や構成の実行により生成されたものを削除します。

$ make mrproper

これで、現在実行中のカーネル構成をカーネルソースツリーに 複製 することができます。このときに次のオプションを利用できます。

  • 比較的新しい多くのカーネルビルドでは、現在実行中の構成が圧縮されて /proc ファイルシステム経由でエクスポートされるため、コピー可能です。
$ zcat /proc/config.gz > .config
  • SUSEカーネルのMakefileには cloneconfig ターゲットが含まれているため、こうしたシステムでは次のコマンドを実行できます。
$ make cloneconfig
  • インストールによってはカーネル構成が /boot にコピーされる場合があります。こうしたシステムでは次のコマンドを実行できます
$ cp /boot/config-`uname -r` .config
  • 最後に、.config ファイルのバックアップコピーを使用します。これは、現在実行中のカーネルの構築に使用したファイルのコピーです。

4.3.3. DRBDビルトツリーの準備

DRBDのコンパイルでは、まず configure スクリプトに含まれるDRBDソースツリーを設定する必要があります。

[注記]注記

git checkoutから直接ビルドする場合は、configure スクリプトは含まれておりません。そのため、チェックアウトのトップで、autoconf とタイプし、スクリプトを作成する必要があります。

--help オプションでサポートされているオプションのリストが表示されます。重要なオプションを表にまとめてあります。

表4.1 DRBDの configure スクリプトでサポートされているオプション

OptionDescriptionDefaultRemarks

--enable-spec

ディストリビューションに対応したRPM specファイルの生成

no

ディストリビューションに対応するRPM specファイルを生成したい場合には、このオプションを有効にしてください。「DRBD RPMパッケージのビルド」もご参照ください。

--prefix

インストールディレクトリprefix

/usr/local

ソフトウェアがインストールされるディレクトリです。パッケージの場合は、通常/usrに上書きされます。

--localstatedir

動作状態を記録するディレクトリ

/usr/local/var

prefix はデフォルトのままでも、この値を /var に書き換えるユーザは多いでしょう。

--sysconfdir

システム設定ディレクトリ

/usr/local/etc

prefix はデフォルトのままでも、この値を /etc に書き換えるユーザは多いでしょう。

--with-km

DRBDカーネルモジュールのビルド

no

DRBDカーネルモジュールをビルドする場合は、このオプションを有効にしてください。

--with-utils

DRBDユーザ空間ユーティリティのビルド

yes

最新バージョンのカーネル用にDRBDカーネルモジュールをビルドし、その際、DRBDをアップグレードしたくない場合は、このオプションを無効にしてください。

--with-heartbeat

DRBD Heartbeat統合のビルド

yes

DRBDのHeartbeat v1用リソースエージェントを使用しない、もしくは、dopd を使用しない場合には、このオプションを無効にしてください。

--with-pacemaker

DRBD Pacemaker統合のビルド

yes

Pacemakerクラスタリソース管理プログラムを使用しない場合には、このオプションを無効にしてください。

--with-rgmanager

DRBD Red Hat Cluster Suite統合のビルド

no

Red Hat Cluster Suiteクラスタリソース管理システムのrgmanagerを使用しない場合には、このオプションを無効にしてください。実際にrgmanagerパッケージのビルドする際、rpmbuild をパスするには --with rgmanager が必要なので注意してください。

--with-xen

DRBD Xen統合

yes (x86アーキテクチャの場合)

Xen統合で、block-drbd ヘルパースクリプトを使用しない場合には、このオプションを無効にしてください。

--with-bashcompletion

drbdadmに対するbashの自動補完機能をビルドします

yes

bash以外のシェルを使う場合、もしくは、drbdadm コマンドに対する自動補完を使用しない場合には、このオプションを無効にしてください。


ほとんどのユーザーにとっては以下の設定オプションが必要でしょう。

$ ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc --with-km

configureスクリプトは、DRBDのビルドをディストリビューション特有のニーズに適合させます。起動されると、ディストリビューションに応じて自動で実行され、デフォルトに従って設定されます。デフォルト値を書き換える場合には、十分に注意してください。

configureスクリプトは、起動されたディレクトリに、ログファイル config.log を生成します。ビルドで発生した問題をメーリングリストに報告する際には、そのログファイルをメールに添付するか、他の人からもダウンロードできるような状態にしておくとよいでしょう。

4.3.4. DRBDユーザ空間ユーティリティのビルド

ユーザ空間ユーティリティをビルドする際には、DRBDを--with-utilsオプション付きでconfigureしなければなりません。なお、このオプションはデフォルトで有効になっています。

DRBDユーザ空間ユーティリティをビルドするには、DRBDをチェックアウトしたディレクトリのトップ、もしくは、traballを展開したディレクトリで、次のコマンドを起動します。

$ make
$ sudo make install

このコマンドにより、管理ユーティリティ(drbdadm、drbdsetup または drbdmeta)がビルドされ、適切な場所にインストールされます。configureの段階で、他の --with オプションを選択した場合、DRBDと他のアプリケーションとを統合するためのスクリプトもインストールされます。

4.3.5. カーネルモジュールとしてDRBDをコンパイルする

DRBDカーネルモジュールをビルドするにはDRBDを--with-kmオプションでconfigureする必要があります。このオプションはデフォルトでは無効になっています。

4.3.5.1. 現在実行中のカーネル用にDRBDを構築する

展開されたDRBDソースがあるディレクトリに移動したら、drbd という名前のカーネルモジュールサブディレクトリに移動し、ここでモジュールを構築します。

$ cd drbd
$ make clean all

これで、現在実行中のカーネルと一致するDRBDカーネルモジュールが構築されます。このカーネルソースには /lib/modules/uname -r/build シンボリックリンクでアクセスできます。

4.3.5.2. コンパイル済みカーネルヘッダに対して構築する

/lib/modules/uname -r/build シンボリックリンクが存在しない場合に、実行中のストックカーネル(ディストリビューションに含まれるコンパイル済みカーネル)に対して構築を行う場合は、(カーネルソースではなく) 対応する カーネルヘッダディレクトリを指定するようにKDIR変数を設定する必要があります。DRBDビルドプロセスは、通常 /usr/src/linux-version/include に置かれた実際のカーネルヘッダに加えて、カーネルのMakefileと設定ファイル(.config)も探します。これらは一般に構築済みカーネルヘッダパッケージに含まれています。

コンパイル済みカーネルヘッダに対して構築する場合は、たとえば次のようなコマンドを実行します。

$ cd drbd
$ make clean
$ make KDIR=/lib/modules/2.6.38/build

4.3.5.3. カーネルソースツリーに対して構築する

現在実行中のカーネル 以外 のカーネルに対してDRBDを構築する際に、ターゲットカーネルのコンパイル済みカーネルソースがない場合は、ターゲットカーネルの完全なソースツリーに対してDRBDを構築する必要があります。そのためには、KDIR変数をカーネルソースディレクトリを指定するように設定します。

$ cd drbd
$ make clean
$ make KDIR=/path/to/kernel/source

4.3.5.4. デフォルト以外のCコンパイラを使用する

CC変数を使用して、コンパイラを明示的に設定することもできます。一部のFedoraバージョンの場合はこの手順が必要です。たとえば、次のようになります。

$ cd drbd
$ make clean
$ make CC=gcc32

4.3.5.5. 構築が正常に完了したか確認する

モジュールの構築が正常に完了すると、drbd ディレクトリに drbd.ko というカーネルモジュールファイルが作成されます。必要に応じて、/sbin/modinfo drbd.koを実行して新しく構築したモジュールを確認できます。

4.4. DRBD RPMパッケージのビルド

DRBD構築システムには、DRBDソースツリーから直接RPMパッケージを構築する機能が含まれています。RPMを構築する場合にも、make による構築とインストールについては「ビルドの前提条件を確認する」が適用されます。当然ながら、加えてRPM構築ツールも必要です。

コンパイル済みヘッダが使用可能な場合に実行中のカーネルに対して構築を行う場合以外は「カーネルソースツリーの準備」も参照してください。

構築システムでは2つの方法で RPM を構築することができます。最上位のMakefileでrpmターゲットを呼び出す方法が簡単です。

$ ./configure
$ make rpm
$ make km-rpm

この方法では、定義済みのテンプレートからspecファイルが自動的に生成され、このspecファイルを使用してバイナリRPMパッケージを構築できます。

make rpm は複数のRPMパッケージを生成します。

表4.2 DRBD userland RPM packages

Package nameDescriptionDependenciesRemarks

drbd

DRBDメタパッケージ

他の全ての drbd-* パッケージ

トップレベルの仮想パッケージこのパッケージをインストールすると、依存関係にある他のすべてのユーザ空間パッケージが一緒にインストールされます。

drbd-utils

管理者ユーティリティ

DRBDを実行するホストに必要なパッケージです。

drbd-udev

udev統合機能

drbd-utils,udev

DRBDデバイスに対するシンボリックの管理をしやすくします。

drbd-xen

Xen DRBDヘルパースクリプト

drbd-utils,xen

xendがDRBDリソースを自動管理できるようにします。

drbd-heartbeat

DRBD Heartbeat統合スクリプト

drbd-utils,heartbeat

旧v1形式HeartbeatクラスタがDRBDを管理できるようにします。

drbd-pacemaker

DRBD Pacemaker統合スクリプト

drbd-utils,pacemaker

PacemakerクラスタがDRBDを管理できるようにします。

drbd-rgmanager

DRBD Red Hat Cluster Suite統合スクリプト

drbd-utils,rgmanager

Red Hat Cluster Suiteリソース管理システムのrgmanageがDRBDを管理できるようにします。

drbd-bashcompletion

Progammable bash completion

drbd-utils , bash-completion

drbdadm ユーティリティで自動補完が使えるようにするためのものです。


その他、より自由度の高い方法として configure を使ってspecファイルを作成し、rpmbuild コマンドを実行する方法もあります。

$ ./configure --enable-spec
$ make tgz
$ cp drbd*.tar.gz `rpm -E _sourcedir`
$ rpmbuild -bb drbd.spec

両方のDRBDユーザ空間ユーティリティとカーネルモジュールをビルドする場合には、次のコマンドを使います。

$ ./configure --enable-spec --with-km
$ make tgz
$ cp drbd*.tar.gz `rpm -E _sourcedir`
$ rpmbuild -bb drbd.spec
$ rpmbuild -bb drbd-kernel.spec

システムのRPM設定(または独自の ~/.rpmmacros 設定)が指定する場所にRPMが作成されます。

これらのパッケージを作成したら、システムの他のRPMパッケージと同様にインストール、アップグレード、アンインストールを行うことができます。

カーネルをアップグレードした場合は、新しいカーネルに合わせて新しい drbd-km パッケージを生成する必要があります。

一方、DRBDユーザ空間パッケージの場合は、新規バージョンのDRBDにアップグレードしたときにのみ再作成が必要です。新規カーネル および 新規バージョンのDRBDにアップグレードした場合は、両方のパッケージをアップグレードする必要があります。

4.5. DRBD Debianパッケージの構築

DRBD構築システムには、DRBDソースツリーから直接Debianパッケージを構築する機能が含まれています。Debianパッケージを構築する場合にも、make による構築とインストールについては「ビルドの前提条件を確認する」の条件が実質的に適用されます。加えて、Debianパッケージツールを含む dpkg-dev パッケージも必要です。さらに、root 以外のユーザとしてDRBDを構築する場合には、fakeroot も必要です(この方法を強く推奨)。

コンパイル済みヘッダが使用可能な場合に実行中のカーネルに対して構築を行う場合以外は「カーネルソースツリーの準備」も参照してください。

DRBDソースツリーには、debian パッケージ作成に必要なファイルを含むdebianサブディレクトリがあります。ただし、このサブディレクトリはDRBDのソースtarファイルには含まれていません。代わりに、特定のDRBDリリースに関連付けられた タグGitチェックアウトを作成する必要があります。

このようなチェックアウトを作成したら、次のコマンドを実行してDRBD Debianパッケージを構築します。

$ dpkg-buildpackage -rfakeroot -b -uc
[注記]注記

この例では、drbd-buildpackage を呼び出して、バイナリのみの構築を有効にし(-b)、ユーザを root 以外とし(-rfakeroot)、さらに変更ファイルの暗号化シグネチャを無効にします(-uc)。もちろん、他の構築オプションを指定することもできます。詳細は、dpkg-buildpackage のmanページを参照してください。

この構築プロセスにより、次の2つのDebianパッケージが作成されます。

  • DRBDユーザ空間を含むパッケージ drbd8-utils_x.y.z-BUILD_ARCH.deb ;
  • module-assistant に対応したモジュールソースパッケージ(drbd8-module-source_x.y.z-BUILD_all.deb)

これらのパッケージを作成したら、システムの他のDebianパッケージと同様にインストール、アップグレード、アンインストールを行うことができます。

Debianの module-assistant 機能を使用すれば、インストールしたモジュールソースパッケージから実際のカーネルモジュールを簡単に構築してインストールできます。

# module-assistant auto-install drbd8

上記のコマンドの短縮形も使用できます。

# m-a a-i drbd8

カーネルをアップグレードした場合は、新しいカーネルに合わせてカーネルモジュールを再構築する必要があります(上述の module-assistant 機能を使用)。一方、drbd8-utilsdrbd8-module-source パッケージの場合は新規バージョンのDRBDにアップグレードしたときにのみ再作成が必要です。新規カーネル および 新規バージョンのDRBDにアップグレードした場合は、両方のパッケージをアップグレードする必要があります。