Skip to contentSkip to conversation

image.bbclass: add a method for image level user/group configuration

PATCH Superseded [email protected] 2 participants 4 messages Jul 10, 2013 – Jul 11, 2013

v2 of 7 Superseded Latest is v7 →

lore
Share & tools
lore
#0 lore raw

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
#1 lore raw

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
index 380ed8e..a76289c 100644
@@ -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
#2 lore raw

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 the ROOTFS_POSTPROCESS_COMMAND. It handles the settings in the USER_GROUP_SETTINGS variable.

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]

---
  meta/classes/image.bbclass |   42 ++++++++++++++++++++++++++++++++++++++++++
  1 file changed, 42 insertions(+)
meta/classes/image.bbclass +42 -0
index 380ed8e..a76289c 100644
@@ -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
author
#3 lore raw

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 the ROOTFS_POSTPROCESS_COMMAND. It handles the settings in the USER_GROUP_SETTINGS variable.

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]

---
  meta/classes/image.bbclass |   42 
++++++++++++++++++++++++++++++++++++++++++
  1 file changed, 42 insertions(+)
meta/classes/image.bbclass +0 -0
index 380ed8e..a76289c 100644
@@ -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"

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