MAKEHISTORY(8)

名前
makehistory - history データベースのリカバリツール

形式
makehistory [ -A oldtmp ] [ -a active ] [ -b ] [ -f filename ] [ -i ] [ -n ] [ -o ] [ -r ] [ -s size ] [ -T tmpdir ] [ -u [ -v ] ]

機能説明

makehistory は history(5) ファイルとそれに関連する dbz(3) データベースを再構築します。 デフォルトのファイル名は /var/news/etc/history です。 別のファイル名を指定する場合、``-f'' オプションを使用します。 makehistory は active(5) ファイルをスキャンし、ニューススプールディレクトリである /var/news/spool/articles 配下の各ニュースグループのどのディレクトリをスキャンするかを決めます。 (スプールディレクトリがまだ存在していてもニュースグループが削除されている場合、 makehistory はそのようなニュースグループを無視します。) このプログラムは各記事ファイルを読み込み、それぞれのエントリを history ファイルに書き込んで行きます。

history ファイルに書いた後、 makehistory は dbz データベースを作成します。

オプション

-A  ``-A'' オプションを使用すると、 makehistory は引数で指定されたファイル名をすでに作成されている history ファイルとして使用します。 この場合、エントリが追加されることになるため、すでに存在しているデータが無くなることはありません(history の各エントリはすべて有効となります)。

-a  ``-a'' オプションを使用すると、引数で指定されるファイルをデフォルトである /var/news/etc/active 以外の active ファイルとして使用します。

-b  ``-b''オプションを使用すると、 makehistory は有効な Message-ID ヘッダを持たない記事を削除します。

-f  ``-f'' オプションを使用すると、データベースファイルは file.dir および file.pag という名前になります。 ``-f'' オプションを使用しなければ、 history.n へのテンポラリなリンクが張られ、データベースファイルは history.n.pag および history.n.dir に書き出されます。

-o  ``-o'' オプションを使用すると、リンクは張られずに、存在している history ファイル群に上書きされます。 古いデータベースが存在している場合、 makehistory は新たなデータベースの大きさを決めるためにそれを使用します。

-i  古いデータベースを無視する場合、``-i'' を使用します。 ``-o'' オプションを使用すると、``-i'' オプションを暗に使用することになります。

-s  新たなデータベースでのエントリの概数を指定するために ``-s'' オプションを使用すると、古いデータベースは無視します。 エントリの数を正確に指定すると、データベースの作成が最適化されます。 (大きさは実際のファイルの大きさで、通常は古いファイルの大きさから決めなければいけません。) 詳細は dbz(3) での dbzfresh および dbzsize の説明を参照してください。

-u  ``-u'' オプションを使用すると、 makehistory は innd が起動しているものとします。 記事をスキャンしている間はサーバを throttle し、 dbz データベースに無い記事についてはサーバに ``addhist'' コマンド( ctlinnd(8) を参照してください)を送ります。 ``makehistory -bu'' はシステムクラッシュの後で有用で、壊れた記事を削除したり、 記事のデータベースをより正常な状態に戻します。

-v  ``-u'' オプションとともに ``-v'' オプションを使用すると、 makehistory は追加したすべての行と同じものを標準出力に出力します。

-n  dbz ファイルを再作成しないでニューススプールをスキャンするには、``-n'' オプションを使用します。 ``-u'' オプションとともに使用しても、サーバはスキャンの間 throttle されません。

-r  すでに存在しているファイルから dbz のみ作成するには、``-r'' オプションを使用します。 有効な dbz ファイルが無い場合、``-i'' あるいは ``-s'' オプションは有用となり得ます。

-T  makehistory は記事毎に一行のエントリとなるテンポラリファイルを作成する必要がありますが、 これは非常に大きなものとなり得ます。 このファイルは /var/tmp ディレクトリに作成されます。 別のディレクトリを指定するには、環境変数 ``TMPDIR'' を使用することができます。 あるいは、別のディレクトリを指定するために ``-T'' オプションを使用することもできます。 さらに、作成時に実行される sort(1) は大きなテンポラリファイルを作成します。 (多くは /var/tmp に作成しますが、システムの man ページを参照してください)。 ``-T'' オプションを使用すると、オプションとその引数が sort に渡されます。 多くのシステムではこれにより、 sort が使用するテンポラリディレクトリを変更します。 このオプションを使用すると、作成中に実行される sort(1) コマンドにもこのオプションと引数を渡します。

使用例

このプログラムの通常の使用法は次の /bin/sh スクリプトのようになります。

    ctlinnd throttle "Rebuilding history file"
    cd /var/news/etc
    if makehistory -n -f history.n ; then
        :
    else
        echo Error creating history file!
        exit 1
    fi
    if makehistory -r -s `wc -l <history` -f history.n; then
        mv history.n history
        mv history.n.dir history.dir
        mv history.n.pag history.pag
    fi
    ctlinnd go ''

バグと制限

makehistory はシンボリックリンクは扱いません。 記事のスプールが複数のパーティションで構成されている場合は、 データベースを再作成する前に次のコマンドを実行するべきでしょう。
    cd /var/news/spool/articles
    find . -type l -name '[1-9][0-9]*' -print | xargs -t rm
すべての関係するパーティションについてこのコマンドを実行するようにしてください。

履歴
InterNetNews 用に Rich $alz <rsalz@uunet.uu.net> により記述されました。

関連項目
active(5)、 ctlinnd(8)、 dbz(3)、 filechan(8)、 history(5)、 innd(8)、 newsfeeds(5)、 makeactive(8)、 newsrequeue(8)