stratux/image/spindle/f2fsify

74 wiersze
2.0 KiB
Bash
Executable File

#!/bin/sh
# Part of spindle http://asbradbury.org/projects/spindle
#
# See LICENSE file for copyright and license details
# TODO: this script is very rough and ready.
set -ex
printf "NOTICE: this script is only intended to work in an unmodified form\n"
printf "a recent Arch Linux install (with 3.8.x kernel).\n"
printf "You'll need to use grow_image to expand the rootfs above 2GiB\n"
printf "To get all deps, you want to do:\n\n"
# 1.1.0 f2fs-tools release is no good as we need commit
# http://git.kernel.org/cgit/linux/kernel/git/jaegeuk/f2fs-tools.git/commit/?id=07b815d39509135e35856cfd30b83930a0af8250
cat <<"EOF"
pacman -S wget unzip zip parted git
git clone git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git
cd f2fs-tools
autoreconf -fi
./configure && make && make install
curl https://aur.archlinux.org/packages/f2/f2fs-tools-git/f2fs-tools-git.tar.gz | tar xz
cd f2fs-tools-git
makepkg -si
cd ..
EOF
sleep 5
if [ $(id -u) -ne 0 ]; then
printf "Script must be run as root\n"
exit 1
fi
if [ ! "$1" ]; then
printf "Usage: ./f2fsify IMAGEFILE\n"
exit 1
fi
IMAGEFILE="$1"
modprobe f2fs
modprobe loop
BOOT_START=$(parted "$IMAGEFILE" -ms unit s p | grep "^1" | cut -f 2 -d:)
BOOT_START_BYTES=$((${BOOT_START%s}*512))
ROOT_START=$(parted "$IMAGEFILE" -ms unit s p | grep "^2" | cut -f 2 -d:)
ROOT_START_BYTES=$((${ROOT_START%s}*512))
# Back up the rootfs content
LOOP_DEV=$(losetup -f)
losetup --offset "$ROOT_START_BYTES" -v $LOOP_DEV "$IMAGEFILE"
mkdir -p rootfs
mount $LOOP_DEV rootfs
tar -cz rootfs > rootfs.tar.gz
umount rootfs
# Make the f2fs rootfs
mkfs.f2fs $LOOP_DEV
mount $LOOP_DEV rootfs
tar -xvf rootfs.tar.gz
sed -i rootfs/etc/fstab -e "s/ext4/f2fs/"
cat rootfs/etc/fstab
umount rootfs
losetup -d $LOOP_DEV
# Fix cmdline.txt on boot partition
losetup --offset "$BOOT_START_BYTES" -v $LOOP_DEV "$IMAGEFILE"
mkdir -p boot
mount $LOOP_DEV boot
sed -i boot/cmdline.txt -e "s/ext4/f2fs/"
cat boot/cmdline.txt
umount boot
losetup -d $LOOP_DEV
printf "Done!\n"