123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- #!/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
|