“通过Git在RHEL 6.4/CentOS 6.4上构建Lustre主版本教程”的版本间的差异

来自Lustre文件系统
跳转至: 导航搜索
(创建页面,内容为“本教程针对那些想要探索Lustre前沿功能的开发者。如果您正在为生产环境评估Lustre,您应该选择一个Lustre版本。 = 目标 =…”)
 
(没有差异)

2020年7月26日 (日) 22:23的最新版本

本教程针对那些想要探索Lustre前沿功能的开发者。如果您正在为生产环境评估Lustre,您应该选择一个Lustre版本

目标

本教程介绍了在x86_64、RHEL/CentOS 6.4机器上从分支构建和测试Lustre 系统(MGS、MDT、MDS、OSS、OST、客户端)所需的步骤。

准备条件

  • 连接了网络的新装了RHEL/CentOS 6.4系统的x86_64机器。
  • EPEL仓库:这是一个便捷的git源。

注意 使用 EPEL 5 仓库,因为它包括 quilt。

  • 注意 建议你在用于构建的机器上至少有1GB的内存。
  • 注意 确认SElinux被禁用。

概述

可用的预构建RPM Lustre服务器目前需要一个带补丁的和编译了的内核。Whamcloud可以提供带补丁的和编译了的Lustre服务器内核。有一个单独的页面可以让你了解如何使用这些预建的RPM来设置Lustre。本文档是为那些希望从源开始构建Lustre系统的人准备的。请注意,如果你不修改服务器上的内核补丁,也可以使用预构建的Lustre服务器内核RPM,只构建Lustre源码。请注意,Lustre客户端需要带补丁的内核。


Git源码库中可以找到补丁。Lustre源码中包含一个测试套件。这篇文档介绍了如何给内核打补丁、构建Lustre和运行整个系统的基本测试的步骤。

步骤

这些步骤基于一个为开发设置操作系统--包括Lustre源码、内核源码和构建工具。一旦设置好,就可以对新内核进行修补、编译、运行和测试。关于构建一个基于RHEL RPM的内核的进一步阅读可以从CentOS网站等资源处获得。

准备好机器并安装依赖包

当在rhel6-master上新安装RHEL 6.3后,以root身份登录。

1. 安装内核开发工具。

 # yum -y groupinstall "Development Tools"

⚠️:安装"开发工具"时的问题

如果开发工具组由于某些原因不可用,且有个别包需要安装,你可能会发现如下列表:

 # yum -y install automake xmlto asciidoc elfutils-libelf-devel zlib-devel binutils-devel newt-devel python-devel hmaccalc perl-ExtUtils-Embed rpm-build make gcc redhat-rpm-config patchutils git

2. 安装额外的依赖包

 # yum -y install xmlto asciidoc elfutils-libelf-devel zlib-devel binutils-devel newt-devel python-devel hmaccalc perl-ExtUtils-Embed bison elfutils-devel audit-libs-devel

3. 安装EPEL 5

注意,使用EPEL5是因为它包含quilt和libselinux-devel。

  # rpm -ivh http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

4. 安装quilt和libselinux-devel

 # yum -y install quilt libselinux-devel

⚠️:newt-devel 如果你使用的是RHEL6,newt-devel可能无法使用。一种方法是从CentOS下载newt-develslang-develasciidoc RPM,然后使用以下命令安装:

 yum --nogpgcheck localinstall ./newt-devel-0.52.11-3.el6.x86_64.rpm ./slang-devel-2.2.1-1.el6.x86_64.rpm ./asciidoc-8.4.5-4.1.el6.noarch.rpm

准备Lustre源

1. 用主目录/home/build创建一个用户构建。

# useradd -m build

2. 切换到用户构建用户下,并进入构建$HOME目录。

# su build
# cd $HOME

3. 从HPDD git中获取master分支。

# git clone git://git.whamcloud.com/fs/lustre-release.git
# cd lustre-release

4. 运行sh ./autogen.sh。

5. 安装所有依赖包,直到autogen.sh成功完成。成功的代码类似:

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

为Lustre准备一个打过补丁的内核

你可以用不同的方法来获取Lustre的补丁内核。最简单的方法是从版本页面下载构建好的RPM包。你需要以"kernel-"开头的包。在下载新的内核包后,你可以跳过下面的几个步骤,进入安装Lustre内核并重启一节。

如果你想要更多挑战,也可以自己打补丁,可以按照下面的步骤进行。

准备内核源码

在该教程中,内核是用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 -ivh http://ftp.redhat.com/pub/redhat/linux/enterprise/6Server/en/os/SRPMS/kernel-2.6.32-431.5.1.el6.src.rpm 2>&1 | grep -v mockb
  
NOTE: For RHEL 7, you can use
# rpm -ivh http://vault.centos.org/7.2.1511/updates/Source/SPackages/kernel-3.10.0-327.22.2.el7.src.rpm 2>&1 | grep -v exist

⚠️:RHEL内核版本

Red Hat 会定期发布已发布内核的更新。Lustre Master试图与 Red Hat最新的内核保持同步。如果上面的链接不是完全最新的,你应该访问Red Hat源代码RPM下载网站,并确保你下载的是最新的内核。最新支持的内核记录在 lustre/kernel_patches/which_patch 中。

3. 使用 rpmbuild 获取源码。

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

结尾部分如下:


...
gpg: Total number processed: 1
gpg:               imported: 1
+ gpg --homedir . --export --keyring ./kernel.pub Red
gpg: WARNING: unsafe permissions on homedir `.'
+ gcc -o scripts/bin2c scripts/bin2c.c
+ scripts/bin2c ksign_def_public_key __initdata
+ cd ..
+ exit 0

此时,我们已经有了应用了所有RHEL/CentOS补丁的内核源码,位于/home/build/kernel/rpmbuild/BUILD/kernel-2.6.431.5.1.el6/linux-2.6.32-431.5.1.el6.x86_64/目录下。

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

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

EXTRAVERSION = .431.5.1.el6_lustre。

2. 进入目录 ~/kernel/rpmbuild/BUILD/kernel-2.6.32-431.5.1.el6/linux-2.6.32-431.5.1.el6.x86_64/。

# cd ~/kernel/rpmbuild/BUILD/kernel-2.6.32-431.5.1.el6/linux-2.6.32-431.5.1.el6.x86_64/。

3. 用 ~/lustre-release/lustre/kernel_patches/kernel_configs/kernel-2.6.32-2.6-rhel6-x86_64.config覆盖 .config 文件。

# cp ~/lustre-release/lustre/kernel_patches/kernel_configs/kernel-2.6.32-2.6-rhel6-x86_64.config ./.config。

4. 链接Lustre系列和补丁

# ln -s ~/lustre-release/lustre/kernel_patches/series/2.6-rhel6.series 系列。
# ln -s ~/lustre-release/lustre/kernel_patches/patches patches

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

# quilt push -av
...
...
patching file fs/jbd2/transaction.c
Hunk #3 succeeded at 1222 (offset 3 lines).
Hunk #4 succeeded at 1357 (offset 3 lines).
 
Now at patch patches/jbd2-jcberr-2.6-rhel6.patch

将新内核编译成RPM

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

# cd ~/kernel/rpmbuild/BUILD/kernel-2.6.32-431.5.1.el6/linux-2.6.32-431.5.1.el6.x86_64/
# make oldconfig || make menuconfig
# make include/asm
# make include/linux/version.h
# make SUBDIRS=scripts
# make include/linux/utsrelease.h
# make rpm
  
NOTE: with RHEL 7,
# make oldconfig
# make -j4 rpm

2. 构建成功则会返回:

...
...
Wrote: /home/build/kernel/rpmbuild/SRPMS/kernel-2.6.32lustremaster-1.src.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/x86_64/kernel-2.6.32.lustremaster-1.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.f73m1V
+ umask 022
+ cd /home/build/kernel/rpmbuild/BUILD
+ cd kernel-2.6.32lustremaster
+ rm -rf /home/build/kernel/rpmbuild/BUILDROOT/kernel-2.6.32.lustremaster-1.x86_64
+ exit 0
rm ../kernel-2.6.32lustremaster.tar.gz

⚠️:如果你收到会一个产生更多熵的请求,你需要触发一些磁盘I/O或键盘I/O。在另一个终端中,你可以随机键入或执行以下命令来产生熵:

# grep -Ri 'entropy' /usr

此时,你应该获取到一个新的内核RPM ~/kernel/rpmbuild/RPMS/x86_64/kernel-2.6.32.lustremaster-1.x86_64.rpm

安装Lustre内核并重启

1. 以root用户登录,安装内核

# rpm -ivh $PKG_PATH/kernel-*.rpm

根据你获得内核包的方式,PKG_PATH会有所不同。如果你自己构建了这些包,PKG_PATH应该是~build/kernel/rpmbuild/RPMS/x86_64,或者是你从https://build.whamcloud.com/下载包,则PKG_PATH应该是保存包的目录。

2. 使用dracut创建initrd (*这不是必需的,因为initrd应该是通过安装新内核创建的*)

# /sbin/new-kernel-pkg --package kernel --mkinitrd --dracut --depmod --install 2.6.32.431.5.1.el6_lustre。

3. 可选开启lustre服务,并为lnet指定网络类型。

* chkconfig lustre on
* vi /etc/modprobe.d/lustre.conf。

如果你不知道这个文件应该写些什么,就暂时把它留空。

4. 用reboot命令重启系统。

5. 查看登录提示,并确保新的内核正在运行。

Red Hat Enterprise Linux Server release 6.0 (Santiago)
Kernel 2.6.32l-'I'm new kernel' on an x86_64
 
client-10 login:

配置并构建Lustre

1. 配置Lustre源

# cd ~/lustre-release/
# ./configure --with-linux=/lib/modules/kernel-2.6.32_lustremaster/build
...
...
LLCPPFLAGS:    -D__arch_lib__ -D_LARGEFILE64_SOURCE=1
CFLAGS:        -g -O2 -Werror
EXTRA_KCFLAGS: -include /home/build/lustre-release/config.h  -g -I/home/build/lustre-release/libcfs/include -I/home/build/lustre-release/lnet/include -I/home/build/lustre-release/lustre/include
LLCFLAGS:      -g -Wall -fPIC -D_GNU_SOURCE
 
Type 'make' to build Lustre.

2. 制作RPM

# make rpms
...
...
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.TsLWpD
+ umask 022
+ cd /home/build/kernel/rpmbuild/BUILD
+ cd lustre-2.0.61
+ rm -rf /home/build/kernel/rpmbuild/BUILDROOT/lustre-2.0.61-2.6.32_lustremaster_g0533e7b.x86_64
+ exit 0
make[1]: Leaving directory `/home/build/lustre-release'

3. 你现在应该已经建立了以下类似名称的RPM。

# ls *.rpm
kernel-2.6.32lustremaster-1.x86_64.rpm
lustre-2.0.61-2.6.32.lustremaster_g0533e7b.x86_64.rpm
lustre-debuginfo-2.0.61-2.6.32.lustremaster_g0533e7b.x86_64.rpm
lustre-ldiskfs-3.3.0-2.6.32.lustremaster_g0533e7b.x86_64.rpm
lustre-ldiskfs-debuginfo-3.3.0-2.6.32.lustremaster_g0533e7b.x86_64.rpm
lustre-modules-2.0.61-2.6.32.lustremaster_g0533e7b.x86_64.rpm
lustre-source-2.0.61-2.6.32.lustremaster_g0533e7b.x86_64.rpm
lustre-tests-2.0.61-2.6.32.lustremaster_g0533e7b.x86_64.rpm

安装e2fsprogs

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

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

2. 使用以下命令安装

# rpm -Uvh ./e2fsprogs-1.42.6.wc2-7.el6.x86_64.rpm  ./e2fsprogs-libs-1.42.6.wc2-7.el6.x86_64.rpm

安装Lustre

1. 切换为root用户,并将目录变更到~build/lustre-release/。

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

# rpm -ivh lustre-ldiskfs-3.3.0-2.6.32.lustremaster*
# rpm -ivh lustre-modules-2.0.61-2.6.32.lustremaster*
# rpm -ivh lustre-2.0.61-2.6.32.lustremaster_*
# rpm -ivh lustre-tests-*

禁用SELinux(Lustre服务器)

在RHEL/CentOS中默认开启的SELinux, 会阻止各种Lustre目标的格式化命令完成。因此,您必须禁用它或调整设置。以下说明将介绍如何禁用它。

  1. . 运行getenforce查看SELinux是否已启用。它应该返回"正在执行"或"已禁用"。
  2. . 要禁用SELinux,请编辑/etc/selinux/config,并将"selinux=enforcing"改为 "selinux=disabled"。
  3. . 最后,重新启动系统。
# vi /etc/selinux/config
 
----
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
---
# shutdown -r now

测试

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

# /usr/lib64/lustre/tests/llmount.sh
Loading modules from /usr/lib64/lustre/tests/..
debug=0x33f0404
subsystem_debug=0xffb7e3ff
gss/krb5 is not supported
Formatting mgs, mds, osts
Format mds1: /tmp/lustre-mdt1
Format ost1: /tmp/lustre-ost1
Format ost2: /tmp/lustre-ost2
Checking servers environments
Checking clients rhel6-master environments
Loading modules from /usr/lib64/lustre/tests/..
debug=0x33f0404
subsystem_debug=0xffb7e3ff
gss/krb5 is not supported
Setup mgs, mdt, osts
Starting mds1: -o loop,user_xattr,acl  /tmp/lustre-mdt1 /mnt/mds1
debug=0x33f0404
subsystem_debug=0xffb7e3ff
debug_mb=10
Started lustre-MDT0000
Starting ost1: -o loop  /tmp/lustre-ost1 /mnt/ost1
debug=0x33f0404
subsystem_debug=0xffb7e3ff
debug_mb=10
Started lustre-OST0000
Starting ost2: -o loop  /tmp/lustre-ost2 /mnt/ost2
debug=0x33f0404
subsystem_debug=0xffb7e3ff
debug_mb=10
Started lustre-OST0001
Starting client: rhel5-build: -o user_xattr,acl,flock rhel6-master@tcp:/lustre /mnt/lustre
debug=0x33f0404
subsystem_debug=0xffb7e3ff
debug_mb=10
Using TIMEOUT=20
disable quota as required

2. 现在您应该在/mnt/lustre有一个Lustre文件系统。 3. 注意:如果你收到一个类似于:mkfs.lustre.Can't parse NID 'rhel6-master@tcp'的错误,你需要将非回环接口的IP地址与你的机器名称关联到/etc/hosts文件中。