2011年7月18日月曜日

sosreport の出力先ディレクトリを変更する方法

sosreport は Python で記述されており、デフォルトでは出力先ディレクトリは /tmp になっていますが、変更することも可能です。※2011-07-24追記、バージョンにより指定方法が違うので最後まで読んでください。TMPDIR が使えるのは sos-1.7-9.49.el5 以下までです。
/usr/lib/python2.?/site-packages/sos/policyredhat.py を見ますと、gettempdir() が使われています。
...
    def packageResults(self):

        if len(self.ticketNumber):
            namestr = self.reportName + "." + self.ticketNumber
        else:
            namestr = self.reportName

        ourtempdir = gettempdir()
        tarballName = os.path.join(ourtempdir,  "sosreport-" + namestr + ".tar.bz2")
...
この gettempdir() は、環境変数 TMPDIR を参照してくれるので、sosreport の実行前に、TMPDIR に出力させたい場所を指定すれば良いです。
# export TMPDIR=/home
# sosreport -k rpm.rpmva=off
...

Creating compressed archive...

Your sosreport has been generated and saved in:
  /home/sosreport-xxx-435993-d02afb.tar.bz2
/tmp の空きが少なくて、別の領域(別のパーティション)へ出力したい場面で役立つものと思います。

2011-07-24追記
RHEL5.7 のテクニカルノートを読んだら、最新の sos では、--tmp-dir オプションが追加されているようです。
http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/5.7_Technical_Notes/sos.html
* Prior to this update, the user could not change the target location for storing sos reports. Due to this, sos reports were not collected if the /tmp/ directory was full. This update adds the "--tmp-dir" option to the sosreport utility to allow the user to specify the target directory. (BZ#562283)
ソースを読んでみると、gettempdir() が呼び出されなくなってしまっています。┐( ̄ヘ ̄)┌
...
    def packageResults(self):

        if len(self.ticketNumber):
            namestr = self.reportName + "." + self.ticketNumber
        else:
            namestr = self.reportName

        ourtempdir = self.cInfo['dstrootparent']
        tarballName = "sosreport-" + namestr + ".tar.bz2"
...
めんどくさい状況を作ってくれるもんだな。。。

2011-12-21追記
1.7-9.54.el5_7.1 で、また TMPDIR が使えるようになったようです。
ChangeLog から抜粋。
* Thu Nov 24 2011 Bryn M. Reeves  - 1.7-9.54.el5_7.1
- Fix handling of TMP environment variable
Resolves: bz748804
このBugzillaは非公開でした。

0 件のコメント:

コメントを投稿

人気ブログランキングへ にほんブログ村 IT技術ブログへ