Bash
shell
シェル
centos7
rundeck

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

はじめに

CentOS7上に Rundeck を自動セットアップするシェルスクリプトです。
以前投稿した内容の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のパスワード
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 です。

最後に

ご査収ください。