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