内核合入Lustre补丁

准备内核源码

  1. 创建目录结构。

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

  2. 安装内核源码。

    1
    $ rpm -ivh https://vault.centos.org/8.0.1905/BaseOS/Source/SPackages/kernel-4.18.0-80.11.2.el8_0.src.rpm
    

  3. 用rpmbuild准备内核源码。

    1
    2
    $ cd ~/kernel/rpmbuild
    $ rpmbuild -bp --target=`uname -m` ./SPECS/kernel.spec
    

    结果输出如下。

    1
    2
    3
    4
    5
    6
    7
    ...
    Processed config files are in /home/build/kernel/rpmbuild/BUILD/kernel-4.18.0-80.11.2.el8_0/linux-4.18.0-80.11.2.el8.aarch64/configs
    + cd ..
    + find . '(' -name '*.orig' -o -name '*~' ')' -exec rm -f '{}' ';'
    + find . -name .gitignore -exec rm -f '{}' ';'
    + cd ..
    + exit 0
    

  4. 复制内核文件到lustre tree。

    1
    cp ~/kernel/rpmbuild/BUILD/kernel-4.18.0-80.11.2.el8_0/linux-4.18.0-80.11.2.el8.aarch64/configs/kernel-4.18.0-aarch64.config ~/lustre-release/lustre/kernel_patches/kernel_configs/kernel-4.18.0-4.18-rhel8-aarch64.config
    

  5. 编辑内核文件。

    1
    vim ~/lustre-release/lustre/kernel_patches/kernel_configs/kernel-4.18.0-4.18-rhel8-aarch64.config
    

    找到“# IO Schedulers”,在下面插入以下内容。

    1
    2
    CONFIG_IOSCHED_DEADLINE=y
    CONFIG_DEFAULT_IOSCHED="deadline"
    

合入Lustre补丁

  1. 将所有补丁聚集到一个文件中。

    1
    2
    3
    4
    5
    6
    7
    $ cd ~
    $ rm -f ~/lustre-kernel-aarch64-lustre.patch  #Note:没有这个文件就不用
    $ cd ~/lustre-release/lustre/kernel_patches/series
    $ for patch in $(<"4.18-rhel8.series"); do \
    patch_file="$HOME/lustre-release/lustre/kernel_patches/patches/${patch}"; \
    cat "${patch_file}" >> "$HOME/lustre-kernel-aarch64-lustre.patch"; \
    done
    

  2. 复制内核补丁build tree。

    1
    cp ~/lustre-kernel-aarch64-lustre.patch ~/kernel/rpmbuild/SOURCES/patch-4.18.0-lustre.patch
    

  3. 编辑文件“~/kernel/rpmbuild/SPECS/kernel.spec”。

    1
    vim ~/kernel/rpmbuild/SPECS/kernel.spec
    
    1. 找到“find $RPM_BUILD_ROOT/lib/modules/$KernelVer”,在下面插入如下内容。
      1
      cp -a fs/ext4/* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/fs/ext4
      
    2. 找到“# empty final patch to facilitate testing of kernel patches”,在下面插入如下内容。
      1
      2
      # adds Lustre patches
      Patch99995: patch-%{version}-lustre.patch
      
    3. 找到“ApplyOptionalPatch linux-kernel-test.patch”,在下面插入如下内容。
      1
      2
      # lustre patch
      ApplyOptionalPatch patch-%{version}-lustre.patch
      

  4. 覆盖内核配置文件“~/lustre-release/lustre/kernel_patches/kernel_configs/kernel-4.18.0-4.18-rhel8-aarch64.config”。

    1
    2
    $ echo '# arm64' > ~/kernel/rpmbuild/SOURCES/kernel-4.18.0-aarch64.config
    $ cat ~/lustre-release/lustre/kernel_patches/kernel_configs/kernel-4.18.0-4.18-rhel8-aarch64.config >> ~/kernel/rpmbuild/SOURCES/kernel-4.18.0-aarch64.config
    

生成内核RPM包

用rpmbuild构建内核RPM包。

1
2
3
4
5
$ cd ~/kernel/rpmbuild
$ buildid="_lustre" # Note: change to any string that identify your work
$ rpmbuild -ba --with firmware --target aarch64 --with baseonly \
--without kabichk --define "buildid ${buildid}" \
~/kernel/rpmbuild/SPECS/kernel.spec

构建成功后返回以下结果。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/build/kernel/rpmbuild/BUILDROOT/kernel-4.18.0-80.11.2.el8_lustre.aarch64
Wrote: /home/build/kernel/rpmbuild/SRPMS/kernel-4.18.0-80.11.2.el8_lustre.src.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-headers-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-cross-headers-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-debuginfo-common-aarch64-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/perf-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/perf-debuginfo-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/python3-perf-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/python3-perf-debuginfo-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-tools-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-tools-libs-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-tools-libs-devel-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-tools-debuginfo-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/bpftool-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/bpftool-debuginfo-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-core-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-devel-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-modules-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-modules-extra-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-debuginfo-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.SqV3vr
+ umask 022
+ cd /home/build/kernel/rpmbuild/BUILD
+ cd kernel-4.18.0-80.11.2.el8_0
+ rm -rf /home/build/kernel/rpmbuild/BUILDROOT/kernel-4.18.0-80.11.2.el8_lustre.aarch64
+ exit 0

安装内核

  1. 切换至root用户,安装内核RPM包。

    1
    2
    3
    $ su root
    # cd ~/kernel/rpmbuild/RPMS/aarch64/
    # rpm -Uvh kernel-core-4.18.0-80.11.2.el8_lustre.aarch64.rpm kernel-headers-4.18.0-80.11.2.el8_lustre.aarch64.rpm kernel-modules-4.18.0-80.11.2.el8_lustre.aarch64.rpm kernel-modules-extra-4.18.0-80.11.2.el8_lustre.aarch64.rpm kernel-4.18.0-80.11.2.el8_lustre.aarch64.rpm kernel-devel-4.18.0-80.11.2.el8_lustre.aarch64.rpm kernel-tools-4.18.0-80.11.2.el8_lustre.aarch64.rpm kernel-tools-libs-4.18.0-80.11.2.el8_lustre.aarch64.rpm
    

  2. 重启系统。

    1
    # reboot
    

  3. 查看内核版本。

    1
    # uname -r
    
    1
    4.18.0-80.11.2.el8_lustre.aarch64