ソースからDRBDを構築する

構築の前提条件の確認

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

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

    [注意]注意

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

  • ディストリビューションが提供するストックカーネルを実行している場合は、 一致するコンパイル済みカーネルヘッダパッケージをインストールする必要があります。 これらは通常、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を構築する場合にのみ適用されます。 DRBDをカーネルイメージ内に構築する場合は、 カーネルにパッチを適用する必要があります。 「カーネルにDRBDをパッチとして適用する」を参照してください。 ただし、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=/usr/src/linux-include/athlon

または

cd drbd
make clean
make KDIR=/usr/src/linux-headers-version

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

現在実行中のカーネル以外のカーネルに対して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を実行して 新しく構築したモジュールを確認できます。

カーネルにDRBDをパッチとして適用する

[注意]注意

このセクションの説明が適用されるのは、 DRBDをロード可能なモジュールとしてコンパイルするのではなく、 DRBDをカーネルイメージ内に構築する場合のみです。 ロード可能なモジュールをサポートしないカーネルを構築するなど、 合理的な理由がある場合にだけこの手順を使用してください。 通常は、DRBDをロード可能なモジュールとして使用することをお勧めします。

この手順では、DRBD構築システムによりカーネルパッチを生成して、 これをカーネルソースツリーに適用します。 パッチを作成するには、次のコマンドを実行します。

cd drbd
make clean
make KDIR=/usr/src/linux kernel-patch

これにより、patch-linux-version-drbd-version というファイルが作成されます。

このパッチを確認したら、 次のコマンドを実行してカーネルソースツリーに適用します。

cd /usr/src/linux
patch -p1 </usr/src/drbd-version/patch-linux-version-drbd-version

[注意]注意

上記の例では、このセクションの他の例と同様にDRBDソースtarファイルを /usr/src/drbd-x.y.z に展開しています。 x.y.z は構築するDRBDのバージョンです。 /usr/src/linuxに置かれたカーネルのソースに対して構築を行います。

この後で、カーネルを構成する方法に応じて make configmake menuconfigまたは make xconfigを実行して、 構築のためにDRBDを有効にします。 メニューまたは GUI (グラフィカルユーザインタフェース)ベースの 構成ツールを使用する場合は、 [Block devices]セクションにDRBDが表示されます。

これで、通常どおりに(make bzImageなどにより) カーネルを構築できます。 構築されたカーネルビルドにはDRBDが含まれています。

この方法では、DRBDユーザスペース管理ツールを 個別に構築する必要があります。 展開されたDRBDソースの最上位ディレクトリに移動し、 make tools コマンドを実行します。

cd /usr/src/drbd-x.y.z
make tools