Rundeck on CentOS7 をセットアップするシェルスクリプト

#はじめに
CentOS7上に `Rundeck` を自動セットアップするシェルスクリプトです。
[以前投稿した内容](http://qiita.com/nagase/items/70070d79454ac96aa5a5)のCentOS6版を、CentOS7対応＆自動化した内容です。

- フロントエンドには `Nginx`（EPELリポジトリ）がセットアップされます。
- バックエンドDBには `MariaDB`（CentOS7 Baseリポジトリ）がセットアップされます。

#動作要件
CentOS7(minimalでも可)が最低限（ネットワーク、ホスト名等）設定済みであること。

#スクリプト
実行する前に、最低限`Environment variable`下にある以下の変数を、自分の環境に合わせて書き換えてください。

- `RUNDECK_HOST_NAME`: Rundeckを実行するサーバのFQDN名 ※名前解決できること
- `MYSQL_ROOT_PASSWORD`: MariaDBに設定するrootパスワード
- `MYSQL_PASSWORD`: MariaDBに登録されるユーザー`rundeck`のパスワード

```bash:rundeck_setup.sh
#!/bin/bash
##################################################
#
# Rundeck setting up on CentOS7
#
##################################################

##################################################
# Environment variable
##################################################
RUNDECK_HOST_NAME=rundeck.example.com
RUNDECK_PORT=4440
RUNDECK_REPO=http://repo.rundeck.org/latest.rpm
MYSQL_ROOT_PASSWORD=password
MYSQL_DATABASE=rundeck
MYSQL_USER=rundeck
MYSQL_PASSWORD=password
JAVA_VERSION=1.8.0

##################################################
# Exception routine
##################################################
exception() {
    echo "error: `basename $0`: line $LINENO: \`${BASH_COMMAND}\` failed."
    exit 1
}

trap "exception" ERR

##################################################
# MariaDB install & configuration
##################################################
yum -y install mariadb-server && yum clean all
if [ `grep character-set-server /etc/my.cnf.d/server.cnf | wc -l` -eq 0 ] ; then
    echo "character-set-server = utf8" | sed -i -e '/^\[mysqld\]/r /dev/stdin' /etc/my.cnf.d/server.cnf
fi
systemctl enable mariadb
systemctl start mariadb
mysql -u root <<EOF || true
DELETE FROM mysql.user WHERE User='';
UPDATE mysql.user SET Password=PASSWORD('${MYSQL_ROOT_PASSWORD}') WHERE User='root';
DROP DATABASE IF EXISTS test;
CREATE DATABASE IF NOT EXISTS ${MYSQL_DATABASE} DEFAULT CHARACTER SET utf8;
GRANT ALL PRIVILEGES ON ${MYSQL_DATABASE}.* TO '${MYSQL_USER}'@'localhost' IDENTIFIED BY '${MYSQL_PASSWORD}'  WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF

##################################################
# Rundeck install & configuration
##################################################
###2018.02.21 modified
#rpm -Uvh ${RUNDECK_REPO} || true
yum -y install ${RUNDECK_REPO}
yum -y install java-${JAVA_VERSION} rundeck && yum clean all

# configure rundeck-config.properties
if [ -f /etc/rundeck/rundeck-config.properties.orig ] ; then
    cp -p -f /etc/rundeck/rundeck-config.properties.orig /etc/rundeck/rundeck-config.properties
else
    cp -p /etc/rundeck/rundeck-config.properties /etc/rundeck/rundeck-config.properties.orig
fi
sed -i -e 's/^grails.serverURL/#&/' -e 's/^dataSource.dbCreate/#&/' -e 's/^dataSource.url/#&/' /etc/rundeck/rundeck-config.properties
cat <<EOF >>/etc/rundeck/rundeck-config.properties
rundeck.v14.rdbsupport = true
grails.serverURL=http://${RUNDECK_HOST_NAME}
dataSource.dbCreate = update
dataSource.url = jdbc:mysql://localhost/${MYSQL_DATABASE}?autoReconnect=true
dataSource.username = ${MYSQL_USER}
dataSource.password = ${MYSQL_PASSWORD}
EOF

# configuration framework.properties
if [ -f /etc/rundeck/framework.properties.orig ] ; then
   cp -p -f /etc/rundeck/framework.properties.orig /etc/rundeck/framework.properties
else
   cp -p /etc/rundeck/framework.properties /etc/rundeck/framework.properties.orig
fi
sed -i -e 's/^framework.server/#&/g' /etc/rundeck/framework.properties
cat <<EOF | sed -i -e '/#framework.server.url/r /dev/stdin' /etc/rundeck/framework.properties
framework.server.name = ${RUNDECK_HOST_NAME}
framework.server.hostname = ${RUNDECK_HOST_NAME}
framework.server.port = ${RUNDECK_PORT}
framework.server.url = http://${RUNDECK_HOST_NAME}:${RUNDECK_PORT}
framework.rundeck.url = http://${RUNDECK_HOST_NAME}
EOF

# rundeck start
systemctl restart rundeckd

##################################################
# Nginx install & configuration
##################################################
yum -y install epel-release
yum -y install nginx

# configuration nginx
if [ -f /etc/nginx/nginx.conf.orig ] ; then
    cp -p -f /etc/nginx/nginx.conf.orig /etc/nginx/nginx.conf
else
    cp -p /etc/nginx/nginx.conf /etc/nginx/nginx.conf.orig
fi
echo -e "\t\tproxy_pass http://${RUNDECK_HOST_NAME}:${RUNDECK_PORT};" | sed -i -e '/^ *location \//r /dev/stdin' /etc/nginx/nginx.conf
# nginx start
systemctl enable nginx
systemctl restart nginx
```
尚、実行中にエラーが発生した場合は、エラーの行番号とコマンドを表示して直ちに強制終了します。

#スクリプト終了後
正常終了したことを確認して `http://<Rundeckホスト名>` にアクセスすると、ログインページが表示されます。
ちなみに管理者アカウントの初期値は、ユーザー名、パスワード共に `admin` です。

#最後に
ご査収ください。