blob: 32569e97db874ece039a74a401be06bef5fab7fb [file] [log] [blame]
lh9ed821d2023-04-07 01:36:19 -07001# This bbclass is used for image level user/group configuration.
2# Inherit this class if you want to make EXTRA_USERS_PARAMS effective.
3
4# Below is an example showing how to use this functionality.
5# IMAGE_CLASSES += "extrausers"
6# EXTRA_USERS_PARAMS = "\
7# useradd -p '' tester; \
8# groupadd developers; \
9# userdel nobody; \
10# groupdel -g video; \
11# groupmod -g 1020 developers; \
12# usermod -s /bin/sh tester; \
13# "
14
15inherit useradd_base
16
17PACKAGE_INSTALL_append = " ${@['', 'base-passwd shadow'][bool(d.getVar('EXTRA_USERS_PARAMS'))]}"
18
19# Image level user / group settings
20ROOTFS_POSTPROCESS_COMMAND_append = " set_user_group;"
21
22# Image level user / group settings
23set_user_group () {
24 user_group_settings="${EXTRA_USERS_PARAMS}"
25 export PSEUDO="${FAKEROOTENV} ${STAGING_DIR_NATIVE}${bindir}/pseudo"
26 setting=`echo $user_group_settings | cut -d ';' -f1`
27 remaining=`echo $user_group_settings | cut -d ';' -f2-`
28 while test "x$setting" != "x"; do
29 cmd=`echo $setting | cut -d ' ' -f1`
30 opts=`echo $setting | cut -d ' ' -f2-`
31 # Different from useradd.bbclass, there's no file locking issue here, as
32 # this setting is actually a serial process. So we only retry once.
33 case $cmd in
34 useradd)
35 perform_useradd "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
36 ;;
37 groupadd)
38 perform_groupadd "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
39 ;;
40 userdel)
41 perform_userdel "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
42 ;;
43 groupdel)
44 perform_groupdel "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
45 ;;
46 usermod)
47 perform_usermod "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
48 ;;
49 groupmod)
50 perform_groupmod "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
51 ;;
52 *)
53 bbfatal "Invalid command in EXTRA_USERS_PARAMS: $cmd"
54 ;;
55 esac
56 # Avoid infinite loop if the last parameter doesn't end with ';'
57 if [ "$setting" = "$remaining" ]; then
58 break
59 fi
60 # iterate to the next setting
61 setting=`echo $remaining | cut -d ';' -f1`
62 remaining=`echo $remaining | cut -d ';' -f2-`
63 done
64}
65
66USERADDEXTENSION ?= ""
67
68inherit ${USERADDEXTENSION}