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) |
| 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 | # 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 | } |