CentOS4 の syslog を rsyslog に入れ替える

提供:maruko2 Note.
移動: 案内, 検索

目次


RPM パッケージを利用する方法では、Repoforge (RPMforge) でバージョン2系が配布されているので、それを利用する。

ソースコードをビルドする方法では、最新バージョン(バージョン 3, 4, 5)でもインストールが可能。

バージョンが上がることで、どの様な機能が追加されたかは Features rsyslog で確認できる。

RPM パッケージを利用する方法

Repoforge (RPMforge) で配布されているのでダウンロードする。

インストールしようとすると /etc/logrotate.d/syslog がコンフリクトすると警告がでる。

[shell]# rpm -ihv rsyslog-2.0.6-0.1.el4.rf.x86_64.rpm 
警告: rsyslog-2.0.6-0.1.el4.rf.x86_64.rpm: V3 DSA signature: NOKEY, key ID 6b8d79e6
Preparing...                ########################################### [100%]
	file /etc/logrotate.d/syslog from install of rsyslog-2.0.6-0.1.el4.rf conflicts with file from package sysklogd-1.4.1-28.el4

コンフリクトの警告を回避するため、--force で強制インストールする。

rpm -ihv --force rsyslog-2.0.6-0.1.el4.rf.x86_64.rpm

インストール済みの syslog(sysklogd パッケージ)をアンインストールする必要はない。

rsyslog の設定ファイル rsyslog.conf は、syslog.conf の初期内容と同じになっている。

rsyslog.conf は syslogd.conf と互換性があるため、syslog.conf の設定を rsyslogd.conf にコピーするだけで使える。

syslog デーモンを停止後、rsyslogd デーモンを起動。

/etc/init.d/syslog stop
/etc/init.d/rsyslogd start

自動起動も設定しておく。

chkconfig syslog off
chkconfig rsyslog on

インストール時にコンフリクトが起きる原因

インストール時にコンフリクトが起きる原因は、sysklogd パッケージと rsyslog パッケージに同名のファイル /etc/logrotate.d/syslog があるため。 内容を比較すると、rsyslog パッケージの方に5行目が追加されているだけ。

sysklogd パッケージの /etc/logrotate.d/syslog

  1. /var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
  2.     sharedscripts
  3.     postrotate
  4. 	/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
  5.     endscript
  6. }

rsyslog パッケージの /etc/logrotate.d/syslog

  1. /var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
  2.     sharedscripts
  3.     postrotate
  4. 	/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
  5. 	/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
  6.     endscript
  7. }

インストールされる主なファイル

sysklogd パッケージと rsyslog パッケージは logrotate 用のファイルだけが同名なだけで、他のファイルは共存できる。

sysklogd パッケージ rsyslog パッケージ
/etc/logrotate.d/syslog
/etc/rc.d/init.d/syslog
/etc/sysconfig/syslog
/etc/syslog.conf
/sbin/klogd
/sbin/syslogd
/usr/share/doc/sysklogd-1.4.1
...
/etc/logrotate.d/syslog
/etc/rc.d/init.d/rsyslog
/etc/rsyslog.conf
/etc/sysconfig/rsyslog
/sbin/rfc3195d
/sbin/rklogd
/sbin/rsyslogd
/usr/lib64/rsyslog
/usr/share/doc/rsyslog-2.0.6
...

最新版のソースコードをビルドする方法

  1. 適当なディレクトリに make install する。
  2. rsyslog.conf はソースコード付属のファイルを使用。
  3. その他のファイル(起動スクリプトなど)は syslog のファイルをコピー&編集して使う。
  4. 自動起動の設定を変更する。

手順

  1. ソースコードをビルドする。
  2. 最新バージョンの stable 版をダウンロードし、ビルドする。

    どこにインストールするかは、好みの問題なので適当に。データベースへアウトプットするモジュールや、アラートメールを送るモジュールが必要ならば、./configure --help で確認。

    [shell]# ./configure --prefix=/usr/local/rsyslog
    [shell]# make
    [shell]# make install
    
  3. 設定ファイル rsyslog.conf は、ソースコード付属のファイルをコピー&編集して使う。
  4. cp rsyslog.conf /etc/
    

    ソースコード付属の rsyslog.conf は、ログを記録する設定内容が syslog.conf の初期設定と同じになっている。syslog.conf をカスタマイズしている場合は、カスタマイズ部分をそのまま rsyslog.conf にコピーするだけでよい。

  5. 起動スクリプトはインストールされないので、syslog のファイルをコピー&編集して使う。
  6. [shell]# cp /etc/init.d/{syslog,rsyslog}
    [shell]# cp /etc/sysconfig/{syslog,rsyslog} 
    

    /etc/init.d/rsyslog の編集部分

    1. syslog と書かれている部分をすべて rsyslog に置換する。(小文字のみ)
    2. 20, 37 行目の rsyslogd のパスをインストールしたパスに変更する。
    3. klogd は使用しないので、21, 28, 40-42, 47-49, 59, 80-85 行目をコメントアウトする。
    #!/bin/bash
    #
    # rsyslog        Starts rsyslogd/klogd.
    #
    #
    # chkconfig: 2345 12 88
    # description: Syslog is the facility by which many daemons use to log \
    # messages to various system log files.  It is a good idea to always \
    # run rsyslog.
    ### BEGIN INIT INFO
    # Provides: $rsyslog
    ### END INIT INFO
     
    # Source function library.
    . /etc/init.d/functions
     
    RETVAL=0
     
    start() {
    	[ -x /usr/local/rsyslog/sbin/rsyslogd ] || exit 5
    #	[ -x /sbin/klogd ] || exit 5
     
    	# Source config
    	if [ -f /etc/sysconfig/rsyslog ] ; then
    		. /etc/sysconfig/rsyslog
    	else
    		SYSLOGD_OPTIONS="-m 0"
    #		KLOGD_OPTIONS="-2"
    	fi
     
    	if [ -z "$SYSLOG_UMASK" ] ; then
    	      SYSLOG_UMASK=077;
    	fi
    	umask $SYSLOG_UMASK
     
     	echo -n $"Starting system logger: "
    	daemon /usr/local/rsyslog/sbin/rsyslogd $SYSLOGD_OPTIONS
    	RETVAL=$?
    	echo
    #	echo -n $"Starting kernel logger: "
    #	daemon klogd $KLOGD_OPTIONS
    #	echo
    	[ $RETVAL -eq 0 ] && touch /var/lock/subsys/rsyslog
    	return $RETVAL
    }	
    stop() {
    #	echo -n $"Shutting down kernel logger: "
    #	killproc klogd
    #	echo
    	echo -n $"Shutting down system logger: "
    	killproc rsyslogd
    	RETVAL=$?
    	echo
    	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/rsyslog
    	return $RETVAL
    }
    rhstatus() {
    	status rsyslogd
    #	status klogd
    }
    restart() {
    	stop
    	start
    }	
    reload()  {
        RETVAL=1
        rsyslog=`cat /var/run/rsyslogd.pid 2>/dev/null`
        echo -n "Reloading rsyslogd..."
        if [ -n "${rsyslog}" ] && [ -e /proc/"${rsyslog}" ]; then
            kill -HUP "$rsyslog";
            RETVAL=$?
        fi
        if [ $RETVAL -ne 0 ]; then
            failure
        else
            success
        fi
        echo
        RETVAL=1
    #    echo -n "Reloading klogd..."
    #    klog=`cat /var/run/klogd.pid 2>/dev/null`
    #    if [ -n "${klog}" ] && [ -e /proc/"${klog}" ]; then
    #        kill -USR2 "$klog";
    #        RETVAL=$?
    #    fi
        if [ $RETVAL -ne 0 ]; then
            failure
        else
            success
        fi
        echo
        return $RETVAL
    }
     
     
    case "$1" in
      start)
      	start
    	;;
      stop)
      	stop
    	;;
      status)
      	rhstatus
    	;;
      restart)
      	restart
    	;;
      reload)
            reload
            ;;
      condrestart)
      	[ -f /var/lock/subsys/rsyslog ] && restart || :
    	;;
      *)
    	echo $"Usage: $0 {start|stop|status|restart|condrestart}"
    	exit 2
    esac
     
    exit $?

    /etc/sysconfig/rsyslog の編集部分

    SYSLOGD_OPTIONS="-m 0" となっている部分を、インストールした rsyslog のバージョンに合わせ SYSLOGD_OPTIONS="-c5" のように書き換える。

    /etc/logrotate.d/syslog の編集部分

    /var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
    	sharedscripts
    	postrotate
    #		/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    		/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
    	endscript
    }
  7. 自動起動の設定を変更する。
  8. chkconfig syslog off
    chkconfig rsyslog on
    

インストールができたら、syslog を停止し rsyslog を起動する。

/etc/init.d/syslog stop
/etc/init.d/rsyslog start

参考サイト

LINEで送る このエントリーをはてなブックマークに追加
個人用ツール
名前空間
変種
表示
操作
案内
ツールボックス

注目のページ

このサイトのはてなブックマーク数