| Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 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) | 
| Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 36 | perform_useradd "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts" | 
| Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 37 | ;; | 
|  | 38 | groupadd) | 
| Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 39 | perform_groupadd "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts" | 
| Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 40 | ;; | 
|  | 41 | userdel) | 
| Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 42 | perform_userdel "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts" | 
| Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 43 | ;; | 
|  | 44 | groupdel) | 
| Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 45 | perform_groupdel "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts" | 
| Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 46 | ;; | 
|  | 47 | usermod) | 
| Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 48 | perform_usermod "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts" | 
| Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 49 | ;; | 
|  | 50 | groupmod) | 
| Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 51 | perform_groupmod "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts" | 
| Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 52 | ;; | 
|  | 53 | *) | 
|  | 54 | bbfatal "Invalid command in EXTRA_USERS_PARAMS: $cmd" | 
|  | 55 | ;; | 
|  | 56 | esac | 
|  | 57 | # Avoid infinite loop if the last parameter doesn't end with ';' | 
|  | 58 | if [ "$setting" = "$remaining" ]; then | 
|  | 59 | break | 
|  | 60 | fi | 
|  | 61 | # iterate to the next setting | 
|  | 62 | setting=`echo $remaining | cut -d ';' -f1` | 
|  | 63 | remaining=`echo $remaining | cut -d ';' -f2-` | 
|  | 64 | done | 
|  | 65 | } |