image.bbclass: add a method for image level user/group configuration
v2 cover image.bbclass: add a method for image level user/group configuration
From: Chen Qi <[email protected]>
The following changes since commit 80b263430453896189b704d0997943642eec6fef:
classes/insane: remove la2 check which no longer exists from ERROR_QA (2013-06-28 16:33:08 +0100)
are available in the git repository at:
git://git.pokylinux.org/poky-contrib ChenQi/user_group_settings
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=ChenQi/user_group_settings
Chen Qi (1):
image.bbclass: add a method to add/delete/modify user/group settings
meta/classes/image.bbclass | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+)
Signature · 1 line
1.7.9.5
PATCH v2 1/1 image.bbclass: add a method to add/delete/modify user/group settings
From: Chen Qi <[email protected]>
We may want to add a user or group which does not logically belong to any specific package. For example, we may want to add a user with the name 'tester' to our image. Besides, we may want to delete or modify user/group in our image.
This patch adds a variable, USER_GROUP_SETTINGS, which is dedicated to these tasks. The configuration format is detailed in the local.conf. sample.extended file.
This patch also adds a function, set_user_group, which happens at the end of the ROOTFS_POSTPROCESS_COMMAND. It handles the settings in the USER_GROUP_SETTINGS variable.
This logic here is quite similar to that of useradd.bbclass. If we need to add or modify user/group settings, base-passwd and shadow are pulled into the RDEPENDS and thus installed on target.
[YOCTO #4074]
--- meta/classes/image.bbclass | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+)
meta/classes/image.bbclass +42 -0
@@ -12,6 +12,8 @@ LICENSE = "MIT" PACKAGES = "" DEPENDS += "${MLPREFIX}qemuwrapper-cross ${MLPREFIX}depmodwrapper-cross" RDEPENDS += "${IMAGE_INSTALL} ${LINGUAS_INSTALL} ${NORMAL_FEATURE_INSTALL} ${ROOTFS_BOOTSTRAP_INSTALL}" +# Add to IMAGE_INSTALL base-passwd and shadow if USER_GROUP_SETTINGS is set +IMAGE_INSTALL_append += "${@['', 'base-passwd shadow'][bool(d.getVar('USER_GROUP_SETTINGS', True))]}" RRECOMMENDS += "${NORMAL_FEATURE_INSTALL_OPTIONAL}" INHIBIT_DEFAULT_DEPS = "1"
@@ -179,6 +181,8 @@ ROOTFS_POSTPROCESS_COMMAND += '${@base_contains("IMAGE_FEATURES", "debug-tweaks" ROOTFS_POSTPROCESS_COMMAND += '${@base_contains("IMAGE_FEATURES", "debug-tweaks", "postinst_enable_logging; ", "",d)}' # Set default postinst log file POSTINST_LOGFILE ?= "${localstatedir}/log/postinstall.log" +# Image level user / group settings +ROOTFS_POSTPROCESS_COMMAND_append = " set_user_group;" # some default locales IMAGE_LINGUAS ?= "de-de fr-fr en-gb"
@@ -528,6 +532,44 @@ postinst_enable_logging () { echo "LOGFILE=${POSTINST_LOGFILE}" >> ${IMAGE_ROOTFS}${sysconfdir}/default/postinst } +# Image level user / group settings +set_user_group () { + user_group_settings="${USER_GROUP_SETTINGS}" + export PSEUDO="${FAKEROOTENV} ${STAGING_DIR_NATIVE}${bindir}/pseudo" + setting=`echo $user_group_settings | cut -d ';' -f1` + remaining=`echo $user_group_settings | cut -d ';' -f2-` + while test "x$setting" != "x"; do + user_group=`echo $setting | cut -d ',' -f1` + action=`echo $setting | cut -d ',' -f2` + opts=`echo $setting | cut -d ',' -f3` + # determine the command according to user_group and action + if [ "$user_group" = "USER" ]; then + cmd_prefix="user" + elif [ "$user_group" = "GROUP" ]; then + cmd_prefix="group" + else + echo "Error: invalid setting of $user_group in the USER_GROUP_SETTINGS" + exit 1 + fi + if [ "$action" = "ADD" ]; then + cmd_suffix="add" + elif [ "$action" = "DEL" ]; then + cmd_suffix="del" + elif [ "$action" = "MOD" ]; then + cmd_suffix="mod" + else + echo "Error: invalid setting of $user_group in the USER_GROUP_SETTINGS" + exit 1 + fi + cmd=$cmd_prefix$cmd_suffix + echo "using commond <$cmd> for setting <$setting> ..." + eval $PSEUDO $cmd -R ${IMAGE_ROOTFS} $opts + # iterate to the next setting + setting=`echo $remaining | cut -d ';' -f1` + remaining=`echo $remaining | cut -d ';' -f2-` + done +} + # Turn any symbolic /sbin/init link into a file remove_init_link () { if [ -h ${IMAGE_ROOTFS}/sbin/init ]; then
Signature · 1 line
1.7.9.5
Re: [PATCH V2 1/1] image.bbclass: add a method to add/delete/modify user/group settings
Quoted 7 lines · On 07/09/2013 11:28 PM, [email protected] wrote:
From: Chen Qi <[email protected]>
We may want to add a user or group which does not logically belong to any specific package. For example, we may want to add a user with the name 'tester' to our image. Besides, we may want to delete or modify user/group in our image.
Quoted 8 lines
This patch adds a variable,
USER_GROUP_SETTINGS, which is dedicated to these tasks. The configuration format is detailed in the local.conf. sample.extended file.This patch also adds a function,
set_user_group, which happens at the end of theROOTFS_POSTPROCESS_COMMAND. It handles the settings in theUSER_GROUP_SETTINGSvariable.
After seeing the poky-tiny changes, which I will NAK, I am going to recommend that we need to share a common base between this and the existing useradd bbclass since you are both doing the same work.
Also, I think what ever the top level looks like, it should be in a class of it's own that can be inherited, such that it won't affect other images, like a tiny or other distros that don't include login support.
I understand the difference and usage of useradd is targeting packages and feeds, while this work is targeted towards customizing a final image that is not truly part of the package feed.
Sau!
Quoted 81 lines
This logic here is quite similar to that of useradd.bbclass. If we need to add or modify user/group settings, base-passwd and shadow are pulled into the RDEPENDS and thus installed on target.
[YOCTO #4074]
Signed-off-by Chen Qi <[email protected]>--- meta/classes/image.bbclass | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+)meta/classes/image.bbclass +42
-0@@ -12,6 +12,8 @@ LICENSE = "MIT" PACKAGES = "" DEPENDS += "${MLPREFIX}qemuwrapper-cross ${MLPREFIX}depmodwrapper-cross" RDEPENDS += "${IMAGE_INSTALL} ${LINGUAS_INSTALL} ${NORMAL_FEATURE_INSTALL} ${ROOTFS_BOOTSTRAP_INSTALL}" +# Add to IMAGE_INSTALL base-passwd and shadow if USER_GROUP_SETTINGS is set +IMAGE_INSTALL_append += "${@['', 'base-passwd shadow'][bool(d.getVar('USER_GROUP_SETTINGS', True))]}" RRECOMMENDS += "${NORMAL_FEATURE_INSTALL_OPTIONAL}" INHIBIT_DEFAULT_DEPS = "1"@@ -179,6 +181,8 @@ ROOTFS_POSTPROCESS_COMMAND += '${@base_contains("IMAGE_FEATURES", "debug-tweaks" ROOTFS_POSTPROCESS_COMMAND += '${@base_contains("IMAGE_FEATURES", "debug-tweaks", "postinst_enable_logging; ", "",d)}' # Set default postinst log file POSTINST_LOGFILE ?= "${localstatedir}/log/postinstall.log" +# Image level user / group settings +ROOTFS_POSTPROCESS_COMMAND_append = " set_user_group;" # some default locales IMAGE_LINGUAS ?= "de-de fr-fr en-gb"@@ -528,6 +532,44 @@ postinst_enable_logging () { echo "LOGFILE=${POSTINST_LOGFILE}" >> ${IMAGE_ROOTFS}${sysconfdir}/default/postinst } +# Image level user / group settings +set_user_group () { + user_group_settings="${USER_GROUP_SETTINGS}" + export PSEUDO="${FAKEROOTENV} ${STAGING_DIR_NATIVE}${bindir}/pseudo" + setting=`echo $user_group_settings | cut -d ';' -f1` + remaining=`echo $user_group_settings | cut -d ';' -f2-` + while test "x$setting" != "x"; do + user_group=`echo $setting | cut -d ',' -f1` + action=`echo $setting | cut -d ',' -f2` + opts=`echo $setting | cut -d ',' -f3` + # determine the command according to user_group and action + if [ "$user_group" = "USER" ]; then + cmd_prefix="user" + elif [ "$user_group" = "GROUP" ]; then + cmd_prefix="group" + else + echo "Error: invalid setting of $user_group in the USER_GROUP_SETTINGS" + exit 1 + fi + if [ "$action" = "ADD" ]; then + cmd_suffix="add" + elif [ "$action" = "DEL" ]; then + cmd_suffix="del" + elif [ "$action" = "MOD" ]; then + cmd_suffix="mod" + else + echo "Error: invalid setting of $user_group in the USER_GROUP_SETTINGS" + exit 1 + fi + cmd=$cmd_prefix$cmd_suffix + echo "using commond <$cmd> for setting <$setting> ..." + eval $PSEUDO $cmd -R ${IMAGE_ROOTFS} $opts + # iterate to the next setting + setting=`echo $remaining | cut -d ';' -f1` + remaining=`echo $remaining | cut -d ';' -f2-` + done +} + # Turn any symbolic /sbin/init link into a file remove_init_link () { if [ -h ${IMAGE_ROOTFS}/sbin/init ]; then
Re: [PATCH V2 1/1] image.bbclass: add a method to add/delete/modify user/group settings
Quoted 16 lines · Saul Wold
Quoted 7 lines · On 07/09/2013 11:28 PM, [email protected] wrote:
From: Chen Qi <[email protected]>
We may want to add a user or group which does not logically belong to any specific package. For example, we may want to add a user with the name 'tester' to our image. Besides, we may want to delete or modify user/group in our image.
Quoted 8 lines
This patch adds a variable,
USER_GROUP_SETTINGS, which is dedicated to these tasks. The configuration format is detailed in the local.conf. sample.extended file.This patch also adds a function,
set_user_group, which happens at the end of theROOTFS_POSTPROCESS_COMMAND. It handles the settings in theUSER_GROUP_SETTINGSvariable.
Quoted 8 lines
After seeing the poky-tiny changes, which I will NAK, I am going to recommend that we need to share a common base between this and the existing useradd bbclass since you are both doing the same work.
Also, I think what ever the top level looks like, it should be in a class of it's own that can be inherited, such that it won't affect other images, like a tiny or other distros that don't include login support.
I understand the difference and usage of useradd is targeting packages and feeds, while this work is targeted towards customizing a final image that is not truly part of the package feed.
Sau!
Thanks for your suggestion. That's definitely a better approach. I'll rework on this feature.
Best Regards,
Chen Qi
Quoted 94 lines
Quoted 92 lines
This logic here is quite similar to that of useradd.bbclass. If we need to add or modify user/group settings, base-passwd and shadow are pulled into the RDEPENDS and thus installed on target.
[YOCTO #4074]
Signed-off-by Chen Qi <[email protected]>--- meta/classes/image.bbclass | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+)meta/classes/image.bbclass +0
-0@@ -12,6 +12,8 @@ LICENSE = "MIT" PACKAGES = "" DEPENDS += "${MLPREFIX}qemuwrapper-cross${MLPREFIX}depmodwrapper-cross"
RDEPENDS += "${IMAGE_INSTALL} ${LINGUAS_INSTALL}
${NORMAL_FEATURE_INSTALL} ${ROOTFS_BOOTSTRAP_INSTALL}"
+# Add toIMAGE_INSTALLbase-passwd and shadow ifUSER_GROUP_SETTINGSis set
+IMAGE_INSTALL_append += "${@['', 'base-passwd shadow'][bool(d.getVar('USER_GROUP_SETTINGS', True))]}"
RRECOMMENDS += "${NORMAL_FEATURE_INSTALL_OPTIONAL}"
INHIBIT_DEFAULT_DEPS= "1"meta/classes/image.bbclass +0
-0@@ -179,6 +181,8 @@ ROOTFS_POSTPROCESS_COMMAND +='${@base_contains("IMAGE_FEATURES", "debug-tweaks"
ROOTFS_POSTPROCESS_COMMAND+= '${@base_contains("IMAGE_FEATURES",
"debug-tweaks", "postinst_enable_logging; ", "",d)}'
# Set default postinst log file
POSTINST_LOGFILE?= "${localstatedir}/log/postinstall.log"meta/classes/image.bbclass +2
-0+# Image level user / group settings +ROOTFS_POSTPROCESS_COMMAND_append = " set_user_group;" # some default locales IMAGE_LINGUAS ?= "de-de fr-fr en-gb"@@ -528,6 +532,44 @@ postinst_enable_logging () { echo "LOGFILE=${POSTINST_LOGFILE}" >>${IMAGE_ROOTFS}${sysconfdir}/default/postinst
}meta/classes/image.bbclass +4
-0+# Image level user / group settings +set_user_group () { + user_group_settings="${USER_GROUP_SETTINGS}" + export PSEUDO="${FAKEROOTENV}${STAGING_DIR_NATIVE}${bindir}/pseudo"
meta/classes/image.bbclass +13
-0+ setting=`echo $user_group_settings | cut -d ';' -f1` + remaining=`echo $user_group_settings | cut -d ';' -f2-` + while test "x$setting" != "x"; do + user_group=`echo $setting | cut -d ',' -f1` + action=`echo $setting | cut -d ',' -f2` + opts=`echo $setting | cut -d ',' -f3` + # determine the command according to user_group and action + if [ "$user_group" = "USER" ]; then + cmd_prefix="user" + elif [ "$user_group" = "GROUP" ]; then + cmd_prefix="group" + else + echo "Error: invalid setting of $user_group in the
USER_GROUP_SETTINGS"meta/classes/image.bbclass +10
-0+ exit 1 + fi + if [ "$action" = "ADD" ]; then + cmd_suffix="add" + elif [ "$action" = "DEL" ]; then + cmd_suffix="del" + elif [ "$action" = "MOD" ]; then + cmd_suffix="mod" + else + echo "Error: invalid setting of $user_group in the
USER_GROUP_SETTINGS"meta/classes/image.bbclass +11
-0+ exit 1 + fi + cmd=$cmd_prefix$cmd_suffix + echo "using commond <$cmd> for setting <$setting> ..." + eval $PSEUDO $cmd -R ${IMAGE_ROOTFS} $opts + # iterate to the next setting + setting=`echo $remaining | cut -d ';' -f1` + remaining=`echo $remaining | cut -d ';' -f2-` + done +} + # Turn any symbolic /sbin/init link into a file remove_init_link () { if [ -h ${IMAGE_ROOTFS}/sbin/init ]; then