关于drbd版本
在linux 2.6.33以后的版本中,drbd已经集成到内核中
目前在用的drbd主要8.0、8.2、8.3 三个版本,对应的rpm包是drbd,drbd82和drbd83,因此需要安装对应的内核模块,对应的名字为kmod-drbd,kmod- drbd82,kmod-drbd83。由于drbd是作为内核模块进行工作的,故建议使用与内核对应的版本,对应关系如下表

DRBD编译安装
LINBIT是赞助DRBD项目的公司,为商业用户提供DRBD的二进制包。这些包在http://www.linbit.com/support/中可以找到,被认为是“官方”DRBD的基础。
它的发行版本如下:
这些支持以下发行版本:
红帽企业的linux(RHEL),版本4和5
SUSE Linux企业操作系统(SLES),版本9、10和11
Debian GUN/linux操作系统,版本4.0(etch)和5.0(lenny)
Ubuntu Server Edition LTS,版本6.06(Dapper Drake)和8.04(Hardy Heron)
LINBIT发布所有DRBD的新源码包。
基于RPM包(SLES、RHEL)的安装可以通过简单的调用rpm -i (新安装)或者是rpm –U (升级)对DRBD进行安装。
对于基于Debian的系统(GUN/Linux,Ubuntu),Drbd8-utils和Drbd8-module 包的安装使用dpkg -i 或者是gdebi(如果可用的话)。

过程很简单,找到相应的包安装即可,这里不再赘述。
1、下载DRBD源码
DRBD的历史版本和当前版本的压缩包都可以从http://oss.linbit.com/drbd/上下载。按照惯例,DRBD的源码包以drbd-x.y.z的方式命名,其中想,x,y,z对应的为主、辅和错误的修正版本号。
DRBD压缩包的大小不超过0.5M。要下载并解压到当前工作目录,可使用如下命令:
wget http://oss.linbit.com/drbd/8.3/drbd-8.3.4.tar.gz
tar -xzf drbd-8.3.4.tar.gz
注:上面wget下载的源码只是一个例子,当然你可以下载你需要的版本。
建议将DRBD放到存放源代码的普通目录中,如/usr/src或者是/usr/local/src,本文中假定在/usr/src目录中。
2、从DRBD源码库中签出源码(非必须)
DRBD的源码保存在一个公共的Git库中,可以在http://git.drbd.org/上浏览。要从库中签出DRBD的源码,就必须将DRBD释放到库中。这本例中签出的为DRBD8.3:
git clone git://git.drbd.org/drbd-8.3.git
如果您的防火墙不允许TCP连接到9418端口,您也可以通过HTTP签出(请注意,使用http协议要比Git签出的方式慢的多,因此建议尽量的使用Git签出)。
git clone http://git.drbd.org/drbd-8.3.git
先创建一个命名为drbd-8.3的Git的签出目录,也就是将命令的文件夹的名字和签出的源代码的名字一致,可使用以下命令:
cd drbd-8.3
git checkout drbd-8.3.x
这里的X就代表你想签出的DRBD的建立点。
签出的目录是和解压后的指定版本的源代码一样的,也就就是使用DRBd的源代码了。
注:实际上源代码解压和git签出两个来源之间还是有些细微的差别的
git签出包含一个debian/subdirectoy,而源代码解压却没有。这是因为debian版本的维护者要求加入的。
源代码的tarball包含帮助手册,而git不包含。虽然docbook不是源码必须的,但是git签出需要一个完整的docbook手册的地址。
3、准备编译环境
检查编译的条件在编译DRBD的源码前,机器必须符合一下条件:
gcc、make、automake、flex必须安装的。
注:必须保证使用的gcc编译模块运行在内核上,如果系统中有多个版本的gcc,需要选择特定版本的gcc。
如果直接从git签出的文件中编译,guncutoconf也是必须的。这个如果从源码编译这是不需要的。
如果选择运行一个stock kernel,就需要安装一个和之相匹配的预编译的内核头文件包。这些通常命名为kernel-dev、kernel-headers、linux-headers或者类似的名字。这种情况下,跳过下面的"准备内核源码树”,而进行“准备DRBD的编译树”。
如果选择的不是stock kernel( stock kernel指的是RedHat, Debian .... 自带的源码内核,不同于自行编译的内核),比如:系统运行在一个从源码编译配置的内核上,那么内核的源文件则必须安装,则可编译安装和内核源代码版本匹配或者是相似的软件包。
注:在以rpm为基础的系统上,这些软件包命名类似于kernel-source-version.rpm的形式,这很容易和kernel-version.src.rpm相混淆。而前者则是正确的DRBD编译安装包。
在kernel.org上“Vanlilla”内核包命名的格式为linux-version-tar.bz2并应该被解压到/usr/src/linux-version中,使用连接的方式指向/usr/src/linux的文件夹。
在这种情况下,编译DRBD对应的内核源码,则必要“准备内核源码树”。
4、准备内核源码树
必须在解压后的内核源码所在的目录准备建立DRBD的源代码树,通常情况下,这个目录为/usr/src/linux-version,或者是就是一个链接名为/usr/src/linux的目录。
cd /usr/src/linux
接下来的为建议的步骤而不是必须的。务必复制现有的.config文件到一个安全的位置,这一步的将会初始化内核源码树,消除之前编译和配置的影响:
make mrproper
接下来就可以复制当前运行的内核配置文件到内核源码树,可以根据实际情况选择下面的任意一种方式进行配置。
通过/proc将最近内核的合理配置输出到当前正在运行的内核配置文件中,操作如下:
zcat /proc/config.gz > .config
在SUSE的内核上包含一个cloneconfig target,在这类系统上,操作如下:
make cloneconfig
某些安装程序会将内核配置文件安装到/boot下,因此可以通过如下操作备份:
cp /boot/config-`uname -r` .config
接下来就可以使用这份内核配置文件进行操作了。

5、编译drbd
解压下载到的drbd源码包,进入目录运行./configure --help可以查看详细的配置选项,下表列出了这些配置选项。

选项

描述

默认

备注

--prefix

安装路径的选项

/usr/local

这是默认的文件系统标准的无包装软件的安装路径,包装软件一般覆盖/usr

--localstatedir

目录状态定位路径

/usr/local/var

即使有默认的prefix,但大多数用户还是想重写/var

--sysconfdir

系统配置路径

/usr/local/etc

即使有默认的prefix,但大多数用户还是想在/etc下

--with-km

编译DRBD的内核模块

在编译DRBD内核模块时开启此选项

--with-utils

编译DRBD集成userland工具

yes

当编译一个新的内核版本的DRBD,而不同时升级DRBD,禁用次选项

--with-heartbeat

编译DRBD集成 Heartbeat

yes

如果不适用DRBD的heartbeat v1 资源代理或dopd,则可禁用该选项

--with-pacemaker

编译DRBD集成 Pacemaker

yes

如不打算启用Pacemaker功能,则可禁用该选项

--with-rgmanager

编译DRBD集成 红帽集群套件

no

如想适用DRBD整合红帽几圈套件的rgmanager,这需要启用该选项

--with-xen

编译DRBD集成Xen

yes (在X86平台上)

如果不打算集成Xen模块,则可禁用该选项

--with-bashcompletion

编译可编程的bashdrbdadm

yes

如果使用其他的bash的shell,或者不想利用可编程的drbdadm,这可禁用该选项

--enable-spec

创建一个rpm spec文件

no

仅对包的编译者:如果想创建一个rpm spec,可启用该选项。

通过下面的步骤即可完成drbd的安装。

$ ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc --with-km
$ make
$ sudo make install
6、创建drbd模块

如上文所述,drbd是作为内核模块运行的,但是我们在安装的时候程序并没有创建相应的内核模块,故需要我另行创建drbd模块,并载入内核。进入解压目录下的drbd目录,

$ cd drbd
$ make clean all

*******这里忘了记录如何编译drbd模块了,请各位谅解,笔者已经没有实际的环境进行测试了,如果知道如何编译的烦请在下面留言或者发到笔者邮箱,不胜感谢*******

这不将会创建和当前运行内核移植到drbd模块,该kernel source必须能通过/lib/modules/`uname -r`/build能够访问。

在某些Fedora版本上,必须通过指定CC参数使用非默认的gcc编译器进行模块创建
$ cd drbd
$ make clean
$ make CC=gcc32

创建好的模块可以通过如下命令查看具体信息

/sbin/modinfo drbd.ko

注:建议在配置脚本在被调用的目录中创建一个日志文件名为config.log。这样便于在记录编译出现问题时进行排查

创建RPM和debian包

上文介绍了drbd的编译安装,这里介绍如何通过源码包创建rpm包和debian包。

创建RPM包

$ ./configure
$ make rpm
$ make km-rpm
这种方法是将自动从预先定义的模板生成spec文件,然后利用这些模板文件,建立二进制的rpm包。
生成大量的rpm包介绍如下:

包名

描述

依赖关系

备注

drbd

DRBD 元软件包

其他所有的 drbd-* 软件包

顶层的虚拟包。安装时,在所有其他的userland作为依赖包中提取。

drbd-utils

二进制管理使用程序

DRBD启用需要

drbd-udev

udev的集成设施

drbd-utils, udev

启用udev来管理用户友好连结到DRBD设备

drbd-xen

Xen DRBD helper scripts

drbd-utils, xen

Enables xend to auto-manage DRBD resources

drbd-heartbeat

DRBD Heartbeat integration scripts

drbd-utils, heartbeat

Enables DRBD management by legacy v1-style Heartbeat clusters

drbd-pacemaker

DRBD Pacemaker integration scripts

drbd-utils, pacemaker

Enables DRBD management by Pacemaker clusters

drbd-rgmanager

DRBD Red Hat Cluster Suite integration scripts

drbd-utils, rgmanager

Enables DRBD management by rgmanager, the Red Hat Cluster Suite resource manager

drbd-bashcompletion

Progammable bash completion

drbd-utils, bash-completion

Enables Programmable bash completion for the drbdadm utility

创建debian包
DRBD源代码书包含一个debian软件包所需文件的debian子目录。但是这个子目录并不在DRBD的tar包内,因此如果需要时则需要创建一个特定的git,将其签出。
可以使用一下命令签出DRBD的debian软件包:
dpkg-buildpackage -rfakeroot -b -uc
注:如编译drbd的软件包使用非root用户(-rfakeroot)以二进制的方式(-b),并禁用变更文件的签名。其他的编译选项可以参见dpkg-buildpackage手册。
这个创建的过程将创建两个debian的软件包:
1、命名为drbd8-utils_x.y.z-BUILD_ARCH.deb,drbd的用户控件工具
2、命名为drbd8-module-source_x.y.z-BUILD_all.Deb,源代码匹配包。
当你创建这些软件包后,就可以安装、升级或者是卸载他们,就像其他的Debian软件包一样。
通过debian的模块儿辅助功能,从源码包中编译和安装drbd的实际的内核模块儿是比较容易的:
module-assistant auto-install drbd8
也可以使用下面命令的简写模式:
m-a a-i drbd8
需要注意的是任何内核的升级都需要重新编译其内核模块儿(如模块辅助)来匹配新的内核。相比之下Drbd8-utils和drbd8-module-source 源码包,则只需要升级到新的drbd版本。无论是升级到新的内核还是新的drbd版本,都需要升级以上两个软件包。

 

参考至:
​​​             http://www.drbd.org/users-guide-8.4/s-build-from-source.html#s-build-prepare-checkout​

​             http://blog.linuxeden.com/index.php/204996/viewspace-8092.html​

​             http://bbs.chinaunix.net/thread-2191845-1-1.html​

​             http://www.drbd.org/download/mainline/​