LoginSignup
1
1

More than 5 years have passed since last update.

Amazon Linux 2014.09でrepackageしてconflictを避けたsyslog-ngでrsyslogを入れ替える

Last updated at Posted at 2014-10-22

以下、レガシーな話で恐縮です。

Motivation

syslogの送信元毎にログを出し分けるなどの柔軟性が必要だったため。(fluentdとか使えよ!ってお客様に言ってください)

わざわざQiitaに投稿したのはなぜ?

単純にスッピンのAmazon Linux 2014.09のインスタンスでsudo yum install --enablerepo=epel syslog-ngとすると、

Transaction check error:
  file /etc/logrotate.d/syslog from install of syslog-ng-3.2.5-4.el6.x86_64 conflicts with file from package rsyslog-5.8.10-8.25.amzn1.x86_64

が出てくるので、それを解決する手法のメモを残したかった。そして忘れたかったw

なお、原因はRPMのバージョン4.8.0以降で、パッケージの構成チェックが厳しくなったからのようです。(参照: http://dev.classmethod.jp/cloud/build-td-agent2-on-amazon-linux/ ) でも、 RPMバージョン4.8の機能と変更点 読んでもよくわかりませんでした(汗

お世話になりました

方針

syslog-ngのパッケージを/etc/logrotate.d/syslogにタッチしないようにre-packageしてインストールしてみる

工程

1. とりあえず

sudo yum install syslog-ng

してみる。エラーなければめでたしめでたしで終了、なのだが。

Transaction check error:
  file /etc/logrotate.d/syslog from install of syslog-ng-3.2.5-4.el6.x86_64 conflicts with file from package rsyslog-5.8.10-8.25.amzn1.x86_64

こんなのが出ちゃうのです。

2. epelからsyslog-ngが依存しているlibnetとeventlogをインストールしておく

sudo yum install --enablerepo=epel libnet eventlog

3. rpmpkgツールをインストール

sudo yum groupinstall "Development Tools"
sudo yum install rpm-devel

4. 作業場所と環境を確保

mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} 
echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros

5. ソースのダウンロードツールを入手

sudo yum install yum-utils

※ 必要なのはyumdownloaderコマンド(AMZN linuxならすでにinstall済みのはずだけど)

6. epelからsyslog-ngのsourceパッケージを取得

cd ~/rpmbuild/SRPM
yumdownloader --source syslog-ng

7. sourceパッケージを展開して.specファイルを編集してbuild

rpm -ivh syslog-ng-3.2.5-4.el6.src.rpm 
cd ../SPECS
vi syslog-ng.spec

log rotationの設定ファイルのパスの衝突を避けるために
/etc/logrotate.d/syslog から /etc/logrotate.d/syslogngにしてみた。

そしておもむろにbuild。

rpmbuild -ba ~/rpmbuild/SPECS/syslog-ng.spec
(中略)
error: Failed build dependencies:
    eventlog-devel >= 0.2.12 is needed by syslog-ng-3.2.5-4.amzn1.x86_64
    glib2-devel >= 2.10.1 is needed by syslog-ng-3.2.5-4.amzn1.x86_64
    libdbi-devel is needed by syslog-ng-3.2.5-4.amzn1.x86_64
    libnet-devel >= 1.1.4-3 is needed by syslog-ng-3.2.5-4.amzn1.x86_64
    pcre-devel >= 6.1 is needed by syslog-ng-3.2.5-4.amzn1.x86_64
    tcp_wrappers-devel is needed by syslog-ng-3.2.5-4.amzn1.x86_64
    libdbi-dbd-sqlite is needed by syslog-ng-3.2.5-4.amzn1.x86_64

buildに不足しているライブラリというかヘッダ情報のためにエラーになるので、ヘッダ情報をインストール

sudo yum install --enablerepo=epel eventlog-devel glib2-devel \
 libdbi-devel libnet-devel pcre-devel tcp_wrappers-devel libbdi-dbq-sqlite

で、ビルドに再トライ。

rpmbuild -ba ~/rpmbuild/SPECS/syslog-ng.spec

8. 出来たRPMパッケージをrpm -ivhでインストール

cd ../RPMS/x86_64
sudo rpm -ivh syslog-ng-3.2.5-4.amzn1.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:syslog-ng-3.2.5-4.amzn1          ################################# [100%]

9. rsyslogdを止めて、syslog-ngを起動(サーバーの起動時の設定も変える)

sudo chkconfig rsyslog off
sudo chkconfig syslog-ng on
sudo service rsyslog stop
sudo service syslog-ng start

10. yum updateの制限を掛けておく(どうせエラーになるけどね)

sudo yum install yum-plugin-versionlock
sudo yum versionlock syslog-ng

で、おもむろにsyslog-ngの設定を始めましょうw

やりたかった事は、syslogの送信元によってログファイルを分けることでした。

source s_sys {
    udp(ip(xx.xx.xx.xx) port(514));
};

filter f1 {
        level(info..emerg);
};

destination d_ipfiles { file("/logdir/syslog-ng-by-ip/$SOURCEIP/messages_$YEAR$MONTH$DAY.log"); };

log { source(s_sys); filter(f1); destination(d_ipfiles); };

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1