Refactor /sbin/init 96/256696/13
authorINSUN PYO <insun.pyo@samsung.com>
Fri, 9 Apr 2021 08:32:47 +0000 (17:32 +0900)
committerINSUN PYO <insun.pyo@samsung.com>
Mon, 19 Apr 2021 11:48:42 +0000 (20:48 +0900)
Change-Id: Ibf1987072ae160973070fcf37844c166e902667a

scripts/init.sh

index 6b1081c7f984582b4071e94c12c7eb0b38515099..3970c1aa89edbaa9181d7969a965bcbbe97504f4 100755 (executable)
@@ -1,38 +1,45 @@
 #!/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
 
@@ -44,77 +51,69 @@ then
 
     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
@@ -122,25 +121,92 @@ then
     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