Linux 設定日記

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

2020.01.08
Home Serverの置換え

Vine Linuxを長年使ってきたが、近年更新が行われず、自分でrpmを作ってメンテナンスするのも面倒になってきたので、ディストリビューションをCent OS 8に変更してサーバを構築し直すことにした。

当初は、サーバのハードを更新せずに、ディストリビューションだけ入れ換えようと考えたが、移行が非常に面倒なのと、現行サーバのファンが異音を発生するようになったため、ハードを更新することとしした。

サーバの選定としては、RAID構成としたいので、HDDが2本入ることを条件とした。しかし小型筐体でHDDが2本はいるものはほとんど無い。

何とか見つけたのが、shutle Direct 専売品のXH310R。スペックは以下の通り。注意点はオンボードグラフィックが一切ないのでGPU内蔵のCPUでないとBIOSセットアップもできない事。

構成

製品名 XH310R
形状 スリム型
素材 スチール
外形寸法 幅200×奥行き238×高さ73.2㎜
重量 2.2kg/3.5kg(化粧箱を含む)
プロセッサー LGA1151 ※第8/9世代CPU対応
チップセット インテル? H310
対応メモリー DDR4-2400/2666 So-DIMM×2(最大32GB)
デュアルチャンネル対応
拡張スロット 非搭載
ドライブベイ 3.5インチ 非搭載
2.5インチ 2(9.5mm厚までのHDD/SSD対応)
スリム光学 1
オーディオ Realtek? ALC662、5.1チャンネル、HD Audio
ネットワーク デュアルギガビットLAN(インテル I211)
>Wake-On-Lan(WOL)
オンボードコネクター Serial ATA 6Gbps 3
M.2 Type M Key 1 (type 2242, 2260, 2280対応)
M.2 Type A,E Key 1 (type 2230対応)
電源 90W ACアダプター
Mini−ITX互換 対応
ファンレス 非対応

入出力端子

映像端子 HDMI×1(HDMI2.0a)
DisplayPort ×1
D-Sub/VGA ×1
外部接続端子(前面) USB USB3.1Gen1×2
USB2.0×2
COMポート 非搭載
カードリーダー 非搭載
オーディオ ヘッドホン出力×1
マイク入力×1
eSATA 非搭載
リセットボタン 非搭載
外部接続端子(背面) USB USB3.1Gen1×2
USB2.0×2
eSATA 非搭載
eSATAパワーコネクター 非搭載
LAN 2
オーディオ ライン入力×1
ライン出力×1
マイク入力×1
S/PDIF 非搭載
COMポート 2(RS232+RS232/RS422/RS485)
PS/2 非搭載
外部電源コネクター 非搭載
CMOSクリアボタン 1
無線LANアンテナコネクター 2
ケンジントンロック 対応
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は詐称可能なので、あまりセキュリティ度は高くは無い。本当に守りたいファイルには使わない事が吉。