Patchwork [V5,2/4] image.bbclass: add two hook funtions

login
register
mail settings
Submitter Qi.Chen@windriver.com
Date Dec. 31, 2012, 2:16 a.m.
Message ID <b809c41a8171f0b113f4f6dd506d52ee0e18cd3d.1356919994.git.Qi.Chen@windriver.com>
Download mbox | patch
Permalink /patch/41809/
State New
Headers show

Comments

Qi.Chen@windriver.com - Dec. 31, 2012, 2:16 a.m.
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.

choose_volatile_conf_file: this function is invoked no matter
'read-only-rootfs' is in IMAGE_FEATURES or not, it properly chooses
the right conf file for volatile storage handling according to the
IMAGE_FEATURES.

[YOCTO #3406]

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
---
 meta/classes/image.bbclass |   30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)
Otavio Salvador - Jan. 1, 2013, 6:12 p.m.
On Mon, Dec 31, 2012 at 12:16 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.
>
> choose_volatile_conf_file: this function is invoked no matter
> 'read-only-rootfs' is in IMAGE_FEATURES or not, it properly chooses
> the right conf file for volatile storage handling according to the
> IMAGE_FEATURES.
>
> [YOCTO #3406]
>
> Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
> ---
>  meta/classes/image.bbclass |   30 ++++++++++++++++++++++++++++++
>  1 file changed, 30 insertions(+)
>
> diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
> index d3a416d..57bd0e3 100644
> --- a/meta/classes/image.bbclass
> +++ b/meta/classes/image.bbclass
> @@ -396,6 +396,36 @@ zap_root_password () {
>         mv ${IMAGE_ROOTFS}/etc/passwd.new ${IMAGE_ROOTFS}/etc/passwd
>  }
>
> +# A hook function to support read-only-rootfs IMAGE_FEATURES
> +read_only_rootfs_hook () {
> +       # Tweak the mount option in fstab
> +       sed -i '/rootfs/ s/defaults/ro/' ${IMAGE_ROOTFS}/etc/fstab

Maybe use 'defaults,ro' in 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
> +}
> +
> +# Choose the correct config file for volatile storage handling according to the image type
> +choose_volatile_conf_file () {
> +       if ${@base_contains("IMAGE_FEATURES", "x11-sato", "true", "false" ,d)}; then
> +               if [ -e ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-sato ]; then
> +                       cp ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-sato \
> +                               ${IMAGE_ROOTFS}/etc/default/volatiles/00_core_readonly
> +               fi
> +       else
> +               if [ -e ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-minimal ]; then
> +                       cp ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-minimal \
> +                               ${IMAGE_ROOTFS}/etc/default/volatiles/00_core_readonly
> +               fi
> +       fi

Wouldn't be better to have a package which provides the need valatile
config? this makes it easy to reuse for other images.

> +}
> +
>  # allow openssh accept login with empty password string
>  openssh_allow_empty_password () {
>         if [ -e ${IMAGE_ROOTFS}${sysconfdir}/ssh/sshd_config ]; then
> --
> 1.7.9.5
>
>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core



--
Otavio Salvador                             O.S. Systems
E-mail: otavio@ossystems.com.br  http://www.ossystems.com.br
Mobile: +55 53 9981-7854              http://projetos.ossystems.com.br
Qi.Chen@windriver.com - Jan. 5, 2013, 6:47 a.m.
Hi Otavio,

Thank you for you review and suggestions :)
And please see some details below.

On 01/02/2013 02:12 AM, Otavio Salvador wrote:
> On Mon, Dec 31, 2012 at 12:16 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.
>>
>> choose_volatile_conf_file: this function is invoked no matter
>> 'read-only-rootfs' is in IMAGE_FEATURES or not, it properly chooses
>> the right conf file for volatile storage handling according to the
>> IMAGE_FEATURES.
>>
>> [YOCTO #3406]
>>
>> Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
>> ---
>>   meta/classes/image.bbclass |   30 ++++++++++++++++++++++++++++++
>>   1 file changed, 30 insertions(+)
>>
>> diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
>> index d3a416d..57bd0e3 100644
>> --- a/meta/classes/image.bbclass
>> +++ b/meta/classes/image.bbclass
>> @@ -396,6 +396,36 @@ zap_root_password () {
>>          mv ${IMAGE_ROOTFS}/etc/passwd.new ${IMAGE_ROOTFS}/etc/passwd
>>   }
>>
>> +# A hook function to support read-only-rootfs IMAGE_FEATURES
>> +read_only_rootfs_hook () {
>> +       # Tweak the mount option in fstab
>> +       sed -i '/rootfs/ s/defaults/ro/' ${IMAGE_ROOTFS}/etc/fstab
> Maybe use 'defaults,ro' in fstab?
In my understanding, 'ro' and 'defaults,ro' are the same. Maybe I'm 
wrong, but what's the difference between them?
>> +       # 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
>> +}
>> +
>> +# Choose the correct config file for volatile storage handling according to the image type
>> +choose_volatile_conf_file () {
>> +       if ${@base_contains("IMAGE_FEATURES", "x11-sato", "true", "false" ,d)}; then
>> +               if [ -e ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-sato ]; then
>> +                       cp ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-sato \
>> +                               ${IMAGE_ROOTFS}/etc/default/volatiles/00_core_readonly
>> +               fi
>> +       else
>> +               if [ -e ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-minimal ]; then
>> +                       cp ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-minimal \
>> +                               ${IMAGE_ROOTFS}/etc/default/volatiles/00_core_readonly
>> +               fi
>> +       fi
> Wouldn't be better to have a package which provides the need valatile
> config? this makes it easy to reuse for other images.
Yes, you're right.

In fact, I think it should be the initscripts recipe which provides the 
volatile conf files. Because both populate-volatile.sh and the conf 
files it uses logically belong to initscripts.
So I'll remove this function from image.bbclass and choose the correct 
conf file in the initscripts recipe.

Also, for the purpose of easy use, as you mentioned above, I think we 
should allow users to use customized conf file if they want to.
So I want to support customized conf file for volatile storages in 
initscripts recipe.

That's all what I've came up with for now.
I'll send out a patch V6 as soon as possible.

Cheers,
Chen Qi
>> +}
>> +
>>   # allow openssh accept login with empty password string
>>   openssh_allow_empty_password () {
>>          if [ -e ${IMAGE_ROOTFS}${sysconfdir}/ssh/sshd_config ]; then
>> --
>> 1.7.9.5
>>
>>
>> _______________________________________________
>> Openembedded-core mailing list
>> Openembedded-core@lists.openembedded.org
>> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
>
>
> --
> Otavio Salvador                             O.S. Systems
> E-mail: otavio@ossystems.com.br  http://www.ossystems.com.br
> Mobile: +55 53 9981-7854              http://projetos.ossystems.com.br
>
>
Qi.Chen@windriver.com - Jan. 6, 2013, 3:28 a.m.
On 01/05/2013 02:47 PM, ChenQi wrote:
> Hi Otavio,
>
> Thank you for you review and suggestions :)
> And please see some details below.
>
> On 01/02/2013 02:12 AM, Otavio Salvador wrote:
>> On Mon, Dec 31, 2012 at 12:16 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.
>>>
>>> choose_volatile_conf_file: this function is invoked no matter
>>> 'read-only-rootfs' is in IMAGE_FEATURES or not, it properly chooses
>>> the right conf file for volatile storage handling according to the
>>> IMAGE_FEATURES.
>>>
>>> [YOCTO #3406]
>>>
>>> Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
>>> ---
>>>   meta/classes/image.bbclass |   30 ++++++++++++++++++++++++++++++
>>>   1 file changed, 30 insertions(+)
>>>
>>> diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
>>> index d3a416d..57bd0e3 100644
>>> --- a/meta/classes/image.bbclass
>>> +++ b/meta/classes/image.bbclass
>>> @@ -396,6 +396,36 @@ zap_root_password () {
>>>          mv ${IMAGE_ROOTFS}/etc/passwd.new ${IMAGE_ROOTFS}/etc/passwd
>>>   }
>>>
>>> +# A hook function to support read-only-rootfs IMAGE_FEATURES
>>> +read_only_rootfs_hook () {
>>> +       # Tweak the mount option in fstab
>>> +       sed -i '/rootfs/ s/defaults/ro/' ${IMAGE_ROOTFS}/etc/fstab
>> Maybe use 'defaults,ro' in fstab?
> In my understanding, 'ro' and 'defaults,ro' are the same. Maybe I'm 
> wrong, but what's the difference between them?
>>> +       # 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
>>> +}
>>> +
>>> +# Choose the correct config file for volatile storage handling 
>>> according to the image type
>>> +choose_volatile_conf_file () {
>>> +       if ${@base_contains("IMAGE_FEATURES", "x11-sato", "true", 
>>> "false" ,d)}; then
>>> +               if [ -e 
>>> ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-sato 
>>> ]; then
>>> +                       cp 
>>> ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-sato \
>>> + ${IMAGE_ROOTFS}/etc/default/volatiles/00_core_readonly
>>> +               fi
>>> +       else
>>> +               if [ -e 
>>> ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-minimal 
>>> ]; then
>>> +                       cp 
>>> ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-minimal 
>>> \
>>> + ${IMAGE_ROOTFS}/etc/default/volatiles/00_core_readonly
>>> +               fi
>>> +       fi
>> Wouldn't be better to have a package which provides the need valatile
>> config? this makes it easy to reuse for other images.
> Yes, you're right.
>
> In fact, I think it should be the initscripts recipe which provides 
> the volatile conf files. Because both populate-volatile.sh and the 
> conf files it uses logically belong to initscripts.
> So I'll remove this function from image.bbclass and choose the correct 
> conf file in the initscripts recipe.
>
After examining it a little more bit, I found out that the conf file has 
to be chosen at rootfs time. It cannot be done by other recipes like 
initscripts because of the sstate-cache.
For example, if we build a minimal image first and then a sato image 
without any change to recipes, the recipes will be skipped by bitbake. 
And as IMAGE_FEATURES are not fully determined until the 
core-image-xxx.bb file is built, using a do_xxx[vardeps] += 
"IMAGE_FEATURES" in other recipes still don't do the work.


> Also, for the purpose of easy use, as you mentioned above, I think we 
> should allow users to use customized conf file if they want to.
> So I want to support customized conf file for volatile storages in 
> initscripts recipe.
>
The same reason stated above, I can't come up with an elegant solution 
to this feature.
Any suggestion?

Cheers,
Chen Qi
> That's all what I've came up with for now.
> I'll send out a patch V6 as soon as possible.
>
> Cheers,
> Chen Qi
>>> +}
>>> +
>>>   # allow openssh accept login with empty password string
>>>   openssh_allow_empty_password () {
>>>          if [ -e ${IMAGE_ROOTFS}${sysconfdir}/ssh/sshd_config ]; then
>>> -- 
>>> 1.7.9.5
>>>
>>>
>>> _______________________________________________
>>> Openembedded-core mailing list
>>> Openembedded-core@lists.openembedded.org
>>> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
>>
>>
>> -- 
>> Otavio Salvador                             O.S. Systems
>> E-mail: otavio@ossystems.com.br  http://www.ossystems.com.br
>> Mobile: +55 53 9981-7854 http://projetos.ossystems.com.br
>>
>>
>
>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
>
>
Qi.Chen@windriver.com - Jan. 6, 2013, 9:47 a.m.
Hi Otavio:

V6 has been sent with support for customized conf files.
Also, the specific conf files are provided by corresponding image 
recipes, because the contents of the conf files are closely related to 
the image types.

Cheers,
Chen Qi

On 01/02/2013 02:12 AM, Otavio Salvador wrote:
> On Mon, Dec 31, 2012 at 12:16 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.
>>
>> choose_volatile_conf_file: this function is invoked no matter
>> 'read-only-rootfs' is in IMAGE_FEATURES or not, it properly chooses
>> the right conf file for volatile storage handling according to the
>> IMAGE_FEATURES.
>>
>> [YOCTO #3406]
>>
>> Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
>> ---
>>   meta/classes/image.bbclass |   30 ++++++++++++++++++++++++++++++
>>   1 file changed, 30 insertions(+)
>>
>> diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
>> index d3a416d..57bd0e3 100644
>> --- a/meta/classes/image.bbclass
>> +++ b/meta/classes/image.bbclass
>> @@ -396,6 +396,36 @@ zap_root_password () {
>>          mv ${IMAGE_ROOTFS}/etc/passwd.new ${IMAGE_ROOTFS}/etc/passwd
>>   }
>>
>> +# A hook function to support read-only-rootfs IMAGE_FEATURES
>> +read_only_rootfs_hook () {
>> +       # Tweak the mount option in fstab
>> +       sed -i '/rootfs/ s/defaults/ro/' ${IMAGE_ROOTFS}/etc/fstab
> Maybe use 'defaults,ro' in 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
>> +}
>> +
>> +# Choose the correct config file for volatile storage handling according to the image type
>> +choose_volatile_conf_file () {
>> +       if ${@base_contains("IMAGE_FEATURES", "x11-sato", "true", "false" ,d)}; then
>> +               if [ -e ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-sato ]; then
>> +                       cp ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-sato \
>> +                               ${IMAGE_ROOTFS}/etc/default/volatiles/00_core_readonly
>> +               fi
>> +       else
>> +               if [ -e ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-minimal ]; then
>> +                       cp ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-minimal \
>> +                               ${IMAGE_ROOTFS}/etc/default/volatiles/00_core_readonly
>> +               fi
>> +       fi
> Wouldn't be better to have a package which provides the need valatile
> config? this makes it easy to reuse for other images.
>
>> +}
>> +
>>   # allow openssh accept login with empty password string
>>   openssh_allow_empty_password () {
>>          if [ -e ${IMAGE_ROOTFS}${sysconfdir}/ssh/sshd_config ]; then
>> --
>> 1.7.9.5
>>
>>
>> _______________________________________________
>> Openembedded-core mailing list
>> Openembedded-core@lists.openembedded.org
>> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
>
>
> --
> Otavio Salvador                             O.S. Systems
> E-mail: otavio@ossystems.com.br  http://www.ossystems.com.br
> Mobile: +55 53 9981-7854              http://projetos.ossystems.com.br
>
>

Patch

diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
index d3a416d..57bd0e3 100644
--- a/meta/classes/image.bbclass
+++ b/meta/classes/image.bbclass
@@ -396,6 +396,36 @@  zap_root_password () {
 	mv ${IMAGE_ROOTFS}/etc/passwd.new ${IMAGE_ROOTFS}/etc/passwd
 } 
 
+# A hook function to support read-only-rootfs IMAGE_FEATURES
+read_only_rootfs_hook () {
+	# 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
+}
+
+# Choose the correct config file for volatile storage handling according to the image type
+choose_volatile_conf_file () {
+	if ${@base_contains("IMAGE_FEATURES", "x11-sato", "true", "false" ,d)}; then
+		if [ -e ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-sato ]; then
+			cp ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-sato \
+				${IMAGE_ROOTFS}/etc/default/volatiles/00_core_readonly
+		fi
+	else
+		if [ -e ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-minimal ]; then
+			cp ${IMAGE_ROOTFS}/etc/default/volatiles_stage/volatiles-readonly-minimal \
+				${IMAGE_ROOTFS}/etc/default/volatiles/00_core_readonly
+		fi
+	fi
+}
+
 # allow openssh accept login with empty password string
 openssh_allow_empty_password () {
 	if [ -e ${IMAGE_ROOTFS}${sysconfdir}/ssh/sshd_config ]; then