Home » Featured, Headline, 設定

LAMP環境用初期インストールのためのシェルスクリプト

2012 / 3 / 26 1 コメント

以前の記事で、CentOS6.2のkickstartによる自動インストールディスクイメージを作成しました。
これをさらに一歩進めて、LAMP環境で運用&開発するサーバの初期インストール用のシェルスクリプト(という名のコマンド羅列)を作成しました。このスクリプトを実行後に各種設定をしていく、という方向なので内容的にはだいぶ緩くサクっと作りました。何かの参考になれば幸いです。

ファイル:setup.sh

#!/bin/sh

## LOGFILE ##
LOGFILE=setuplog.txt

date  2>&1 | tee -a $LOGFILE

## YUM UPDATE ##
cp /etc/yum/pluginconf.d/fastestmirror.conf /etc/yum/pluginconf.d/fastestmirror.conf.default 2>&1 | tee -a $LOGFILE
sed -i -e "s/enabled=1/enabled=0/g" /etc/yum/pluginconf.d/fastestmirror.conf 2>&1 | tee -a $LOGFILE

rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm 2>&1 | tee -a $LOGFILE
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm 2>&1 | tee -a $LOGFILE
rpm --import http://download.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL 2>&1 | tee -a $LOGFILE
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi 2>&1 | tee -a $LOGFILE

yum --enablerepo=remi -y update 2>&1 | tee -a $LOGFILE
yum --enablerepo=remi -y install php-mysql php-mbstring php-mcrypt php-pear php-devel php-pecl-apc httpd httpd-devel mysql-server expect lynx vim-enhanced git phpMyAdmin pcre-devel unzip kernel-devel gcc make ntp perl wget patch vixie-cron 2>&1 | tee -a $LOGFILE

## IPTABLES SET ##
cp /etc/sysconfig/iptables-config /etc/sysconfig/iptables-config.default
/sbin/iptables-restore  < iptables.txt 2>&1 | tee -a $LOGFILE
service iptables save 2>&1 | tee -a $LOGFILE

## CONFIG FILE GENERATE ##
touch .exrc 2>&1 | tee -a $LOGFILE
cat custom_exrc.txt > .exrc 2>&1 | tee -a $LOGFILE
cat custom_bash_profile.txt >> .bash_profile 2>&1 | tee -a $LOGFILE

## PHP ##
cp /etc/php.ini /etc/php.ini.default
touch /var/www/html/info.php
cat << EOT >> /var/www/html/info.php
<?php
phpinfo();
?>
EOT

## NTP ##
cp /etc/ntp.conf /etc/ntp.conf_default

## Apache ##
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.default

## PhpMyAdmin ##
cp /usr/share/phpMyAdmin/config.sample.inc.php /usr/share/phpMyAdmin/config.inc.php

## MYSQL ##
cp /etc/my.cnf /etc/my.cnf.default

## PEAR ##
pear channel-discover pear.phpunit.de 2>&1 | tee -a $LOGFILE
pear channel-discover components.ez.no 2>&1 | tee -a $LOGFILE
pear channel-discover pear.symfony-project.com 2>&1 | tee -a $LOGFILE
pear update-channels 2>&1 | tee -a $LOGFILE
pear upgrade-all 2>&1 | tee -a $LOGFILE
pear install --alldeps phpunit/PHPUnit PhpDocumentor Mail Mail_mimeDecode 2>&1 | tee -a $LOGFILE

## SERVICE ##
chkconfig mysqld on
chkconfig httpd on
chkconfig ntpd on
chkconfig iptables on

date  2>&1 | tee -a $LOGFILE

##  RESTART ##
reboot

ファイル:iptables.txt(※2012-05-09修正済)

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-N MYCHAIN
-A MYCHAIN -m state --state ESTABLISHED,RELATED -j ACCEPT
-A MYCHAIN -p icmp -j ACCEPT
-A MYCHAIN -i lo -j ACCEPT
-A MYCHAIN -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT
-A MYCHAIN -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A MYCHAIN -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A MYCHAIN -m state --state NEW -m udp -p udp --dport 123 -j ACCEPT
-A MYCHAIN -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A MYCHAIN -m tcp -p tcp --dport 113 -j REJECT --reject-with tcp-reset
-A MYCHAIN -j DROP
-A INPUT -j MYCHAIN
COMMIT

ファイル:custom_bash_profile.txt

export CLICOLOR=1
export TERM=xterm-color
alias ll='ls -la'
alias less='/usr/bin/less -MN'
alias vi='vim'
alias today='date +%Y%m%d'
alias script='script `date +%Y%m%d%H%M%S`.typescript'
export PAGER=/usr/bin/less
export LESSCHARSET=utf-8
export LV='-la -Ou8'
HISTTIMEFORMAT='%Y-%m-%d %T '
export HISTTIMEFORMAT

ファイル:custom_exrc.txt

set encoding=japan
set fileencodings=utf-8,shift_jis,latin1,default,euc-jp
set number
set tabstop=4
解説

yumでのアップデート、各種パッケージのインストール、iptablesの設定、設定ファイルのコピー、pearパッケージのインストール、ソフトウェア自動起動の設定などを行います。yumはレポジトリの追加、webサーバ+PHP+MySQLが動くパッケージなどを記述しています(開発用としてgit、phpMyAdminやPHPUNIT、APCもインストール)。iptablesの設定内容は別途ファイル(iptables.txt)にしています。また、.bash_profileの設定や.exrc(vi用設定ファイル)なども別ファイルにて設定を行なっています。その他設定ファイルに関してはコピーするだけで設定自体は記述していません。もしこのシェルスクリプトを利用する人は、適当に改変して使ってください。それにしてもCentOS6.2minimalセットは本当に何も入ってないのですね・・・。

シェルスクリプト終了時にリブートします。また、スクリプトの実行結果をsetuplog.txtというファイルにログが残るようにしました。teeコマンドを利用しています。scriptコマンドも試したのですが、scriptコマンド自体を利用するシェルスクリプトファイルを用意しないといけなかったり、生成されたログファイルが冗長、かつ例の^Mが入っていたりで、とても見づらいものだったので今回はteeコマンドを使いました。

使い方としては、上記のスクリプトをコピペしたり、SFTPでゲストOSに送り込んだり、ネットワーク上から取得したあと、実行権限を付与して実行するだけです。
chmod +x setup.sh
./setup.sh

以前作成したディスクイメージを利用した自動インストールが6分程度、上記のスクリプトの実行時間が11分程度でした。(サーバの応答速度、通信環境、スペックなどによって多少異なります)

ks.cfgにipconfigの設定を書くことも出来るようなのですが、今回はテキストファイルに設定内容を書くことにしました。いろいろ使いまわせますし。

/var/www/html/にinfo.phpというファイルが生成されているはずなので、VirtualBoxのポートフォワーディングでhttp用のポート設定をしていれば、Mac側のブラウザでhttp://localhost:50080/info.phpなどでアクセスできます。これでapacheの動作確認やAPCのインストール確認などが出来るはずです。

最初、自動インストールディスクイメージにこのスクリプトファイルを収めようと思ったのですが、どうやらディスクに収めたファイルの実行は出来ないようです。kickstart時に使用したks.cfgファイルの%postディレクティブ以降に、ネットワーク上から上記のスクリプトを取得する設定をした上でスクリプトの実行をしてしまえば、ここまで完全に自動化が可能・・・かもしれません。

あとは各種ソフトの設定をすれば、ひとまずこれで実験用サーバを用意する土台を作れます。


[改訂新版] シェルスクリプト基本リファレンス  --#!/bin/shで、ここまでできる (WEB+DB PRESS plus)

[`evernote` not found]

1 コメント »

  • たろう said:

    こういうの探していました。
    参考になりました。

どうぞこの記事に関するコメントをお寄せ下さい

Add your comment below, or trackback from your own site. You can also subscribe to these comments via RSS.

Be nice. Keep it clean. Stay on topic. No spam.

これらのタグのみ使用出来ます:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

This is a Gravatar-enabled weblog. To get your own globally-recognized-avatar, please register at Gravatar.

*