Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

inn

http://www.eyrie.org/~eagle/faqs/inn.html#S6.2
controlchan(8) っていったいナニ? 何か使えそげなコマンドラインが例示されてるんですが。


http://www.eyrie.org/~eagle/faqs/inn.html#S6.4
記事の feed をするとき、その記事には Xref フィールドがなくてはいけない。ということで、試しに /var/spool/news/articles/cclub/archive で以下のコマンドを実行。*1

% ls | cat | wc -l        # -> 67
% grep "Xref" * | wc -l   # -> 13

だめじゃん。


inn-1.x のような古いバージョンの頃は、Xref はクロスポストされた記事にのみつけられていたらしい(最近のは全部の記事につける)。そういう記事には、どうにかして Xref ヘッダを加える必要がある、とのこと。
(そういえば、一度「一部の記事しか表示されない」っていう現象が起こって……そのときの記事数ってこの位じゃなかったっけか)
Xref フィールドはそれぞれ次のような感じ。

1:Xref: cclub cclub.news:2 cclub.archives:1    # 古いの
71:Xref: cclub.cc.tut.ac.jp cclub.archives:71  # 新しいの


ということは、Xref を付け足す処理を pseudocode で書くなら、

if grep "^Xref: cclub " then
    # 古いの
    s/:Xref: cclub /:Xref: cclub.cc.tut.ac.jp /g

else if grep "^Xref: cclub.cc.tut.ac.jp" then
    # 新しいの. NOP

else
    # 古いバージョンので、Xref なし
    pwd() =~ m|/var/spool/news/articles/(.+)|
    $ngname = $1
    $ngname =~ tr|/|.|
    $artnum = basename(filename)

    # grep "NNTP-Posting-Host" * | wc -l したら ls のと同じだったので
    s/^(NNTP-Posting-Host: .+)$/\1\nXref: cclub.cc.tut.ac.jp $ngname:$artnum/g;
fi

この処理は makehistory(8) もやってくれるんだけど、makehistory(8) はエラーを吐いてしまって使えないので……。
こいつを Perl でちゃい、としてしまえばあっという間? 再帰的にディレクトリを手繰るから ruby (Dir.glob で **/) の方が楽かも。*2

流れは次のようになるか。

  1. K 西さんのノートに inn-2.2.2 を入れて、現行サーバの記事を全てコピー
  2. Perl でも Ruby でも何でもいいから Xref フィールドを付け加える
  3. K 西さんのノートから新サーバに feed

さて、どうだろう。


……その他の解決法としては、「もう inn-2.2.2 のままでいいじゃん」ってのもアリかと。穴が見つかっても、パッチくらい出るでしょ。たぶん。(楽観的だ……)

*1:オフトピック: IE で「試し\nに」というふうに表示される。w3m では問題ない。IE の問題っぽい。

*2:Perl では File::Find というモジュールがあるらしい