mirror of
https://git.yoctoproject.org/poky
synced 2026-04-21 21:32:12 +02:00
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: c7b9611ad0ead17a624fc73a60c321ff249c2214) Signed-off-by: Chen Qi <Qi.Chen@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -216,6 +216,27 @@ read_only_rootfs_hook () {
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if ${@bb.utils.contains("DISTRO_FEATURES", "systemd", "true", "false", d)}; then
|
||||
# Update user database files so that services don't fail for a read-only systemd system
|
||||
for conffile in ${IMAGE_ROOTFS}/usr/lib/sysusers.d/systemd.conf ${IMAGE_ROOTFS}/usr/lib/sysusers.d/systemd-remote.conf; do
|
||||
[ -e $conffile ] || continue
|
||||
grep -v "^#" $conffile | sed -e '/^$/d' | while read type name id comment; do
|
||||
if [ "$type" = "u" ]; then
|
||||
useradd_params=""
|
||||
[ "$id" != "-" ] && useradd_params="$useradd_params --uid $id"
|
||||
[ "$comment" != "-" ] && useradd_params="$useradd_params --comment $comment"
|
||||
useradd_params="$useradd_params --system $name"
|
||||
eval useradd --root ${IMAGE_ROOTFS} $useradd_params || true
|
||||
elif [ "$type" = "g" ]; then
|
||||
groupadd_params=""
|
||||
[ "$id" != "-" ] && groupadd_params="$groupadd_params --gid $id"
|
||||
groupadd_params="$groupadd_params --system $name"
|
||||
eval groupadd --root ${IMAGE_ROOTFS} $groupadd_params || true
|
||||
fi
|
||||
done
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
PACKAGE_EXCLUDE ??= ""
|
||||
|
||||
Reference in New Issue
Block a user