From c9e3fff73a412b25b7a0ac92c6e7521286185709 Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Thu, 29 Sep 2011 10:48:49 -0700 Subject: [PATCH] autocreate a stack user if you are root instead of failing --- stack.sh | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/stack.sh b/stack.sh index 4daa95d..29394ab 100755 --- a/stack.sh +++ b/stack.sh @@ -26,10 +26,6 @@ if ! grep -q natty /etc/lsb-release; then fi fi -#The following makes fresh mininmal installs (i.e. LXCs) happy -apt-get update -apt-get install -y sudo - # stack.sh keeps the list of **apt** and **pip** dependencies in external # files, along with config templates and other useful files. You can find these # in the ``files`` directory (next to this script). We will reference this @@ -40,12 +36,26 @@ if [ ! -d $FILES ]; then exit 1 fi -# you need to run this as a regular user with sudo priviledges +# If stack.sh is run as root, it automatically creates a stack user with +# sudo privileges and runs as that user. if [[ $EUID -eq 0 ]]; then - echo "This script cannot be run as root." 1>&2 - echo "You should run this script as the user you wish openstack to run as" 1>&2 - echo "The user will need to be a sudoer (without password)" 1>&2 - exit 1 + echo "You are running this script as root." + apt-get update + apt-get install -y sudo + if ! getent passwd | grep -q stack; then + echo "Creating a user called stack" + useradd -g sudo -s /bin/bash -m stack + fi + echo "Making sure stack has passwordless sudo" + sed -i "/^%sudo/ { / ALL/ { s/ ALL/ NOPASSWD:ALL/ }}" /etc/sudoers + echo "Copying files to stack user" + cp -r -f `pwd` /home/stack/ + THIS_DIR=$(basename $(dirname $(readlink -f $0))) + chown -R stack:sudo /home/stack/$THIS_DIR + echo "Running the script as stack in 3 seconds..." + sleep 3 + exec su -c "cd /home/stack/$THIS_DIR/; bash stack.sh; bash" stack + exit 0 fi