Skip to content

Commit f6627f1

Browse files
authored
Merge pull request #625 from ChinYikMing/mount-simplefs
Add simplefs as new Linux image artifact
2 parents 3f64d3e + aaa9c44 commit f6627f1

File tree

9 files changed

+278
-97
lines changed

9 files changed

+278
-97
lines changed

.ci/boot-linux-prepare.sh

Lines changed: 67 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,15 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
66

77
check_platform
88

9-
VBLK_IMG=build/disk.img
9+
VBLK_IMGS=(
10+
build/disk_ext4.img
11+
)
12+
# FIXME: mkfs.simplefs is not compilable on macOS, thus running the
13+
# simplefs cases on Linux runner for now
14+
if [[ "${OS_TYPE}" == "Linux" ]]; then
15+
VBLK_IMGS+=(build/disk_simplefs.img)
16+
fi
17+
1018
which dd > /dev/null 2>&1 || {
1119
echo "Error: dd not found"
1220
exit 1
@@ -25,48 +33,77 @@ ACTION=$1
2533

2634
case "$ACTION" in
2735
setup)
28-
# Setup a disk image
29-
dd if=/dev/zero of=${VBLK_IMG} bs=4M count=32
36+
# Clone simplefs to use mkfs.simplefs util and create simplefs disk image
37+
git clone https://github.com/sysprog21/simplefs.git -b rel2025.0 --depth 1
3038

31-
# Setup a /dev/ block device with ${VBLK_IMG} to test guestOS access to hostOS /dev/ block device
32-
case "${OS_TYPE}" in
33-
Linux)
34-
mkfs.ext4 ${VBLK_IMG}
35-
BLK_DEV=$(losetup -f)
36-
losetup ${BLK_DEV} ${VBLK_IMG}
37-
;;
38-
Darwin)
39-
$(brew --prefix e2fsprogs)/sbin/mkfs.ext4 ${VBLK_IMG}
40-
BLK_DEV=$(hdiutil attach -nomount ${VBLK_IMG})
41-
;;
42-
esac
39+
# Setup disk images
40+
for disk_img in "${VBLK_IMGS[@]}"; do
41+
case "${OS_TYPE}" in
42+
Linux)
43+
# Setup a /dev/ block device with ext4 fs to test guestOS access to hostOS /dev/ block device
44+
if [[ "${disk_img}" =~ ext4 ]]; then
45+
dd if=/dev/zero of=${disk_img} bs=4M count=32
46+
mkfs.ext4 ${disk_img}
47+
else
48+
mkdir -p simplefs/build
49+
make IMAGE=${disk_img} ${disk_img} -C simplefs
50+
mv simplefs/${disk_img} ./build
51+
fi
52+
BLK_DEV=$(losetup -f)
53+
losetup ${BLK_DEV} ${disk_img}
54+
;;
55+
Darwin)
56+
# Setup a /dev/ block device with ext4 fs to test guestOS access to hostOS /dev/ block device
57+
dd if=/dev/zero of=${disk_img} bs=4M count=32
58+
$(brew --prefix e2fsprogs)/sbin/mkfs.ext4 ${disk_img}
59+
BLK_DEV=$(hdiutil attach -nomount ${disk_img})
60+
;;
61+
esac
4362

44-
# On Linux, ${VBLK_IMG} will be created by root and owned by root:root.
45-
# Even if "others" have read and write (rw) permissions, accessing the file for certain operations may
46-
# still require elevated privileges (e.g., setuid).
47-
# To simplify this, we change the ownership to a non-root user.
48-
# Use this with caution—changing ownership to runner:runner is specific to the GitHub CI environment.
49-
chown runner: ${VBLK_IMG}
50-
# Add other's rw permission to the disk image and device, so non-superuser can rw them
51-
chmod o+r,o+w ${VBLK_IMG}
52-
chmod o+r,o+w ${BLK_DEV}
63+
# On Linux, ${disk_img} will be created by root and owned by root:root.
64+
# Even if "others" have read and write (rw) permissions, accessing the file for certain operations may
65+
# still require elevated privileges (e.g., setuid).
66+
# To simplify this, we change the ownership to a non-root user.
67+
# Use this with caution—changing ownership to runner:runner is specific to the GitHub CI environment.
68+
chown runner: ${disk_img}
69+
# Add other's rw permission to the disk image and device, so non-superuser can rw them
70+
chmod o+r,o+w ${disk_img}
71+
chmod o+r,o+w ${BLK_DEV}
5372

54-
# Export ${BLK_DEV} to a tmp file. Then, source to "$GITHUB_ENV" in job step.
55-
echo "export BLK_DEV=${BLK_DEV}" > "${TMP_FILE}"
73+
# Export ${BLK_DEV} to a tmp file. Then, source to "$GITHUB_ENV" in job step.
74+
if [[ "${disk_img}" =~ ext4 ]]; then
75+
echo "export BLK_DEV_EXT4=${BLK_DEV}" >> "${TMP_FILE}"
76+
else
77+
echo "export BLK_DEV_SIMPLEFS=${BLK_DEV}" >> "${TMP_FILE}"
78+
fi
79+
done
80+
81+
# Put simplefs.ko into ext4 fs
82+
mkdir -p mnt
83+
mount ${VBLK_IMGS[0]} mnt
84+
cp build/linux-image/simplefs.ko mnt
85+
umount mnt
86+
rm -rf mnt
5687
;;
5788
cleanup)
89+
# Remove simplefs repo
90+
rm -rf simplefs
91+
5892
# Detach the /dev/loopx(Linux) or /dev/diskx(Darwin)
5993
case "${OS_TYPE}" in
6094
Linux)
61-
losetup -d ${BLK_DEV}
95+
losetup -d ${BLK_DEV_EXT4}
96+
losetup -d ${BLK_DEV_SIMPLEFS}
6297
;;
6398
Darwin)
64-
hdiutil detach ${BLK_DEV}
99+
hdiutil detach ${BLK_DEV_EXT4}
65100
;;
66101
esac
67102

68-
# delete disk image
69-
rm -f ${VBLK_IMG}
103+
# delete disk images
104+
for disk_img in "${VBLK_IMGS[@]}"; do
105+
rm -f ${disk_img}
106+
done
70107

71108
# delete tmp file
72109
rm "${TMP_FILE}"

0 commit comments

Comments
 (0)