背景

bashSYSLOG_HISTORY を導入し、作業の記録を syslog へ残しておきたいために実施します。
作業ミスなどを遡るなど、大いに有用です。

準備

環境の構築

コンパイルをするために必要なパッケージを導入します。(sudo)

sudo yum -y install rpm-build texinfo bison ncurses-devel autoconf gettext gcc make

ソースコードの入手

Amazon Linuxではget_reference_sourceでソースパッケージを取得します。CentOSなどでは yum downloader –source などかな。

get_reference_source -p bash

ソースコードの展開

作業用ユーザにてソースコードを展開します。特に指定をしていない場合、~ 以下に rpmbuild/ というディレクトリが作成されてソースコードが展開されます。

$ rpm -ivh /usr/src/srpm/debug/bash-4.1.2-15.24.amzn1.src.rpm
$ tree -d rpmbuild/
rpmbuild/
├── SOURCES
└── SPECS

パッチの適用

以下のパッチを適用します。makeの末尾に -DSYSLOG_HISTORY が追加されています。他の部分は変更の必要がありませんので、この部分のみの対応となります。

--- /home/ec2-user/rpmbuild/SPECS/bash.spec.old 2015-04-24 00:15:48.649314922 +0000
+++ /home/ec2-user/rpmbuild/SPECS/bash.spec 2015-04-24 00:16:43.845303142 +0000
@@ -165,7 +165,7 @@
 
 # For -fwrapv option see https://www.securecoding.cert.org/confluence/display/seccode/INT32-C.+Ensure+that+operations+on+signed+integers+do+not+result+in+overflow
 # Bash needs to be fixed.
-make "CFLAGS=$CFLAGS -fwrapv" "CPPFLAGS=-D_GNU_SOURCE -DRECYCLES_PIDS `getconf LFS_CFLAGS`"
+make "CFLAGS=$CFLAGS -fwrapv" "CPPFLAGS=-D_GNU_SOURCE -DRECYCLES_PIDS `getconf LFS_CFLAGS` -DSYSLOG_HISTORY"
 %check
 make check

構築

rpmbuildによる構築

LANG=C rpmbuild -ba ~/rpmbuild/SPECS/bash.spec

インスタンスサイズにもよりますが、しばらくするとパッケージが作成されます。

導入

作成されたパッケージを導入します。(sudo)

sudo rpm -Uvh rpmbuild/RPMS/x86_64/bash-*.rpm --force

おまけ

今後の yum updateSYSLOG_HISTORY なしのbashで更新されないように yum.conf でbashの更新を除外対象にします。
もし脆弱性などで対処が必要な場合は自動ではできなくなるので手動で実施することになります。その際には改めてパッケージ作成から行うことで対応できます。

sudo -s
echo 'exclude=bash*' >> /etc/yum.conf
exit

元記事はこちらです。
Amazon Linux(に限りませんがRPM系)のbashをSYSLOG_HISTORYに対応させる