http://centossrv.com/ を参考に自分が使いやすそうなCentOSベースのサーバを作ってみる.

  1. CentOS5インストール
  2. 初期設定
    • これ以降はSSHで接続して利用する
    • 一般ユーザ追加
    • rootへはWheelグループが必要
    • yumパッケージの停止
    • SELinuxの停止
  3. Clam Anti Virusのインストール
  4. DNS機能のインストール

RAID系の機能

  • 3dm2再起動
    sudo /etc/rc.d/init.d/tdm2 restart

clamdのアップデート

  • 説明ページはyumを使ってるのに,いつまでもyumパッケージが出ない.
  • rpmのパッケージで更新
    yum remove clamav-db clamav clamd
    • clamdがデーモン,clamavが本体,clam-dbがウィルスデータベース?かな?
  • /etc/以下のconfファイルが更新されてしまうので,それはバックアップを取っておいた方が吉
  • rpm を取得
    wget http://packages.sw.be/clamav/clamav-db-0.94.2-1.el5.rf.i386.rpm
    wget http://packages.sw.be/clamav/clamav-0.94.2-1.el5.rf.i386.rpm
    wget http://packages.sw.be/clamav/clamd-0.94.2-1.el5.rf.i386.rpm
    rpm -ivH clamav-db-0.94.2-1.el5.rf.i386.rpm
    rpm -ivH clamav-0.94.2-1.el5.rf.i386.rpm
    rpm -ivH clamd-0.94.2-1.el5.rf.i386.rpm

samba

  • 設定を参考通りにやっていたが,いくつか問題が
  • 最初はうまく行っていたのだが,しばらくして失敗.
  • どうもドメインコントローラとの連携がうまく行ってないように見える.
  • ちなみにその時のログ
    [2009/01/18 08:37:43, 0] libsmb/nmblib.c:send_udp(793)
      Packet send failed to ***.***.**.255(137) ERRNO=Operation not permitted
    [2009/01/18 08:37:43, 0] nmbd/nmbd_packets.c:send_netbios_packet(163)
      send_netbios_packet: send_packet() to IP ***.***.**.255 port 137 failed
    [2009/01/18 08:37:43, 0] nmbd/nmbd_namequery.c:query_name(245)
      query_name: Failed to send packet trying to query name DOMAIN_NAME<1d>
  • 現ネットワークではWindowsドメインコントローラがあるので,それと連携したい
  • その連携のための設定がおかしかった.
    • 旧 smb.conf
      security = user
    • 新 smb.conf
      security = server
      password server = サーバ名
  • これでドメインコントローラの情報で認証ができた
  • しかし,これでもまだログにメッセージが出てる.
    [2009/01/24 11:26:08, 0] nmbd/nmbd_packets.c:send_netbios_packet(163)
      send_netbios_packet: send_packet() to IP ***.***.**.255 port 137 failed
    [2009/01/24 11:26:08, 0] nmbd/nmbd_nameregister.c:register_name(512)
      register_name: Failed to send packet trying to register name DOMAIN_NAME<1e>
  • 調べてみると,インタフェースの設定が悪かったっぽい.
    interfaces = eth0 lo
  • 設定を追加したらエラーログがぴたりと止んだ.
  • これでOKっぽい

yumが壊れた!

  • yumによるアップデートが壊れた。
  • まず、下記の様なエラーを言われる。
    /etc/cron.daily/yum.cron:
    
    Error: Cannot retrieve repository metadata (repomd.xml) for repository: base-source. Please verify its path and try again
  • yum-cronを有効にしてたが、何故かリポジトリデータが無いと言われる。
  • テンポラリだろ、と思って放っておいたら、事態が悪化した。
    /etc/cron.daily/yum.cron:
    
    Traceback (most recent call last):
     File "/usr/bin/yum", line 29, in ?
       yummain.user_main(sys.argv[1:], exit_code=True)
     File "/usr/share/yum-cli/yummain.py", line 229, in user_main
       errcode = main(args)
     File "/usr/share/yum-cli/yummain.py", line 104, in main
       result, resultmsgs = base.doCommands()
     File "/usr/share/yum-cli/cli.py", line 343, in doCommands
       return self.yum_cli_commands[self.basecmd].doCommand(self, self.basecmd, self.extcmds)
     File "/usr/share/yum-cli/yumcommands.py", line 645, in doCommand
       return base.doShell()
     File "/usr/share/yum-cli/cli.py", line 284, in doShell
       yumshell.script()
     File "/usr/share/yum-cli/shell.py", line 78, in script
       self.onecmd(line)
     File "/usr/lib/python*.*/cmd.py", line 218, in onecmd
       return self.default(line)
     File "/usr/share/yum-cli/shell.py", line 101, in default
       self.base.doCommands()
     File "/usr/share/yum-cli/cli.py", line 339, in doCommands
       self._getTs(needTsRemove)
     File "/usr/lib/python*.*/site-packages/yum/depsolve.py", line 101, in _getTs
       self._getTsInfo(remove_only)
     File "/usr/lib/python*.*/site-packages/yum/depsolve.py", line 112, in _getTsInfo
       pkgSack = self.pkgSack
     File "/usr/lib/python*.*/site-packages/yum/__init__.py", line 591, in <lambda>
       pkgSack = property(fget=lambda self: self._getSacks(),
     File "/usr/lib/python*.*/site-packages/yum/__init__.py", line 446, in _getSacks
       self.plugins.run('exclude')
     File "/usr/lib/python*.*/site-packages/yum/plugins.py", line 176, in run
       func(conduitcls(self, self.base, conf, **kwargs))
     File "/usr/lib/yum-plugins/versionlock.py", line 52, in exclude_hook
       (n,a,e,v,r) = pkg._pkgtup()
     File "/usr/lib/python*.*/site-packages/yum/sqlitesack.py", line 149, in __getattr__
       raise KeyError, str(e)
    KeyError: 'no such column: _pkgtup'
  • 原因を調べてたら、どうもCentOSの5.3リリースが元みたい。
  • 何らかの原因でyumのデータが壊れることはあるみたいで、猫ぐらし*2*3さんの情報によればyumのキャッシュやrpmのデータベースが壊れることが原因でもおきるみたいだ。
  • んが、それを試すも何してもダメ。
  • yum info yum とかしても同じエラーが出る。
  • ほとんど、pythonからのエラーだから、何とも言えないが、どうも前回のyum-updateの時に何か悪さをするファイルが残ってしまい、結果としてyum-updateできなくなってるっぽい。
  • /var/logのyum.logを見てみると、エラーが変わった日にyumがアップグレードされていた!!
  • どうも、yumのアップグレードと、CentOS5.3のリリースが重なったことが原因?みたい
  • #厳密には違うかもしれんが
  • という訳で、一大決心をしてyumを再インストールすることに!!
    $ rpm -e --allmatches yum --test   ←試しにyumをrpmで削除してみる
                                       ↓依存性の問題を言われたので、全部削除してみた
    $ rpm -e --allmatches --test yum yum-cron yum-fastestmirror yum-downloadonly yum-priorities yum-versionlock yum-utils
    $ wget ****.rpm                    ←削除するrpmパッケージたちをあらかじめダウンロード(このとき、念のため5.2からダウンロードした。元の木阿弥?)
                                       ↓-testを外して削除
    # rpm -e --allmatches yum yum-cron yum-fastestmirror yum-downloadonly yum-priorities yum-versionlock yum-utils
    # rpm --rebuilddb                  ←何となくデータベースを再構築
                                       ↓ダウンロードしておいたrpmパッケージをすべてrpmにインストール!
    # rpm -i yum-cron-***.rpm yum-downloadonly-***.rpm yum-fastestmirror-***.rpm yum-priorities-***.rpm yum-utils-***.rpm yum-versionlock-***.rpm
    # /etc/rc.d/init.d/yum-cron start
    # chkconfig yum-cron on
    $ chkconfig --list yum-cron
  • これで一段落
  • 問題はこれで明日の晩、本当にアップデートが行われるか、だ。(執筆時、アップデート待ち)
  • 結局同じエラーメールが表示されて何もアップデートされなかった.
  • 仕方ないので,同じ作業を繰り返し,今度は
    sudo yum update
  • を実行して無事アップデートされた.
  • どうも,yumが最初にupdateされ,そのとき何やら問題が起きて,何かロック的なものが発生し,以降全てのアップデートがキャンセルされるっぽい.
  • なぞだ.しかしyumの再インストールで何とかなってよかった.それだけは良かった.

Logwatch系の問題 (something related to logwatch)

  • 必死に色々scriptsを修正してきたんだが,殆どの問題はlogwatchがアップデートされてないことに起因するものだった.
  • もう馬鹿らしくなった.読むのやめやめ.

CentOSで"named[****]: network unreachable resolving 'hogehoge': *::*:*:*:53"なログが出つづける

  • ブログpoohSec参照*4
  • CentOS 5.3 から 5.4へのアップデートで発生した模様
  • IPV6を無効にする方法がbind内で変わったための模様
    # vi /etc/sysconfig/named
     +OPTIONS="-4"
  • 上記1行を/etc/sysconfig/namedに追記してbindを再起動すればよい

LogwatchのNamed Beginに**Unmatched Entries**が大量に出る

  • /usr/share/logwatch/scripts/services/named の 各箇所
  • DNSをDHCPによる更新を有効にした状態で発生
    --------------------- Named Begin ------------------------
    
    **Unmatched Entries**
      client ***.***.***.*** view hogehoge: update '***.***.***.***.in-addr.arpa/IN' denied: 24 Time(s)
      client ***.***.***.*** view hogehoge: update '***.***.***.ac.jp/IN' denied: 75 Time(s)
      connection refused resolving '****.****.com/A/IN': ***.***.***.***#53: 1 Time(s)
      connection refused resolving '****.****.com/A/IN': ***.***.***.***#53: 1 Time(s)
    
    ---------------------- Named End -------------------------
  • どうも,named.confでview を使ってたのが原因のようで,ログに吐かれるフォーマットが違ったっぽい.
  • 以下のように置き換えた
    1. #    } elsif ( ($Host, $Zone) = ( $ThisLine =~ /client ([^\#]+)#[^\:]+: zone transfer '(.+)' denied/ ) ) {
    2. +    } elsif ( ($Host, $Zone) = ( $ThisLine =~ /client ([^\#]+)#[^\:]+: [^\:]+: zone transfer '(.+)' denied/ ) ) {
    1. #    } elsif ( ($Zone,$Message) = ( $ThisLine =~ /client [^:]+: [^:]+: updating zone '([^']+)': (.*)$/ ) ) {
    2. +    } elsif ( ($Zone,$Message) = ( $ThisLine =~ /client [^\#]+#[^\:]+: [^\:]+: updating zone '([^\:]+)': (.*)$/ ) ) {
    1. #    } elsif ( ($Rhost, $Ldom) = ($ThisLine =~ /client ([\d\.]+)#\d+: update '(.*)' denied/)) {
    2. +    } elsif ( ($Rhost, $Ldom) = ($ThisLine =~ /client ([\d\.]+)#\d+: [^\:]+: update '(.*)' denied/)) {
  • Logwatch側ではConnection refusedだったのが,namedのmessagesではconnection refusedと,違いがあった
    1. #       ($ThisLine =~ /Connection refused/) or
    2. +       ($ThisLine =~ /connection refused/) or

postfix に大量のUnmatched Entries

  • logwatchをamavisに対応させた.
  • postfixにamavisを噛ませると,postfixのログが変化するので,大量のUnmatched Entriesがlogwatchに現れる.

postfix-logwatch

  • まずはmake
    cd /tmp/
    wget http://www.mikecappella.com/logwatch/release/postfix-logwatch-1.37.08.tgz
    tar zxvf postfix-logwatch-1.37.08.tgz
    cd postfix-logwatch-1.37.08
    sudo make install-standalone    // install とか makeとかあったんだけれど,とりあえずinstall-standaloneを実行
  • 設定ファイルと実行ファイルが以下のようにできる
    • /usr/local/etc/postfix-logwatch.conf に新設定ファイル
    • /usr/local/bin/postfix-logwatch に新実行ファイル
  • 現logwatchの退避
    cd /usr/share/logwatch/default.conf/services/
    mv postfix.conf postfix.conf.20090309
    cd /usr/share/logwatch/scripts/services/
    sudo mv postfix postfix.20090309
  • 新logwatchと置き換え
    cd /usr/local/etc/
    sudo mv postfix-logwatch.conf /usr/share/logwatch/default.conf/services/postfix.conf
    sudo chown root:root /usr/share/logwatch/default.conf/services/postfix.conf
    sudo chmod 644 /usr/share/logwatch/default.conf/services/postfix.conf 
    cd /usr/local/bin/
    sudo mv postfix-logwatch /usr/share/logwatch/scripts/services/postfix
    sudo chown root:root /usr/share/logwatch/scripts/services/postfix
    sudo chmod 755 /usr/share/logwatch/scripts/services/postfix 

amavis-logwatch

  • まずはmake
    wget http://www.mikecappella.com/logwatch/release/amavis-logwatch-1.49.09.tgz
    tar zxvf amavis-logwatch-1.49.09.tgz
    cd amavis-logwatch-1.49.09
    make install-standalone
  • 設定ファイルと実行ファイルが以下のようにできる
    • /usr/local/etc/amavis-logwatch.conf に新設定ファイル
    • /usr/local/bin/amavis-logwatch に新実行ファイル
  • 現logwatchの退避
    cd /usr/share/logwatch/default.conf/services/
    sudo mv amavis.conf amavis.conf.20090309
    cd /usr/share/logwatch/scripts/services
    mv amavis amavis.20090309
  • 新logwatchと置き換え
    cd /usr/local/etc/
    sudo mv amavis-logwatch.conf /usr/share/logwatch/default.conf/services/amavis.conf
    sudo chown root:root /usr/share/logwatch/default.conf/services/amavis.conf
    sudo chmod 644 /usr/share/logwatch/default.conf/services/amavis.conf
    cd /usr/local/bin/
    sudo mv amavis-logwatch /usr/share/logwatch/scripts/services/amavis
    sudo chown root:root /usr/share/logwatch/scripts/services/amavis
    sudo chmod 755 /usr/share/logwatch/scripts/services/amavis

編集

  • 実行したら
    --------------------- Amavisd-new Begin ------------------------ 
    
     "-T" is on the #! line, it must also be used on the command line at /usr/share/logwatch/scripts/services/amavis line 1.
    
    ---------------------- Amavisd-new End ------------------------- 
  • なるメッセージが現れた。
  • postfixも同じく
  • 調べると、/usr/share/logwatch/scripts/services/以下のスクリプトの1行目に
    #! /bin/perl -T
  • って1行があったのでそれぞれ削除
  • logwatchが縮小された.

LogwatchのSambaに日本語のエラーメッセージ

  • 「通信端点が接続されていません」というエラーメッセージがUnmatched Entriesに出力される
    • 本来は"Transport endpoint is not connected"なのだが,日本語環境下では上記のように日本語で出力される.
    • そのため,Logwatchのスクリプトに引っかからず,Unmatched Entriesになる
    • 解決策:以下のメッセージをscripts/services/sambaの68行目に追加
  1.       ($ThisLine =~ /smbd\/server.c:open_sockets_smbd\(\d+\)  Reloading services after SIGHUP/) or
  2.       ($ThisLine =~ /lib\/util_sock.c:get_peer_addr\(\d+\)  getpeername failed. Error was Transport endpoint is not connected/) or
  3. +      ($ThisLine =~ /lib\/util_sock.c:get_peer_addr\(\d+\)  getpeername failed. Error was/) or
  4.       ($ThisLine =~ /add_domain_logon_names/) or
  5.       ($ThisLine =~ /become_domain_master/) or
  • 本来の英語のメッセージは元のスクリプトでは無視されてるので,日本語もそれに準拠
  • 文字コードの問題か,日本語がマッチしないので,英語の部分だけでマッチ部分を記述
  • 「接続が相手からリセットされました」というコメントが出ることもある
    • これは本来sambaのバグのようで,英語ではSocketReadErrorとしてカウントしている
    • 何かの仕様変更か,lib/util_sock.cが436という返り値を返す代わりに540という返り値を返している(言語の影響?)ので,scripts/services/sambaの134行目に以下を追記
  1.    } elsif ( ( $ThisLine =~ /lib\/util_sock.c:read_data\(436\)/ ) ) {
  2.                 # This is due to a nasty bug in samba which causes it to drop connections :-(
  3.                 $SocketReadError++;
  4. +   } elsif ( ( $ThisLine =~ /lib\/util_sock.c:read_data\(540\)/ ) ) {
  5. +                # This is due to a nasty bug in samba which causes it to drop connections :-(
  6. +                $SocketReadError++;
  7.    } elsif (
  • 同様に,write_dataでもエラーを吐いていた.
  • 従来のlogwatchスクリプトにはwrite_socket_dataとかwrite_socketという関数(?)で実装されていたのが,名前が変更になった模様.
  • なので,139行目に以下を追記
  1.    } elsif (
  2.       ( $ThisLine =~ /lib\/util_sock.c:write_socket\(\d+\)  write_socket: Error writing \d bytes to socket/ ) or
  3.       ( $ThisLine =~ /lib\/util_sock.c:write_socket_data\(\d+\)  write_socket_data: write failure./ ) or
  4. +      ( $ThisLine =~ /lib\/util_sock.c:write_data\(\d+\)  write_data: write failure/ ) or
  5.       ( $ThisLine =~ /lib\/util_sock.c:send_smb\(\d+\)  Error writing \d bytes to client. / )
  6.    ) {

amavis でエラー

  • amavis と clamdの組み合わせにおいて,下記エラーがlogwatchに毎日出現
    • **Unmatched Entries**
    • (!!)WARN: all primary virus scanners failed, considering backups: * Time(s)
    • (!!)ClamAV-clamd av-scanner FAILED: CODE(0x9b37d3c) Too many retries to talk to /var/run/clamav/clamd.sock (Can't connect to UNIX socket /var/run/clamav/clamd.sock: \343\201\235\343\201\256\343\202\210\343\201\206\343\201\252\343\203\225\343\202\241\343\202\244\343\203\253\343\202\204\343\203\207\343\202\243\343\203\254\343\202\257\343\203\210\343\203\252\343\201\257\343\201\202\343\202\212\343\201\276\343\201\233\343\202\223) at (eval **) line **. at (eval **) line ***.: * Time(s)
    • (!)ClamAV-clamd: Can't connect to UNIX socket /var/run/clamav/clamd.sock: \343\201\235\343\201\256\343\202\210\343\201\206\343\201\252\343\203\225\343\202\241\343\202\244\343\203\253\343\202\204\343\203\207\343\202\243\343\203\254\343\202\257\343\203\210\343\203\252\343\201\257\343\201\202\343\202\212\343\201\276\343\201\233\343\202\223, retrying (*): * Time(s)
    • (!)run_av (ClamAV-clamd, built-in i/f): Too many retries to talk to /var/run/clamav/clamd.sock (Can't connect to UNIX socket /var/run/clamav/clamd.sock: \343\201\235\343\201\256\343\202\210\343\201\206\343\201\252\343\203\225\343\202\241\343\202\244\343\203\253\343\202\204\343\203\207\343\202\243\343\203\254\343\202\257\343\203\210\343\203\252\343\201\257\343\201\202\343\202\212\343\201\276\343\201\233\343\202\223) at (eval *) line ***.: * Time(s)
  • \と数字の組み合わせの羅列は「そのようなファイルやディレクトリはありません」と書いてあるのが,文字化け?したもの.
  • 日本語をUTF-8で表示し,各文字のバイトを8進数で表して\で区切ったもの
  • 要は,ソケット通信に失敗していたことを表すエラー
  • 今回の現象ではclamdのソケットの場所を変更していたが為に発生した
  • clamd.conf でデフォルトのソケットの位置は
    1. LocalSocket /tmp/clamd.socket
  • だが,これを下記のように変更していた.
    1. LocalSocket /var/run/clamav/clamd.sock
  • これが,clamdのアップデートで初期設定に書き戻されていた.
  • 再び編集を書き換えて再起動
    # /etc/rc.d/init.d/clamd restart

CentOSのログに dumping master file: tmp-hogehoge: open: permission denied というエラーが出つづける

  • 症状:上記のメッセージがLogに現れつづける
  • 原因:bindがupdateされていた
    • 本来tmp-hogehogeが保存されるディレクトリはowner=named,group=namedだった
    • updateされたときに,当該ディレクトリのowner=rootに変わっていた
    • 繰り返しメッセージが現れたのは,動的にDNSを更新していたから
  • 対処方法:
    • 原始的だけれど,当該ディレクトリの所有者をnamedに戻す
      # chown named /var/some/directory/
    • 何でrootになったのかは分からないけれど,bindはnamedと言うユーザ,グループで動かすのが推奨されている.

*1  ドライバ入れろー的な
*2  猫ぐらし: yumでエラーが出る場合の対処, 2005-11-19発表, 2009-04-30閲覧
*3  猫ぐらし: [FC4]Yumでエラーが出た場合の対応, 2006-05-18発表, 2013-03-27閲覧
*4  CentOS 5.4 named network unreachable resolving - poohSec, 2009-11-01発表, 2013-03-27閲覧
*5  Logreporters: Postfix and Amavis Log Reporters, 2013-03-27閲覧

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-03-27 (水) 13:13:03 (1703d)