diff options
-rw-r--r-- | meta/classes/extrausers.bbclass | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/meta/classes/extrausers.bbclass b/meta/classes/extrausers.bbclass new file mode 100644 index 0000000000..8670a2a85a --- /dev/null +++ b/meta/classes/extrausers.bbclass | |||
@@ -0,0 +1,61 @@ | |||
1 | # This bbclass is mainly 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 | # INHERIT += "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 | |||
15 | |||
16 | inherit useradd_base | ||
17 | |||
18 | IMAGE_INSTALL_append = " ${@['', 'base-passwd shadow'][bool(d.getVar('EXTRA_USERS_PARAMS', True))]}" | ||
19 | |||
20 | # Image level user / group settings | ||
21 | ROOTFS_POSTPROCESS_COMMAND_append = " set_user_group;" | ||
22 | |||
23 | # Image level user / group settings | ||
24 | set_user_group () { | ||
25 | user_group_settings="${EXTRA_USERS_PARAMS}" | ||
26 | export PSEUDO="${FAKEROOTENV} ${STAGING_DIR_NATIVE}${bindir}/pseudo" | ||
27 | setting=`echo $user_group_settings | cut -d ';' -f1` | ||
28 | remaining=`echo $user_group_settings | cut -d ';' -f2-` | ||
29 | while test "x$setting" != "x"; do | ||
30 | cmd=`echo $setting | cut -d ' ' -f1` | ||
31 | opts=`echo $setting | cut -d ' ' -f2-` | ||
32 | # Different from useradd.bbclass, there's no file locking issue here, as | ||
33 | # this setting is actually a serial process. So we only retry once. | ||
34 | case $cmd in | ||
35 | useradd) | ||
36 | perform_useradd "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts" 1 | ||
37 | ;; | ||
38 | groupadd) | ||
39 | perform_groupadd "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts" 1 | ||
40 | ;; | ||
41 | userdel) | ||
42 | perform_userdel "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts" 1 | ||
43 | ;; | ||
44 | groupdel) | ||
45 | perform_groupdel "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts" 1 | ||
46 | ;; | ||
47 | usermod) | ||
48 | perform_usermod "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts" 1 | ||
49 | ;; | ||
50 | groupmod) | ||
51 | perform_groupmod "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts" 1 | ||
52 | ;; | ||
53 | *) | ||
54 | bbfatal "Invalid command in EXTRA_USERS_PARAMS: $cmd" | ||
55 | ;; | ||
56 | esac | ||
57 | # iterate to the next setting | ||
58 | setting=`echo $remaining | cut -d ';' -f1` | ||
59 | remaining=`echo $remaining | cut -d ';' -f2-` | ||
60 | done | ||
61 | } | ||