Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH 0/1] systemd: fix systemd-udev-hwdb-update service
@ 2014-10-24  5:58 Chen Qi
  2014-10-24  5:58 ` [PATCH 1/1] " Chen Qi
  0 siblings, 1 reply; 4+ messages in thread
From: Chen Qi @ 2014-10-24  5:58 UTC (permalink / raw)
  To: openembedded-core

The following changes since commit 97756472d3a69eaca95d105494ffea78c6b077e0:

  build-appliance-image: Update to dizzy head revision (2014-10-18 16:16:27 +0200)

are available in the git repository at:

  git://git.openembedded.org/openembedded-core-contrib ChenQi/systemd-udev-hwdb-update
  http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=ChenQi/systemd-udev-hwdb-update

Chen Qi (1):
  systemd: fix systemd-udev-hwdb-update service

 meta/recipes-core/systemd/systemd_216.bb | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

-- 
1.9.1



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

* [PATCH 1/1] systemd: fix systemd-udev-hwdb-update service
  2014-10-24  5:58 [PATCH 0/1] systemd: fix systemd-udev-hwdb-update service Chen Qi
@ 2014-10-24  5:58 ` Chen Qi
  2014-10-24  6:09   ` Koen Kooi
  0 siblings, 1 reply; 4+ messages in thread
From: Chen Qi @ 2014-10-24  5:58 UTC (permalink / raw)
  To: openembedded-core

The new version of systemd has implemented the following feature.
Opointer.de/blog/projects/stateless.html

As a result, the systemd-udev-hwdb-update.service would always run
at first boot. This will cause failure if the target device doesn't
have enough storage space. Besides, as we run `udevadm hwdb --update' as
a postinst of udev-hwdb at rootfs time, there's no need to run this
again at system start-up.

The purpose of this patch is as follows.
If `udev hwdb --update' fails at rootfs time, systemd-udev-hwdb-update.service
is executed at first boot; otherwise, the service is not executed.

This patch achieves the above goal by setting CondistonNeedsUpdate to
"/etc/udev" in the service file, and creating /etc/udev/.updated file if the
postinst succeeds.

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
---
 meta/recipes-core/systemd/systemd_216.bb | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/meta/recipes-core/systemd/systemd_216.bb b/meta/recipes-core/systemd/systemd_216.bb
index ebf9395..cd81818 100644
--- a/meta/recipes-core/systemd/systemd_216.bb
+++ b/meta/recipes-core/systemd/systemd_216.bb
@@ -149,6 +149,10 @@ do_install() {
 
 	# Enable journal to forward message to syslog daemon
 	sed -i -e 's/.*ForwardToSyslog.*/ForwardToSyslog=yes/' ${D}${sysconfdir}/systemd/journald.conf
+
+	# Make systemd-udev-hwdb-update to check /etc/udev
+	cp ${D}${systemd_unitdir}/system/systemd-udev-hwdb-update.service ${D}${sysconfdir}/systemd/system
+	sed -i -e 's#ConditionNeedsUpdate=/etc#ConditionNeedsUpdate=/etc/udev#g' ${D}${sysconfdir}/systemd/system/systemd-udev-hwdb-update.service
 }
 
 do_install_ptest () {
@@ -355,10 +359,18 @@ ALTERNATIVE_PRIORITY[runlevel] ?= "300"
 
 pkg_postinst_udev-hwdb () {
 	if test -n "$D"; then
-		${@qemu_run_binary(d, '$D', '${base_bindir}/udevadm')} hwdb --update \
-			--root $D
+		if ${@qemu_run_binary(d, '$D', '${base_bindir}/udevadm')} hwdb --update \
+			--root $D; then
+			touch $D/etc/udev/.updated
+		else
+			exit 1
+		fi
 	else
-		udevadm hwdb --update
+		if udevadm hwdb --update; then
+			touch $D/etc/udev/.updated
+		else
+			exit 1
+		fi
 	fi
 }
 
-- 
1.9.1



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

* Re: [PATCH 1/1] systemd: fix systemd-udev-hwdb-update service
  2014-10-24  5:58 ` [PATCH 1/1] " Chen Qi
@ 2014-10-24  6:09   ` Koen Kooi
  2014-10-24  7:37     ` ChenQi
  0 siblings, 1 reply; 4+ messages in thread
From: Koen Kooi @ 2014-10-24  6:09 UTC (permalink / raw)
  To: Chen Qi; +Cc: openembedded-core


> Op 24 okt. 2014, om 07:58 heeft Chen Qi <Qi.Chen@windriver.com> het volgende geschreven:
> 
> The new version of systemd has implemented the following feature.
> Opointer.de/blog/projects/stateless.html
> 
> As a result, the systemd-udev-hwdb-update.service would always run
> at first boot. This will cause failure if the target device doesn't
> have enough storage space. Besides, as we run `udevadm hwdb --update' as
> a postinst of udev-hwdb at rootfs time, there's no need to run this
> again at system start-up.
> 
> The purpose of this patch is as follows.
> If `udev hwdb --update' fails at rootfs time, systemd-udev-hwdb-update.service
> is executed at first boot; otherwise, the service is not executed.
> 
> This patch achieves the above goal by setting CondistonNeedsUpdate to
> "/etc/udev" in the service file, and creating /etc/udev/.updated file if the
> postinst succeeds.

Ehm, /etc/udev can be created by other packages, why not test for the file you create?

regards,

Koen


> 
> Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
> ---
> meta/recipes-core/systemd/systemd_216.bb | 18 +++++++++++++++---
> 1 file changed, 15 insertions(+), 3 deletions(-)
> 
> diff --git a/meta/recipes-core/systemd/systemd_216.bb b/meta/recipes-core/systemd/systemd_216.bb
> index ebf9395..cd81818 100644
> --- a/meta/recipes-core/systemd/systemd_216.bb
> +++ b/meta/recipes-core/systemd/systemd_216.bb
> @@ -149,6 +149,10 @@ do_install() {
> 
> 	# Enable journal to forward message to syslog daemon
> 	sed -i -e 's/.*ForwardToSyslog.*/ForwardToSyslog=yes/' ${D}${sysconfdir}/systemd/journald.conf
> +
> +	# Make systemd-udev-hwdb-update to check /etc/udev
> +	cp ${D}${systemd_unitdir}/system/systemd-udev-hwdb-update.service ${D}${sysconfdir}/systemd/system
> +	sed -i -e 's#ConditionNeedsUpdate=/etc#ConditionNeedsUpdate=/etc/udev#g' ${D}${sysconfdir}/systemd/system/systemd-udev-hwdb-update.service
> }
> 
> do_install_ptest () {
> @@ -355,10 +359,18 @@ ALTERNATIVE_PRIORITY[runlevel] ?= "300"
> 
> pkg_postinst_udev-hwdb () {
> 	if test -n "$D"; then
> -		${@qemu_run_binary(d, '$D', '${base_bindir}/udevadm')} hwdb --update \
> -			--root $D
> +		if ${@qemu_run_binary(d, '$D', '${base_bindir}/udevadm')} hwdb --update \
> +			--root $D; then
> +			touch $D/etc/udev/.updated
> +		else
> +			exit 1
> +		fi
> 	else
> -		udevadm hwdb --update
> +		if udevadm hwdb --update; then
> +			touch $D/etc/udev/.updated
> +		else
> +			exit 1
> +		fi
> 	fi
> }
> 
> -- 
> 1.9.1
> 
> -- 
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
> 



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

* Re: [PATCH 1/1] systemd: fix systemd-udev-hwdb-update service
  2014-10-24  6:09   ` Koen Kooi
@ 2014-10-24  7:37     ` ChenQi
  0 siblings, 0 replies; 4+ messages in thread
From: ChenQi @ 2014-10-24  7:37 UTC (permalink / raw)
  To: Koen Kooi; +Cc: openembedded-core

On 10/24/2014 02:09 PM, Koen Kooi wrote:
>> Op 24 okt. 2014, om 07:58 heeft Chen Qi <Qi.Chen@windriver.com> het volgende geschreven:
>>
>> The new version of systemd has implemented the following feature.
>> Opointer.de/blog/projects/stateless.html
>>
>> As a result, the systemd-udev-hwdb-update.service would always run
>> at first boot. This will cause failure if the target device doesn't
>> have enough storage space. Besides, as we run `udevadm hwdb --update' as
>> a postinst of udev-hwdb at rootfs time, there's no need to run this
>> again at system start-up.
>>
>> The purpose of this patch is as follows.
>> If `udev hwdb --update' fails at rootfs time, systemd-udev-hwdb-update.service
>> is executed at first boot; otherwise, the service is not executed.
>>
>> This patch achieves the above goal by setting CondistonNeedsUpdate to
>> "/etc/udev" in the service file, and creating /etc/udev/.updated file if the
>> postinst succeeds.
> Ehm, /etc/udev can be created by other packages, why not test for the file you create?
>
> regards,
>
> Koen
>

Hi Koen,

The tested path must be a directory. If we test a file, then condition 
will always be true.

Below are the related codes from systemd:

<code_snippet>

static bool condition_test_needs_update(Condition *c) {
         const char *p;
         struct stat usr, other;

         assert(c);
         assert(c->parameter);
         assert(c->type == CONDITION_NEEDS_UPDATE);

         /* If the file system is read-only we shouldn't suggest an 
update */
         if (path_is_read_only_fs(c->parameter) > 0)
                 return c->negate;

         /* Any other failure means we should allow the condition to be 
true,
          * so that we rather invoke too many update tools then too
          * few. */

         if (!path_is_absolute(c->parameter))
                 return !c->negate;

         p = strappenda(c->parameter, "/.updated");
         if (lstat(p, &other) < 0)
                 return !c->negate;

         if (lstat("/usr/", &usr) < 0)
                 return !c->negate;

         return (usr.st_mtim.tv_sec > other.st_mtim.tv_sec ||
                 (usr.st_mtim.tv_sec == other.st_mtim.tv_sec && 
usr.st_mtim.tv_nsec > other.st_mtim.tv_nsec)) == !c->negate;
}

</code_snippet>

This patch makes use of the '.updated' trick.

Best Regards,
Chen Qi

>> Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
>> ---
>> meta/recipes-core/systemd/systemd_216.bb | 18 +++++++++++++++---
>> 1 file changed, 15 insertions(+), 3 deletions(-)
>>
>> diff --git a/meta/recipes-core/systemd/systemd_216.bb b/meta/recipes-core/systemd/systemd_216.bb
>> index ebf9395..cd81818 100644
>> --- a/meta/recipes-core/systemd/systemd_216.bb
>> +++ b/meta/recipes-core/systemd/systemd_216.bb
>> @@ -149,6 +149,10 @@ do_install() {
>>
>> 	# Enable journal to forward message to syslog daemon
>> 	sed -i -e 's/.*ForwardToSyslog.*/ForwardToSyslog=yes/' ${D}${sysconfdir}/systemd/journald.conf
>> +
>> +	# Make systemd-udev-hwdb-update to check /etc/udev
>> +	cp ${D}${systemd_unitdir}/system/systemd-udev-hwdb-update.service ${D}${sysconfdir}/systemd/system
>> +	sed -i -e 's#ConditionNeedsUpdate=/etc#ConditionNeedsUpdate=/etc/udev#g' ${D}${sysconfdir}/systemd/system/systemd-udev-hwdb-update.service
>> }
>>
>> do_install_ptest () {
>> @@ -355,10 +359,18 @@ ALTERNATIVE_PRIORITY[runlevel] ?= "300"
>>
>> pkg_postinst_udev-hwdb () {
>> 	if test -n "$D"; then
>> -		${@qemu_run_binary(d, '$D', '${base_bindir}/udevadm')} hwdb --update \
>> -			--root $D
>> +		if ${@qemu_run_binary(d, '$D', '${base_bindir}/udevadm')} hwdb --update \
>> +			--root $D; then
>> +			touch $D/etc/udev/.updated
>> +		else
>> +			exit 1
>> +		fi
>> 	else
>> -		udevadm hwdb --update
>> +		if udevadm hwdb --update; then
>> +			touch $D/etc/udev/.updated
>> +		else
>> +			exit 1
>> +		fi
>> 	fi
>> }
>>
>> -- 
>> 1.9.1
>>
>> -- 
>> _______________________________________________
>> Openembedded-core mailing list
>> Openembedded-core@lists.openembedded.org
>> http://lists.openembedded.org/mailman/listinfo/openembedded-core
>>
>



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

end of thread, other threads:[~2014-10-24  7:36 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-24  5:58 [PATCH 0/1] systemd: fix systemd-udev-hwdb-update service Chen Qi
2014-10-24  5:58 ` [PATCH 1/1] " Chen Qi
2014-10-24  6:09   ` Koen Kooi
2014-10-24  7:37     ` ChenQi

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