試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

PythonのHTMLドキュメントをローカルで圧縮・全文検索

(2015/1/14)この記事の内容は古く、Beagleも公式サイトが無くなって利用できない。

Pythonのことを調べる際にはドキュメントを見ることが多くなるのだが、このドキュメントは配布されているため、これをダウンロード・展開し、

  • ディスク容量の節約のため、圧縮をかける
  • ただし、通常ファイルのような感覚で(透過的に)アクセスできるようにする
  • 内容の全文検索ができるようにする

の全てが行えることを目指して作業を行った。圧縮にはSquashfsを、検索にはBeagleを使用した。準備としては「squashfs-tools」パッケージとカーネルSquashfsサポート/モジュール*1が必要。
なお、
http://web.archive.org/web/20080423174732/http://www.python.jp/doc/
にはHTML形式の他、PDF版があり、
http://web.archive.org/web/20080525113537/http://www.python.jp/pub/doc_jp/
にはCHM版も用意されているのだが、今回はHTML形式を使用することにする。
また、ここで使用しているのはPythonのドキュメントだが、当然のことながら、他の内容のHTMLドキュメントでも同様のことは行える。

  1. 展開からSquashfsの作成まで
  2. 自動的にマウントするようにする
  3. 全文検索への登録

展開からSquashfsの作成まで

今回使用したのはバージョン2.4のHTML版(tar+bz2)。
ファイル情報: html-2.4.tar.bz2
項目
ファイルサイズ1,433,760バイト
MD5226b6864e0dfae22cba232545441fcee
SHA-1643cb6577a0353ef44f0a11a9a3c7a6d97818b65
以下は.tar.bz2ファイルの展開からSquashfs圧縮までの流れ。配置場所は/usr/local/share/doc/python-docs-2.4/pythondocs24.sqfs3という場所で、マウントポイントは/usr/local/share/doc/python-docs-2.4/html/とした。

$ tar jxf html-2.4.tar.bz2
$ cd Python-Docs-2.4/
$ mksquashfs ./ /tmp/pythondocs24.sqfs3 -all-root 
Parallel mksquashfs: Using 1 processor
Creating little endian 3.0 filesystem on /tmp/pythondocs24.sqfs3, block size 65536.                                                                       

Little endian filesystem, data block size 65536, compressed data, compressed metadata, compressed fragments                                                    
Filesystem size 2320.71 Kbytes (2.27 Mbytes)
        16.57% of uncompressed filesystem size (14008.41 Kbytes)
Inode table size 13118 bytes (12.81 Kbytes)
        27.37% of uncompressed inode table size (47932 bytes)
Directory table size 15073 bytes (14.72 Kbytes)
        44.84% of uncompressed directory table size (33615 bytes)
Number of duplicate files found 28
Number of inodes 1495
Number of files 1483
Number of fragments 225
Number of symbolic links  0
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 12
Number of uids 1
        root (0)
Number of gids 0
$ sudo mkdir /usr/local/share/doc/python-docs-2.4/html -p
$ sudo cp pythondocs24.sqfs3 /usr/local/share/doc/python-docs-2.4/
$ rm /tmp/pythondocs24.sqfs3 -f

自動的にマウントするようにする

ファイル名: /etc/fstab

/usr/local/share/doc/python-docs-2.4/pythondocs24.sqfs3	/usr/local/share/doc/python-docs-2.4/html/	squashfs	ro,loop	0	0

再起動せずに反映(マウント)するには、下のいずれかを実行する。

$ sudo mount /usr/local/share/doc/python-docs-2.4/html/
もしくは
$ sudo mount -a

全文検索への登録

メニューの「検索 - 設定」から設定ダイアログを開き、「インデックスの作成」タブの追加フォルダのところに、Squashfsのマウントポイント*2を指定する。

この後で、高負荷なインデックス作成をしばらく行ってから

$ BEAGLE_EXERCISE_THE_DOG=1 beagled --replace

しばらくしたら通常モードに戻し、

$ beagled --replace

あとは普通に検索ウィンドウから検索を行う。
これで、このドキュメントの中からの全文検索ができる。
(2008/6/21)圧縮されてはいないが、PyGTKのリファレンスのHTMLファイル群は/usr/share/gtk-doc/html/pygtk/以下に配置されている(Debian/Ubuntu/Gentooで確認・Debian/Ubuntuでは「python-gtk2-doc」というパッケージに含まれている)。この場所を追加で含めることにより、PyGTKのリファレンスもローカルで全文検索することができるようになる。
(2008/6/24)同様に、PyGObjectのリファレンスは/usr/share/gtk-doc/html/pygobject/となる。Debian/Ubuntuでは「python-gobject-dev」パッケージに含まれる。

使用したバージョン:

  • Beagle 0.3.6
  • Libbeagle 0.3.5
  • squashfs-tools 3.1_p2

*1:Debianでは「squashfs-modules-2.6-[アーキテクチャ名(「686」や「amd64」)]」、Ubuntuでは「squashfs-source」をインストールし、/usr/src/squashfs.tar.bz2を展開後ビルド

*2:この階層以下を通じてHTMLファイルにアクセスする