summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorChen Qi <Qi.Chen@windriver.com>2014-10-21 14:30:36 +0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-12-25 08:18:13 +0000
commitb4499ec0361d5c79efb40b6172c33d5602721182 (patch)
tree7a2f914a1a81d7aa8e3e3ff1e16b8e027e0358fe /meta
parentbcc548c750fb665b1ee3ca96c421e097804b2f67 (diff)
downloadpoky-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>
Diffstat (limited to 'meta')
-rw-r--r--meta/classes/image.bbclass21
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
220PACKAGE_EXCLUDE ??= "" 241PACKAGE_EXCLUDE ??= ""