From: ChenQi <Qi.Chen@windriver.com>
To: Koen Kooi <koen@dominion.thruhere.net>
Cc: openembedded-core@lists.openembedded.org
Subject: Re: [PATCH 1/1] systemd: fix systemd-udev-hwdb-update service
Date: Fri, 24 Oct 2014 15:37:49 +0800 [thread overview]
Message-ID: <544A01CD.8070704@windriver.com> (raw)
In-Reply-To: <E0AE8D91-A863-456F-9F59-BEBE56BCF062@dominion.thruhere.net>
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
>>
>
prev parent reply other threads:[~2014-10-24 7:36 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
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 message]
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=544A01CD.8070704@windriver.com \
--to=qi.chen@windriver.com \
--cc=koen@dominion.thruhere.net \
--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