1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-30 12:29:55 +00:00

initrdscripts: fix init-live.sh and use unionfs

[YOCTO #1487]

When booting up with liveCD image, init scripts can't work well on read-only filesystem. Unionfs,
which is supported in Yocto kernel, allows a filesystem to appear as writeable, but without
actually allowing writes to change the filesystem.

Use unionfs to mount rootfs and make root file system can be writen when using liveCD to boot up.
Set UNION_FS variable depending on kernel config, so that it can work with kernel which doesn't
have unionfs feature.

[RP: Mark recipe as machine specific due to kernel dependency]
(From OE-Core rev: b7f4e8d153c2aebbcf6556e7e926f6b94801d6aa)

Signed-off-by: Yang Shi <yang.shi@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Yang Shi
2012-04-10 18:33:43 -07:00
committed by Richard Purdie
parent 88b399bb2c
commit b23b2b42a0
2 changed files with 30 additions and 7 deletions
@@ -7,6 +7,7 @@ ROOT_IMAGE="rootfs.img"
MOUNT="/bin/mount" MOUNT="/bin/mount"
UMOUNT="/bin/umount" UMOUNT="/bin/umount"
ISOLINUX="" ISOLINUX=""
UNIONFS="no"
early_setup() { early_setup() {
mkdir /proc mkdir /proc
@@ -89,17 +90,31 @@ case $label in
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 "Couldnt mount rootfs image" if [ "$UNIONFS" = "yes" ]; then
mkdir /rootfs-tmp
if ! $MOUNT -o rw,loop,noatime,nodiratime /media/$i/$ISOLINUX/$ROOT_IMAGE /rootfs-tmp ; then
fatal "Could not mount rootfs image"
else
mkdir /cow
mount -t tmpfs -o rw,noatime,mode=755 tmpfs /cow
mount -t unionfs -o dirs=/cow:/rootfs-tmp=ro unionfs $ROOT_MOUNT
boot_live_root
fi
else else
boot_live_root if ! $MOUNT -o rw,loop,noatime,nodiratime /media/$i/$ISOLINUX/$ROOT_IMAGE $ROOT_MOUNT ; then
fatal "Could not mount rootfs image"
else
boot_live_root
fi
fi fi
;; ;;
install) install)
if [ -f /media/$i/$ISOLINUX/$ROOT_IMAGE ] ; then if [ -f /media/$i/$ISOLINUX/$ROOT_IMAGE ] ; then
./install.sh $i/$ISOLINUX $ROOT_IMAGE $video_mode $vga_mode ./install.sh $i/$ISOLINUX $ROOT_IMAGE $video_mode $vga_mode
else else
fatal "Couldnt find install script" fatal "Could not find install script"
fi fi
# If we're getting here, we failed... # If we're getting here, we failed...
@@ -2,14 +2,22 @@ DESCRIPTION = "A live image init script"
LICENSE = "MIT" LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
RDEPENDS = "udev" RDEPENDS = "udev"
DEPENDS = "virtual/kernel"
SRC_URI = "file://init-live.sh" SRC_URI = "file://init-live.sh"
PR = "r7" PR = "r9"
do_compile() {
if grep -q "CONFIG_UNION_FS=y" ${STAGING_KERNEL_DIR}/.config; then
sed -i 's/UNIONFS="no"/UNIONFS="yes"/g' ${WORKDIR}/init-live.sh
fi
}
do_install() { do_install() {
install -m 0755 ${WORKDIR}/init-live.sh ${D}/init install -m 0755 ${WORKDIR}/init-live.sh ${D}/init
} }
inherit allarch
FILES_${PN} += " /init " FILES_${PN} += " /init "
# Due to kernel depdendency
PACKAGE_ARCH = "${MACHINE_ARCH}"