2014-07-03 17:10:53 -07:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
2014-07-07 08:09:22 -07:00
|
|
|
set -v
|
|
|
|
|
|
|
|
|
|
USER_HOME=/home/yellowtent
|
|
|
|
|
BASEDIR=$USER_HOME/box
|
2014-07-03 17:10:53 -07:00
|
|
|
USER=yellowtent
|
|
|
|
|
|
|
|
|
|
echo "==== Create User $USER ===="
|
|
|
|
|
id $USER
|
|
|
|
|
if [[ $? -ne 0 ]]; then
|
|
|
|
|
rm -rf /home/$USER
|
|
|
|
|
useradd $USER -m
|
|
|
|
|
fi
|
|
|
|
|
usermod $USER -a -G docker
|
2014-07-03 13:49:17 -07:00
|
|
|
|
2014-07-03 17:10:53 -07:00
|
|
|
# now exit on failure
|
2014-07-03 13:49:17 -07:00
|
|
|
set -e
|
|
|
|
|
|
|
|
|
|
echo "== Yellowtent base image preparation =="
|
|
|
|
|
|
|
|
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
|
|
|
|
|
|
|
|
echo "==== Install project dependencies ===="
|
|
|
|
|
apt-get update
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "==== Setup nodejs ===="
|
|
|
|
|
apt-get -y install nodejs npm
|
2014-07-03 17:10:53 -07:00
|
|
|
ln -sf /usr/bin/nodejs /usr/bin/node
|
2014-07-03 13:49:17 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "==== Setup git ===="
|
|
|
|
|
apt-get -y install git
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "==== Setup docker ===="
|
|
|
|
|
# see http://idolstarastronomer.com/painless-docker.html
|
|
|
|
|
echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
|
|
|
|
|
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
|
|
|
|
|
apt-get update
|
|
|
|
|
apt-get -y install lxc-docker
|
|
|
|
|
ln -sf /usr/bin/docker.io /usr/local/bin/docker
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "==== Setup nginx ===="
|
|
|
|
|
apt-get -y install nginx-full
|
|
|
|
|
service nginx stop
|
2014-07-10 22:51:34 -07:00
|
|
|
update-rc.d -f nginx remove
|
2014-07-03 13:49:17 -07:00
|
|
|
|
|
|
|
|
echo "==== Setup build-essential ===="
|
|
|
|
|
apt-get -y install build-essential
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "==== Setup sqlite3 ===="
|
|
|
|
|
apt-get -y install sqlite3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "==== Setup supervisor ===="
|
|
|
|
|
apt-get -y install supervisor
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "== Box bootstrapping =="
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "==== Cloning box repo ===="
|
2014-07-07 08:09:22 -07:00
|
|
|
if [ -d "$BASEDIR/.git" ]; then
|
2014-07-07 10:26:26 -07:00
|
|
|
echo "Updating the box repo"
|
2014-07-07 08:09:22 -07:00
|
|
|
cd $BASEDIR
|
2014-07-03 17:10:53 -07:00
|
|
|
git fetch
|
|
|
|
|
git reset --hard origin/master
|
|
|
|
|
else
|
2014-07-07 10:26:26 -07:00
|
|
|
echo "Cloning the box repo"
|
2014-07-07 08:09:22 -07:00
|
|
|
rm -rf $BASEDIR
|
|
|
|
|
mkdir -p $USER_HOME
|
|
|
|
|
cd $USER_HOME
|
2014-07-03 17:10:53 -07:00
|
|
|
git clone http://bootstrap:not4long@yellowtent.girish.in/yellowtent/box.git
|
|
|
|
|
cd box
|
2014-07-07 10:26:26 -07:00
|
|
|
git checkout origin/master
|
2014-07-03 17:10:53 -07:00
|
|
|
fi
|
2014-07-03 13:49:17 -07:00
|
|
|
npm install --production
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "==== Sudoers file for app removal ===="
|
|
|
|
|
cat > /etc/sudoers.d/yellowtent <<EOF
|
|
|
|
|
Defaults!$BASEDIR/src/rmappdir.sh env_keep=HOME
|
|
|
|
|
$USER ALL=(root) NOPASSWD: $BASEDIR/src/rmappdir.sh
|
|
|
|
|
|
|
|
|
|
Defaults!$BASEDIR/src/reloadnginx.sh env_keep=HOME
|
|
|
|
|
$USER ALL=(root) NOPASSWD: $BASEDIR/src/reloadnginx.sh
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "==== Make the user own his home ===="
|
2014-07-03 17:10:53 -07:00
|
|
|
chown $USER:$USER -R /home/$USER
|
2014-07-03 13:49:17 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "==== Install init script ===="
|
|
|
|
|
cat > /etc/init.d/bootstrap <<EOF
|
|
|
|
|
#!/bin/sh
|
|
|
|
|
|
2014-07-09 13:13:16 -07:00
|
|
|
LOGOUT="/tmp/bootstrap"
|
|
|
|
|
STDOUT="\$LOGOUT.log"
|
2014-07-09 10:59:05 -07:00
|
|
|
|
2014-07-09 13:26:16 -07:00
|
|
|
ANNOUNCE="curl -fv https://appstore-dev.herokuapp.com/api/v1/boxes/announce?name=\`hostname -f\` &>> \$STDOUT"
|
2014-07-10 22:51:34 -07:00
|
|
|
# ANNOUNCE="curl -fv https://nebulon.fwd.wf/api/v1/boxes/announce?name=\`hostname -f\` &>> \$STDOUT"
|
2014-07-09 10:59:05 -07:00
|
|
|
|
2014-07-09 13:13:16 -07:00
|
|
|
eval \$ANNOUNCE
|
|
|
|
|
RET=\$?
|
2014-07-09 10:59:05 -07:00
|
|
|
while [[ $RET -ne 0 ]]; do
|
2014-07-09 13:13:16 -07:00
|
|
|
echo "[EE] Failed to announce itself with error code $RET, try again in a second" >> \$LOGOUT
|
2014-07-09 10:59:05 -07:00
|
|
|
sleep 1
|
2014-07-09 13:13:16 -07:00
|
|
|
eval \$ANNOUNCE
|
|
|
|
|
RET=\$?
|
2014-07-09 10:59:05 -07:00
|
|
|
done
|
|
|
|
|
|
2014-07-09 13:13:16 -07:00
|
|
|
echo "[II] Successfully announced itself to appstore" >> \$LOGOUT
|
2014-07-03 17:10:53 -07:00
|
|
|
EOF
|
|
|
|
|
chmod +x /etc/init.d/bootstrap
|
|
|
|
|
update-rc.d bootstrap defaults
|