通过Whamcloud git在CentOS 5.5或5.6上构建Lustre 1.8教程

来自Lustre文件系统
跳转至: 导航搜索

目标

本教程结束了在CentOS 5.5或5.6机器上构建和测试1.8 Lustre系统(MGS、MDT、MDS、OSS、OST、客户端)所需的步骤。在5.5和5.6上构建的唯一区别是需要不同的内核SRPM。下面一些命令的输出可能会有细微的差别。

据报道,本教程已经在CentOS 6.0上成功使用。一个显著的区别是CentOS 6.0用一个目录/etc/modprobe.d/代替了/etc/modprobe.conf。对于CentOS 6.0客户端,建议创建一个/etc/modprobe.d/lustre.conf文件来包含Lustre特定模块配置。

准备条件

  • 新装了CentOS 5.5的x86_64机器,主机名:client-10。
  • EPEL Repository:这是一个便捷的git源。
# wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
# rpm -ivh ./epel-release-5-4.noarch.rpm

概述

Lustre 1.8 服务器需要一个打过补丁并编译过的内核。在 Whamcloud git 源码库中可以随时获得补丁。Lustre 1.8源码中包含一个测试套件。本文档介绍了制作补丁、构建Lustre和运行整个系统的基本测试的步骤。

步骤

本教程需要为开发设置一个操作系统--这包括Lustre源、内核源和构建工具。一旦设置好,就可以对新的内核进行修补、编译、运行和测试。更多关于构建基于CentOS RPM的内核的阅读可以在CentOS网站上找到。

机器准备

当CentOS 5.5在client-10上全新安装后,以root身份登录。

1. 安装所需的内核开发工具

# yum -y groupinstall "Development Tools"
# yum -y install rpm-build redhat-rpm-config unifdef gnupg quilt git

2. 创建一个用户构建,主目录为/build。

# useradd -d /build build

3. 切换为用户构建用户,并将路径更改为构建$HOME目录下。

# su build
# cd $HOME

4. 从Whamcloud的git账户中获取1.8分支。

# git clone git://git.whamcloud.com/fs/lustre-release.git
# cd lustre-release
# git checkout --track -b b1_8 origin/b1_8

5. 运行 sh ./autogen.sh

6. 安装所有的依赖包,直到autogen.sh成功完成。成功后代码如下:


# sh ./autogen.sh
Checking for a complete tree...
checking for automake-1.9 >= 1.9... found 1.9.6
...
Running automake-1.9...
configure.ac: installing `./install-sh'
configure.ac: installing `./missing'
configure.ac:9: installing `./config.guess'
configure.ac:9: installing `./config.sub'
Running autoconf...

内核源准备

在本教程中,内核是用rpmbuild ———— 一个基于RPM的发行版特有的工具来构建的。

1. 获取内核源。首先创建目录结构,然后从RPM中获取源。创建一个.rpmmacros文件,将内核源码安装到用户目录下。

# cd $HOME
# mkdir -p kernel/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}。
# cd kernel
# echo '%_topdir %(echo $HOME)/kernel/rpmbuild' > ~/.rpmmacros

2. 安装内核源:

# rpm -i http://mirror.centos.org/centos/5.5/updates/SRPMS/kernel-2.6.18-194.32.1.el5.src.rpm 2>&1 | grep -v mockb。

⚠️:内核版本

RHEL 会定期发布内核的更新。Lustre Master分支会跟随Red Hat最新的内核更新。如果上面的链接不是完全最新的,你应该访问Red Hat源RPM下载网站CentOS 源RPM下载网站,手动确保你下载的是最新的内核。

注意 如果你是在CentOS 5.6上执行这个教程脚本,可以在这里找到内核源: http://vault.centos.org/5.6/os/SRPMS/kernel-2.6.18-238.el5.src.rpm

1. 扩展源码。使用rpmbuild也会应用CentOS的补丁。

# rpmbuild -bp --target=`uname -m` ~/kernel/rpmbuild/SPECS/kernel.spec

应该以如下内容结束:


...
+ patch -p1 --fuzz=2 -s
+ echo 'Patch #20240 (xen-hvm-add-hvmop_get_time-hypercall.patch):'
Patch #20240 (xen-hvm-add-hvmop_get_time-hypercall.patch):
+ patch -p1 --fuzz=2 -s
+ echo 'Patch #20241 (xen-fix-64-bit-pv-guest-user-mode-segv-crashing-host.patch):'
Patch #20241 (xen-fix-64-bit-pv-guest-user-mode-segv-crashing-host.patch):
+ patch -p1 --fuzz=2 -s
+ exit 0

此时,我们应该已经有了应用了所有CentOS补丁的内核源,位于/build/kernel/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.x86_64目录下。

用Lustre代码为内核源代码制作补丁

1. 添加一个唯一的build id,可以确定内核已经启动了。编辑 ~build/kernel/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.x86_64/Makefile,并修改第4行的EXTRAVERSION。

EXTRAVERSION = .lustre18

2. 进入目录/build/kernel/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.x86_64。

# cd /build/kernel/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.x86_64

3. 用/build/lustre-release/lustre/kernel_patches/kernel_configs/kernel-2.6.18-2.6-rhel5-x86_64.config覆盖.config文件。

# cp /build/lustre-release/lustre/kernel_patches/kernel_configs/kernel-2.6.18-2.6-rhel5-x86_64.config ./.config。

4. 链接Lustre系列和补丁

# ln -s ~/lustre-release/lustre/kernel_patches/series/2.6-rhel5.series series
# ln -s ~/lustre-release/lustre/kernel_patches/patches patches

5. 使用quilt将补丁应用到内核源码中。

# quilt push -av
...
...
Applying patch patches/md-avoid-bug_on-when-bmc-overflow.patch
patching file drivers/md/bitmap.c
Hunk #1 succeeded at 1161 (offset 1 line).
Hunk #3 succeeded at 1224 (offset 1 line).
patching file include/linux/raid/bitmap.h
 
Applying patch patches/jbd2_stats_proc_init-wrong-place.patch
patching file fs/jbd2/journal.c
Hunk #1 succeeded at 1051 (offset 152 lines).
 
Now at patch patches/jbd2_stats_proc_init-wrong-place.patch

将新内核构建为RPM

1. 进入内核源码目录,并执行以下命令来构建内核rpm。

# cd /build/kernel/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.x86_64
# make oldconfig || make menuconfig
# make include/asm
# make include/linux/version.h
# make SUBDIRS=scripts
# make include/linux/utsrelease.h
# make
# make rpm

2. 成功构建后将返回:

...
...
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/kernel-2.6.18.lustre18-root
Wrote: /build/kernel/rpmbuild/SRPMS/kernel-2.6.18.lustre18-1.src.rpm
Wrote: /build/kernel/rpmbuild/RPMS/x86_64/kernel-2.6.18.lustre18-1.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.35163
+ umask 022
+ cd /build/kernel/rpmbuild/BUILD
+ cd kernel-2.6.18.lustre18
+ exit 0
rm ../kernel-2.6.18.lustre18.tar.gz

注意 如果你收到了一个会生成更多熵的请求,你需要触发一些磁盘I/O或键盘I/O。我建议(在另一个终端中):

# grep -Ri 'whamcloud' /usr

此时,你应该已经得到了一个新的内核RPM /build/kernel/rpmbuild/RPMS/x86_64/kernel-2.6.18.lustre18-1.x86_64.rpm。

配置并构建Lustre

1 .配置Lustre源

# cd ~/lustre-release/
# ./configure --with-linux=/build/kernel/rpmbuild/BUILD/kernel-2.6.18.lustre18/
...
...
LLCPPFLAGS:    -D__arch_lib__ -D_LARGEFILE64_SOURCE=1
CFLAGS:        -g -O2 -Werror
EXTRA_KCFLAGS: -include /build/lustre-release/config.h  -g -I/build/lustre-release/lnet/include -I/build/lustre-release/lnet/include -I/build/lustre-release/lustre/include
LLCFLAGS:      -g -Wall -fPIC -D_GNU_SOURCE
 
Type 'make' to build Lustre.

2. 制成rpm

# make rpms
...
...
Wrote: /build/kernel/rpmbuild/RPMS/x86_64/lustre-debuginfo-1.8.5.54-2.6.18_194.32.1.el5.lustre18_201103071000.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.15638
+ umask 022
+ cd /build/kernel/rpmbuild/BUILD
+ cd lustre-1.8.5.54
+ rm -rf /var/tmp/lustre-1.8.5.54-root
+ exit 0
make[1]: Leaving directory `/build/lustre-release'

3. 你现在应该已经建立了下面类似的名称的rpm:

# ls ~build/kernel/rpmbuild/RPMS/x86_64/
lustre-debuginfo-1.8.5.54-2.6.18.lustre18-1.x86_64.rpm
lustre-tests-1.8.5.54-2.6.18.lustre18-1.x86_64.rpm
lustre-source-1.8.5.54-2.6.18.lustre18-1.x86_64.rpm
lustre-modules-1.8.5.54-2.6.18.lustre18-1.x86_64.rpm
lustre-1.8.5.54-2.6.18.lustre18-1.x86_64.rpm
lustre-ldiskfs-3.1.5-2.6.18.lustre18-1.x86_64.rpm
lustre-ldiskfs-debuginfo-3.1.5-2.6.18.lustre18-1.x86_64.rpm
kernel-2.6.18.lustre18-1.x86_64.rpm

安装Lustre内核并重启

1. 以root登录,并安装内核

# rpm -ivh ~build/kernel/rpmbuild/RPMS/x86_64/kernel-2.6.18.lustre18-1.x86_64.rpm

2. 创建一个initrd

# mkinitrd /boot/initrd-2.6.18.lustre18.img 2.6.18.lustre18

3. 检查/boot/grub/menu.lst是否被配置为启动新内核。在/boot/grub/menu.lst中添加以下几行内容。

title CentOS Lustre18 (2.6.18.lustre18)
        root (hd0,0)
        kernel /vmlinuz-2.6.18.lustre18 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18.lustre18.img

4. 确保/boot/grub/menu.lst的Lustre内核被选中。默认值为1

Default=1

5. 重启

6. 查看登录提示:

CentOS release 5.5 (Final)
Kernel 2.6.18.lustre18 on an x86_64
 
localhost login:

安装Lustre

1. 切换为root用户,并将目录更改到/build/kernel/rpmbuild/RPMS/x86_64/路径下。

2. 安装模块lustre-modules和用户空间工具lustre-。

# rpm -ivh /build/kernel/rpmbuild/RPMS/x86_64/lustre-modules-* /build/kernel/rpmbuild/RPMS/x86_64/lustre-1.8.* /build/kernel/rpmbuild/RPMS/x86_64/lustre-ldiskfs-.* /build/kernel/rpmbuild/RPMS/x86_64/lustre-tests-*

安装e2fsprogs

e2fsprogs是运行测试套件所需要的。

1. 从 http://downloads.whamcloud.com/ 下载 e2fsprogs。

2. 用rpm -ivh e2fsprogs安装。

快速测试

1. 运行/usr/lib64/lustre/tests/llmount.sh

[root@client-10 ~]# /usr/lib64/lustre/tests/llmount.sh
Stopping clients: rhel5_build /mnt/lustre (opts:)
Stopping clients: rhel5_build /mnt/lustre2 (opts:)
Loading modules from /usr/lib64/lustre/tests/..
lnet.debug=0x33f1504
lnet.subsystem_debug=0xffb7e3ff
lnet options: ' accept=all'
Formatting mgs, mds, osts
Checking servers environments
Checking clients rhel5_build environments
Setup mgs, mdt, osts
Starting mds: -o loop  /tmp/lustre-mdt /mnt/mds
lnet.debug=0x33f1504
lnet.subsystem_debug=0xffb7e3ff
lnet.debug_mb=10
Started lustre-MDT0000
Starting ost1: -o loop  /tmp/lustre-ost1 /mnt/ost1
lnet.debug=0x33f1504
lnet.subsystem_debug=0xffb7e3ff
lnet.debug_mb=10
Started lustre-OST0000
Starting ost2: -o loop  /tmp/lustre-ost2 /mnt/ost2
lnet.debug=0x33f1504
lnet.subsystem_debug=0xffb7e3ff
lnet.debug_mb=10
Started lustre-OST0001
Starting client: rhel5_build: -o user_xattr,acl,flock rhel5_build@tcp:/lustre /mnt/lustre
lnet.debug=0x33f1504
lnet.subsystem_debug=0xffb7e3ff
lnet.debug_mb=10
Using TIMEOUT=20
[root@client-10 ~]#

2. 现在您应该在/mnt/lustre中有一个Lustre文件系统。

3. 注意:如果你收到一个错误:mkfs.lustre.Can't parse NID 'client-10@tcp',你需要将非环回接口的ip地址与你的机器名称关联到/etc/hosts文件中。