- 概要
- はじめに
- 実験環境
- aarch64(virt) のNFSroot実行環境を構築する
- xfstestsのビルドに向けてのセットアップ
- xfstestsのテスト実行に向けてのセットアップ
- テスト実施
- おわりに
- 変更履歴
- 参考文献
概要
xfstestsは複数のパッケージと依存関係があるが、Buildrootを使うことで容易に設定することができる。
Buildrootですでに提供されているパッケージと、独自で修正したものを利用してxfstestsを実行できる環境を作成した。
Buildrootの修正については次のブランチにコミットしてある。
はじめに
xfstestsはファイルシステム回帰テストのテストスイートである。 xfstestsでは、Linuxファイルシステム(xfs, ext2, ext4, cifs, btrfs, f2fs, reiserfs, gfs, jfs, udf, nfs, and tmpfs)でも使用することができ、多くのLinuxファイルシステムを開発しているメンテナは、本流にマージする前にxfstestsのテストを実施している。
一方で、BuildRootは、ビルド環境・実行環境を構築するツールである。
このBuildrootでは、パッケージの追加やユーザランドのカスタマイズがすることができる。
そこで、xfstestsを実行するために必要な環境をBuildrootで作成する手順を確認してみる。
実験環境
本記事で使用した開発用PC (Host PC)の構成は次の通りとなっている。
環境 | 概要 |
---|---|
CPU | AMD Ryzen 3 3300X |
RAM | DDR4-2666 16GB ×2 |
Host OS | Ubuntu Desktop 22.04.1 |
kernel | v5.15.0-56-generic |
Storage | SL-MG5 |
File-System | ext4 |
Buildroot | 2022.11 |
xfstests | v2022.11.27 |
開発用PC には、Buildrootで構築した開発環境 (Buildenv) と テスト実施環境 (Targetenv) があり、virtio-scsiでストレージデバイスとつながっている。
aarch64(virt) のNFSroot実行環境を構築する
テスト用のストレージの準備 (このストレージ内のデータは消去されるので注意)
leava@kbuild:/work$ export TARGET_DEVICE=/dev/disk/by-id/usb-Sony_Storage_C2JBB2040599-0:0 leava@kbuild:/work$ sudo parted ${TARGET_DEVICE} --script \ 'mklabel gpt mkpart primary 0% 25% mkpart primary 25% 50% mkpart primary 50% 75% mkpart primary 75% 100% print quit'
ホスト環境に nfsd を設定する
leava@kbuild:/work$ export NFSROOT="/srv/nfsroot/arm64/buildroot" leava@kbuild:/work$ sudo exportfs -av leava@kbuild:/work$ exporting 127.0.0.1:/srv/nfsroot leava@kbuild:/work$ sudo mkdir -p ${NFSROOT}
Buildrootを入手する。
leava@kbuild:/work$ git clone https://github.com/buildroot/buildroot.git leava@kbuild:/work$ cd buildroot leava@kbuild:/work/buildroot$ export BUILDROOT_DIR="/work/buildroot" leava@kbuild:/work/buildroot$ git checkout 2022.11
Buildrootのデフォルトの設定を使用する。
leava@kbuild:/work/buildroot$ make qemu_aarch64_virt_defconfig
Buildrootの設定からユーザランドを構築する。
leava@kbuild:/work/buildroot$ make leava@kbuild:/work/buildroot$ cd ..
生成されたルファイルシステムを展開する
leava@kbuild:/work$ sudo tar xf buildroot/output/images/rootfs.tar.xz -C /srv/nfsroot/arm64/buildroot
aarch64(virt)の環境を起動させるスクリプトを用意する。
// 1: #!/bin/sh ( BINARIES_DIR="${BUILDROOT_DIR}/output/images/" TARGET_ROOTFS="/dev/nfs" EXTRA_CMDLINE="nfsroot=${NFSROOT},vers=3,tcp ip=on" CMDLINE="console=ttyAMA0 rootwait root=${TARGET_ROOTFS} rw ${EXTRA_CMDLINE}" cd ${BINARIES_DIR} if [ "${1}" = "serial-only" ]; then EXTRA_ARGS='-nographic' else EXTRA_ARGS='' fi export PATH="${BUILDROOT_DIR}/output/host/bin:${PATH}" exec qemu-system-aarch64 \ -M virt \ -cpu cortex-a53 \ -smp 4 \ -m 4096 \ -kernel Image \ -append "${CMDLINE}" \ -device virtio-scsi-pci,id=scsi0 \ -device scsi-hd,drive=drive0,bus=scsi0.0,channel=0,scsi-id=0,lun=0 \ -drive file=${TARGET_DEVICE}"-part1",if=none,format=raw,id=drive0 \ -device scsi-hd,drive=drive1,bus=scsi0.0,channel=0,scsi-id=1,lun=0 \ -drive file=${TARGET_DEVICE}"-part2",if=none,format=raw,id=drive1 \ -device scsi-hd,drive=drive2,bus=scsi0.0,channel=0,scsi-id=2,lun=0 \ -drive file=${TARGET_DEVICE}"-part3",if=none,format=raw,id=drive2 \ -device scsi-hd,drive=drive3,bus=scsi0.0,channel=0,scsi-id=3,lun=0 \ -drive file=${TARGET_DEVICE}"-part4",if=none,format=raw,id=drive3 \ ${EXTRA_ARGS} -s )
このファイルをPATHの通っているディレクトリに配置しておき、実行権限もつけておく。
xfstestsのビルドに向けてのセットアップ
前章で作成したビルド環境・ターゲットファイルシステムでは、xfstestsをビルド・テスト実行することができない。
そこで、ビルドや実行に必要なライブラリ・バイナリをインストールしていく。
ただし、xfsprogsのライブラリに関しては、既存のBuildRootではインストールすることができないため、修正を加える必要がある。
Buildrootのパッケージビルド設定を新規に追加する
xfstestsをビルドするためには、xfsprogs開発用ライブラリがビルド環境にインストールされている必要がある。
ただし、既存のBuildrootは、ターゲットファイルシステムにxfsprogsパッケージのビルド設定のみ用意されている。 (ライブラリのインストールはされない)
そこで、既存のxfsprogsのビルド設定をコピーして新規に libxfsprogsとしてビルド設定を作成していく。
既存のxfsprofsのビルド設定をコピーする。
leava@kbuild:/work$ cd ${BUILDROOT_DIR} leava@kbuild:/work/buildroot$ cp -r package/xfsprogs/ package/libxfsprogs
変数名
XFSPROGS
をLIBXFSPROGS
に変更する。leava@kbuild:/work/buildroot$ sed -i 's/XFSPROGS_/LIBXFSPROGS_/gI' package/libxfsprogs/Config.in leava@kbuild:/work/buildroot$ sed -i 's/XFSPROGS_/LIBXFSPROGS_/gI' package/libxfsprogs/xfsprogs.mk
ファイル名
xfsprogs.mk
をlibxfsprogs.mk
に変更するleava@kbuild:/work/buildroot$ mv package/libxfsprogs/xfsprogs.mk package/libxfsprogs/libxfsprogs.mk
libxfsprogsのビルド設定を読み込むように変更する。
leava@kbuild:/work/buildroot$ cat << EOF >> package/Config.in menu "For xfstests library" source "package/libxfsprogs/Config.in" endmenu EOF
ライブラリをビルド環境にインストールするように更新する
leava@kbuild:/work/buildroot$ cat << EOF >> package/libxfsprogs/libxfsprogs.mk LIBXFSPROGS_INSTALL_STAGING = YES LIBXFSPROGS_INSTALL_TARGET = NO define LIBXFSPROGS_INSTALL_STAGING_CMDS \$(TARGET_MAKE_ENV) \$(MAKE) -C \$(@D) DIST_ROOT=\$(STAGING_DIR) install; \ \$(TARGET_MAKE_ENV) \$(MAKE) -C \$(@D) DIST_ROOT=\$(STAGING_DIR) install-dev endef EOF
これにより、make menuconfig
で For xfstests library
のセクションが追加される。
このセクションにある xfsprogs
を有効にすることで、xfsprogs開発ライブラリがビルド環境にインストールされる。
Buildrootの設定をアップデートする
xfsprogs開発ライブラリ以外にもxfstestsをビルドするために必要なライブラリを追加する。
xfstestsに必要なパッケージをBuildrootで生成するようにconfigを修正する。
leava@kbuild:/work/buildroot$ make menuconfig Toolchain ---> C library (glibc) ---> Target packages ---> Libraries ---> Other [*] liburcu Text and terminal handling ---> [*] inih System tools ---> [*] acl [*] util-linux ---> [*] libblkid [*] libuuid For xfstests ---> [*] xfsprogs
Buildrootで再度ビルドし、ビルド環境をアップデートする
leava@kbuild:/work/buildroot$ make
開発用ライブラリが期待通りインストールされているか確認する
leava@kbuild:/work/buildroot$ ls output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/libacl.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/*.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/libacl.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/libpcre2-posix.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/libacl.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/libtirpc.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/libattr.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/liburcu-bp.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/libblkid.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/liburcu-cds.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/libf2fs.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/liburcu-common.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/libf2fs_format.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/liburcu-mb.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/libgdbm.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/liburcu-memb.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/libhandle.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/liburcu-qsbr.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/libkmod.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/liburcu-signal.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/liblzma.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/liburcu.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/libpcre2-8.la output/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/libuuid.la leava@kbuild:/work/buildroot$ ls output/host/aarch64-buildroot-linux-gnu/sysroot/usr/include/xfs/xfs.h output/host/aarch64-buildroot-linux-gnu/sysroot/usr/include/xfs/xfs.h
これによって、sysroot以下に/usr/lib/libacl.la
, /usr/lib/libuuid.la
, /usr/include/xfs/xfs.h
が追加される。
xfstestsのテスト実行に向けてのセットアップ
ここまででxfstestsはビルドできるようになったが、大半のテストはパッケージ不足によりskipされてしまう。
そこで、ビルド環境とターゲットファイルシステムに必要なパッケージを追加でインストールしていく。
xfstestsのビルドに必要なライブラリをインストールする
leava@kbuild:/work/buildroot$ make menuconfig
Target packages --->
Libraries
Compressors and decompressors
[*] lz4
[*] install programs
Database
[*] gdbm
Hardware handling
[*] libaio
Other
[*] libcap
[*] install tools
[*] liburing
Security
[*] libselinux
Buildrootの既存パッケージのビルド設定を修正する
xfstestsの一部のテストはndbm開発ライブラリが必要になる。
このライブラリは、GNU dbm (gdbm)パッケージが互換性を持っており、BuildRootはこのパッケージのビルドを用意している。
しかし、gdbmをビルドするとき(./configure
) に、--enable-libgdbm-compat
を指定していないと、このライブラリを用意されず、BuildRootのデフォルトの設定ではこれが提供されていない。
gdbmパッケージのビルド設定を修正する
leava@kbuild:/work/buildroot$ echo "GDBM_CONF_OPTS = --enable-libgdbm-compat" >> package/gdbm/gdbm.mk
これによって、sysroot以下に/usr/include/ndbm.h
が追加される。
xfstestsの必須パッケージをターゲットファイルシステムにインストールする
leava@kbuild:/work/buildroot$ make menuconfig
Target packages --->
[*] Show packages that are also provided by busybox
Development tools
[*] grep
Filesystem and flash utilities
[*] xfsprogs
Interpreter languages and scripting
[*] perl
Shell and utilities
[*] bash
System tools --->
[*] coreutils
[*] kmod
[*] kmod utilities
-*- util-linux --->
[*] basic set
xfstestsの推奨パッケージをターゲットファイルシステムにインストールする
Buildrootのパッケージビルド設定を新規に追加する
xfstestsでは、fs-verityを利用するテストが存在している。 ただし、既存のBuildrootは、ターゲットファイルシステムにfsverity-utilsパッケージのビルド設定は用意されていない。
そこで、新規に fsverity-utils のビルド設定を作成していく。
fsverity-utilsのディレクトリを追加する
leava@kbuild:/work/buildroot$ mkdir package/fsverity-utils
libxfsprogsのビルド設定を読み込むように変更する。
leava@kbuild:/work/buildroot$ cat << EOF > package/fsverity-utils/Config.in config BR2_PACKAGE_FSVERITY_UTILS bool "fsverity-utils" select BR2_PACKAGE_OPENSSL help A set of userspace utilities for fs-verity. git://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/fsverity-utils.git EOF
fsverity-utilsのビルド設定を読み込むように変更する。
leava@kbuild:/work/buildroot$ sed -i -e 's/fxload/source "package\/fsverity-utils\/Config.in/g" package/Config.in
libxfsprogsのビルド設定を読み込むように変更する。
leava@kbuild:/work/buildroot$ cat << EOF > package/fsverity-utils/fsverity-utils.hash cat package/fsverity-utils/fsverity-utils.hash # Locally computed sha256 830e38ec081ef8171eb210461cf8bee8a707c7c60f9018a4b567af145a510884 fsverity-utils-1.5.tar.gz sha256 b03d4d3e8cdb7011013f8e954d4b0b72d649b8f9c60298488d0df03f753e8524 README.md EOF
ライブラリをビルド環境にインストールするように更新する
leava@kbuild:/work/buildroot$ cat << EOF >> package/fsverity-utils/fsverity-utils.mk ################################################################################ # # fsverity-utils # ################################################################################ FSVERITY_UTILS_VERSION = 1.5 FSVERITY_UTILS_SITE = https://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/fsverity-utils.git/snapshot FSVERITY_UTILS_DEPENDENCIES = libopenssl FSVERITY_UTILS_LICENSE = Copyright 2019 the fsverity-utils authors FSVERITY_UTILS_LICENSE_FILES = LICENSE #PKG_CONFIG_PATH="$(STAGING_DIR)/usr/lib/pkgconfig" FSVERITY_UTILS_ENV = \ PKGCONF=$(HOST_DIR)/bin/pkg-config \ CC=$(HOST_DIR)/bin/aarch64-buildroot-linux-gnu-gcc \ GCC=$(HOST_DIR)/bin/aarch64-buildroot-linux-gnu-gcc define FSVERITY_UTILS_BUILD_CMDS $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(FSVERITY_UTILS_ENV) endef define FSVERITY_UTILS_INSTALL_TARGET_CMDS $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR="$(TARGET_DIR)" $(FSVERITY_UTILS_ENV) install endef $(eval $(generic-package)) EOF
Buildrootの設定をアップデートする
leava@kbuild:/work/buildroot$ make menuconfig
Toolchain
[*] Install glibc utilities
Target packages --->
Compressors and decompressors
[*] xz-utils
Debugging, profiling and benchmark --->
[*] fio
Development tools
[*] gawk
Filesystem and flash utilities
[*] e2fsprogs --->
[*] debugfs
[*] e2image
[*] e4defrag
[*] resize2fs
Hardware handling
[*] fsverity-utils
[*] lvm2 & device mapper
System tools --->
[*] keyutils
[*] quota
[*] quotatool
-*- util-linux --->
[*] losetup
Buildrootのターゲットファイルシステムのセットアップ
xfstestsには、実行環境に依存するテストも存在する。
その中にある「cgroup2のマウント」と「ユーザアカウントの追加」をBuildrootで生成するターゲットファイルシステムに反映させる。
Buildrootのターゲットファイルシステムのオーバーレイ
Buildrootには、ターゲットファイルシステムの内容の一部を上書きする仕組みとして「オーバーレイ」がある。
ここでは、オーバーレイの仕組みで/etc/fstab
を書き換えることで、cgropu2をマウントするように変更する。
また、xfstestsで必要となるマウントポイント /mnt/test
と/mnt/scratch
もオーバーレイの仕組みを用いて作成する。
aarch64(virt)用のoverlayディレクトリを作成する
leava@kbuild:/work/buildroot$ mkdir -p board/qemu/aarch64-virt/rootfs_overlay leava@kbuild:/work/buildroot$ mkdir -p board/qemu/aarch64-virt/rootfs_overlay/etc
ターゲットファイルシステムの
/etc/fstab
を自前の/etc/fstab
に置き換えるleava@kbuild:/work/buildroot$ cat << EOF > board/qemu/aarch64-virt/rootfs_overlay/etc/fstab # <file system> <mount pt> <type> <options> <dump> <pass> /dev/root / ext2 rw,noauto 0 1 proc /proc proc defaults 0 0 devpts /dev/pts devpts defaults,gid=5,mode=620,ptmxmode=0666 0 0 tmpfs /dev/shm tmpfs mode=0777 0 0 tmpfs /tmp tmpfs mode=1777 0 0 tmpfs /run tmpfs mode=0755,nosuid,nodev 0 0 sysfs /sys sysfs defaults 0 0 none /sys/fs/selinux selinuxfs noauto 0 0 none /sys/fs/cgroup cgroup2 defaults 0 0
ターゲットファイルシステムの
/mnt
に/mnt/test
と/mnt/scratch
を追加するleava@kbuild:/work/buildroot$ mkdir -p board/qemu/aarch64-virt/rootfs_overlay/mnt/test leava@kbuild:/work/buildroot$ mkdir -p board/qemu/aarch64-virt/rootfs_overlay/mnt/scratch
overlayのパスを指定する
leava@kbuild:/work/buildroot$ make menuconfig System configuration ---> (board/qemu/aarch64-virt/rootfs_overlay) Root filesystem overlay directories
Buildrootのユーザアカウントの追加
Buildrootには、makeusers文法の則ったファイルを配置することで、ユーザを追加することができる。
ここでは、テストで必要となるfsgqa
, 123456-fsgqa
, fsgqa2
ユーザを追加する。
aarch64(virt)用のoverlayディレクトリを作成する
leava@kbuild:/work/buildroot$ mkdir -p board/qemu/aarch64-virt
ターゲットファイルシステムの
/etc/fstab
を自前の/etc/fstab
に置き換えるleava@kbuild:/work/buildroot$ cat << EOF > board/qemu/aarch64-virt/users.txt fsgqa -1 fsgqa -1 = /home/fsgqa /bin/sh - xfstests User1 123456-fsgqa -1 123456-fsgqa -1 = - /bin/sh - xfstests User2 fsgqa2 -1 fsgqa2 -1 = /home/fsgqa2 /bin/sh - xfstests User3
overlayのパスを指定する
leava@kbuild:/work/buildroot$ make menuconfig System configuration ---> (board/qemu/aarch64-virt/users.txt) Path to the users tables
NFSrootのアップデート
xfstestsを実行できるビルド環境とターゲットファイルシステムが生成できたので、NFSrootの環境をアップデートする。
以前のターゲットファイルシステムを退避させる
leava@kbuild:/work/buildroot$ mv ${NFSROOT} ${NFSROOT}`date +%Y%m%d%H%M` leava@kbuild:/work/buildroot$ mkdir ${NFSROOT}
新規のターゲットファイルシステムを展開する
leava@kbuild:/work/buildroot$ sudo tar xf output/images/rootfs.tar.xz -C ${NFSROOT}
xfstestsの設定をアップデートする
leava@kbuild:/work/buildroot$ cat << EOF > board/qemu/aarch64-virt/users.txt export TEST_DEV=/dev/sda export TEST_DIR=/mnt/test export SCRATCH_DEV=/dev/sdb export SCRATCH_MNT=/mnt/scratch export FSTYP=ext4 export LOGWRITES_DEV=/dev/sdc export SCRATCH_LOGDEV=/dev/sdd export USE_EXTERNAL=yes
xfstestsをクロスコンパイルする
Buildrootで生成したビルド環境を使ってxfstestsのビルドを実施する。
xfstestsのgit repositoryを開発PCにcloneする。
leava@kbuild:/work/buildroot$ cd .. leava@kbuild:/work$ git clone git://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git leava@kbuild:/work$ cd xfstests-dev
-
leava@kbuild:/work/xfstests-dev$ export CROSSENV="/work/buildroot/output/host" leava@kbuild:/work/xfstests-dev$ export CROSS_COMPILE=aarch64-buildroot-linux- leava@kbuild:/work/xfstests-dev$ export SDKTARGETSYSROOT="${CROSSENV}/${CROSS_COMPILE}gnu/sysroot" leava@kbuild:/work/xfstests-dev$ export PATH="${CROSSENV}/bin:${CROSSENV}/sbin:$PATH" leava@kbuild:/work/xfstests-dev$ export AR="${CROSSENV}/bin/aarch64-buildroot-linux-gnu-gcc-ar" leava@kbuild:/work/xfstests-dev$ export AS="${CROSSENV}/bin/aarch64-buildroot-linux-gnu-as" leava@kbuild:/work/xfstests-dev$ export LD="${CROSSENV}/bin/aarch64-buildroot-linux-gnu-ld" leava@kbuild:/work/xfstests-dev$ export NM="${CROSSENV}/bin/aarch64-buildroot-linux-gnu-gcc-nm" leava@kbuild:/work/xfstests-dev$ export CC="${CROSSENV}/bin/aarch64-buildroot-linux-gnu-gcc" leava@kbuild:/work/xfstests-dev$ export GCC="${CROSSENV}/bin/aarch64-buildroot-linux-gnu-gcc" leava@kbuild:/work/xfstests-dev$ export CPP="${CROSSENV}/bin/aarch64-buildroot-linux-gnu-cpp" leava@kbuild:/work/xfstests-dev$ export CXX="${CROSSENV}/bin/aarch64-buildroot-linux-gnu-g++" leava@kbuild:/work/xfstests-dev$ export FC="${CROSSENV}/bin/aarch64-buildroot-linux-gnu-gfortran" leava@kbuild:/work/xfstests-dev$ export F77="${CROSSENV}/bin/aarch64-buildroot-linux-gnu-gfortran" leava@kbuild:/work/xfstests-dev$ export RANLIB="${CROSSENV}/bin/aarch64-buildroot-linux-gnu-gcc-ranlib" leava@kbuild:/work/xfstests-dev$ export READELF="${CROSSENV}/bin/aarch64-buildroot-linux-gnu-readelf" leava@kbuild:/work/xfstests-dev$ export STRIP="${CROSSENV}/bin/aarch64-buildroot-linux-gnu-strip" leava@kbuild:/work/xfstests-dev$ export OBJCOPY="${CROSSENV}/bin/aarch64-buildroot-linux-gnu-objcopy" leava@kbuild:/work/xfstests-dev$ export OBJDUMP="${CROSSENV}/bin/aarch64-buildroot-linux-gnu-objdump" leava@kbuild:/work/xfstests-dev$ export PKG_CONFIG="${CROSSENV}/bin/pkg-config" leava@kbuild:/work/xfstests-dev$ export PKGCONF="${CROSSENV}/bin/pkg-config"
xfstestsをビルド環境のセットアップする
leava@kbuild:/work/xfstests-dev$ ./configure \ --target=aarch64-buildroot-linux-gnu \ --host=aarch64-buildroot-linux-gnu \ --build=x86_64-pc-linux-gnu \ --prefix=${SDKTARGETSYSROOT}/usr \ --exec-prefix=${NFSROOT} \ --program-prefix=""\ INSTALL_USER=root \ INSTALL_GROUP=root \ --enable-static
xfstestsをクロスビルドする
leava@kbuild:/work/xfstests-dev$ make
ターゲットファイルシステム (NFSroot) 以下に xfstestsをインストールする
leava@kbuild:/work/xfstests-dev$ make install
テスト実施
xfstestsはターゲットファイルシステムの/xfstests
にインストールされている。
その環境で ./check
スクリプトを実行することでファイルシステムのテストが実施される。
Buildrootで作成したテスト実施環境を起動させる
leava@kbuild:/work/xfstests-dev$ sudo start-qemu-arm64.sh serial-only
インストールしたxfstestsディレクトリに移動する
buildroot login: root # cd /xfstests/
テストを実施する
# ./check -g quick
ただし、いくつかのテスト(ext4/058
, ext4/059
など) は BUG_ON で例外が発生するため注意。
おわりに
本記事では、xfstestsをビルド・実行できる環境をBuildrootで生成した。
ただし、いくつかの設定 (パッケージの追加やターゲット環境の修正) は Buildrootのデフォルトでは対応できなかったため、Buildrootに修正を加えた。 (下記 repository を参照)
変更履歴
- 2022/12/18: 記事公開
参考文献
- The Buildroot user manual
- Buildrootのユーザマニュアル
- Buildroot の使い方 - br2-external 編 - Qiita
- Buildrootの使い方紹介
- AutotoolsによるC/C++クロスビルド覚書き - Qiita
- YoctoのToolchainで Autotoolsを使うパッケージをクロスビルドする