サーバセットアップ
ここ一週間ほどシェルスクリプトを書いてる。
何故か
というのも自宅のサーバがDOS系の攻撃を受けてたので、
それを防ぐ為にセキュリティ関連のサービスを導入。
元々、セキュリティ関連は何も入れてなかったんだけど、(ファイアウォールすら)
既に乗っ取られてる可能性もかなりありそう。
なので少し前に構築したばかりだけど、
もっかい一から構築する事にしたんだ。
構築するにあたって毎回手作業でやるのも面倒臭いから、
作業を自動化する為のシェルスクリプトを作る事に・・・
ってのが事の発端。
シェルから別のシェル呼び出し
少し詰まったけど、よく考えたら普通に
ファイル呼び出してやれば動くよね。シェルだから。
これがDOSバッチだとcallとかせにゃいかんけど。
ちなみに変数は別のシェルに引き継ぎたい場合、
exportを使って環境変数として宣言してやる。
設定ファイルをシェル内からヒアドキュメント形式でエクスポート
サービスの設定ファイル(mysqlだとmy.conf等)を、
予め実行シェルから相対位置に置いておき、
以下のようにシェルの中で cp によりコピーしてやってもいいが
cp my.conf /etc/my.conf
シェルの中に記述してしまいたい。(まぁ保守性は落ちるけど)
以下のように書く事で出来た。
cat > /etc/my.conf << _EOS_ [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock old_passwords=1 default-character-set = utf8 _EOS_
ヒアドキュメントより入力した内容をcatで
ファイルにリダイレクトしているだけ。
但し気をつけないといけないのが変数の扱い。
設定ファイルに変数を書きたい場合。
例えばpostfixのmain.cfに
myorigin = $mydomain
と書きたい場合、ヒアドキュメント内でそのまま書くと
$mydomainの部分がシェルの変数だと判断してしまうので、
出力されたmain.cfには変数の値に置き換えられて出力される。
この場合、シェルの中ではmydomainという変数が宣言されてないので、
myorigin =
と空のデータとして出力される。
これを防ぐにはヒアドキュメント内の$の前に\(バックスラッシュ)をつけて
エスケープしてやる必要がある。