#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin
-mount -o nosuid,strictatime,mode=755 -t devtmpfs devtmpfs /dev
-mount -o nosuid,noexec,nodev -t sysfs sysfs /sys
-mount -o nosuid,noexec,nodev -t proc proc /proc
-
-ROOTFS=`/sbin/blkid -L rootfs`
-if [ x$ROOTFS = "x" ]
-then
- ROOTFS=`/sbin/blkid -t PARTLABEL=rootfs -o device`
-fi
-
-MODULES=`/sbin/blkid -L modules`
-if [ x$MODULES = "x" ]
-then
- MODULES=`/sbin/blkid -t PARTLABEL=module -o device`
-fi
-
-DATAFS=`/sbin/blkid -L system-data`
-if [ x$DATAFS = "x" ]
-then
- DATAFS=`/sbin/blkid -t PARTLABEL=system-data -o device`
-fi
-
-USERFS=`/sbin/blkid -L user`
-if [ x$USERFS = "x" ]
-then
- USERFS=`/sbin/blkid -t PARTLABEL=user -o device`
-fi
-
+ROOTFS=
+DATAFS=
+USERFS=
+MODULES=
NEED_RESIZEFS=1
USERFS_ENCRYPTED=0
-if [ x"$DATAFS" != "x" ]
-then
+
+function find_partitions()
+{
+ ROOTFS=`/sbin/blkid -L rootfs`
+ if [ x$ROOTFS = "x" ]
+ then
+ ROOTFS=`/sbin/blkid -t PARTLABEL=rootfs -o device`
+ fi
+
+ DATAFS=`/sbin/blkid -L system-data`
+ if [ x$DATAFS = "x" ]
+ then
+ DATAFS=`/sbin/blkid -t PARTLABEL=system-data -o device`
+ fi
+
+ USERFS=`/sbin/blkid -L user`
+ if [ x$USERFS = "x" ]
+ then
+ USERFS=`/sbin/blkid -t PARTLABEL=user -o device`
+ fi
+
+ MODULES=`/sbin/blkid -L modules`
+ if [ x$MODULES = "x" ]
+ then
+ MODULES=`/sbin/blkid -t PARTLABEL=module -o device`
+ fi
+}
+
+
+function check_flags()
+{
+ if [ x"$DATAFS" = "x" ]; then return; fi
+
/sbin/fsck -y $DATAFS
/bin/mount $DATAFS /opt
if [ -e /opt/var/.resizefs_done ]
then
- NEED_RESIZEFS=0
- else
- /bin/umount /opt
+ NEED_RESIZEFS=0
+ fi
+
+ /bin/umount /opt
+}
+
+
+function process_rootfs()
+{
+ # No rootfs
+ if [ x$ROOTFS = "x" ]
+ then
+ echo "WARNING : THERE IS NO ROOTFS."
+ exec /bin/sh
+ fi
+
+ # btrfs rootfs
+ BTRFS_ROOTFS=`/sbin/blkid $ROOTFS -t TYPE=btrfs -o device`
+ if [ x$BTRFS_ROOTFS != "x" ]
+ then
+ /sbin/btrfs check $ROOTFS
+ /bin/mount $ROOTFS /sysroot -o rw,compress-force=lzo
+ if [ "$NEED_RESIZEFS" = "1" ]
+ then
+ /sbin/btrfs filesystem resize max /sysroot
+ fi
+
+ return
fi
-fi
-
-if [ x$ROOTFS != "x" ]
-then
- BTRFS_ROOTFS=`/sbin/blkid $ROOTFS -t TYPE=btrfs -o device`
- if [ x$BTRFS_ROOTFS != "x" ]
- then
- /sbin/btrfs check $ROOTFS
- /bin/mount $ROOTFS /sysroot -o rw,compress-force=lzo
- if [ "$NEED_RESIZEFS" = "1" ]
- then
- /sbin/btrfs filesystem resize max /sysroot
- fi
- else
- /usr/bin/verityctl create root $ROOTFS
- if [ $? != 0 ]
- then
- if [ "$NEED_RESIZEFS" = "1" ]
- then
- /sbin/fsck -y $ROOTFS
- /sbin/resize2fs -f $ROOTFS
- fi
- /sbin/fsck -y $ROOTFS
- /bin/mount $ROOTFS /sysroot -o rw
- fi
- fi
-else
- echo "WARNING : THERE IS NO ROOTFS."
- exec /bin/sh
-fi
-
-if [ x"$DATAFS" != "x" ]
-then
+
+ # veirfy boot
+ /usr/bin/verityctl create root $ROOTFS
+ if [ $? == 0 ]; then return; fi
+
+ # ext4 partion
+ if [ "$NEED_RESIZEFS" = "1" ]
+ then
+ /sbin/fsck -y $ROOTFS
+ /sbin/resize2fs -f $ROOTFS
+ fi
+ /sbin/fsck -y $ROOTFS
+ /bin/mount $ROOTFS /sysroot -o rw
+}
+
+
+function process_datafs()
+{
+ if [ x"$DATAFS" = "x" ]; then return; fi
+
if [ "$NEED_RESIZEFS" = "1" ]
then
/sbin/fsck -y $DATAFS
/sbin/resize2fs -f $DATAFS
- /sbin/fsck -y $DATAFS
- /bin/mount $DATAFS /sysroot/opt
- else
- /bin/mount -M /opt /sysroot/opt
fi
-fi
-
-if [ x"$USERFS" != "x" -a "$USERFS_ENCRYPTED" = "0" ]
-then
- F2FS_USERFS=$(/sbin/blkid $USERFS -t TYPE=f2fs -o device)
- if [ x$F2FS_USERFS != "x" ]
- then
- if [ "$NEED_RESIZEFS" = "1" ]
- then
- /sbin/fsck.f2fs -y $USERFS
- /sbin/resize.f2fs $USERFS
- fi
- /sbin/fsck.f2fs -y $USERFS
- else
- if [ "$NEED_RESIZEFS" = "1" ]
- then
- /sbin/fsck -y $USERFS
- /sbin/resize2fs -f $USERFS
- fi
- /sbin/fsck -y $USERFS
- fi
-fi
-
-if [ x$MODULES != "x" ]
-then
+ /sbin/fsck -y $DATAFS
+ /bin/mount $DATAFS /sysroot/opt
+}
+
+
+function process_modulesfs
+{
+ if [ x$MODULES = "x" ]; then return; fi
+
if [ "$NEED_RESIZEFS" = "1" ]
then
/sbin/fsck -y $MODULES
fi
/sbin/fsck -y $MODULES
/bin/mount $MODULES /sysroot/usr/lib/modules
-fi
+}
+
+
+function process_userfs()
+{
+ if [ x"$USERFS" = "x" ]; then return; fi
+ if [ "$USERFS_ENCRYPTED" = "1" ]; then return; fi
+
+ F2FS_USERFS=$(/sbin/blkid $USERFS -t TYPE=f2fs -o device)
+ if [ x$F2FS_USERFS != "x" ]
+ then
+ if [ "$NEED_RESIZEFS" = "1" ]
+ then
+ /sbin/fsck.f2fs -y $USERFS
+ /sbin/resize.f2fs $USERFS
+ fi
+ /sbin/fsck.f2fs -y $USERFS
+ else
+ if [ "$NEED_RESIZEFS" = "1" ]
+ then
+ /sbin/fsck -y $USERFS
+ /sbin/resize2fs -f $USERFS
+ fi
+ /sbin/fsck -y $USERFS
+ fi
+
+ # We don't mount $USERFS here, platform mounts it.
+}
+
+
+function load_kernel_modules
+{
+ echo "Load kernel modules"
+}
+
+
+function write_resized_flag()
+{
+ if [ x"$DATAFS" = "x" ]; then return; fi
+ if [ "$NEED_RESIZEFS" = "0" ]; then return; fi
-if [ x"$DATAFS" != "x" -a "$NEED_RESIZEFS" = "1" ]
-then
echo " " > /sysroot/opt/var/.resizefs_done
-fi
-
-cd /sysroot
-/sbin/pivot_root . ./mnt/initrd
-/bin/mount -M /mnt/initrd/dev /dev
-/bin/mount -M /mnt/initrd/sys /sys
-/bin/mount -M /mnt/initrd/proc /proc
-/bin/umount -l /mnt/initrd
-
-/bin/mount -o remount,ro .
-
-INIT=/sbin/init
-if [ $$ = 1 ]
-then
- exec chroot . $INIT $@
-fi
+}
+
+
+function pivot_root()
+{
+ cd /sysroot
+
+ /sbin/pivot_root . ./mnt/initrd
+ /bin/mount -M /mnt/initrd/dev /dev
+ /bin/mount -M /mnt/initrd/sys /sys
+ /bin/mount -M /mnt/initrd/proc /proc
+ /bin/umount -l /mnt/initrd
+
+ /bin/mount -o remount,ro .
+}
+
+
+function change_root()
+{
+ INIT=/sbin/init
+ if [ $$ = 1 ]
+ then
+ exec chroot . $INIT $@
+ fi
+}
+
+
+mount -o nosuid,strictatime,mode=755 -t devtmpfs devtmpfs /dev
+mount -o nosuid,noexec,nodev -t sysfs sysfs /sys
+mount -o nosuid,noexec,nodev -t proc proc /proc
+
+find_partitions
+check_flags
+
+process_rootfs
+process_datafs
+process_modulesfs
+process_userfs
+write_resized_flag
+
+load_kernel_modules
+
+pivot_root
+change_root $@
+
+# WARNING! never rearch
exec /bin/sh