#!/bin/sh bbnote () { echo "NOTE: $*" } bbwarn () { echo "WARNING: $*" } bbfatal () { echo "ERROR: $*" exit 1 } perform_groupadd () { local rootdir="$1" local opts="$2" bbnote "systemd: Performing groupadd with [$opts]" local groupname=`echo "$opts" | awk '{ print $NF }'` local group_exists="`grep "^$groupname:" $rootdir/etc/group || true`" if test "x$group_exists" = "x"; then eval flock -x $rootdir/etc -c \"$PSEUDO groupadd \$opts\" || true group_exists="`grep "^$groupname:" $rootdir/etc/group || true`" if test "x$group_exists" = "x"; then bbfatal "systemd: groupadd command did not succeed." fi else bbnote "systemd: group $groupname already exists, not re-creating it" fi } perform_useradd () { local rootdir="$1" local opts="$2" bbnote "systemd: Performing useradd with [$opts]" local username=`echo "$opts" | awk '{ print $NF }'` local user_exists="`grep "^$username:" $rootdir/etc/passwd || true`" if test "x$user_exists" = "x"; then eval flock -x $rootdir/etc -c \"$PSEUDO useradd \$opts\" || true user_exists="`grep "^$username:" $rootdir/etc/passwd || true`" if test "x$user_exists" = "x"; then bbfatal "systemd: useradd command did not succeed." fi else bbnote "systemd: user $username already exists, not re-creating it" fi } perform_groupmems () { local rootdir="$1" local opts="$2" bbnote "systemd: Performing groupmems with [$opts]" local groupname=`echo "$opts" | awk '{ for (i = 1; i < NF; i++) if ($i == "-g" || $i == "--group") print $(i+1) }'` local username=`echo "$opts" | awk '{ for (i = 1; i < NF; i++) if ($i == "-a" || $i == "--add") print $(i+1) }'` bbnote "systemd: Running groupmems command with group $groupname and user $username" local mem_exists="`grep "^$groupname:[^:]*:[^:]*:\([^,]*,\)*$username\(,[^,]*\)*" $rootdir/etc/group || true`" if test "x$mem_exists" = "x"; then eval flock -x $rootdir/etc -c \"$PSEUDO groupmems \$opts\" || true mem_exists="`grep "^$groupname:[^:]*:[^:]*:\([^,]*,\)*$username\(,[^,]*\)*" $rootdir/etc/group || true`" if test "x$mem_exists" = "x"; then bbfatal "systemd: groupmems command did not succeed." fi else bbnote "systemd: group $groupname already contains $username, not re-adding it" fi } OPT="" SYSROOT="" if test "x$D" != "x"; then # Installing into a sysroot SYSROOT="$D" OPT="--root $D" # Make sure login.defs is there, this is to make debian package backend work # correctly while doing rootfs. # The problem here is that if /etc/login.defs is treated as a config file for # shadow package, then while performing preinsts for packages that depend on # shadow, there might only be /etc/login.def.dpkg-new there in root filesystem. if [ ! -e $D/etc/login.defs -a -e $D/etc/login.defs.dpkg-new ]; then cp $D/etc/login.defs.dpkg-new $D/etc/login.defs fi # user/group lookups should match useradd/groupadd --root export PSEUDO_PASSWD="$SYSROOT:/oe/bld/build-CORTEX_1/arago-tmp-external-linaro-toolchain/sysroots/x86_64-linux" fi # If we're not doing a special SSTATE/SYSROOT install # then set the values, otherwise use the environment if test "x$UA_SYSROOT" = "x"; then # Installing onto a target # Add groups and users defined only for this package GROUPADD_PARAM="${GROUPADD_PARAM}" USERADD_PARAM=" --system -d / -M --shell /bin/nologin systemd-bus-proxy;" GROUPMEMS_PARAM="${GROUPMEMS_PARAM}" fi # Perform group additions first, since user additions may depend # on these groups existing if test "x`echo $GROUPADD_PARAM | tr -d '[:space:]'`" != "x"; then echo "Running groupadd commands..." # Invoke multiple instances of groupadd for parameter lists # separated by ';' opts=`echo "$GROUPADD_PARAM" | cut -d ';' -f 1 | sed -e 's#[ \t]*$##'` remaining=`echo "$GROUPADD_PARAM" | cut -d ';' -f 2- | sed -e 's#[ \t]*$##'` while test "x$opts" != "x"; do perform_groupadd "$SYSROOT" "$OPT $opts" if test "x$opts" = "x$remaining"; then break fi opts=`echo "$remaining" | cut -d ';' -f 1 | sed -e 's#[ \t]*$##'` remaining=`echo "$remaining" | cut -d ';' -f 2- | sed -e 's#[ \t]*$##'` done fi if test "x`echo $USERADD_PARAM | tr -d '[:space:]'`" != "x"; then echo "Running useradd commands..." # Invoke multiple instances of useradd for parameter lists # separated by ';' opts=`echo "$USERADD_PARAM" | cut -d ';' -f 1 | sed -e 's#[ \t]*$##'` remaining=`echo "$USERADD_PARAM" | cut -d ';' -f 2- | sed -e 's#[ \t]*$##'` while test "x$opts" != "x"; do perform_useradd "$SYSROOT" "$OPT $opts" if test "x$opts" = "x$remaining"; then break fi opts=`echo "$remaining" | cut -d ';' -f 1 | sed -e 's#[ \t]*$##'` remaining=`echo "$remaining" | cut -d ';' -f 2- | sed -e 's#[ \t]*$##'` done fi if test "x`echo $GROUPMEMS_PARAM | tr -d '[:space:]'`" != "x"; then echo "Running groupmems commands..." # Invoke multiple instances of groupmems for parameter lists # separated by ';' opts=`echo "$GROUPMEMS_PARAM" | cut -d ';' -f 1 | sed -e 's#[ \t]*$##'` remaining=`echo "$GROUPMEMS_PARAM" | cut -d ';' -f 2- | sed -e 's#[ \t]*$##'` while test "x$opts" != "x"; do perform_groupmems "$SYSROOT" "$OPT $opts" if test "x$opts" = "x$remaining"; then break fi opts=`echo "$remaining" | cut -d ';' -f 1 | sed -e 's#[ \t]*$##'` remaining=`echo "$remaining" | cut -d ';' -f 2- | sed -e 's#[ \t]*$##'` done fi