diff options
| author | Chen Qi <Qi.Chen@windriver.com> | 2014-10-21 14:30:36 +0800 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-12-25 08:18:13 +0000 |
| commit | b4499ec0361d5c79efb40b6172c33d5602721182 (patch) | |
| tree | 7a2f914a1a81d7aa8e3e3ff1e16b8e027e0358fe | |
| parent | bcc548c750fb665b1ee3ca96c421e097804b2f67 (diff) | |
| download | poky-b4499ec0361d5c79efb40b6172c33d5602721182.tar.gz | |
image.bbclass: avoid boot error on read-only systemd image
New version of systemd implements a new feature of updating /etc
or /var when needed at boot. For details, please see link below.
Opointer.de/blog/projects/stateless.html
For now, at boot time, the systemd-sysusers.service would update user
database files (/etc/passwd, /etc/group, etc.) according to the configuration
files under /usr/lib/sysusers.d. This step is necessary for other systemd
services to work correctly. Examples of such services are systemd-resolved
and systemd-tmpfiles-setup.
The problem is that on a read-only file system, that is, if /etc is read-only,
the user database files could not be updated, causing failures of services.
This patch fixes this problem by adding users/groups at rootfs time.
(From OE-Core rev: 2501c2f03f24fbbefd9999dd444318704d8aa8c2)
Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
| -rw-r--r-- | meta/classes/image.bbclass | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index 832c7384c6..34e9f4cba5 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass | |||
| @@ -215,6 +215,27 @@ read_only_rootfs_hook () { | |||
| 215 | fi | 215 | fi |
| 216 | fi | 216 | fi |
| 217 | fi | 217 | fi |
| 218 | |||
| 219 | if ${@bb.utils.contains("DISTRO_FEATURES", "systemd", "true", "false", d)}; then | ||
| 220 | # Update user database files so that services don't fail for a read-only systemd system | ||
| 221 | for conffile in ${IMAGE_ROOTFS}/usr/lib/sysusers.d/systemd.conf ${IMAGE_ROOTFS}/usr/lib/sysusers.d/systemd-remote.conf; do | ||
| 222 | [ -e $conffile ] || continue | ||
| 223 | grep -v "^#" $conffile | sed -e '/^$/d' | while read type name id comment; do | ||
| 224 | if [ "$type" = "u" ]; then | ||
| 225 | useradd_params="" | ||
| 226 | [ "$id" != "-" ] && useradd_params="$useradd_params --uid $id" | ||
| 227 | [ "$comment" != "-" ] && useradd_params="$useradd_params --comment $comment" | ||
| 228 | useradd_params="$useradd_params --system $name" | ||
| 229 | eval useradd --root ${IMAGE_ROOTFS} $useradd_params || true | ||
| 230 | elif [ "$type" = "g" ]; then | ||
| 231 | groupadd_params="" | ||
| 232 | [ "$id" != "-" ] && groupadd_params="$groupadd_params --gid $id" | ||
| 233 | groupadd_params="$groupadd_params --system $name" | ||
| 234 | eval groupadd --root ${IMAGE_ROOTFS} $groupadd_params || true | ||
| 235 | fi | ||
| 236 | done | ||
| 237 | done | ||
| 238 | fi | ||
| 218 | } | 239 | } |
| 219 | 240 | ||
| 220 | PACKAGE_EXCLUDE ??= "" | 241 | PACKAGE_EXCLUDE ??= "" |
