#!/bin/bash
############################################################
# Smart installer for redmine/chiliproject.
############################################################

export RAILS_ENV=production
export INSTALL_DIR=/opt/alminium
CP_VER=1.5.0
CP_ARC=https://www.chiliproject.org/attachments/download/129/chiliproject-1.5.0.tar.gz
RM_VER=2.2.0
RM_ARC=http://rubyforge.org/frs/download.php/76627/redmine-2.2.0.tar.gz
#RM_ARC=http://redmine.rubyforge.org/svn/tags
CPCMD='cp -fr'
RMCMD='rm -fr'

if [ "$USER" != 'root' ]
then
    echo "ALMiniumのインストールはルートユーザで行う必要があります。"
    echo "rootユーザもしくはsudoで実行してください。"
    exit 1  
fi

if [ ! -d cache ]
then
    mkdir cache
fi


if [ -f /etc/redhat-release ]
then
    APACHE_USER=apache
    MYSQLD='/etc/init.d/mysqld'
    MYSQL='mysql'
    CHK=`egrep "CentOS release 5|Red Hat Enterprise Linux .* 5" /etc/redhat-release`
    if [ "$CHK" != '' ]
    then
        OS='rhel5'
        echo "RHEL 5.x / CentOS 5.x / OEL 5.xが検出されました。"
        echo "RHEL 5.x / CentOS 5.x / OEL 5.xは、サポートされていません。"
        echo "インストールを中止します。"
        exit 1
    else
        OS='rhel6'
        echo "RHEL 6.x / CentOS 6.x / OEL 6.xが検出されました。"
    fi
elif [ -f /etc/system-release ]
then
    APACHE_USER=apache
    MYSQLD='/etc/init.d/mysqld'
    MYSQL='mysql'
    CHK=`egrep "Amazon Linux AMI" /etc/system-release`
    if [ "$CHK" != '' ]
    then
        OS='rhel6'
        echo "Amazon Linux AMIが検出されました。"
    fi
elif [ -f /etc/debian_version ]
then
    OS='debian'
    APACHE_USER=www-data
    MYSQLD='/etc/init.d/mysql'
#    TODO: -u -pを指定するとcreatedb.sqlの読み込みに失敗する
#    MYSQL="$MYSQL -u root -p"
    echo "Debian / Ubuntu が検出されました。"
    echo "インストールに失敗するかも知れませんが、お許しくださいm(__)m"
    echo ""
    echo "途中MySQLのパスワードを聞かれたら空のままエンターキーを押してください。"
    echo "MySQLのパスワードを設定するとインストールに失敗します。"
    echo "パスワードを設定したい場合は、ALMiniumのインストール完了後行ってください"
else
    CHK=`sw_vers | awk '$1 = "ProductName"{ _OS = $2 " " $3 " " $4; getline; print _OS,$2; exit }'`
    if [ "$CHK" != '' ]
    then
      OS='mac'
      APACHE_USER=www
      MYSQLD=/opt/local/share/mysql5/mysql/mysql.server
      MYSQLD=mysql
      CPCMD='cp -Rf'
      RMCMD='rm -Rf'
      echo "${CHK}が検出されました。"
    else
      echo "サポートされていないOSです。"
      echo "現在サポートされいているOSは、"
      echo ""
      echo "  * Ubuntu 12.04 Server"
      echo "  * Debian GNU/Linux 6.0"
      echo "  * RHEL/Oracle EL/CentOS/SL 6.0/6.1"
      echo "  * Amazon Linux AMI"
      echo "  * Mac OS X 10.7"
      echo "です。"
      exit
    fi
fi


if [ "$ALM_HOSTNAME" == "" ]
then
echo "*******************************************************"
echo "  ホスト名の設定"
echo "*******************************************************"
echo "ホスト名(IPアドレスもしくはDNS名)を入力してください。ホスト名はApacheのバーチャルホストで利用されます。"
echo "例えば、192.168.1.4をホスト名で入力すると、http://192.168.1.4/でアクセスすることになります。"
echo "(上記の設定ではhttp://localhost/では接続できないのでご注意ください)"
echo -n "ホスト名: "
read HOSTNAME
echo ""
echo ""
else
HOSTNAME=$ALM_HOSTNAME
fi

if [ "$SSL" == "" ]
then
echo "*******************************************************"
echo "  SSLのサポート"
echo "*******************************************************"
echo "SSLのサポートを有効にすると、httpsのみの接続を許可します。"
echo "httpでのアクセスは、全てhttpsのポートへ転送されるようになります。"
echo "SSLの証明書は認証機関により署名されたものではありません。通信の暗号化のみ"
echo "に利用します。"
echo "gitの利用では、"
echo ""
echo "  $ git config --global http.sslVerify false"
echo ""
echo "などのコマンドで、SSLの証明書を無効にする必要があります。"
echo ""
echo -n "SSL(https)サポートを有効にしますか?(y/N) "
read SSL
echo ""
echo ""
fi

source inst-script/config-email.sh

if [ -e inst-script/$OS/jenkins-install -a "$ENABLE_JENKINS" = "" ]
then
  echo -n "Jenkinsをインストールしますか?[y/N]"
  read ENABLE_JENKINS
fi

#if [ $TYPE = "" ]
#then
#    echo "redmine もしくは chiliprojectを選択してください。"
#    echo
#    echo " 1. chiliproject"
#    echo " 2. redmine"
#    echo
#    echo -n "番号を入力してください: "
#
#    read TYPE
#fi
TYPE=2

case $TYPE in
    1|chiliproject)
        TYPE=chiliproject
        ;;

    2|redmine)
        TYPE=redmine
        ;;
    *)
        echo "未定義のチケットシステムが選択されました。"
        echo "1もしくは2を入力してください。"
        exit 1
        ;;
esac


## install packages
if [ ! -f packages.installed ]
then
  source inst-script/$OS/pre-install
  touch packages.installed
fi

if [ ! -f theme/railsgun/license.txt ]
then
  git submodule init
  git submodule update
fi

if [ ! -f gems.installed ]
then
  source inst-script/gems
  touch gems.installed
fi

export RAKE=`which rake1.9.3`

if [ "$RAKE" = "" ]
then
  RAKE=rake
fi

$MYSQLD start

if [ "$MYSQL" = "" ]
then
  MYSQL=`which mysql`
  if [ "$MYSQL" = "" ]
  then
    MYSQL=`which mysql5`
  fi
fi

$MYSQL < config/createdb.sql

# install chiliproject
mkdir -p $INSTALL_DIR

if [ $TYPE = "chiliproject" ]
then
  if [ ! -f chiliproject-$CP_VER.tar.gz ]
  then
    wget $CP_ARC
  fi
  tar zxf chiliproject-$CP_VER.tar.gz
  cp -fr chiliproject-$CP_VER/* $INSTALL_DIR/
  rm -fr chiliproject-$CP_VER
fi
if [ $TYPE = "redmine" ]
then
  cd cache
  if [ ! -f redmine-$RM_VER.tar.gz ]
  then
    wget $RM_ARC
  fi

  if [ ! -f redmine-$RM_VER ]
  then

#    svn checkout $RM_ARC/$RM_VER redmine_$RM_VER
    tar zxf redmine-$RM_VER.tar.gz
  fi
  cd ..


  #(cd redmine-$RM_VER; patch -p1 -R < ../patch/redmine_disable_saltpassword.patch)

  $CPCMD cache/redmine-$RM_VER/* $INSTALL_DIR/
  $RMCMD cache/redmine-$RM_VER
fi

cp config/Gemfile.local $INSTALL_DIR/
cp config/database.yml $INSTALL_DIR/config/
cp config/scm.yml $INSTALL_DIR/config/
$CPCMD theme/* $INSTALL_DIR/public/themes/

# setup
pushd .
cd $INSTALL_DIR
bundle install --without development test postgresql sqlite
$RAKE generate_secret_token
$RAKE db:migrate
echo "ja" |RAILS_ENV=production $RAKE redmine:load_default_data

popd

# install plugins
source inst-script/redmine-plugins

# Customize
$MYSQL alminium < config/init.mysql

mkdir -p /etc/opt/alminium
$CPCMD etc/* /etc/opt/alminium/

mkdir -p $INSTALL_DIR/bin
mkdir -p /var/opt/alminium/git /var/opt/alminium/svn /var/opt/alminium/hg /var/opt/alminium/maven
$CPCMD bin/*  $INSTALL_DIR/bin/
$CPCMD hooks $INSTALL_DIR/

#chown $APACHE_USER.$APACHE_USER -R $INSTALL_DIR
#chown $APACHE_USER.$APACHE_USER -R /var/opt/alminium
chown -R $APACHE_USER:$APACHE_USER $INSTALL_DIR
chown -R $APACHE_USER:$APACHE_USER /var/opt/alminium

source inst-script/gen-email-config.sh

if [ "$ENABLE_JENKINS" = "y" ]
then
  source inst-script/$OS/jenkins-install
fi  

source inst-script/$OS/post-install

# プロジェクト作成時に自動的にリポジトリを作成するときに利用
#CHK=`egrep "reposman" /var/spool/cron/root`
#if [ "$CHK" = '' ]
#then
#  echo "* * * * * /opt/alminium/extra/svn/reposman.rb -g apache -o apache -s /var/opt/alminium/git -u /var/opt/alminium/git -r localhost --scm git" >> /var/spool/cron/root
#fi
