Sky hopper
#!/bin/sh
#
# SkyHopper Install by Skyarchnetworks
#
## CommonFunction
function check_result {
local result=$1
local point=$2
if [ "${result}" -eq 0 ]; then
echo -e "\033[0;32m ${point} Success \033[0;39m"
else
echo -e "\033[0;31m ${point} Failed \033[0;39m"
exit 1
fi
}
function check_exec_user {
local uid=$(id | sed 's/uid=\([0-9]*\)(.*/\1/')
if [ $uid -ne 500 ]; then
check_result 1 "Check exec user (exec with ec2-user please)"
else
check_result 0 "Check exec user"
fi
}
function check_supported {
local my_version=$(cat /etc/system-release)
local supported=$(cat <<EOL
Amazon Linux AMI release 2015.03
EOL
)
orgIFS=$IFS
IFS=$'\n'
local flg=1
for support_version in ${supported}; do
if [ "${my_version}" = "${support_version}" ]; then
flg=0
fi
done
IFS=$orgIFS
if [ "${flg}" -ne 0 ]; then
check_result 1 "${my_version} is Not Supported Version"
exit 1
else
check_result 0 "${my_version} is Supported Version"
fi
}
# #####
# MAIN
# #####
# check user
echo "実行ユーザをチェックします"
check_exec_user
# check version
echo "OSが動作確認バージョンか確認します"
check_supported
## yum update
echo "yum update及びreleasever固定を行います"
sudo yum update -y >/dev/null
check_result $? "yum update"
sudo sh -c "sed -e 's/.*\([0-9]\{4\}\.[0-9]\{2\}\)$/\1/' /etc/system-release > /etc/yum/vars/releasever"
check_result $? "releasever固定"
sudo yum clean all
# gitをインストールしています
echo "gitをインストールしています"
sudo yum install -y git
check_result $? "git インストール"
# Chefをインストールしています
echo "Chefをインストールしています"
curl -L https://www.chef.io/chef/install.sh | sudo bash
check_result $? "Chef インストール"
# SkyHopperインストール用Cookbookを取得しています
echo "SkyHopperインストール用Cookbookを取得しています"
cd /usr/local/src
sudo rm -rf /usr/local/src/skyhopper_cookbooks
sudo git clone https://github.com/skyarch-networks/skyhopper_cookbooks.git
check_result $? "SkyHopper git clone"
sudo tee /usr/local/src/skyhopper_cookbooks/cookbooks/skyhopper.json <<EOF >/dev/null
{
"run_list": "recipe[skyhopper::default]"
}
EOF
# SkyHopper用初期設定を実行しています
echo "SkyHopperインストールChefを実行しています"
cd /usr/local/src/skyhopper_cookbooks/cookbooks
sudo chef-client -z -j skyhopper.json
check_result $? "SkyHopper install Chef exec"
# MySQL ユーザーの作成
echo -e "\033[0;31m ※本番環境ではMySQLユーザ設定をこのまま利用しないで下さい ※本番環境ではMySQLユーザ設定をこのまま利用しないで下さい ※本番環境ではMySQLユーザ設定をこのまま利用しないで下さい \033[0;39m"
echo "MySQL ユーザを作成しています"
sudo tee /usr/local/src/skyhopper_cookbooks/cookbooks/skyhopper_init.sql <<EOF >/dev/null
-- development
GRANT USAGE ON *.* TO 'skyhopper_dev'@'localhost';
DROP USER 'skyhopper_dev'@'localhost';
CREATE USER 'skyhopper_dev'@'localhost' IDENTIFIED BY 'hogehoge';
GRANT CREATE, SHOW DATABASES ON *.* TO 'skyhopper_dev'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES ON \`SkyHopperDevelopment\`.* TO 'skyhopper_dev'@'localhost';
-- production
SET storage_engine=INNODB;
GRANT USAGE ON *.* TO 'skyhopper_prod'@'localhost';
DROP USER 'skyhopper_prod'@'localhost';
CREATE USER 'skyhopper_prod'@'localhost' IDENTIFIED BY 'fugafuga';
CREATE DATABASE IF NOT EXISTS \`SkyHopperProduction\` DEFAULT CHARACTER SET \`utf8\` COLLATE \`utf8_unicode_ci\`;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES ON \`SkyHopperProduction\`.* TO 'skyhopper_prod'@'localhost';
flush privileges;
EOF
mysql -u root < /usr/local/src/skyhopper_cookbooks/cookbooks/skyhopper_init.sql
check_result $? "DB initialized"
echo -e "\033[0;31m ※本番環境ではMySQLユーザ設定をこのまま利用しないで下さい ※本番環境ではMySQLユーザ設定をこのまま利用しないで下さい ※本番環境ではMySQLユーザ設定をこのまま利用しないで下さい \033[0;39m"
# SkyHopper のセットアップ
cd ~/skyhopper
# bundle install
echo "bundle install しています"
bundle install --quiet --path vendor/bundle > /dev/null 2>&1
check_result $? "bundle install"
# bower install
echo "bower install しています"
echo "n" | bower install -s > /dev/null 2>&1
check_result $? "bower install"
#typescriptをビルド
echo "TypeScriptをビルド しています"
sudo npm i -g gulp
cd frontend/
npm i
gulp tsd
gulp ts
cd ..
# database.yml
echo "database.yml を設定しています"
cp config/database_default.yml config/database.yml
check_result $? "cp and setting database.yml"
# database.yml修正
# development
# username: root -> username: skyhopper_dev
sed -i -e "16s/root/skyhopper_dev/g" config/database.yml
# password: -> password: 'hogehoge'
sed -i -e "17s/:/: 'hogehoge'/g" config/database.yml
# production
# username: SkyHopper -> username: skyhopper_prod
sed -i -e "68s/SkyHopper/skyhopper_prod/g" config/database.yml
# password: <%= ENV['SKYHOPPER_DATABASE_PASSWORD'] %> -> password: 'fugafuga'
sed -i -e "69s/password.*/password: 'fugafuga'/g" config/database.yml
# DB のセットアップ
# データベースの作成
echo "データベース を作成しています"
bundle exec rake db:create > /dev/null 2>&1
check_result $? "DB created"
# マイグレーション
echo "データベース をマイグレーションしています"
# development
bundle exec rake db:migrate > /dev/null 2>&1
check_result $? "DB migrated development"
# production
bundle exec rake db:migrate RAILS_ENV=production > /dev/null 2>&1
check_result $? "DB migrated production"
# 初期データの挿入
echo "初期データ を作成しています"
# development
bundle exec rake db:seed > /dev/null 2>&1
check_result $? "DB seed development"
# production
bundle exec rake db:seed RAILS_ENV=production > /dev/null 2>&1
check_result $? "DB seed production"
# 起動
echo "サービス を起動しています"
./scripts/skyhopper_daemon.sh start > /dev/null 2>&1
check_result $? "SkyHopper started"
# SkyHopper の初期設定
IP=$(curl --silent http://169.254.169.254/latest/meta-data/public-ipv4)
echo "ブラウザから http://${IP} にアクセスし、SkyHopperの初期設定を行ってください"
echo "上記が終了後にEnterを押してください"
read -s -n 1 TEST < /dev/tty
# Chef Server の鍵を設置
echo "鍵 を作成しています"
cp -r ~/skyhopper/tmp/chef ~/.chef > /dev/null 2>&1
check_result $? "Chef key created"
# SkyHopper の再起動
echo "サービス を再起動しています"
./scripts/skyhopper_daemon.sh stop > /dev/null 2>&1
check_result $? "SkyHopper stoped"
./scripts/skyhopper_daemon.sh start
check_result $? "SkyHopper started"
echo "完了しました"