いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.103 / 読者数:1049名

こんばんは、うすだです。

ご存知のかたはご存知だと思いますが(←情報量ゼロですね)、わたしの今の本業は、 組み込み Linux のプログラマーです。

最近の組み込み業界は、たいへん活気がよろしいようで、仕事がない! という状況に陥ったことは、入社以来ほとんどなかったように思います。

ここのところも、いくつかの仕事の中のひとつが、 24時間働けますか的な状況になる…はずでした。
しかし、ハードの不具合っぽい現象が発生したため、 調査結果を待つ状態になってしまっています。

とはいえ、納期が延びるという話は聞いてませんので、 今のうちにできるところはやっておかなければなりません。
でも、ドライバなどの場合、ハードがないと動作確認ができません。
仕様書を見て、えいやーと実装するしかありません。

Linux のドライバなども、対象のハードをエミュレートして、 単体テストができるようになっているといいのになーなんて思いながら、 近い将来のハードな日々に備えるべく、とりあえず的実装を進めておる次第です。

…オチはありませんので、今週も、はりきってまいりましょう!

今週のお題 - 設定ファイルを自動的に変更する

あらゆるものがめまぐるしく変化する今日この頃ですが、 ネットワークやシステムなどの変化も、 ドッグイヤーとかマウスイヤーという言葉自体が死語になっているかもしれないくらい、 激しさを増しております。

われわれの管理対象であるサーバや LAN なども、ご多分に洩れず、 変化を繰り返しているのではないかと思います。

ですので、一度設定したらおしまい、あとはほったらかしにしておいても大丈夫、 というわけにはいかないのが現状です。
環境の変化にあわせて、設定変更しないといけないことが多々あります。

でも、それをいちいち手でやっていては、大変ですよね。
各サーバ毎に、設定ファイルを書き換えるのも、面倒です。

というわけで今週は、設定ファイルの変更を、 なるべく手間をかけないで行う方法について、考えてみたいと思います。


時間帯や環境の変化などによって設定を切替えたい場合、 もっとも簡単に切替えを行う方法は、設定ファイルを複数用意しておき、 その都度コピーして置き換えることだと思います。

たとえば、postfix で、平日の9時〜18時と、それ以外の時間とで、 設定を切替える必要があるとします。(どんなシチュエーションだ…)
そんなときは、まず、それぞれの設定ファイルを準備します。

  /etc/postfix/main.cf.weekday     (平日9時〜18時用)
  /etc/postfix/main.cf.otherwise   (それ以外用)

そして、たとえば、平日の朝9時に、以下を実行して切替えればよいわけです。

  # cp -p /etc/postfix/main.cf.weekday /etc/postfix/main.cf
  # /etc/init.d/postfix reload
  (あるいは、/etc/rc.d/init.d/postfix reload などです。)

ちなみに、cp ではなく、シンボリックリンクでも構わないと思います。
(それぞれ一長一短ですので、実際に体験してみてくださいまし。)

  # ln -s main.cf.weekday /etc/postfix/main.cf
  # /etc/init.d/postfix reload

そして、平日の18時になったら、それ以外用のファイルに切替えます。

  # cp -p /etc/postfix/main.cf.otherwise /etc/postfix/main.cf
  # /etc/init.d/postfix reload

 

ただ、これを人間がやっていたら、あまり意味がありません。
せっかくですので、cron にやっていただきましょう。
以下のような、引数チェックのない、手抜き的スクリプトを用意します。

  #!/bin/sh
  if [ -f "/etc/postfix/main.cf.$1" ]; then
      cp -p "/etc/postfix/main.cf.$1" /etc/postfix/main.cf
      /etc/init.d/postfix reload
  fi

これを、 たとえば /usr/local/sbin/postfix_change.sh というファイル名で保存したら、 /etc/crontab に、以下を追加します。

  0  9 * * 1-5 root /usr/local/sbin/postfix_change.sh weekday
  0 18 * * 1-5 root /usr/local/sbin/postfix_change.sh otherwise

root 宛にメールが来るのはいやだなあと思われる貴兄は、 /dev/null にリダイレクトしてしまいましょう。
(異常終了に気づかないおそれがありますので、お勧めはしません。)

  0  9 * * 1-5 root /usr/local/sbin/postfix_change.sh weekday > \
  /dev/null 2>&1
  0 18 * * 1-5 root /usr/local/sbin/postfix_change.sh otherwise > \
  /dev/null 2>&1

ちなみに、cron ネタは、↓大昔にご紹介しております。
cron がわからないかたは、よろしければ、ご覧ください。

Vol.002 - 簡易バックアップ リローデッド
http://www.usupi.org/sysad/002.html


ただ単に設定ファイルをコピーするだけでなく、テンプレート・ファイルをもとに、 環境に合わせた設定ファイルをその都度作り出す、という方法も考えられます。

またまた postfix の例になってしまいますが、main.cf の中の、

  myhostname = ホスト名.ドメイン名

の部分が異なるだけで、あとはどのマシンも同じ設定内容で運用できるとしましょう。

この場合、main.cf のテンプレート・ファイルを用意し、 myhostname の部分を書き換えた main.cf を作成できるようにしておけば、 マシン毎に設定ファイルを用意する必要がなくなります。よね。

 

というわけで、まずは、テンプレート・ファイルを作ってみましょう。
現在ご使用の main.cf の myhostname の行を、以下のように変更します。
(usupi.org の部分は、それぞれのドメイン名をご使用ください。)

  myhostname = @MYHOSTNAME@.usupi.org

これを、main.cf.tmpl というファイル名で保存します。
そして、以下を実行します。

  # sed "s/@MYHOSTNAME@/`hostname -s`/" main.cf.tmpl > main.cf

…あ、それだけでした。
それぞれのマシンで上記を実行すれば、 それぞれのマシン用のファイルができあがります。


以上、設定ファイルを切替える簡単な方法を、いくつかご紹介しました。

ちなみに、わたしは、Linux の入ったノートを持ち歩いています。
会社と自宅とでは、ネットワークの設定が異なりますので、 上記のように各種設定を切替えるスクリプトを使って、 どちらの環境でも使えるようにしています。

…という具合に使うこともできますよ。
みなさんも、いろいろやってみてくださいませ。

宿題の答え

先週の宿題は、

  同じ項目で違う設定を複数指定すると、どちらが有効になるでしょうか?

でした。
(説明不足ですみません、sshd_config に関する宿題でした。)

その答は、『先に指定したほうが有効になる』、でした。

たとえば、以下のように設定した場合、

  PermitRootLogin yes
  PermitRootLogin no

前者が有効になりますので、root での使用が許可されます。

sshd_config の最初のほうに、PermitRootLogin yes と指定しているのを忘れて、 最後に PermitRootLogin no と書いても、有効にはなりません。
ご注意くださいませ。

 

さて、自由課題となっていた問題の答えも、さらっとご紹介しましょう。

まずは、AllowUsers,DenyUsers と PermitRootLogin との関係です。
結論から先に言いますと、許可しない設定のほうが、強くなります。
たとえば、

  AllowUsers root
  PermitRootLogin no

という設定にしても、root での使用は許可されません。また、

  PermitRootLogin yes
  DenyUsers root

という設定にしても、root での使用は許可されません。

また、AllowUsers,DenyUsers と AllowGroups,DenyGroups との関係は、 どうなのでしょうか。
先ほどの結果から想像できますが、許可しない設定のほうが勝ちます。
たとえば、lecter さんが doctor グループに属している場合、

  AllowUsers lecter
  DenyGroups doctor

としても、lecter さんは使用できません。逆に、

  AllowGroups doctor
  DenyUsers lecter

としても、やはり lecter さんは使用できません。

おそらくは、安全のため、禁止のほうが強く働く、 ということではないかと思います。
いずれにしましても、できる限り、重複しない設定にしたほうが無難だと思います。 お気をつけくださいませ。

今週の宿題

今週の宿題は、

  テンプレート・ファイルが更新されたら、自動的に設定ファイルを更新
  するようにしてみましょう。

です。

それぞれのファイルのタイムスタンプを見て、 テンプレート・ファイルのほうが新しい場合に、 設定ファイルを作り直せばよさそうです。
そして、このチェックを定期的に行うとしたら…

…あとは、各自でお悩みください。(^ε^)

あとがき

エレベーターに乗るとき、いつも疑問に思うことがあります。
それは、エレベーターがどの階にあると効率的なのか、ということです。

というのも、建物に入ってエレベーターに乗ろうとすると、 エレベーターが上のほうの階にあることが多く、イライラしてしまうからです。
特に、急いでいるときに最上階だったりすると、 絶望感と倦怠感と怒りと憤りがまとめてやってきそうなくらい、ゲンナリします。

とはいえ、大げさにゲンナリしているだけでは後向きですので、 ちょっと考えてみました。

 

もし、その建物から出ていくひとしかいないとしたら、エレベーターは、 ちょうどまん中にあればよいことになると思います。

たとえば、N 階建ての建物の場合、(N+1)/2 階にエレベーターがあると、 もっとも効率的だと言えます。(たぶん)

しかし、出ていくひとと同数の入ってくるひとがいるはずですので、その場合、 エレベーターは、まん中より少し下がよさそうですよね。

入ってくるひとは、みんな1階から乗りますので、先ほどの (N+1)/2 と、 1 の平均が、もっとも効率のよい階になると思います。(たぶん)
これを計算しますと、(N+3)/4 となります。(おそらく)

これが正しいとするなら、12階建てのうちのマンションは、 4階がベストポジションだ、ということになります。(たぶん)

しかしだからと言って、エレベーターを降りるとき、 いつも4階を押しているのかと言いますと、そんなことはなく、常に1階を押しています。

それは、ほとんどのひとが短い時間待つはめになるよりも、 大半のひとが待たなくてすむ、もっとも利用頻度の高い階にあるほうが、 イライラせずにすむのではないかと思っているからです。

 

というわけで、理論的に考えた解が、常に受け入れられるわけではない、 ということがよくわかりました。

だからなんなんだ、という声が聞こえてきそうですが、ようは、 これだけ考えたのに日の目をみないのはもったいないので、ここで公表しよう、 と思っただけなのでした。(ごめんなさい)

たいした考えたでもないのですが、ひさしぶりに数式を書いて考える、 という作業を行い、すっきりできました。
普段とは違う場所の脳みそを使うと、気持ちがいいもんですね。
みなさんも、機会があれば、違う場所の脳みそを使ってみてください。
(投げやりな締めで、ほんとに申し訳ありません…。)

 

今週も、ここまで読んでいただき、ありがとうございました。
それでは、また来週に、お会いしましょう!

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」−ブログパーツは、微妙に注目されていません。(TεT)
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://www.fumido.co.jp/kuriniki/ (栗日記ぎゃらりー)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本