シェルスクリプトでサーバーを半自動設定したいと思います。
その際によく使われるコードの組み立て方を教えてください。
例としてメールサーバーだったら、
最初のインストールは、シェルスクリプトに、
yum -y install postfix
と書けばいいと思うのですが、
「main.cf」等、設定ファイルの書き換え方などがわかりません。
具体的には、以下のようなことが必要だと思うのですが、どうすれば良いのでしょうか。
<シェルスクリプトでmain.cfを弄る時において>
・まずファイルを開く
・ある項目があるかないか、あってもコメントアウトされているかなどの判定。
・キーボードから対話的に入力しながら、「#myhostname」などのコメントを外して書き換え。
・ファイルの最終行へ必要項目を追加。
ほかにも、シェルスクリプトでのサーバー半自動設定によく使われる手法がありましたらお教えください。
インストール後の処理は、ぼくなら、こう書くと思います。
雰囲気、こんな感じになるか、と。
DEF=/var/opt/○○/main.cf # 内容を調べる XXX=`grep .... $DEF` # とか、 grep -q .... $DEF XXX=$? # とか、 # 対話的に設定値を入力 if [ "$XXX" == "" ] then echo .... read YYY fi # 設定ファイルを書き換え mv $DEF ${DEF}.backup cat ${DEF}.backup |\ sed -e "/xxxxx/s/xxxxx/yyyyy/" |\ ... awk ' END { print "xxxxxx" print "xxxxxx" ... } ' > $DEF
実際には、適宜、書き換えの処理なんかを関数にしたりするとは思いますが。
ほかにも、シェルスクリプトでのサーバー半自動設定によく使われる手法がありましたらお教えください。
perl のスクリプトで、ガツンと書いちゃう人が多いかも。
その場合は、ほぼ普通のプログラムなので、質問にあるようにファイルをオープンして、
内容を読みこんで、などなど、というような感じになるでしょう。
定義ファイルを行単位の配列で、全部読み込んでおいて、
それをループを回しながら処理する、という感じでしょうね。
Postfix に限った話をすれば、postconf コマンドで main.cf の内容を書き換えられます。
例えば、
# postconf -e myhostname=mx.example.com
とすると、設定する行が無ければ追加され、既にあれば置き換えられます。
ただ、どんな設定ファイルでも使える手は、なかなか無いと思います。
一から作るとしたら、それぞれの設定ファイル用にテンプレートを作り、そのテンプレートを使ってキーワードを置き換えていく、というのが現実的かと思います。
実際に試した事は無いですが、Webmin のソースファイルは参考になるかもしれません。Webmin 自体は Perl で書かれた CGI プログラムの塊なので、そこから使えるところを探し出して使えば、出来るとは思います。ただし、かなり面倒だと思いますが(^^;。
コメント(0件)