OSSのサーバテスト自動化ツール徹底検証 2016年版 〜Serverspec編〜:実際に検証済み!OSS徹底比較(5)サーバテスト自動化【前編】(2/8 ページ)
各種オープンソースソフトウェアのうち、特に人気の高いOSSをピックアップ。実際の検証結果をまとめた本連載。今回と次回はサーバテスト自動化ツール「Serverspec」と「Infrataster」を紹介する。
検証環境
今回の検証は以下の環境で実施している。
- VMware ESXi上でCentOS 7.2のサーバを2台構築
- 双方でテスト実行用ユーザー(maintain)アカウントを作成
- Manager→nodeへのsshを、テスト実行用ユーザー(maintain)によって、パスワードなしの鍵認証で接続できる
- テスト実行用ユーザー(maintain)でログイン後、sudo/suコマンドをパスワードなしで実行できる
- サーバの名前解決ができるように、双方の/etc/hostsにホスト名とIPアドレスを登録している
- 各製品を同一環境で検証するために、この状態で双方のサーバのスナップショットを取得している
パスワードなしの鍵認証のログイン
サーバテスト自動化ツールを実行するためには、テスト実行ユーザーで、管理サーバからノードに対してパスワードなしのssh接続を行える必要がある。特にServerspecは鍵認証のidファイルを指定できないため、sshホスト名で接続できる必要がある。
また、サーバログイン後、テスト実行ユーザーはsudoによって管理者権限でコマンドを実行するが、パスワード認証があると止まってしまうため、sudoもパスワード認証なしに設定する。ただし、sudoコマンドでは管理者権限が付与されるが、実行ユーザーがテスト実行ユーザーのままであるため、本当にrootで実行する必要のあるコマンドがエラーになってしまう。それに対応するにはsu root -cでコマンドを実行する必要がある。よって、テスト実行ユーザーをwheelグループに所属させ、wheelグループに対して、su実行時のパスワードを不要にする設定を行う。
設定方法については、弊社技術ブログ「Tech-sketch」の記事「パスワード認証無しでSSH接続とsudoとsuを実行する方法」を参照いただきたい。
WordPressインストール用bashスクリプト
まず、WordPressのインストールが必要となるため、以下のbashスクリプトを作成、実行する。このスクリプトをsudoコマンドで実行することで、必要なパッケージのインストールおよび設定が行われる。本来は不要だが、Infratasterによる外部からの接続試験機能を確認するため、tcpdumpコマンドのインストールと、mariadb-serverの管理サーバログイン許可設定と、ファイアウォールのMySQLサービスのポート解放を追加で行っている。
#!/bin/bash # Parameter settings HOSTNAME="`hostname`" IP_ADDR="`hostname -i`" MYSQL_ROOT_PASS="FM11AD2+" WP_OS_USER="root" WP_OS_GROUP="root" WP_DB_NAME="WordPress" WP_DB_USER="wp_admin" WP_DB_PASS="HB-F1XDJ" WP_UNIQE_PHRSE="FX702PFX801PPB100FX860PPB700PB500PB750PAI1000" #WP_LATEST="http://wordpress.org/latest.tar.gz" WP_LATEST="https://ja.wordpress.org/latest-ja.tar.gz" # update packages yum update -y # install packages yum install -y wget mariadb-server httpd php php-mysql tcpdump # start/enable mariadb systemctl start mariadb systemctl enable mariadb # set mariadb root password mysql <<EOT update mysql.user set password=password("${MYSQL_ROOT_PASS}") where user = 'root'; flush privileges; EOT # restart mariadb systemctl restart mariadb # create /root/.my.cnf cat <<EOT > /root/.my.cnf [client] user = root password = "${MYSQL_ROOT_PASS}" [mysqladmin] user = root password = "${MYSQL_ROOT_PASS}" EOT chmod 600 /root/.my.cnf # restart mariadb systemctl restart mariadb # mariadb logrotate setting sed -i.bak -e '23,$ s/^#//' /etc/logrotate.d/mariadb # create wordpres db/user mysql -u root -p${MYSQL_ROOT_PASS} -vvv <<EOT create user "${WP_DB_USER}"@"localhost" identified by "${WP_DB_PASS}"; create database ${WP_DB_NAME}; grant all privileges on ${WP_DB_NAME}.* to "${WP_DB_USER}"@"localhost"; flush privileges; EOT # install wordpress curl ${WP_LATEST} | tar zx -C /var/www # create wordpress config sed -e "s/\(.*\)database_name_here\(.*\)/\1${WP_DB_NAME}\2/" \ -e "s/\(.*\)username_here\(.*\)/\1${WP_DB_USER}\2/" \ -e "s/\(.*\)password_here\(.*\)/\1${WP_DB_PASS}\2/" \ -e "s/\(.*\)password_here\(.*\)/\1${WP_DB_PASS}\2/" \ -e "s/\(.*\)put your unique phrase here\(.*\)/\1${WP_UNIQE_PHRSE}\2/" \ /var/www/wordpress/wp-config-sample.php > /var/www/wordpress/wp-config.php # chown wordpress files chown -R ${WP_OS_USER}:${WP_OS_GROUP} /var/www/wordpress # create wordpres httpd config cat <<EOT > /etc/httpd/conf.d/wordpress.conf <VirtualHost *:80> ServerName ${HOSTNAME} DocumentRoot /var/www/wordpress <Directory "/var/www/wordpress"> AllowOverride All Options -Indexes </Directory> <Files wp-config.php> order allow,deny deny from all </Files> </VirtualHost> EOT # modify httpd config sed -i.bak -e "s/ServerName www.example.com:80/ServerName ${HOSTNAME}/" /etc/httpd/conf/httpd.conf # start httpd systemctl start httpd systemctl enable httpd # other server grant setting mysql -u root -p${MYSQL_ROOT_PASS} -vvv <<EOT create user 'maintain'@'tissvv097' identified by "${WP_DB_PASS}"; grant all privileges on *.* to 'maintain'@'tissvv097'; flush privileges; EOT # open httpd port in firewall firewall-cmd --add-service=http --zone=public --permanent firewall-cmd --add-service=mysql --zone=public --permanent firewall-cmd --reload # Complete message echo "" echo "========================================" echo "Complete WordPress install" echo "http://${IP_ADDR}/wp-admin/install.php" echo "========================================"
Copyright © ITmedia, Inc. All Rights Reserved.