Linux 設定日記

設定したことを忘れないように書いてあります。

2013.01.06
dmesgへの謎のログ

max_interrupt_work: forcedeth module parameter to fix "too many iterations (6) in nv_nic_irq" error
というログが頻発している。 マルチプロセッサ環境でのforcedethドライバ問題で、大量の割り込みが発生するらしい。 /etc/modprobe.dにoptions.confというファイルを作成し、
options forcedeth max_interrupt_work=15
と記述すれば収まる。15は最適かつ最小の値を自分で見つけてね。となっていたので試したが、収まる様子は無かった。
この後、Vine 6.1にあげたら収まった。再起動の必要があったのかも。

2013.01.05
Vineのアップグレード

Vine 5.1を6.1にアップグレードした。 前回のアップグレード日は忘れたが、2010年5月には5.1になっていた模様。

ここでは推奨されていないapt-getによるインストールを行ったところ色々問題が出た。 現在まで分かっている問題は下記のとおり。

  1. cyrus-imapが起動しない
  2. mysqlがphpから使えない
  3. poundがセグメンテーションフォルトで落ちる
  4. sambauserがなくなってた。
まずは簡単な所で、
2番目のmysqlがphpから使えない件。 mysql_connect()を実行すると下記のエラーがでる件。
Warning: mysql_connect(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock)
これは、mysql.sockの場所が変わった為で、変更されたphp.iniがrpmnewとしてあったため、末尾の3行を追加してあげれば完了。
mysql.default_socket = /var/lib/mysql/mysql.sock
mysqli.default_socket = /var/lib/mysql/mysql.sock
pdo_mysql.default_socket= /var/lib/mysql/mysql.sock
次に、poundがセグメンテーションフォルトで落ちる件だが、Vine 6.1はkernel-3.0系となっているためかと想像。
多分再作成すれば良いのだろうと、公式から最新の2.6を取ってきて再作成したがやはりセグメンテーションフォルトで落ちる。
仕方がないのであきらめてapacheのリバースプロキシ機能に変更しかけたが、この時に google-preftoolsもインストールしていたことを思い出して再度こちらも作成したところ、 とりあえず起動するようになった。
しかしながら、時々まだ起動時にセグメンテーションフォルトで落ちる。
良く見ると
pound[1645] general protection ip:7f76326d2f50 sp:7fff2c8ac568 error:0 in libunwind.so.7.0.0[7f76326cd000+9000]
pound[1749] general protection ip:7fd331ac0f50 sp:7ffff4ff2858 error:0 in libunwind.so.7.0.0[7fd331abb000+9000]
となっているので、google-preftoolsが使っているlibunwindで問題があるようだ。 必ずではないのでとりあえず放置したが、プロセス監視などが必要かもしれない。

cyrus imapは長いので、別記事で。

2012.08.29
TRACカスタムフィールド使用時のレポートSQL

TRACでカスタムフィールドを使用している。 チケットの表示は、大体はカスタムクエリとwikiで用は済んでいたのだが、 カスタムクエリでは、カラムの制御ができない。必要なデータ、フィールドをダウンロードして処理をするためには、 どうしてもカスタムレポートをいじらなければならない。

で、SQLを書くはめになるのだが、たいていのサンプルはprogressのカスタムフィールドを使用した場合のみしか出ていない。 試行錯誤した結果、以下の形で複数のカスタムフィールドを利用することができた。

そもそも、tracのテーブル構造がわからなかったので、まずそれから探す。 ここにまとまってたので、参考にした。 で、以下が、phenomenaとfindingsという二つのフィールドがある場合のサンプルです。

SELECT p.value AS __color__,
   t.milestone AS __group__,
   (CASE status 
      WHEN 'closed' THEN 'color: #777; background: #ddd; border-color: #ccc;'
      ELSE 
        (CASE owner WHEN $USER THEN 'font-weight: bold' END)
    END) AS __style__,
   id AS ticket, summary, component, status, 
   resolution,version, t.type AS type, priority, owner,
   changetime AS modified,
   tc1.value AS phenomena,
   tc2.value AS findings,
   time AS _time,reporter AS _reporter
  FROM ticket t
  LEFT OUTER JOIN ticket_custom tc1 ON (t.id = tc1.ticket AND tc1.name = 'phoenomena')
  LEFT OUTER JOIN ticket_custom tc2 ON (t.id = tc2.ticket AND tc2.name = 'findings')
  LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' and tc1.ticket = t.id
  ORDER BY (milestone IS NULL), milestone DESC, (status = 'closed'), 
        (CASE status WHEN 'closed' THEN modified ELSE (-1)*p.value END) DESC
上記を試行錯誤しているうちに、「operationalerror: database is locked trac」などのエラーがでた。 プレビューの段階でエラーがでるので、修正も削除もできない。 ログインしている状態で、 https://{プロジェクトのURL}/report/{レポート番号}?action=edit として編集画面をダイレクトに開いて編集することで対処した。

2011.08.10
Pound使用時のApacheの設定

Pound使用時は、バックエンドのApacheサーバへのアクセスは全てpoundのアドレスからの接続となってしまう。 なので、そのままでは、logファイルなどは全てpoundサーバのアドレスになってしまいいちいちPoundのlogと比較しなければならない。 と書いていたが、PoundはHTTPヘッダーのX-Forwarded-Forに、フォワード元のアドレスを記録するので、ログフォーマットを変更することで、残す事ができるようだ。

具体的には以下の通りに、httpd.confまたはapache2.confのLogFormatの形式設定中の%hを%{X-Forwarded-for}iとすれば良い。 下記はcommon形式のログフォーマットの変更例。

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common

実際にどのような形式で出力するかは、CustomLogディレクティブで既定されているはずなので、そこで既定されている形式(上記ではcommon)のフォーマットを直さないと意味がない。 上記の例ではcommon形式を修正しているが、combinedのフォーマットを利用しているのであればそちらも修正する。

CustomLog logs/access_log common

また、Apacheのアクセス認証を切り換えたい場合 (たとえば、ローカルアドレスからのアクセスは認証しないで、インターネットからのアクセスからは認証する) などの時は、Saisfyディレクティブでホストレベルのアクセス制御とユーザ認証との関係をanyとすれば良いが、 Poundをつかっている場合は、全て同じアドレスとなるので、あまり普通には使わないモジュールを入れる必要があった。

しかし、X-Forwarded-Forう使う事で、標準モジュールだけで設定が可能となった。 以下はその例。 ポイントは、

こと。以下は.htaccessの例。

# ArrowとRequireが利用されている場合に、いずれかの条件を満足すればアクセスを許可する。
Satisfy Any
# X-Forwarded-Forに、自分がつかっているローカルアドレスが含まれていた場合はlocalipという環境変数をセットする。
# 下は、192.168.0.0/255 を想定。複数行記述することも可能。
SetEnvIf X-Forwarded-For "192\.168\.0\.[0-9]+"         localip
# Mod_Accessの条件を既定
Order deny,allow
Deny from all
# localipという環境変数が設定されていれば、Webアクセスを許可する。
Allow from env=localip
# mod_auth_XXXの設定を行う。以下はmod_authn_fileの場合
AuthUserFile    /etc/apache2/conf.d/example.pwd
AuthGroupFile   /dev/null
AuthName        "Please Enter password"
AuthType        Basic
Require valid-user

まあ、X-Forwarded-Forは詐称可能なので、あまりセキュリティ度は高くは無い。本当に守りたいファイルには使わない事が吉。

2011.08.07
かなり昔の情報更新

pound用のサーバー証明書は、何度か作っているが、コマンドが間違っていたので修正。

誤	openssl req -x509 -newkey rs:1024 -keyout server.pem -out server.pem -days 365 -nodes
正	openssl req -x509 -newkey rsa:1024 -keyout server.pem -out server.pem -days 365 -nodes

当時はあっていたのが、コマンド拡張されたのかは不明。

2010.05.23
Poundを更新したら変なlogが出るようになった

以前から、バーチャルホスト兼ロードバランサとしてpoundを使っている。 自前でRPM Packageを用意しているのだが、システム更新の際に、2.6.1に以前と同様にPackageを作成したら、それ以降

 pound: libgcc_s.so.1 must be installed for pthread_cancel to work 
 pound: MONITOR: worker exited on signal 6, restarting...
が出るようになった。調べてみると、異なるバージョンのlibgcc_s.so.1がLD_LIBRARY_PATHにあるということらしいが、findしてみてもlibgcc_s.so.1は一つしかない。 実害は無いようなので放置していたが、今回、パッケージを再作成することで対処した。

まずは、ソースの入手。と思い公式サイトにいってみると、公式のバージョンは2.6から2.5に巻き戻っている。 理由はわからないが、仕方がないので2.5でパッケージを作成する。今回は、公式にあったRedHat用SRPMパッケージを再作成してVine用Pakageを作成することとした。

公式サイトに示されていたサイトからPoundのパッケージをとってきて、rpm -ba pound.specで作成すればよいので楽ちん。 と思ったが、google-perftools-develが無いといわれる。

Vineのパッケージには、無いものなので、こちらも前記の場所からとってくる。 で、google-perftoolsのパッケージを作成しようとすると、今度はlibunwind-develがないと言われる。 こちらは、Vineのパッケージに存在するので、apt-getでインストール。

google-perftoolsは、最大パフォーマンスを発揮するためのアプリケーション開発ツールキットとのことだで、64ビット環境やマルチコアなどさまざまなプラットフォーム環境がある中、チューニングなども大変なため必要なライブラリなんだろうと思う。 まあ、うちの環境くらいでは特に性能差がでるようなことはないとは思うけど。

だが一番の問題は、Vine 5.1には既にpoundのパッケージがあることに後で気がついたことだ。Vine使いの人は前記の問題は発生していなかったのかも。