migrate to f2fs

This commit is contained in:
2025-07-13 10:44:05 +02:00
parent d49f6dc165
commit 8086f9e95f
11 changed files with 86 additions and 51 deletions
+1 -1
View File
@@ -8,7 +8,7 @@ RUN apt-get -y update && \
git vim parted \
quilt coreutils qemu-user-static debootstrap zerofree zip dosfstools \
libarchive-tools libcap2-bin rsync grep udev xz-utils curl xxd file kmod bc \
binfmt-support ca-certificates fdisk gpg pigz arch-test \
binfmt-support ca-certificates fdisk gpg pigz arch-test f2fs-tools\
&& rm -rf /var/lib/apt/lists/*
COPY . /pi-gen/
+3
View File
@@ -9,3 +9,6 @@
- install docker
- install poetry
- install wireguard
- install openocd
TODO: migrate to https://github.com/raspberrypi/rpi-image-gen
+6 -1
View File
@@ -96,7 +96,12 @@ fi
ROOT_DEV="$(awk "\$2 == \"${ROOTFS_DIR}\" {print \$1}" /etc/mtab)"
unmount "${ROOTFS_DIR}"
zerofree "${ROOT_DEV}"
ROOTFS_TYPE=$(lsblk -no FSTYPE "${ROOT_DEV}")
if [ "$ROOTFS_TYPE" = "ext4" ] || [ "$ROOTFS_TYPE" = "ext3" ] || [ "$ROOTFS_TYPE" = "ext2" ]; then
zerofree "${ROOT_DEV}"
else
echo "Skipping zerofree: rootfs is not ext2/3/4 (detected: $ROOTFS_TYPE)"
fi
unmount_image "${IMG_FILE}"
+11 -3
View File
@@ -30,7 +30,10 @@ truncate -s "${IMG_SIZE}" "${IMG_FILE}"
parted --script "${IMG_FILE}" mklabel msdos
parted --script "${IMG_FILE}" unit B mkpart primary fat32 "${BOOT_PART_START}" "$((BOOT_PART_START + BOOT_PART_SIZE - 1))"
parted --script "${IMG_FILE}" unit B mkpart primary ext4 "${ROOT_PART_START}" "$((ROOT_PART_START + ROOT_PART_SIZE - 1))"
# Default ext4 root partition (commented out for F2FS)
# parted --script "${IMG_FILE}" unit B mkpart primary ext4 "${ROOT_PART_START}" "$((ROOT_PART_START + ROOT_PART_SIZE - 1))"
# F2FS root partition
parted --script "${IMG_FILE}" unit B mkpart primary f2fs "${ROOT_PART_START}" "$((ROOT_PART_START + ROOT_PART_SIZE - 1))"
echo "Creating loop device..."
cnt=0
@@ -63,9 +66,14 @@ else
fi
mkdosfs -n bootfs -F "$FAT_SIZE" -s 4 -v "$BOOT_DEV" > /dev/null
mkfs.ext4 -L rootfs -O "$ROOT_FEATURES" "$ROOT_DEV" > /dev/null
# Default ext4 root filesystem creation (commented out for F2FS)
# mkfs.ext4 -L rootfs -O "$ROOT_FEATURES" "$ROOT_DEV" > /dev/null
# mount -v "$ROOT_DEV" "${ROOTFS_DIR}" -t ext4
# F2FS root filesystem creation
mkfs.f2fs -l rootfs "$ROOT_DEV"
mount -v "$ROOT_DEV" "${ROOTFS_DIR}" -t f2fs
mount -v "$ROOT_DEV" "${ROOTFS_DIR}" -t ext4
mkdir -p "${ROOTFS_DIR}/boot/firmware"
mount -v "$BOOT_DEV" "${ROOTFS_DIR}/boot/firmware" -t vfat
+1
View File
@@ -0,0 +1 @@
f2fs-tools
+1 -1
View File
@@ -1 +1 @@
console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 fsck.repair=yes rootwait
console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=f2fs rootflags=noatime,fsync_mode=strict fsck.repair=yes rootwait
+2 -3
View File
@@ -49,7 +49,6 @@ otg_mode=1
dtoverlay=dwc2,dr_mode=host
[all]
# uart debug enable on GPIO14/15
enable_uart=1
uart_2ndstage=1
@@ -59,5 +58,5 @@ dtdebug=1
# for auracaster project
dtoverlay=disable-bt
dtoverlay=disable-wifi
dtoverlay=uart1-pi5
dtoverlay=uart2-pi5
dtoverlay=uart2,ctsrts
dtoverlay=uart3,ctsrts
+1 -1
View File
@@ -1,3 +1,3 @@
proc /proc proc defaults 0 0
BOOTDEV /boot/firmware vfat defaults 0 2
ROOTDEV / ext4 defaults,noatime 0 1
ROOTDEV / f2fs defaults,noatime,fsync_mode=strict 0 1
@@ -1,5 +1,5 @@
--- stage2.orig/rootfs/boot/firmware/cmdline.txt
+++ stage2/rootfs/boot/firmware/cmdline.txt
@@ -1 +1 @@
-console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 fsck.repair=yes rootwait
+console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 fsck.repair=yes rootwait quiet init=/usr/lib/raspberrypi-sys-mods/firstboot
-console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=f2fs rootflags=noatime,fsync_mode=strict fsck.repair=yes rootwait
+console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=f2fs rootflags=noatime,fsync_mode=strict fsck.repair=yes rootwait quiet init=/usr/lib/raspberrypi-sys-mods/firstboot
@@ -9,45 +9,6 @@ which python3 || echo "python3 not found"
echo "DEBUG: Checking user 'caster'"
id caster || echo "user caster not found"
# Add Docker's official GPG key:
apt-get update
apt-get install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
bookworm stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Ensure docker group exists and add main user to it
DOCKER_GROUP=docker
if ! getent group "$DOCKER_GROUP" > /dev/null; then
groupadd "$DOCKER_GROUP"
fi
# Use FIRST_USER_NAME if set, else default to 'pi'
USER_TO_ADD="${FIRST_USER_NAME:-pi}"
usermod -aG "$DOCKER_GROUP" "$USER_TO_ADD" || true
docker compose version
# Install Python Poetry for caster user (official installer)
su - caster -c "curl -sSL https://install.python-poetry.org | python3 -"
# Add Poetry to PATH for caster user
CASTER_BASHRC="/home/caster/.bashrc"
if ! grep -q 'export PATH="/home/caster/.local/bin:$PATH"' "$CASTER_BASHRC" 2>/dev/null; then
echo 'export PATH="/home/caster/.local/bin:$PATH"' >> "$CASTER_BASHRC"
chown caster: "$CASTER_BASHRC"
fi
# Install WireGuard
apt-get install -y wireguard wireguard-tools
# Disable WiFi
# Option 1: Mask wpa_supplicant (prevents WiFi client connections)
systemctl mask wpa_supplicant.service || true
@@ -61,4 +22,61 @@ apt-get install -y rfkill && rfkill block wifi || true
systemctl mask bluetooth.service || true
systemctl disable hciuart.service || true
# install Docker
# Add Docker's official GPG key:
# apt-get update
# apt-get install -y ca-certificates curl
# install -m 0755 -d /etc/apt/keyrings
# curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
# chmod a+r /etc/apt/keyrings/docker.asc
# # Add the repository to Apt sources:
# echo \
# "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
# bookworm stable" | \
# tee /etc/apt/sources.list.d/docker.list > /dev/null
# apt-get update
# apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# # Ensure docker group exists and add main user to it
# DOCKER_GROUP=docker
# if ! getent group "$DOCKER_GROUP" > /dev/null; then
# groupadd "$DOCKER_GROUP"
# fi
# # Use FIRST_USER_NAME if set, else default to 'pi'
# USER_TO_ADD="${FIRST_USER_NAME:-pi}"
# usermod -aG "$DOCKER_GROUP" "$USER_TO_ADD" || true
# docker compose version
# Install Python Poetry for caster user (official installer)
su - caster -c "curl -sSL https://install.python-poetry.org | python3 -"
# Add Poetry to PATH for caster user
CASTER_BASHRC="/home/caster/.bashrc"
if ! grep -q 'export PATH="/home/caster/.local/bin:$PATH"' "$CASTER_BASHRC" 2>/dev/null; then
echo 'export PATH="/home/caster/.local/bin:$PATH"' >> "$CASTER_BASHRC"
chown caster: "$CASTER_BASHRC"
fi
# enable in project venv install
/home/caster/.local/bin/poetry config virtualenvs.in-project true
# # install openocd
# apt install git build-essential libtool autoconf texinfo libusb-1.0-0-dev libftdi1-dev libhidapi-dev pkg-config -y
# apt-get install pkg-config libjim-dev -y
# if [ ! -d openocd ]; then
# git clone --recurse-submodules https://github.com/raspberrypi/openocd.git
# fi
# cd openocd
# git fetch --all
# git checkout 8b8c9731a514d3e4dd367d4e77826711201b81b3
# ./bootstrap
# ./configure --enable-bcm2835gpio --enable-sysfsgpio
# make
# make install
# cd ..
apt install f2fs-tools
touch /root/CUSTOM_STAGE_WORKED
@@ -0,0 +1 @@
apt install f2fs-tools