mieki256's diary



2021/07/16(金) [n年前の日記]

#2 [hns][debian][linux] Debian 10 buster上でhnsを動かすべく設定作業

Debian Linux 10 buster 32bit版 + Apache2 2.4.38-3+deb10u5 + Perl 5.28.1 で、hns を ―― この日記ページシステムを動かすべく作業中。

defined()を修正。 :

hns は昔のPerlで動かす作りなので、あちこちの記述が今のPerlと合ってない。修正しないといけない。

まず、defined( @... ) がエラーを出していた。昨今の Perl は defind() を省いて記述するらしい。

lib/ObjectTemplate.pm
    if (defined (@{"${pkg}::ISA"})) {
↓
    if ( @{"${pkg}::ISA"} ) {

defined( %... ) もエラーを出すけれど、そのあたり、手元のスクリプトでは、以前修正していた模様。

正規表現指定時に「{」があるとエラー。 :

昨今の Perl は、正規表現の指定時に 「{」が入っているとエラーになる。「\{」にする。

lib/HNS/Diary.pm
    $head =~ s/%user{([A-Z]+)}/$self->user_var->Eval($1)/ge; # user var
↓
    $head =~ s/%user\{([A-Z]+)}/$self->user_var->Eval($1)/ge; # user var
    $user_var =~ s/%user{([A-Z]+)}/$self->user_var->Eval($1)/ge; # user var
↓
    $user_var =~ s/%user\{([A-Z]+)}/$self->user_var->Eval($1)/ge; # user var

lib/HNS/Template.pm
    $template =~ s/%{?([A-Za-z0-9_]+)}?/$$params{$1}/g;
↓
    $template =~ s/%\{?([A-Za-z0-9_]+)}?/$$params{$1}/g;

lib/HNS/Hnf/Command.pm
    $$attr =~ /^#{.*#(\d{4})(\d{2})(\d{2})((\d+)(S(\d+))?)?}$/) {
↓
    $$attr =~ /^#\{.*#(\d{4})(\d{2})(\d{2})((\d+)(S(\d+))?)?}$/) {

lib/HNS/Hnf/UserVar.pm
        $template =~ s/%user{([A-Z]+)}/($1 eq $name) ? "'$name' FORMAT ERROR: self-reference" : $self->Eval($1)/ge; #call recursible
↓
        $template =~ s/%user\{([A-Z]+)}/($1 eq $name) ? "'$name' FORMAT ERROR: self-reference" : $self->Eval($1)/ge; #call recursible

theme.ph が見つからない。 :

index.cgi の中で、カスタムテーマファイル $theme_ph を require しようとして見つからないと言い出す。昨今の Perl は検索パスの中から「.」が除外されたのでそういうことが起きる。ひとまず、「./」を頭につけて誤魔化す。

index.cgi
    unless (-f "$theme_ph"){
    die "no theme file : $theme_ph";
    }
    require "$theme_ph";
↓
    unless (-f "./$theme_ph"){
    die "no theme file : ./$theme_ph";
    }
    require "./$theme_ph";

ここまで修正して、ようやく hns が Debina Linux 10 buster 上で動くようになった。数日ぶりに懐かしい(?)ページが表示された。

hns-index2を動かすべく作業。 :

hns は Namazu v2 for hns というプログラム群を動かすことで検索機能を持たせることができる。

_Namazu v2 for hns による日記の全文検索

~/diary/bin/hns-index2 を実行することで、検索用インデックスを作成する。この hns-index2 を動かせる状態にしないといけない。

今回は、Namazu v2 for hns をローカルアカウントに再インストールすることにする。

必要なパッケージをインストール。もしかすると不要なパッケージが混じっているかもしれないけど…。
sudo apt install nkf chasen kakasi mecab
sudo apt install jcodepl libunicode-maputf8-perl
sudo apt install libtext-kakasi-perl libtext-chasen-perl libtext-mecab-perl libmecab-perl
sudo apt install libnkf-perl libfile-mmagic-perl libfile-spec-perl libwww-perl libimage-size-perl
sudo apt install namazu

旧自宅サーバ機(Vine Linux機)から、既に、~/ は持ってきているので、~/namazuv2forhnssetup/ に関連ファイルが入っていた。それらファイルを使って再インストール作業をする。

namazu2 をインストール。
mkdir ~/lib

cd ~/namazuv2forhnssetup/namazu-2.0.21/
make clean
./configure --prefix=$HOME/diary/namazu2 --with-pmdir=$HOME/lib
make
make install
これで、~/diary/namazu2/ 以下に色々なファイルがインストールされた。

namazu_for_hns をインストール。
cd ../namazu_for_hns-2.0-pl5
./setup-filter.sh $HOME/diary/namazu2
./setup-u.sh $HOME/diary/namazu2
これで、~/diary/bin/ 以下に色々なファイルがインストールされた。

hns-index2 を実行してみる。
cd ~/diary/bin
./hns-index2

locale 関係のエラーが出た。hns-index2 は Perlスクリプトなので、テキストエディタ等で中を覗くことができる。hns-index2 内の LC_ALL を指定してるあたりを以下のようにしてみたらエラーが出なくなった。
LC_ALL="ja_JP.UTF8"
export LC_ALL

また、一部のPerlスクリプトがエラーを出している。「{」を「\{」にしないといけない。
Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <-- HERE in m/%{ <-- HERE ?([a-z]+)}?/ at /home/mieki256/diary/namazu2/share/namazu/filter/hnf.pl line 244.
Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <-- HERE in m/%{ <-- HERE ?([a-z]+)}?/ at /home/mieki256/diary/namazu2/share/namazu/filter/hnf.pl line 244.
Useless use of greediness modifier '?' in regex; marked by <-- HERE in m/^\w+:{1,1}? <-- HERE / at /home/mieki256/diary/namazu2/share/namazu/filter/mp3.pl line 155.
以下のファイルを修正。
  • ~/diary/namazu2/share/namazu/filter/hnf.pl の244行。
  • ~/diary/namazu2/share/namazu/filter/mp3.pl の155行。

これで hns-index2 が動いてくれるようになった。

hns-index2の文字化け対策。 :

hns-index2 の出力する文字コードは euc-jp なのだけど、Debian Linux の標準の文字コードは UTF-8 なので、何が出力されているのか分からない。

hns-index2_ss01.png

nkf を使って変換する。
$ ./hns-index2 | nkf -w
検索対象のファイルを調べています...
インデックスすべきファイルはありません

一応他の操作もメモ。ゴミファイルを削除するなら以下。
./hns-index2 -gc | nkf -w

インデックスを作り直すなら以下。
./hns-index2 clean | nkf -w
何か表示がおかしい場合、これを使ってインデックスを作り直せば解決することが多い。

mknmzrc を変更。 :

~/diary/namazu2/etc/mknmzrc を修正。以下に対応させる。
  • LAN内でも検索結果を使えるようにする。
  • mod_rewrite に対応させる。

$ADDRESS = 'hoge@fuga.com';

$hnf::diary_uri = "";

$hnf::author = 'hoge@fuga.com';

$hnf::link_templ = '%year%month%day.html#%year%month%day0';   # one day

crontabで指定。 :

一般的には hns-index2 を cron で定期的に実行するものだろうけど、hns-index2 だけを実行すると相変わらず結果が文字化けする。

「| nkf -w」をつければ文字化けしないが、crontab 内にパイプは書けない。別途スクリプトを書いて、そのスクリプトを crontab 内で指定する。

~/diary/bin/hns-index2-cron.sh を作成。中身は以下。
#!/bin/sh
/home/USERNAME/diary/bin/hns-index2 | nkf -w

パーミッションを変更。
chmod 755 ~/diary/bin/hns-index2-cron.sh

./hns-index2-cron.sh を実行してみて正常に動作するか確認。

crontab -e で、毎日処理するように指定。
30 6 * * * /bin/sh /home/mieki256/diary/bin/hns-index2-cron.sh
時、分、日、月、曜日、コマンド、の順で記述するらしい。

検索ページのカスタマイズ。 :

公式ドキュメントにも書いてあるけど一応メモ。

検索ページの表示テンプレートは以下にある。
~/diary/namazu2/template/

以下が、日本語表示のテンプレート。
NMZ.body.ja
NMZ.foot.ja
NMZ.head.ja
NMZ.result.normal.ja
NMZ.result.short.ja
NMZ.tips.ja

テンプレートは、基本的に HTML で記述されている。一部、<!-- FILE --> のような特別な意味のあるコメントや、{cgi} のように namazu.cgi で自動的に変換される文字列があるので、それらはそのままに。

既にインデックス作成済みの場合、テンプレート修正後に、~/diary/namazu2/index/ にある以下のファイルを削除してから、hns-index2 clean を実行してインデックスを更新する。
NMZ.body.ja
NMZ.foot.ja
NMZ.head.ja
NMZ.result.normal.ja
NMZ.result.short.ja
NMZ.tips.ja
インデックスが更新されないと NMZ.*.ja は作成されない。

とにかく、テンプレートファイルを修正したら、特定ファイルを削除してから hns-index2 clean を走らせる…と覚えておけば良さそう。

以上です。

過去ログ表示

Prev - 2021/07 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project