public inbox for openembedded-core@lists.openembedded.org
 help / color / mirror / Atom feed
* [PATCH V8 0/6] read-only rootfs support
@ 2013-01-22  6:36 Qi.Chen
  2013-01-22  6:36 ` [PATCH V8 1/6] sysvinit: add ROOTFS_READ_ONLY variable to rcS-default Qi.Chen
                   ` (5 more replies)
  0 siblings, 6 replies; 13+ messages in thread
From: Qi.Chen @ 2013-01-22  6:36 UTC (permalink / raw)
  To: openembedded-core; +Cc: Zhenfeng.Zhao

From: Chen Qi <Qi.Chen@windriver.com>

The series of patches add support to read-only rootfs.

The main idea is to use symbolic links to create the illuion that some
directories are writable in case of a read-only rootfs.

This set of patches have been tested on minimal images with and without
'read-only-rootfs' image feature enabled. Everything is OK.

For sato images, everything is the same as before if 'read-only-rootfs' is not enabled.
With 'read-only-rootfs' enabled, sato image could work if graphic interface is diabled.
When all postinstall problems are resolved, sato image should work well (maybe with some
small changes in volatiles-readonly-sato conf file).

Changes for Version 4:
1) Improve the commit messages to be clearer.
2) Use 'sed -i' to replace 'sed' and 'mv' operations to cut down the exec overhead.

Changes for Version 5:
Fix the problem of failing to build the live images

Changes for Version 6:
1) Let the image recipes provide the corresponding conf files for read-only rootfs.
   The config files are closely related to the image types, so it's more reasonable
   to let these image recipes provide the config files.
2) Support customized conf files for customized images.

Changes for Version 7:
1) Separate read-only-rootfs specific conf files from image recipes.
   Create recipes for them and let image recipes depend on the them.
2) 'choose_volatiel_conf' is no more need, thus removed.

Changes for Version 8:
Rebase these patches against the latest master branch (after the systemd integration)


The following changes since commit 37e025f6f9c410005e0f1dee0767e38eaec01cbd:

  bitbake: hob: Hob should display warnings generated during parsing (2013-01-21 19:05:31 +0000)

are available in the git repository at:

  git://git.pokylinux.org/poky-contrib ChenQi/readonly-rootfs
  http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=ChenQi/readonly-rootfs

Chen Qi (6):
  sysvinit: add ROOTFS_READ_ONLY variable to rcS-default
  image.bbclass: add a hook funtion to support readonly rootfs
  core-image.bbclass: support read-only rootfs
  initscripts: support read-only rootfs
  volatile-conf-minimal: add recipe
  volatile-conf-sato: add recipe

 meta/classes/core-image.bbclass                    |    4 +
 meta/classes/image.bbclass                         |   18 ++
 meta/recipes-core/images/core-image-minimal.bb     |    3 +
 .../initscripts/initscripts-1.0/bootmisc.sh        |    9 +-
 .../initscripts-1.0/populate-volatile.sh           |  281 ++++++++++----------
 .../initscripts/initscripts-1.0/volatiles          |    1 +
 meta/recipes-core/initscripts/initscripts_1.0.bb   |    2 +-
 .../files/volatiles-readonly-minimal               |    8 +
 .../volatile-conf-minimal_1.0.bb                   |   15 ++
 meta/recipes-core/sysvinit/sysvinit/rcS-default    |    4 +
 meta/recipes-core/sysvinit/sysvinit_2.88dsf.bb     |    2 +-
 meta/recipes-sato/images/core-image-sato.bb        |    3 +
 .../files/volatiles-readonly-sato                  |   14 +
 .../volatile-conf-sato_1.0.bb                      |   15 ++
 14 files changed, 226 insertions(+), 153 deletions(-)
 create mode 100644 meta/recipes-core/readonly-volatile-conf/files/volatiles-readonly-minimal
 create mode 100644 meta/recipes-core/readonly-volatile-conf/volatile-conf-minimal_1.0.bb
 create mode 100644 meta/recipes-sato/readonly-volatile-conf/files/volatiles-readonly-sato
 create mode 100644 meta/recipes-sato/readonly-volatile-conf/volatile-conf-sato_1.0.bb

-- 
1.7.9.5




^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH V8 1/6] sysvinit: add ROOTFS_READ_ONLY variable to rcS-default
  2013-01-22  6:36 [PATCH V8 0/6] read-only rootfs support Qi.Chen
@ 2013-01-22  6:36 ` Qi.Chen
  2013-01-22  6:36 ` [PATCH V8 2/6] image.bbclass: add a hook funtion to support readonly rootfs Qi.Chen
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 13+ messages in thread
From: Qi.Chen @ 2013-01-22  6:36 UTC (permalink / raw)
  To: openembedded-core; +Cc: Zhenfeng.Zhao

From: Chen Qi <Qi.Chen@windriver.com>

This variable indicates whether the rootfs is intended to be read-only
or not. Changing this value from 'no' to 'yes' on a currently running
system with read-write rootfs and rebooting will give the user a working
system with read-only rootfs.

However, it is not suggested to change its value. Normally, if a read-only
rootfs is required, we should build an image with 'read-only-rootfs' image
feature.

[YOCTO #3406]

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
---
 meta/recipes-core/sysvinit/sysvinit/rcS-default |    4 ++++
 meta/recipes-core/sysvinit/sysvinit_2.88dsf.bb  |    2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/meta/recipes-core/sysvinit/sysvinit/rcS-default b/meta/recipes-core/sysvinit/sysvinit/rcS-default
index 3c9dea9..709cdf6 100644
--- a/meta/recipes-core/sysvinit/sysvinit/rcS-default
+++ b/meta/recipes-core/sysvinit/sysvinit/rcS-default
@@ -23,3 +23,7 @@ FSCKFIX=yes
 #TICKADJ=10000
 # Enable caching in populate-volatile.sh
 VOLATILE_ENABLE_CACHE=yes
+# Indicate whether the rootfs is intended to be read-only or not.
+# Setting ROOTFS_READ_ONLY to yes and rebooting will give you a read-only rootfs.
+# Normally you should not change this value.
+ROOTFS_READ_ONLY=no
diff --git a/meta/recipes-core/sysvinit/sysvinit_2.88dsf.bb b/meta/recipes-core/sysvinit/sysvinit_2.88dsf.bb
index de073b8..bf6a29b 100644
--- a/meta/recipes-core/sysvinit/sysvinit_2.88dsf.bb
+++ b/meta/recipes-core/sysvinit/sysvinit_2.88dsf.bb
@@ -5,7 +5,7 @@ SECTION = "base"
 LICENSE = "GPLv2+"
 LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe \
                     file://COPYRIGHT;endline=15;md5=349c872e0066155e1818b786938876a4"
-PR = "r9"
+PR = "r10"
 
 RDEPENDS_${PN} = "${PN}-inittab"
 
-- 
1.7.9.5




^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH V8 2/6] image.bbclass: add a hook funtion to support readonly rootfs
  2013-01-22  6:36 [PATCH V8 0/6] read-only rootfs support Qi.Chen
  2013-01-22  6:36 ` [PATCH V8 1/6] sysvinit: add ROOTFS_READ_ONLY variable to rcS-default Qi.Chen
@ 2013-01-22  6:36 ` Qi.Chen
  2013-01-22 18:17   ` Mike Looijmans
  2013-01-22  6:36 ` [PATCH V8 3/6] core-image.bbclass: support read-only rootfs Qi.Chen
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 13+ messages in thread
From: Qi.Chen @ 2013-01-22  6:36 UTC (permalink / raw)
  To: openembedded-core; +Cc: Zhenfeng.Zhao

From: Chen Qi <Qi.Chen@windriver.com>

read_only_rootfs_hook: this funtion is invoked only if 'read-only-rootfs'
is in IMAGE_FEATURES. It tweaks some basic files and makes populate-
volatile.sh script run at rootfs time.

For now, it has real effect only if the init system is sysvinit.

[YOCTO #3406]

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
---
 meta/classes/image.bbclass |   18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
index 0293d2e..91045fc 100644
--- a/meta/classes/image.bbclass
+++ b/meta/classes/image.bbclass
@@ -201,6 +201,24 @@ run_intercept_scriptlets () {
 	fi
 }
 
+# A hook function to support read-only-rootfs IMAGE_FEATURES
+# Currently, it only supports sysvinit system.
+read_only_rootfs_hook () {
+	if ${@base_contains("DISTRO_FEATURES", "sysvinit", "true", "false", d)}; then
+	        # Tweak the mount option in fstab
+		sed -i '/rootfs/ s/defaults/ro/' ${IMAGE_ROOTFS}/etc/fstab
+	        # Change the value of ROOTFS_READ_ONLY in /etc/default/rcS to yes
+		if [ -e ${IMAGE_ROOTFS}/etc/default/rcS ]; then
+			sed -i 's/ROOTFS_READ_ONLY=no/ROOTFS_READ_ONLY=yes/' ${IMAGE_ROOTFS}/etc/default/rcS
+		fi
+	        # Run populate-volatile.sh at rootfs time to set up basic files
+	        # and directories to support read-only rootfs.
+		if [ -e ${IMAGE_ROOTFS}/etc/init.d/populate-volatile.sh ]; then
+			${IMAGE_ROOTFS}/etc/init.d/populate-volatile.sh
+		fi
+	fi
+}
+
 fakeroot do_rootfs () {
 	#set -x
 	# When use the rpm incremental image generation, don't remove the rootfs
-- 
1.7.9.5




^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH V8 3/6] core-image.bbclass: support read-only rootfs
  2013-01-22  6:36 [PATCH V8 0/6] read-only rootfs support Qi.Chen
  2013-01-22  6:36 ` [PATCH V8 1/6] sysvinit: add ROOTFS_READ_ONLY variable to rcS-default Qi.Chen
  2013-01-22  6:36 ` [PATCH V8 2/6] image.bbclass: add a hook funtion to support readonly rootfs Qi.Chen
@ 2013-01-22  6:36 ` Qi.Chen
  2013-01-22  6:36 ` [PATCH V8 4/6] initscripts: " Qi.Chen
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 13+ messages in thread
From: Qi.Chen @ 2013-01-22  6:36 UTC (permalink / raw)
  To: openembedded-core; +Cc: Zhenfeng.Zhao

From: Chen Qi <Qi.Chen@windriver.com>

The hook function is appended to ROOTFS_POSTPROCESS_COMMAND
properly to support the 'read-only-rootfs' image feature.

[YOCTO #3406]

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
---
 meta/classes/core-image.bbclass |    4 ++++
 1 file changed, 4 insertions(+)

diff --git a/meta/classes/core-image.bbclass b/meta/classes/core-image.bbclass
index e0f6dbb..0e6663d 100644
--- a/meta/classes/core-image.bbclass
+++ b/meta/classes/core-image.bbclass
@@ -28,6 +28,7 @@ LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3
 # - dev-pkgs            - development packages (headers, etc.) for all installed packages in the rootfs
 # - dbg-pkgs            - debug symbol packages for all installed packages in the rootfs
 # - doc-pkgs            - documentation packages for all installed packages in the rootfs
+# - read-only-rootfs    - tweaks an image to support read-only rootfs
 #
 PACKAGE_GROUP_x11 = "packagegroup-core-x11"
 PACKAGE_GROUP_x11-base = "packagegroup-core-x11-base"
@@ -76,3 +77,6 @@ ROOTFS_POSTPROCESS_COMMAND += "rootfs_update_timestamp ; "
 
 # Zap the root password if debug-tweaks feature is not enabled
 ROOTFS_POSTPROCESS_COMMAND += '${@base_contains("IMAGE_FEATURES", "debug-tweaks", "", "zap_root_password ; ",d)}'
+
+# Tweak the mount options for rootfs in /etc/fstab if read-only-rootfs is enabled
+ROOTFS_POSTPROCESS_COMMAND += '${@base_contains("IMAGE_FEATURES", "read-only-rootfs", "read_only_rootfs_hook; ", "",d)}'
-- 
1.7.9.5




^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH V8 4/6] initscripts: support read-only rootfs
  2013-01-22  6:36 [PATCH V8 0/6] read-only rootfs support Qi.Chen
                   ` (2 preceding siblings ...)
  2013-01-22  6:36 ` [PATCH V8 3/6] core-image.bbclass: support read-only rootfs Qi.Chen
@ 2013-01-22  6:36 ` Qi.Chen
  2013-01-22  6:36 ` [PATCH V8 5/6] volatile-conf-minimal: add recipe Qi.Chen
  2013-01-22  6:36 ` [PATCH V8 6/6] volatile-conf-sato: " Qi.Chen
  5 siblings, 0 replies; 13+ messages in thread
From: Qi.Chen @ 2013-01-22  6:36 UTC (permalink / raw)
  To: openembedded-core; +Cc: Zhenfeng.Zhao

From: Chen Qi <Qi.Chen@windriver.com>

To support a read-only rootfs, we use symbolic links which point
to volatile storage to create the illusion that some directories
are writable.

Improve populate-volatile.sh script to support read-only rootfs.
Add two default config files specific to read-only-rootfs image.

[YOCTO #3406]

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
---
 .../initscripts/initscripts-1.0/bootmisc.sh        |    9 +-
 .../initscripts-1.0/populate-volatile.sh           |  281 ++++++++++----------
 .../initscripts/initscripts-1.0/volatiles          |    1 +
 meta/recipes-core/initscripts/initscripts_1.0.bb   |    2 +-
 4 files changed, 141 insertions(+), 152 deletions(-)

diff --git a/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh b/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh
index 4f76cb4..3b5a47f 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh
+++ b/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh
@@ -54,14 +54,7 @@ fi
 
 #
 # This is as good a place as any for a sanity check
-# /tmp should be a symlink to /var/tmp to cut down on the number
-# of mounted ramdisks.
-if test ! -L /tmp && test -d /var/tmp
-then
-	rm -rf /tmp
-	ln -sf /var/tmp /tmp
-fi
-
+#
 # Set the system clock from hardware clock
 # If the timestamp is more recent than the current time,
 # use the timestamp instead.
diff --git a/meta/recipes-core/initscripts/initscripts-1.0/populate-volatile.sh b/meta/recipes-core/initscripts/initscripts-1.0/populate-volatile.sh
index d2175d7..2691173 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/populate-volatile.sh
+++ b/meta/recipes-core/initscripts/initscripts-1.0/populate-volatile.sh
@@ -8,192 +8,187 @@
 # Short-Description:  Populate the volatile filesystem
 ### END INIT INFO
 
-. /etc/default/rcS
-
-CFGDIR="/etc/default/volatiles"
-TMPROOT="/var/tmp"
+# Get ROOT_DIR
+DIRNAME=`dirname $0`
+ROOT_DIR=`echo $DIRNAME | sed -ne 's:etc/.*::p'`
+
+. ${ROOT_DIR}/etc/default/rcS
+# When running populat-volatile.sh at rootfs time, disable cache.
+[ "$ROOT_DIR" != "/" ] && VOLATILE_ENABLE_CACHE=no
+# If rootfs is read-only, disable cache.
+[ "$ROOTFS_READ_ONLY" = "yes" ] && VOLATILE_ENABLE_CACHE=no
+# All above statements will be moved to a central place, say var.sh which
+# encapsulates '. /etc/default/rcS'. 
+
+CFGDIR="${ROOT_DIR}/etc/default/volatiles"
+TMPROOT="${ROOT_DIR}/var/volatile/tmp"
 COREDEF="00_core"
+COREDEF_READONLY="00_core_readonly"
 
-[ "${VERBOSE}" != "no" ] && echo "Populating volatile Filesystems."
+[ "${VERBOSE}" != "no" ] && echo "Setting up basic files related to volatile storage under ${ROOT_DIR}."
 
 create_file() {
-	EXEC=" 
-	touch \"$1\"; 
-	chown ${TUSER}.${TGROUP} $1 || echo \"Failed to set owner -${TUSER}- for -$1-.\" >/dev/tty0 2>&1; 
-	chmod ${TMODE} $1 || echo \"Failed to set mode -${TMODE}- for -$1-.\" >/dev/tty0 2>&1 " 
+	EXEC="
+	touch \"$1\";
+	chown ${TUSER}.${TGROUP} $1 || echo \"Failed to set owner -${TUSER}- for -$1-.\" > /dev/null 2>&1;
+	chmod ${TMODE} $1 || echo \"Failed to set mode -${TMODE}- for -$1-.\" > /dev/null 2>&1 "
 
 	test "$VOLATILE_ENABLE_CACHE" = yes && echo "$EXEC" >> /etc/volatile.cache.build
 
 	[ -e "$1" ] && {
-	  [ "${VERBOSE}" != "no" ] && echo "Target already exists. Skipping."
+		[ "${VERBOSE}" != "no" ] && echo "Target $1 already exists. Skipping."
 	} || {
-	  eval $EXEC &
+		if [ "$ROOT_DIR" = "/" ]; then
+			eval $EXEC
+		else
+			# Some operations at rootfs time may fail and should fail,
+		        # but these failures should not be logged.
+			eval $EXEC > /dev/null 2>&1
+		fi
 	}
 }
 
 mk_dir() {
 	EXEC=" 
 	mkdir -p \"$1\"; 
-	chown ${TUSER}.${TGROUP} $1 || echo \"Failed to set owner -${TUSER}- for -$1-.\" >/dev/tty0 2>&1; 
-	chmod ${TMODE} $1 || echo \"Failed to set mode -${TMODE}- for -$1-.\" >/dev/tty0 2>&1 "
+	chown ${TUSER}.${TGROUP} $1 || echo \"Failed to set owner -${TUSER}- for -$1-.\" 2>&1; 
+	chmod ${TMODE} $1 || echo \"Failed to set mode -${TMODE}- for -$1-.\" 2>&1 "
 
 	test "$VOLATILE_ENABLE_CACHE" = yes && echo "$EXEC" >> /etc/volatile.cache.build
 	
 	[ -e "$1" ] && {
-	  [ "${VERBOSE}" != "no" ] && echo "Target already exists. Skipping."
+		[ "${VERBOSE}" != "no" ] && echo "Target ${1} already exists. Skipping."
 	} || {
-	  eval $EXEC
+		if [ "$ROOT_DIR" = "/" ]; then
+			eval $EXEC
+		else
+			# Some operations at rootfs time may fail and should fail,
+                        # but these failures should not be logged.
+			eval $EXEC > /dev/null 2>&1
+		fi
 	}
 }
 
 link_file() {
-	EXEC="test -e \"$2\" -o -L $2 || ln -s \"$1\" \"$2\" >/dev/tty0 2>&1" 
-
-	test "$VOLATILE_ENABLE_CACHE" = yes && echo "	$EXEC" >> /etc/volatile.cache.build
-	
-	[ -e "$2" ] && {
-	  echo "Cannot create link over existing -${TNAME}-." >&2
-	} || {
-	  eval $EXEC &
-	}
+	EXEC="
+	if [ -L \"$2\" ]; then
+		[ \"$(readlink -f \"$2\")\" != \"$(readlink -f \"$1\")\" ] && { rm -f \"$2\"; ln -sf \"$1\" \"$2\"; };
+	elif [ -d \"$2\" ]; then
+		rm -rf \"$2\";
+                ln -sf \"$1\" \"$2\";
+        else
+                ln -sf \"$1\" \"$2\";
+	fi
+        "
+        test "$VOLATILE_ENABLE_CACHE" = yes && echo "   $EXEC" >> /etc/volatile.cache.build
+	if [ "$ROOT_DIR" = "/" ]; then
+		eval $EXEC
+	else
+		# Some operations at rootfs time may fail and should fail,
+                # but these failures should not be logged
+		eval $EXEC > /dev/null 2>&1
+	fi
 }
 
 check_requirements() {
+	cleanup() {
+		rm "${TMP_INTERMED}"
+		rm "${TMP_DEFINED}"
+		rm "${TMP_COMBINED}"
+	}
+	
+	CFGFILE="$1"
+	[ `basename "${CFGFILE}"` = "${COREDEF}" ] && return 0
+	# $COREDEF_READONLY conf file should only be applied when rootfs is read-only
+	if [ `basename "${CFGFILE}"` = "${COREDEF_READONLY}" ]; then
+		[ "$ROOTFS_READ_ONLY" = "yes" ] && return 0 || return 1
+	fi
+
+	TMP_INTERMED="${TMPROOT}/tmp.$$"
+	TMP_DEFINED="${TMPROOT}/tmpdefined.$$"
+	TMP_COMBINED="${TMPROOT}/tmpcombined.$$"
+
+	cat ${ROOT_DIR}/etc/passwd | sed 's@\(^:\)*:.*@\1@' | sort | uniq > "${TMP_DEFINED}"
+	cat ${CFGFILE} | grep -v "^#" | cut -d " " -f 2 > "${TMP_INTERMED}"
+	cat "${TMP_DEFINED}" "${TMP_INTERMED}" | sort | uniq > "${TMP_COMBINED}"
+	NR_DEFINED_USERS="`cat "${TMP_DEFINED}" | wc -l`"
+	NR_COMBINED_USERS="`cat "${TMP_COMBINED}" | wc -l`"
+
+	[ "${NR_DEFINED_USERS}" -ne "${NR_COMBINED_USERS}" ] && {
+		echo "Undefined users:"
+		diff "${TMP_DEFINED}" "${TMP_COMBINED}" | grep "^>"
+		cleanup
+		return 1
+	}
 
-  cleanup() {
-    rm "${TMP_INTERMED}"
-    rm "${TMP_DEFINED}"
-    rm "${TMP_COMBINED}"
-    }
-    
-  CFGFILE="$1"
-
-  [ `basename "${CFGFILE}"` = "${COREDEF}" ] && return 0
-
-  TMP_INTERMED="${TMPROOT}/tmp.$$"
-  TMP_DEFINED="${TMPROOT}/tmpdefined.$$"
-  TMP_COMBINED="${TMPROOT}/tmpcombined.$$"
-
-
-  cat /etc/passwd | sed 's@\(^:\)*:.*@\1@' | sort | uniq > "${TMP_DEFINED}"
-  cat ${CFGFILE} | grep -v "^#" | cut -d " " -f 2 > "${TMP_INTERMED}"
-  cat "${TMP_DEFINED}" "${TMP_INTERMED}" | sort | uniq > "${TMP_COMBINED}"
-
-  NR_DEFINED_USERS="`cat "${TMP_DEFINED}" | wc -l`"
-  NR_COMBINED_USERS="`cat "${TMP_COMBINED}" | wc -l`"
-
-  [ "${NR_DEFINED_USERS}" -ne "${NR_COMBINED_USERS}" ] && {
-    echo "Undefined users:"
-    diff "${TMP_DEFINED}" "${TMP_COMBINED}" | grep "^>"
-    cleanup
-    return 1
-    }
-
-
-  cat /etc/group | sed 's@\(^:\)*:.*@\1@' | sort | uniq > "${TMP_DEFINED}"
-  cat ${CFGFILE} | grep -v "^#" | cut -d " " -f 3 > "${TMP_INTERMED}"
-  cat "${TMP_DEFINED}" "${TMP_INTERMED}" | sort | uniq > "${TMP_COMBINED}"
 
-  NR_DEFINED_GROUPS="`cat "${TMP_DEFINED}" | wc -l`"
-  NR_COMBINED_GROUPS="`cat "${TMP_COMBINED}" | wc -l`"
+	cat ${ROOT_DIR}/etc/group | sed 's@\(^:\)*:.*@\1@' | sort | uniq > "${TMP_DEFINED}"
+	cat ${CFGFILE} | grep -v "^#" | cut -d " " -f 3 > "${TMP_INTERMED}"
+	cat "${TMP_DEFINED}" "${TMP_INTERMED}" | sort | uniq > "${TMP_COMBINED}"
 
-  [ "${NR_DEFINED_GROUPS}" -ne "${NR_COMBINED_GROUPS}" ] && {
-    echo "Undefined groups:"
-    diff "${TMP_DEFINED}" "${TMP_COMBINED}" | grep "^>"
-    cleanup
-    return 1
-    }
+	NR_DEFINED_GROUPS="`cat "${TMP_DEFINED}" | wc -l`"
+	NR_COMBINED_GROUPS="`cat "${TMP_COMBINED}" | wc -l`"
 
-  # Add checks for required directories here
+	[ "${NR_DEFINED_GROUPS}" -ne "${NR_COMBINED_GROUPS}" ] && {
+		echo "Undefined groups:"
+		diff "${TMP_DEFINED}" "${TMP_COMBINED}" | grep "^>"
+		cleanup
+		return 1
+	}
 
-  cleanup
-  return 0
-  }
+	cleanup
+	return 0
+}
 
 apply_cfgfile() {
+	CFGFILE="$1"
+	[ ${VERBOSE} != "no" ] && echo "Applying config file: $CFGFILE"
+	
+	check_requirements "${CFGFILE}" || {
+		echo "Skipping ${CFGFILE}"
+		return 1
+	}
+
+	cat ${CFGFILE} | grep -v "^#" | sed -e '/^$/ d' | \
+		while read LINE; do
+		eval `echo "$LINE" | sed -n "s/\(.*\)\ \(.*\) \(.*\)\ \(.*\)\ \(.*\)\ \(.*\)/TTYPE=\1 ; TUSER=\2; TGROUP=\3; TMODE=\4; TNAME=\5 TLTARGET=\6/p"`
+		TNAME=${ROOT_DIR}/${TNAME}
+		[ "${VERBOSE}" != "no" ] && echo "Checking for -${TNAME}-."
+
+		[ "${TTYPE}" = "l" ] && {
+			TSOURCE="$TLTARGET"
+			[ "${VERBOSE}" != "no" ] && echo "Creating link -${TNAME}- pointing to -${TSOURCE}-."
+			link_file "${TSOURCE}" "${TNAME}"
+			continue
+		}
+		case "${TTYPE}" in
+			"f")  [ "${VERBOSE}" != "no" ] && echo "Creating file -${TNAME}-."
+				create_file "${TNAME}"
+				;;
+			"d")  [ "${VERBOSE}" != "no" ] && echo "Creating directory -${TNAME}-."
+				mk_dir "${TNAME}"
+				;;
+			*)    [ "${VERBOSE}" != "no" ] && echo "Invalid type -${TTYPE}-."
+				continue
+				;;
+		esac
+	done
+	return 0
+}
 
-  CFGFILE="$1"
-
-  check_requirements "${CFGFILE}" || {
-    echo "Skipping ${CFGFILE}"
-    return 1
-    }
-
-  cat ${CFGFILE} | grep -v "^#" | \
-  while read LINE; do
-
-    eval `echo "$LINE" | sed -n "s/\(.*\)\ \(.*\) \(.*\)\ \(.*\)\ \(.*\)\ \(.*\)/TTYPE=\1 ; TUSER=\2; TGROUP=\3; TMODE=\4; TNAME=\5 TLTARGET=\6/p"`
-
-    [ "${VERBOSE}" != "no" ] && echo "Checking for -${TNAME}-."
-
-
-    [ "${TTYPE}" = "l" ] && {
-      TSOURCE="$TLTARGET"
-      [ -L "${TNAME}" ] || {
-        [ "${VERBOSE}" != "no" ] && echo "Creating link -${TNAME}- pointing to -${TSOURCE}-."
-        link_file "${TSOURCE}" "${TNAME}" &
-        }
-      continue
-      }
-
-    [ -L "${TNAME}" ] && {
-      [ "${VERBOSE}" != "no" ] && echo "Found link."
-      NEWNAME=`ls -l "${TNAME}" | sed -e 's/^.*-> \(.*\)$/\1/'`
-      echo ${NEWNAME} | grep -v "^/" >/dev/null && {
-        TNAME="`echo ${TNAME} | sed -e 's@\(.*\)/.*@\1@'`/${NEWNAME}"
-        [ "${VERBOSE}" != "no" ] && echo "Converted relative linktarget to absolute path -${TNAME}-."
-        } || {
-        TNAME="${NEWNAME}"
-        [ "${VERBOSE}" != "no" ] && echo "Using absolute link target -${TNAME}-."
-        }
-      }
-
-    case "${TTYPE}" in
-      "f")  [ "${VERBOSE}" != "no" ] && echo "Creating file -${TNAME}-."
-            create_file "${TNAME}" &
-	    ;;
-      "d")  [ "${VERBOSE}" != "no" ] && echo "Creating directory -${TNAME}-."
-            mk_dir "${TNAME}"
-	    # Add check to see if there's an entry in fstab to mount.
-	    ;;
-      *)    [ "${VERBOSE}" != "no" ] && echo "Invalid type -${TTYPE}-."
-            continue
-	    ;;
-    esac
-
-
-    done
-
-  return 0
-
-  }
-
-clearcache=0
-exec 9</proc/cmdline
-while read line <&9
-do
-	case "$line" in
-		*clearcache*)  clearcache=1
-			       ;;
-		*)	       continue
-			       ;;
-	esac
-done
-exec 9>&-
-
-if test -e /etc/volatile.cache -a "$VOLATILE_ENABLE_CACHE" = "yes" -a "x$1" != "xupdate" -a "x$clearcache" = "x0"
+if test -e ${ROOT_DIR}/etc/volatile.cache -a $VOLATILE_ENABLE_CACHE = yes -a x$1 != xupdate
 then
-	sh /etc/volatile.cache
+	sh ${ROOT_DIR}/etc/volatile.cache
 else	
-	rm -f /etc/volatile.cache /etc/volatile.cache.build
+	rm -f ${ROOT_DRI}/etc/volatile.cache ${ROOT_DIR}/etc/volatile.cache.build
 	for file in `ls -1 "${CFGDIR}" | sort`; do
 		apply_cfgfile "${CFGDIR}/${file}"
 	done
 
-	[ -e /etc/volatile.cache.build ] && sync && mv /etc/volatile.cache.build /etc/volatile.cache
+	[ -e ${ROOT_DIR}/etc/volatile.cache.build ] && sync && mv ${ROOT_DIR}/etc/volatile.cache.build ${ROOT_DIR}/etc/volatile.cache
 fi
 
-if test -f /etc/ld.so.cache -a ! -f /var/run/ld.so.cache
+if [ "${ROOT_DIR}" = "/" ] && [ -f /etc/ld.so.cache ] && [ ! -f /var/run/ld.so.cache ]
 then
 	ln -s /etc/ld.so.cache /var/run/ld.so.cache
 fi
diff --git a/meta/recipes-core/initscripts/initscripts-1.0/volatiles b/meta/recipes-core/initscripts/initscripts-1.0/volatiles
index e0741aa..f7e2ef7 100644
--- a/meta/recipes-core/initscripts/initscripts-1.0/volatiles
+++ b/meta/recipes-core/initscripts/initscripts-1.0/volatiles
@@ -31,6 +31,7 @@ l root root 1777 /var/lock /var/volatile/lock
 l root root 0755 /var/log /var/volatile/log
 l root root 0755 /var/run /var/volatile/run
 l root root 1777 /var/tmp /var/volatile/tmp
+l root root 1777 /tmp /var/tmp
 d root root 0755 /var/lock/subsys none
 f root root 0664 /var/log/wtmp none
 f root root 0664 /var/run/utmp none
diff --git a/meta/recipes-core/initscripts/initscripts_1.0.bb b/meta/recipes-core/initscripts/initscripts_1.0.bb
index 6e15f88..df23d28 100644
--- a/meta/recipes-core/initscripts/initscripts_1.0.bb
+++ b/meta/recipes-core/initscripts/initscripts_1.0.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "Initscripts provide the basic system startup initialization scrip
 SECTION = "base"
 LICENSE = "GPLv2"
 LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
-PR = "r139"
+PR = "r140"
 
 INHIBIT_DEFAULT_DEPS = "1"
 
-- 
1.7.9.5




^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH V8 5/6] volatile-conf-minimal: add recipe
  2013-01-22  6:36 [PATCH V8 0/6] read-only rootfs support Qi.Chen
                   ` (3 preceding siblings ...)
  2013-01-22  6:36 ` [PATCH V8 4/6] initscripts: " Qi.Chen
@ 2013-01-22  6:36 ` Qi.Chen
  2013-01-22 22:57   ` Saul Wold
  2013-01-22  6:36 ` [PATCH V8 6/6] volatile-conf-sato: " Qi.Chen
  5 siblings, 1 reply; 13+ messages in thread
From: Qi.Chen @ 2013-01-22  6:36 UTC (permalink / raw)
  To: openembedded-core; +Cc: Zhenfeng.Zhao

From: Chen Qi <Qi.Chen@windriver.com>

This recipe provides a config file for core-image-minimal.
This config file is used for volatile storage handling in case of a
readonly rootfs.

Also, let core-image-minimal depend on this recipe.

[YOCTO #3406]

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
---
 meta/recipes-core/images/core-image-minimal.bb     |    3 +++
 .../files/volatiles-readonly-minimal               |    8 ++++++++
 .../volatile-conf-minimal_1.0.bb                   |   15 +++++++++++++++
 3 files changed, 26 insertions(+)
 create mode 100644 meta/recipes-core/readonly-volatile-conf/files/volatiles-readonly-minimal
 create mode 100644 meta/recipes-core/readonly-volatile-conf/volatile-conf-minimal_1.0.bb

diff --git a/meta/recipes-core/images/core-image-minimal.bb b/meta/recipes-core/images/core-image-minimal.bb
index 0d2613e..f6baeae 100644
--- a/meta/recipes-core/images/core-image-minimal.bb
+++ b/meta/recipes-core/images/core-image-minimal.bb
@@ -6,6 +6,9 @@ IMAGE_LINGUAS = " "
 
 LICENSE = "MIT"
 
+RDEPENDS += "volatile-conf-minimal"
+IMAGE_INSTALL += "volatile-conf-minimal"
+
 inherit core-image
 
 IMAGE_ROOTFS_SIZE = "8192"
diff --git a/meta/recipes-core/readonly-volatile-conf/files/volatiles-readonly-minimal b/meta/recipes-core/readonly-volatile-conf/files/volatiles-readonly-minimal
new file mode 100644
index 0000000..b7146a2
--- /dev/null
+++ b/meta/recipes-core/readonly-volatile-conf/files/volatiles-readonly-minimal
@@ -0,0 +1,8 @@
+# This configuration file lists filesystem objects specific to minimal image
+# with read-only rootfs.
+# This configuration file will only be applied if the image is minimal and the
+# rootfs is read-only.
+# For the detailed format information, refer to /etc/default/volatiles/00_core.
+d root root 0755 /var/volatile/lib/ none
+d root root 0755 /var/volatile/lib/urandom/ none
+l root root 0755 /var/lib/urandom /var/volatile/lib/urandom
diff --git a/meta/recipes-core/readonly-volatile-conf/volatile-conf-minimal_1.0.bb b/meta/recipes-core/readonly-volatile-conf/volatile-conf-minimal_1.0.bb
new file mode 100644
index 0000000..c5744e1
--- /dev/null
+++ b/meta/recipes-core/readonly-volatile-conf/volatile-conf-minimal_1.0.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Provide config files for core-image-minimal"
+DESCRIPTION = "This package contains a config file for core-image-minimal. \
+It is used to handle volatile storage in case of a read-only rootfs."
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+SRC_URI = "file://volatiles-readonly-minimal"
+
+PR = "r1"
+
+do_install () {
+	install -d ${D}${sysconfdir}/default/volatiles
+	install -m 0644 ${WORKDIR}/volatiles-readonly-minimal ${D}${sysconfdir}/default/volatiles/00_core_readonly
+}
-- 
1.7.9.5




^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH V8 6/6] volatile-conf-sato: add recipe
  2013-01-22  6:36 [PATCH V8 0/6] read-only rootfs support Qi.Chen
                   ` (4 preceding siblings ...)
  2013-01-22  6:36 ` [PATCH V8 5/6] volatile-conf-minimal: add recipe Qi.Chen
@ 2013-01-22  6:36 ` Qi.Chen
  5 siblings, 0 replies; 13+ messages in thread
From: Qi.Chen @ 2013-01-22  6:36 UTC (permalink / raw)
  To: openembedded-core; +Cc: Zhenfeng.Zhao

From: Chen Qi <Qi.Chen@windriver.com>

This recipe provides a config file for core-image-sato.
The config file is used to handle volatile storage in case of a
read-only-rootfs image.

Also, let core-image-sato.bb depend on this recipe.

[YOCTO #3406]

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
---
 meta/recipes-sato/images/core-image-sato.bb        |    3 +++
 .../files/volatiles-readonly-sato                  |   14 ++++++++++++++
 .../volatile-conf-sato_1.0.bb                      |   15 +++++++++++++++
 3 files changed, 32 insertions(+)
 create mode 100644 meta/recipes-sato/readonly-volatile-conf/files/volatiles-readonly-sato
 create mode 100644 meta/recipes-sato/readonly-volatile-conf/volatile-conf-sato_1.0.bb

diff --git a/meta/recipes-sato/images/core-image-sato.bb b/meta/recipes-sato/images/core-image-sato.bb
index f52a1a5..8aaeaf8 100644
--- a/meta/recipes-sato/images/core-image-sato.bb
+++ b/meta/recipes-sato/images/core-image-sato.bb
@@ -6,6 +6,9 @@ IMAGE_FEATURES += "splash package-management x11-base x11-sato ssh-server-dropbe
 
 LICENSE = "MIT"
 
+RDEPENDS += "volatile-conf-sato"
+IMAGE_INSTALL += "volatile-conf-sato"
+
 inherit core-image
 
 IMAGE_INSTALL += "packagegroup-core-x11-sato-games"
diff --git a/meta/recipes-sato/readonly-volatile-conf/files/volatiles-readonly-sato b/meta/recipes-sato/readonly-volatile-conf/files/volatiles-readonly-sato
new file mode 100644
index 0000000..4a56b81
--- /dev/null
+++ b/meta/recipes-sato/readonly-volatile-conf/files/volatiles-readonly-sato
@@ -0,0 +1,14 @@
+# This configuration file lists filesystem objects specific to sato image
+# with read-only rootfs.
+# This configuration file will only be applied if the image is sato and the
+# rootfs is read-only.
+# For the detailed format information, refer to /etc/default/volatiles/00_core.
+d root root 0755 /var/volatile/lib/ none
+d root root 0755 /var/volatile/lib/urandom/ none
+d root root 0755 /var/volatile/lib/dropbear/ none
+d root root 0755 /var/volatile/lib/nfs/ none
+d root root 0755 /var/volatile/lib/dbus/ none
+l root root 0755 /var/lib/urandom /var/volatile/lib/urandom
+l root root 0755 /var/lib/dropbear /var/volatile/lib/dropbear
+l root root 0755 /var/lib/nfs /var/volatile/lib/nfs
+l root root 0755 /var/lib/dbus /var/volatile/lib/dbus
diff --git a/meta/recipes-sato/readonly-volatile-conf/volatile-conf-sato_1.0.bb b/meta/recipes-sato/readonly-volatile-conf/volatile-conf-sato_1.0.bb
new file mode 100644
index 0000000..acc8901
--- /dev/null
+++ b/meta/recipes-sato/readonly-volatile-conf/volatile-conf-sato_1.0.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Provide config files for core-image-sato"
+DESCRIPTION = "This package contains a config file for core-image-sato. \
+It is used to handle volatile storage in case of a read-only rootfs."
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+SRC_URI = "file://volatiles-readonly-sato"
+
+PR = "r1"
+
+do_install () {
+	install -d ${D}${sysconfdir}/default/volatiles
+	install -m 0644 ${WORKDIR}/volatiles-readonly-sato ${D}${sysconfdir}/default/volatiles/00_core_readonly
+}
-- 
1.7.9.5




^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH V8 2/6] image.bbclass: add a hook funtion to support readonly rootfs
  2013-01-22  6:36 ` [PATCH V8 2/6] image.bbclass: add a hook funtion to support readonly rootfs Qi.Chen
@ 2013-01-22 18:17   ` Mike Looijmans
  2013-01-23  6:07     ` ChenQi
  0 siblings, 1 reply; 13+ messages in thread
From: Mike Looijmans @ 2013-01-22 18:17 UTC (permalink / raw)
  To: openembedded-core

On 01/22/2013 07:36 AM, Qi.Chen@windriver.com wrote:
> From: Chen Qi <Qi.Chen@windriver.com>
>
> read_only_rootfs_hook: this funtion is invoked only if 'read-only-rootfs'
> is in IMAGE_FEATURES. It tweaks some basic files and makes populate-
> volatile.sh script run at rootfs time.

To me, it seems running populate-volatile at rootfs is a good thing for 
writable rootfs as well, it reduces the writing at first boot. Why not 
ALWAYS do this?

-- 
Mike Looijmans - Topic Automation



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH V8 5/6] volatile-conf-minimal: add recipe
  2013-01-22  6:36 ` [PATCH V8 5/6] volatile-conf-minimal: add recipe Qi.Chen
@ 2013-01-22 22:57   ` Saul Wold
  2013-01-23  3:24     ` ChenQi
  0 siblings, 1 reply; 13+ messages in thread
From: Saul Wold @ 2013-01-22 22:57 UTC (permalink / raw)
  To: Qi.Chen; +Cc: Zhenfeng.Zhao, openembedded-core

On 01/21/2013 10:36 PM, Qi.Chen@windriver.com wrote:
> From: Chen Qi <Qi.Chen@windriver.com>
>
> This recipe provides a config file for core-image-minimal.
> This config file is used for volatile storage handling in case of a
> readonly rootfs.
>
> Also, let core-image-minimal depend on this recipe.
>
> [YOCTO #3406]
>
> Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
> ---
>   meta/recipes-core/images/core-image-minimal.bb     |    3 +++
>   .../files/volatiles-readonly-minimal               |    8 ++++++++
>   .../volatile-conf-minimal_1.0.bb                   |   15 +++++++++++++++
>   3 files changed, 26 insertions(+)
>   create mode 100644 meta/recipes-core/readonly-volatile-conf/files/volatiles-readonly-minimal
>   create mode 100644 meta/recipes-core/readonly-volatile-conf/volatile-conf-minimal_1.0.bb
>
> diff --git a/meta/recipes-core/images/core-image-minimal.bb b/meta/recipes-core/images/core-image-minimal.bb
> index 0d2613e..f6baeae 100644
> --- a/meta/recipes-core/images/core-image-minimal.bb
> +++ b/meta/recipes-core/images/core-image-minimal.bb
> @@ -6,6 +6,9 @@ IMAGE_LINGUAS = " "
>
>   LICENSE = "MIT"
>
> +RDEPENDS += "volatile-conf-minimal"
This needs to be RDEPENDS_${PN}

> +IMAGE_INSTALL += "volatile-conf-minimal"
> +
I am still digging into this idea of having a image specific volatile 
package, RP is not wild about it either.  What's different now from 
before is the minimal version cut down from the orignal version?  Is 
there any reason we can't use a larger volatile conf?

Sau!

>   inherit core-image
>
>   IMAGE_ROOTFS_SIZE = "8192"
> diff --git a/meta/recipes-core/readonly-volatile-conf/files/volatiles-readonly-minimal b/meta/recipes-core/readonly-volatile-conf/files/volatiles-readonly-minimal
> new file mode 100644
> index 0000000..b7146a2
> --- /dev/null
> +++ b/meta/recipes-core/readonly-volatile-conf/files/volatiles-readonly-minimal
> @@ -0,0 +1,8 @@
> +# This configuration file lists filesystem objects specific to minimal image
> +# with read-only rootfs.
> +# This configuration file will only be applied if the image is minimal and the
> +# rootfs is read-only.
> +# For the detailed format information, refer to /etc/default/volatiles/00_core.
> +d root root 0755 /var/volatile/lib/ none
> +d root root 0755 /var/volatile/lib/urandom/ none
> +l root root 0755 /var/lib/urandom /var/volatile/lib/urandom
> diff --git a/meta/recipes-core/readonly-volatile-conf/volatile-conf-minimal_1.0.bb b/meta/recipes-core/readonly-volatile-conf/volatile-conf-minimal_1.0.bb
> new file mode 100644
> index 0000000..c5744e1
> --- /dev/null
> +++ b/meta/recipes-core/readonly-volatile-conf/volatile-conf-minimal_1.0.bb
> @@ -0,0 +1,15 @@
> +SUMMARY = "Provide config files for core-image-minimal"
> +DESCRIPTION = "This package contains a config file for core-image-minimal. \
> +It is used to handle volatile storage in case of a read-only rootfs."
> +
> +LICENSE = "MIT"
> +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
> +
> +SRC_URI = "file://volatiles-readonly-minimal"
> +
> +PR = "r1"
> +
> +do_install () {
> +	install -d ${D}${sysconfdir}/default/volatiles
> +	install -m 0644 ${WORKDIR}/volatiles-readonly-minimal ${D}${sysconfdir}/default/volatiles/00_core_readonly
> +}
>



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH V8 5/6] volatile-conf-minimal: add recipe
  2013-01-22 22:57   ` Saul Wold
@ 2013-01-23  3:24     ` ChenQi
  2013-01-23  4:20       ` Saul Wold
  0 siblings, 1 reply; 13+ messages in thread
From: ChenQi @ 2013-01-23  3:24 UTC (permalink / raw)
  To: Saul Wold; +Cc: Zhenfeng.Zhao, openembedded-core

On 01/23/2013 06:57 AM, Saul Wold wrote:
> On 01/21/2013 10:36 PM, Qi.Chen@windriver.com wrote:
>> From: Chen Qi <Qi.Chen@windriver.com>
>>
>> This recipe provides a config file for core-image-minimal.
>> This config file is used for volatile storage handling in case of a
>> readonly rootfs.
>>
>> Also, let core-image-minimal depend on this recipe.
>>
>> [YOCTO #3406]
>>
>> Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
>> ---
>>   meta/recipes-core/images/core-image-minimal.bb     |    3 +++
>>   .../files/volatiles-readonly-minimal               |    8 ++++++++
>>   .../volatile-conf-minimal_1.0.bb                   |   15 
>> +++++++++++++++
>>   3 files changed, 26 insertions(+)
>>   create mode 100644 
>> meta/recipes-core/readonly-volatile-conf/files/volatiles-readonly-minimal
>>   create mode 100644 
>> meta/recipes-core/readonly-volatile-conf/volatile-conf-minimal_1.0.bb
>>
>> diff --git a/meta/recipes-core/images/core-image-minimal.bb 
>> b/meta/recipes-core/images/core-image-minimal.bb
>> index 0d2613e..f6baeae 100644
>> --- a/meta/recipes-core/images/core-image-minimal.bb
>> +++ b/meta/recipes-core/images/core-image-minimal.bb
>> @@ -6,6 +6,9 @@ IMAGE_LINGUAS = " "
>>
>>   LICENSE = "MIT"
>>
>> +RDEPENDS += "volatile-conf-minimal"
> This needs to be RDEPENDS_${PN}
>
>> +IMAGE_INSTALL += "volatile-conf-minimal"
>> +
> I am still digging into this idea of having a image specific volatile 
> package, RP is not wild about it either.  What's different now from 
> before is the minimal version cut down from the orignal version?  Is 
> there any reason we can't use a larger volatile conf?
>
> Sau!
>
Hi Saul,

I thought about this, but didn't dig deep into it because I thought one 
conf file for one image would be clearer.
On a second thought, maybe we could use a config file like below.

<pkg1>
readonly specific config items for pkg1
</pkg1>

<pkg2>
readonly specific config items for pkg2
</pkg2>

....
(Let's denote it as the original config file.)

In this way, all config items are centred into one place.
And the strategy would be like:
1. get a list of pkgs that are to be installed on target
     L = [pkg1, pkg2, ..., pkgn]
2. original config file -- [select items according to L] --> final 
config file
     The selecting procedure is simply something like:
      for pkg in $pkgs; do cat origin | sed -ne "/<$pkg>/,/<\/$pkg>/ { 
/<$pkg>/n; /<\/$pkg>/n; p; }" ; done > final
     The final config file should look like the ones that we use for now 
so that we can still use populate-volatile.sh to create the dirs and links.
3. Parse the final config file with populate-volatile.sh to create the 
proper directories and links.

The problem is that I don't know how to get the pkg list.
Could somebody help me?

What do you think about this strategy?

Cheers,
Chen Qi







^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH V8 5/6] volatile-conf-minimal: add recipe
  2013-01-23  3:24     ` ChenQi
@ 2013-01-23  4:20       ` Saul Wold
  2013-01-23  4:52         ` ChenQi
  0 siblings, 1 reply; 13+ messages in thread
From: Saul Wold @ 2013-01-23  4:20 UTC (permalink / raw)
  To: ChenQi; +Cc: Zhenfeng.Zhao, openembedded-core

On 01/22/2013 07:24 PM, ChenQi wrote:
> On 01/23/2013 06:57 AM, Saul Wold wrote:
>> On 01/21/2013 10:36 PM, Qi.Chen@windriver.com wrote:
>>> From: Chen Qi <Qi.Chen@windriver.com>
>>>
>>> This recipe provides a config file for core-image-minimal.
>>> This config file is used for volatile storage handling in case of a
>>> readonly rootfs.
>>>
>>> Also, let core-image-minimal depend on this recipe.
>>>
>>> [YOCTO #3406]
>>>
>>> Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
>>> ---
>>>   meta/recipes-core/images/core-image-minimal.bb     |    3 +++
>>>   .../files/volatiles-readonly-minimal               |    8 ++++++++
>>>   .../volatile-conf-minimal_1.0.bb                   |   15
>>> +++++++++++++++
>>>   3 files changed, 26 insertions(+)
>>>   create mode 100644
>>> meta/recipes-core/readonly-volatile-conf/files/volatiles-readonly-minimal
>>>
>>>   create mode 100644
>>> meta/recipes-core/readonly-volatile-conf/volatile-conf-minimal_1.0.bb
>>>
>>> diff --git a/meta/recipes-core/images/core-image-minimal.bb
>>> b/meta/recipes-core/images/core-image-minimal.bb
>>> index 0d2613e..f6baeae 100644
>>> --- a/meta/recipes-core/images/core-image-minimal.bb
>>> +++ b/meta/recipes-core/images/core-image-minimal.bb
>>> @@ -6,6 +6,9 @@ IMAGE_LINGUAS = " "
>>>
>>>   LICENSE = "MIT"
>>>
>>> +RDEPENDS += "volatile-conf-minimal"
>> This needs to be RDEPENDS_${PN}
>>
>>> +IMAGE_INSTALL += "volatile-conf-minimal"
>>> +
>> I am still digging into this idea of having a image specific volatile
>> package, RP is not wild about it either.  What's different now from
>> before is the minimal version cut down from the orignal version?  Is
>> there any reason we can't use a larger volatile conf?
>>
>> Sau!
>>
> Hi Saul,
>
> I thought about this, but didn't dig deep into it because I thought one
> conf file for one image would be clearer.
> On a second thought, maybe we could use a config file like below.
>
> <pkg1>
> readonly specific config items for pkg1
> </pkg1>
>
> <pkg2>
> readonly specific config items for pkg2
> </pkg2>
>
> ....
> (Let's denote it as the original config file.)
>
> In this way, all config items are centred into one place.
> And the strategy would be like:
> 1. get a list of pkgs that are to be installed on target
>      L = [pkg1, pkg2, ..., pkgn]
> 2. original config file -- [select items according to L] --> final
> config file
>      The selecting procedure is simply something like:
>       for pkg in $pkgs; do cat origin | sed -ne "/<$pkg>/,/<\/$pkg>/ {
> /<$pkg>/n; /<\/$pkg>/n; p; }" ; done > final
>      The final config file should look like the ones that we use for now
> so that we can still use populate-volatile.sh to create the dirs and links.
> 3. Parse the final config file with populate-volatile.sh to create the
> proper directories and links.
>
> The problem is that I don't know how to get the pkg list.
> Could somebody help me?
>
> What do you think about this strategy?
>
Hmm, once you put it this way, another thought came to mind we could 
create a volatile class similar to update-rc.d or useradd where we 
specify the a VOLATILE_PKGS, VOLATILE_DIR, VOLATILE_LINK in  the 
appropriate recipes directly and then inherit the volatile class.

Thoughts?

Sau!

> Cheers,
> Chen Qi
>
>
>
>
>
>



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH V8 5/6] volatile-conf-minimal: add recipe
  2013-01-23  4:20       ` Saul Wold
@ 2013-01-23  4:52         ` ChenQi
  0 siblings, 0 replies; 13+ messages in thread
From: ChenQi @ 2013-01-23  4:52 UTC (permalink / raw)
  To: Saul Wold; +Cc: Zhenfeng.Zhao, openembedded-core

On 01/23/2013 12:20 PM, Saul Wold wrote:
> On 01/22/2013 07:24 PM, ChenQi wrote:
>> On 01/23/2013 06:57 AM, Saul Wold wrote:
>>> On 01/21/2013 10:36 PM, Qi.Chen@windriver.com wrote:
>>>> From: Chen Qi <Qi.Chen@windriver.com>
>>>>
>>>> This recipe provides a config file for core-image-minimal.
>>>> This config file is used for volatile storage handling in case of a
>>>> readonly rootfs.
>>>>
>>>> Also, let core-image-minimal depend on this recipe.
>>>>
>>>> [YOCTO #3406]
>>>>
>>>> Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
>>>> ---
>>>>   meta/recipes-core/images/core-image-minimal.bb     |    3 +++
>>>>   .../files/volatiles-readonly-minimal               |    8 ++++++++
>>>>   .../volatile-conf-minimal_1.0.bb                   |   15
>>>> +++++++++++++++
>>>>   3 files changed, 26 insertions(+)
>>>>   create mode 100644
>>>> meta/recipes-core/readonly-volatile-conf/files/volatiles-readonly-minimal 
>>>>
>>>>
>>>>   create mode 100644
>>>> meta/recipes-core/readonly-volatile-conf/volatile-conf-minimal_1.0.bb
>>>>
>>>> diff --git a/meta/recipes-core/images/core-image-minimal.bb
>>>> b/meta/recipes-core/images/core-image-minimal.bb
>>>> index 0d2613e..f6baeae 100644
>>>> --- a/meta/recipes-core/images/core-image-minimal.bb
>>>> +++ b/meta/recipes-core/images/core-image-minimal.bb
>>>> @@ -6,6 +6,9 @@ IMAGE_LINGUAS = " "
>>>>
>>>>   LICENSE = "MIT"
>>>>
>>>> +RDEPENDS += "volatile-conf-minimal"
>>> This needs to be RDEPENDS_${PN}
>>>
>>>> +IMAGE_INSTALL += "volatile-conf-minimal"
>>>> +
>>> I am still digging into this idea of having a image specific volatile
>>> package, RP is not wild about it either.  What's different now from
>>> before is the minimal version cut down from the orignal version?  Is
>>> there any reason we can't use a larger volatile conf?
>>>
>>> Sau!
>>>
>> Hi Saul,
>>
>> I thought about this, but didn't dig deep into it because I thought one
>> conf file for one image would be clearer.
>> On a second thought, maybe we could use a config file like below.
>>
>> <pkg1>
>> readonly specific config items for pkg1
>> </pkg1>
>>
>> <pkg2>
>> readonly specific config items for pkg2
>> </pkg2>
>>
>> ....
>> (Let's denote it as the original config file.)
>>
>> In this way, all config items are centred into one place.
>> And the strategy would be like:
>> 1. get a list of pkgs that are to be installed on target
>>      L = [pkg1, pkg2, ..., pkgn]
>> 2. original config file -- [select items according to L] --> final
>> config file
>>      The selecting procedure is simply something like:
>>       for pkg in $pkgs; do cat origin | sed -ne "/<$pkg>/,/<\/$pkg>/ {
>> /<$pkg>/n; /<\/$pkg>/n; p; }" ; done > final
>>      The final config file should look like the ones that we use for now
>> so that we can still use populate-volatile.sh to create the dirs and 
>> links.
>> 3. Parse the final config file with populate-volatile.sh to create the
>> proper directories and links.
>>
>> The problem is that I don't know how to get the pkg list.
>> Could somebody help me?
>>
>> What do you think about this strategy?
>>
> Hmm, once you put it this way, another thought came to mind we could 
> create a volatile class similar to update-rc.d or useradd where we 
> specify the a VOLATILE_PKGS, VOLATILE_DIR, VOLATILE_LINK in  the 
> appropriate recipes directly and then inherit the volatile class.
>
> Thoughts?
>

Good idea! It's cleaner and more manageable.
I'll investigate this idea more and try it out :)

Thanks,
Chen Qi

> Sau!
>
>> Cheers,
>> Chen Qi
>>
>>
>>
>>
>>
>>
>
>




^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH V8 2/6] image.bbclass: add a hook funtion to support readonly rootfs
  2013-01-22 18:17   ` Mike Looijmans
@ 2013-01-23  6:07     ` ChenQi
  0 siblings, 0 replies; 13+ messages in thread
From: ChenQi @ 2013-01-23  6:07 UTC (permalink / raw)
  To: openembedded-core

On 01/23/2013 02:17 AM, Mike Looijmans wrote:
> On 01/22/2013 07:36 AM, Qi.Chen@windriver.com wrote:
>> From: Chen Qi <Qi.Chen@windriver.com>
>>
>> read_only_rootfs_hook: this funtion is invoked only if 
>> 'read-only-rootfs'
>> is in IMAGE_FEATURES. It tweaks some basic files and makes populate-
>> volatile.sh script run at rootfs time.
>
> To me, it seems running populate-volatile at rootfs is a good thing 
> for writable rootfs as well, it reduces the writing at first boot. Why 
> not ALWAYS do this?
>
Hi Mike,

The reason I didn't make it *always* run at rootfs is that it's not 
*necessary*.
Besides, I want to encapsulate all all necessary tweaks at rootfs time 
into one function -- read-only-rootfs-hook.
In this way, I can ensure that it doesn't mess up with other components.

Thanks,
Chen Qi



^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2013-01-23  6:22 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-22  6:36 [PATCH V8 0/6] read-only rootfs support Qi.Chen
2013-01-22  6:36 ` [PATCH V8 1/6] sysvinit: add ROOTFS_READ_ONLY variable to rcS-default Qi.Chen
2013-01-22  6:36 ` [PATCH V8 2/6] image.bbclass: add a hook funtion to support readonly rootfs Qi.Chen
2013-01-22 18:17   ` Mike Looijmans
2013-01-23  6:07     ` ChenQi
2013-01-22  6:36 ` [PATCH V8 3/6] core-image.bbclass: support read-only rootfs Qi.Chen
2013-01-22  6:36 ` [PATCH V8 4/6] initscripts: " Qi.Chen
2013-01-22  6:36 ` [PATCH V8 5/6] volatile-conf-minimal: add recipe Qi.Chen
2013-01-22 22:57   ` Saul Wold
2013-01-23  3:24     ` ChenQi
2013-01-23  4:20       ` Saul Wold
2013-01-23  4:52         ` ChenQi
2013-01-22  6:36 ` [PATCH V8 6/6] volatile-conf-sato: " Qi.Chen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox