init-live.sh: distinguish between a read-only image and a read-write image
The iso and hddimg share a common concept of 'live image', and they use the same initramfs and thus the same init. However, that init script in initramfs made a wrong assumption that the rootfs image was read-only by itself. This is apparently not true for hddimg. To make things work as expected, this init script should at least distinguish between a read-only rootfs image and a read-write one. This patch adds this ability to the init script. After this change, the init script would be able to check whether the rootfs image is read-only or not. If the rootfs image is read-write, the image will be mounted and then booted directly. No union mounts will be attempted in this case. [YOCTO #5164] (From OE-Core rev: 29f869b68a9017502f75915784a924f0fe9d4be1) Signed-off-by: Chen Qi <Qi.Chen@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
b990585d38
commit
4c3f8d2063
|
@ -137,12 +137,23 @@ do
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
|
||||||
# Try to make a union mount of the root image.
|
# Try to mount the root image read-write and then boot it up.
|
||||||
# If no unification filesystem is available, mount the image read-only.
|
# This function distinguishes between a read-only image and a read-write image.
|
||||||
|
# In the former case (typically an iso), it tries to make a union mount if possible.
|
||||||
|
# In the latter case, the root image could be mounted and then directly booted up.
|
||||||
mount_and_boot() {
|
mount_and_boot() {
|
||||||
mkdir $ROOT_MOUNT
|
mkdir $ROOT_MOUNT
|
||||||
mknod /dev/loop0 b 7 0 2>/dev/null
|
mknod /dev/loop0 b 7 0 2>/dev/null
|
||||||
|
|
||||||
|
if ! mount -o rw,loop,noatime,nodiratime /media/$i/$ISOLINUX/$ROOT_IMAGE $ROOT_MOUNT ; then
|
||||||
|
fatal "Could not mount rootfs image"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if touch $ROOT_MOUNT/bin 2>/dev/null; then
|
||||||
|
# The root image is read-write, directly boot it up.
|
||||||
|
boot_live_root
|
||||||
|
fi
|
||||||
|
|
||||||
# determine which unification filesystem to use
|
# determine which unification filesystem to use
|
||||||
union_fs_type=""
|
union_fs_type=""
|
||||||
if grep -q -w "overlayfs" /proc/filesystems; then
|
if grep -q -w "overlayfs" /proc/filesystems; then
|
||||||
|
@ -157,9 +168,9 @@ mount_and_boot() {
|
||||||
case $union_fs_type in
|
case $union_fs_type in
|
||||||
"overlayfs")
|
"overlayfs")
|
||||||
mkdir -p /rootfs.ro /rootfs.rw
|
mkdir -p /rootfs.ro /rootfs.rw
|
||||||
if ! mount -o rw,loop,noatime,nodiratime /media/$i/$ISOLINUX/$ROOT_IMAGE /rootfs.ro; then
|
if ! mount -n --move $ROOT_MOUNT /rootfs.ro; then
|
||||||
rm -rf /rootfs.ro /rootfs.rw
|
rm -rf /rootfs.ro /rootfs.rw
|
||||||
fatal "Could not mount rootfs image"
|
fatal "Could not move rootfs mount point"
|
||||||
else
|
else
|
||||||
mount -t tmpfs -o rw,noatime,mode=755 tmpfs /rootfs.rw
|
mount -t tmpfs -o rw,noatime,mode=755 tmpfs /rootfs.rw
|
||||||
mount -t overlayfs -o "lowerdir=/rootfs.ro,upperdir=/rootfs.rw" overlayfs $ROOT_MOUNT
|
mount -t overlayfs -o "lowerdir=/rootfs.ro,upperdir=/rootfs.rw" overlayfs $ROOT_MOUNT
|
||||||
|
@ -170,9 +181,9 @@ mount_and_boot() {
|
||||||
;;
|
;;
|
||||||
"aufs")
|
"aufs")
|
||||||
mkdir -p /rootfs.ro /rootfs.rw
|
mkdir -p /rootfs.ro /rootfs.rw
|
||||||
if ! mount -o rw,loop,noatime,nodiratime /media/$i/$ISOLINUX/$ROOT_IMAGE /rootfs.ro; then
|
if ! mount -n --move $ROOT_MOUNT /rootfs.ro; then
|
||||||
rm -rf /rootfs.ro /rootfs.rw
|
rm -rf /rootfs.ro /rootfs.rw
|
||||||
fatal "Could not mount rootfs image"
|
fatal "Could not move rootfs mount point"
|
||||||
else
|
else
|
||||||
mount -t tmpfs -o rw,noatime,mode=755 tmpfs /rootfs.rw
|
mount -t tmpfs -o rw,noatime,mode=755 tmpfs /rootfs.rw
|
||||||
mount -t aufs -o "dirs=/rootfs.rw=rw:/rootfs.ro=ro" aufs $ROOT_MOUNT
|
mount -t aufs -o "dirs=/rootfs.rw=rw:/rootfs.ro=ro" aufs $ROOT_MOUNT
|
||||||
|
@ -182,11 +193,7 @@ mount_and_boot() {
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
"")
|
"")
|
||||||
if ! mount -o rw,loop,noatime,nodiratime /media/$i/$ISOLINUX/$ROOT_IMAGE $ROOT_MOUNT ; then
|
mount -t tmpfs -o rw,noatime,mode=755 tmpfs $ROOT_MOUNT/media
|
||||||
fatal "Could not mount rootfs image"
|
|
||||||
else
|
|
||||||
mount -t tmpfs -o rw,noatime,mode=755 tmpfs $ROOT_MOUNT/media
|
|
||||||
fi
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue