Openembedded Core Discussions
 help / color / mirror / Atom feed
From: Richard Purdie <richard.purdie@linuxfoundation.org>
To: Patches and discussions about the oe-core layer
	<openembedded-core@lists.openembedded.org>
Subject: Re: [CONSOLIDATED PULL (for RC3) 2/5] initrdscripts: fix init-live.sh and use unionfs
Date: Wed, 11 Apr 2012 10:57:04 +0100	[thread overview]
Message-ID: <1334138224.10826.130.camel@ted> (raw)
In-Reply-To: <5db901b79e5dde24e04a4c6237c377d8a9fdac22.1334107957.git.sgw@linux.intel.com>

On Tue, 2012-04-10 at 18:33 -0700, Saul Wold wrote:
> From: Yang Shi <yang.shi@windriver.com>
> 
> [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.
> 
> Signed-off-by: Yang Shi <yang.shi@windriver.com>
> ---
>  meta/recipes-core/initrdscripts/files/init-live.sh |   23 ++++++++++++++++---
>  .../initrdscripts/initramfs-live-boot_1.0.bb       |    9 +++++++-
>  2 files changed, 27 insertions(+), 5 deletions(-)
> 
> diff --git a/meta/recipes-core/initrdscripts/files/init-live.sh b/meta/recipes-core/initrdscripts/files/init-live.sh
> index eb5ab5b..737dae4 100644
> --- a/meta/recipes-core/initrdscripts/files/init-live.sh
> +++ b/meta/recipes-core/initrdscripts/files/init-live.sh
> @@ -7,6 +7,7 @@ ROOT_IMAGE="rootfs.img"
>  MOUNT="/bin/mount"
>  UMOUNT="/bin/umount"
>  ISOLINUX=""
> +UNIONFS="no"
>  
>  early_setup() {
>      mkdir /proc
> @@ -89,17 +90,31 @@ case $label in
>  	mkdir $ROOT_MOUNT
>  	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
> -	    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
>  	;;
>      install)
>  	if [ -f /media/$i/$ISOLINUX/$ROOT_IMAGE ] ; then
>  	    ./install.sh $i/$ISOLINUX $ROOT_IMAGE $video_mode $vga_mode
>  	else
> -	    fatal "Couldnt find install script"
> +	    fatal "Could not find install script"
>  	fi
>  
>  	# If we're getting here, we failed...
> diff --git a/meta/recipes-core/initrdscripts/initramfs-live-boot_1.0.bb b/meta/recipes-core/initrdscripts/initramfs-live-boot_1.0.bb
> index e85a0e1..f7f0c9d 100644
> --- a/meta/recipes-core/initrdscripts/initramfs-live-boot_1.0.bb
> +++ b/meta/recipes-core/initrdscripts/initramfs-live-boot_1.0.bb
> @@ -2,10 +2,17 @@ DESCRIPTION = "A live image init script"
>  LICENSE = "MIT"
>  LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
>  RDEPENDS = "udev"
> +DEPENDS = "virtual/kernel"
>  SRC_URI = "file://init-live.sh"
>  
> -PR = "r7"
> +PR = "r8"
>  
> +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() {
>          install -m 0755 ${WORKDIR}/init-live.sh ${D}/init
>  }

Sadly, virtual/kernel is a machine specific dependency so we need to
remove the allarch inherit from the recipe and mark it as machine
specific too.

Cheers,

Richard




  reply	other threads:[~2012-04-11 10:06 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-11  1:33 [CONSOLIDATED PULL (for RC3) 0/5] Please review and pull this morning Saul Wold
2012-04-11  1:33 ` [CONSOLIDATED PULL (for RC3) 1/5] connman: add ofono dependency Saul Wold
2012-04-11  1:33 ` [CONSOLIDATED PULL (for RC3) 2/5] initrdscripts: fix init-live.sh and use unionfs Saul Wold
2012-04-11  9:57   ` Richard Purdie [this message]
2012-04-11  1:33 ` [CONSOLIDATED PULL (for RC3) 3/5] boot-directdisk: remove the default setting of SYSLINUXCFG and SYSLINUXMENU Saul Wold
2012-04-11  1:33 ` [CONSOLIDATED PULL (for RC3) 4/5] task-self-hosted: Add vte and eglibc-gconv-ibm850 Saul Wold
2012-04-11  1:33 ` [CONSOLIDATED PULL (for RC3) 5/5] tclibc-eglibc.inc: make locale packages dependency conditional Saul Wold
2012-04-11  2:11   ` Koen Kooi
2012-04-11 11:18 ` [CONSOLIDATED PULL (for RC3) 0/5] Please review and pull this morning Richard Purdie

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1334138224.10826.130.camel@ted \
    --to=richard.purdie@linuxfoundation.org \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox