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