ソースからDRBDを構築する

構築の前提条件の確認

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

  • makegcc、glibc開発ライブラリ、および flexスキャナジェネレータがインストールされている必要があります。

    [注記]注記

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

  • git checkout から直接ビルドする場合は、 GNU Autoconf が必要になります。ソースtarファイルからビルドする場合は必要ありません。

  • ディストリビューションが提供するストックカーネルを実行している場合は、一致するコンパイル済みカーネルヘッダパッケージをインストールする必要があります。これらは通常、kernel-devkernel-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を構築する場合は、 「カーネルソースツリーの準備」に進みます。

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

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

cd /usr/src/linux

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

make mrproper

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

  • 比較的新しい多くのカーネルビルドでは、現在実行中の構成が圧縮されて/procファイルシステム経由でエクスポートされます。

    zcat /proc/config.gz > .config

  • SUSEカーネルのメークファイルには cloneconfigターゲットが含まれているため、こうしたシステムでは次のコマンドを実行できます。

    make cloneconfig
  • インストールによって、カーネル構成が/boot にコピーされる場合があります。この場合は次のコマンドを実行します。

    cp /boot/config-`uname -r` .config
  • 最後に、.config ファイルのバックアップコピーを使用します。これは、現在実行中のカーネルの構築に使用したファイルのコピーです。

DRBDビルトツリーの準備

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

[注記]注記

このセクションの情報は、DRBD 8.3.6 以上を対象としています。8.3.5 以前のバージョンでは configure スクリプトが含まれていませんので、バージョンアップしてください。

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

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

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

オプション説明デフォルト値特記事項
--prefixインストールディレクトリ prefix/usr/localソフトウェアがインストールされるディレクトリです。パッケージの場合は、通常 /usr に上書きされます。
--localstatedir動作状態を記録するディレクトリ/usr/local/varprefixはデフォルトのままでも、この値を /var に書き換えるユーザは多いでしょう。
--sysconfdirシステム設定ディレクトリ/usr/local/etcprefixはデフォルトのままでも、この値を /etc に書き換えるユーザは多いでしょう。
--with-kmDRBDカーネルモジュールのビルドnoDRBDカーネルモジュールをビルドする場合は、このオプションを有効にしてください。
--with-utilsDRBD ユーザスペースユーティリティのビルドyes最新バージョンのカーネル用にDRBDカーネルモジュールをビルドし、その際、DRBDをアップグレードしたくない場合は、このオプションを無効にしてください。
--with-heartbeatDRBD Heartbeat 統合のビルドyesDRBD の Heartbeat v1 用リソースエージェントを使用しない、もしくは、 dopd を使用しない場合には、このオプションを無効にしてください。
--with-pacemakerDRBD Pacemaker 統合のビルドyesPacemaker クラスタリソース管理プログラムを使用しない場合には、このオプションを無効にしてください。
--with-rgmanagerDRBD Red Hat Cluster Suite 統合のビルドnoRed Hat Cluster Suite クラスタリソース管理システムの rgmanager を使用しない場合には、このオプションを無効にしてください。
--with-xenDRBD Xen 統合yes (x86 アーキテクチャの場合)Xen 統合で、block-drbd ヘルパースクリプトを使用しない場合には、このオプションを無効にしてください。
--with-bashcompletiondrbdadm に対する bash の自動補完機能をビルドします。yesbash 以外のシェルを使う場合、もしくは、 drbdadm コマンドに対する自動補完を使用しない場合には、このオプションを無効にしてください。
--enable-specディストリビューションに対応した PRM spec ファイルの生成noディストリビューションに対応する RPM spec ファイルを生成したい場合には、このオプションを有効にしてください。「DRBD RPM パッケージのビルド」 もご参照ください。

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

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

DRBDユーザスペースユーティリティのビルド

[重要項目]重要項目

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

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

	$ make
	$ sudo make install
      

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

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

[重要項目]重要項目

DRBDの configure--with-km オプションを有効にした場合、DRBD カーネルモジュールがビルドされます。このオプションはデフォルト値では無効になっています。

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

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

cd drbd
make clean all

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

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

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

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

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

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

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

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

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

cd drbd
make clean
make CC=gcc32

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

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