Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

RHEL/Rocky Linux 8.7 aarch64 can be used inside a VM (tested on UTM 4.0.9) on an M1 Macbook Pro host.  The The "Use Hypervisor" option should be disabled on the QEMU page of preference in this case. A full walk-thru on installing a aarch64 VM on an Apple Silicon Mac is available here.

Prerequisite

  • A newly installed RHEL/Rocky linux 8 x86_64 or aarch64 machine connected to the internet.
  • NOTE It is suggested that you have at least 1GB of memory on the machine you are using for the build.
  • NOTE Verify that SElinux is disabled.
  • This manual uses the Rocky linux 8 distribution available at x86_64 or aarch64.
  • It is assumed that Rocky linux 8 was installed as is, and nothing else was installed on it.

...

  1. First create the directory structure, then get the source from the RPM. Create a .rpmmacros file to install the kernel source in our user directory:

    Code Block
    languagebash
    themeEclipse
    cd $HOME && mkdir -p kernel/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
    cd kernel && echo '%_topdir %(echo $HOME)/kernel/rpmbuild' > ~/.rpmmacros
  2. Install the kernel source:

    Code Block
    languagebash
    themeEclipse
    rpm -ivh https://dl.rockylinux.org/vault/rocky/8.7/BaseOS/source/tree/Packages/k/kernel-4.18.0-425.19.2.el8_7.src.rpm
  3. Prepare the source using rpmbuild:

    Code Block
    languagebash
    themeEclipse
    cd ~/kernel/rpmbuild && rpmbuild -bp --target=`uname -m` ./SPECS/kernel.spec
  4. Copy the kernel config file into lustre tree:

    Code Block
    languagebash
    themeEclipse
    cp ~/kernel/rpmbuild/BUILD/kernel-4.18.0-425.19.2.el8_7/linux-4.18.0-425.19.2.el8.`uname -m`/configs/kernel-4.18.0-`uname -m`.config ~/lustre-release/lustre/kernel_patches/kernel_configs/kernel-4.18.0-4.18-rhel8.7-`uname -m`.config
  5. Edit the kernel config file ~/lustre-release/lustre/kernel_patches/kernel_configs/kernel-4.18.0-4.18-rhel8.7-`uname -m`.config:

    Find the line with '# IO Schedulers' and insert following two lines below it:

    CONFIG_IOSCHED_DEADLINE=y
    CONFIG_DEFAULT_IOSCHED="deadline"

    Or use cmd:

    Code Block
    languagebash
    themeEclipse
    sed -i '/# IO Schedulers/a CONFIG_IOSCHED_DEADLINE=y\nCONFIG_DEFAULT_IOSCHED="deadline"' ~/lustre-release/lustre/kernel_patches/kernel_configs/kernel-4.18.0-4.18-rhel8.7-`uname -m`.config
  6. Gather all the patches from lustre tree into a single file:

    Code Block
    enableddltrue
    languagebash
    themeEclipse
    langBash
    globaltitle7. Copy the kernel patch into RPM build tree:
    cd ~/lustre-release/lustre/kernel_patches/series && \
    for patch in $(<"4.18-rhel8.7.series"); do \
         patch_file="$HOME/lustre-release/lustre/kernel_patches/patches/${patch}"; \
         cat "${patch_file}" >> "$HOME/lustre-kernel-`uname -m`-lustre.patch"; \
    done
  7. Copy the kernel patch into RPM build tree:

    Code Block
    languagebash
    themeEclipse
    cp ~/lustre-kernel-`uname -m`-lustre.patch ~/kernel/rpmbuild/SOURCES/patch-4.18.0-lustre.patch
  8. Edit the kernel spec file ~/kernel/rpmbuild/SPECS/kernel.spec:

    Code Block
    languagebash
    themeEclipse
    sed -i.inst -e '/^    find $RPM_BUILD_ROOT\/lib\/modules\/$KernelVer/a\
        cp -a fs/ext4/* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/fs/ext4\
        rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/fs/ext4/ext4-inode-test*' \
    -e '/^# empty final patch to facilitate testing of kernel patches/i\
    Patch99995: patch-%{version}-lustre.patch' \
    -e '/^ApplyOptionalPatch linux-kernel-test.patch/i\
    ApplyOptionalPatch patch-%{version}-lustre.patch' \
    ~/kernel/rpmbuild/SPECS/kernel.spec
  9. Overwrite the kernel config file with ~/lustre-release/lustre/kernel_patches/kernel_configs/kernel-4.18.0-4.18-rhel8.7-`uname -m`.config. Change "x86_64" with "arm64" in the first command for aarch64 architecture.

    Code Block
    languagebash
    themeEclipse
    echo '# x86_64' > ~/kernel/rpmbuild/SOURCES/kernel-4.18.0-`uname -m`.config
    cat ~/lustre-release/lustre/kernel_patches/kernel_configs/kernel-4.18.0-4.18-rhel8.7-`uname -m`.config >> ~/kernel/rpmbuild/SOURCES/kernel-4.18.0-`uname -m`.config
  10. (optional - only for aarch64 VMs on Apple Silicon Macs) As outlined in the Apple Silicon guide the kernel page size must be set to 4K  or 16K . ~/kernel/rpmbuild/SOURCES/kernel-`uname -m`.config uses 64K  and needs to be modified.  Otherwise the Lustre kernel won't boot. Set the page size to 4K either via make menuconfig or manually. Diff before and after the change: 
    Code Block
    languagebash
    themeEclipse
    collapsetrue
    14,18c13,17
    < CONFIG_ARM64_PAGE_SHIFT=16
    < CONFIG_ARM64_CONT_SHIFT=5
    < CONFIG_ARCH_MMAP_RND_BITS_MIN=14
    < CONFIG_ARCH_MMAP_RND_BITS_MAX=29
    < CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=7
    ---
    > CONFIG_ARM64_PAGE_SHIFT=12
    > CONFIG_ARM64_CONT_SHIFT=4
    > CONFIG_ARCH_MMAP_RND_BITS_MIN=18
    > CONFIG_ARCH_MMAP_RND_BITS_MAX=33
    > CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
    35c34
    < CONFIG_PGTABLE_LEVELS=3
    ---
    > CONFIG_PGTABLE_LEVELS=4
    301c300
    < CONFIG_ARCH_MMAP_RND_BITS=14
    ---
    > CONFIG_ARCH_MMAP_RND_BITS=18
    389a389
    > #
    622c622
    < # CONFIG_ARM64_4K_PAGES is not set
    ---
    > CONFIG_ARM64_4K_PAGES=y
    624,625c624,625
    < CONFIG_ARM64_64K_PAGES=y
    < # CONFIG_ARM64_VA_BITS_42 is not set
    ---
    > # CONFIG_ARM64_64K_PAGES is not set
    > # CONFIG_ARM64_VA_BITS_39 is not set
    627d626
    < # CONFIG_ARM64_VA_BITS_52 is not set
    629,631c628,629
    < # CONFIG_ARM64_PA_BITS_48 is not set
    < CONFIG_ARM64_PA_BITS_52=y
    < CONFIG_ARM64_PA_BITS=52
    ---
    > CONFIG_ARM64_PA_BITS_48=y
    > CONFIG_ARM64_PA_BITS=48
    658a657
    > CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
    727c726
    < CONFIG_FORCE_MAX_ZONEORDER=14
    ---
    > CONFIG_FORCE_MAX_ZONEORDER=11
    793a793
    > # CONFIG_COMPAT is not set
    2625a2626
    > # CONFIG_VMXNET3 is not set
    
  11. Start building the kernel with Start building the kernel with rpmbuild:

    Code Block
    languagebash
    themeEclipse
    cd ~/kernel/rpmbuild && buildid="_lustre" && \
    rpmbuild -ba --with firmware --target `uname -m` --with baseonly \
               --without kabichk --define "buildid ${buildid}" \
               ~/kernel/rpmbuild/SPECS/kernel.spec
  12. Install the kernel packages:

    Code Block
    languagebash
    themeEclipse
    cd ~/kernel/rpmbuild/RPMS/`uname -m`/
    sudo rpm -Uvh --replacepkgs --force kernel-*.rpm
    sudo reboot
  13. Login system after reboot, run name -r and see:

    # uname -r
    4.18.0-425.19.2.el8_lustre.x86_64

    or

    4.18.0-425.19.2.el8_lustre.aarch64

...