Posted at

CloudGarageで「Heritrix」を動かす

この記事は、CloudGarage Advent Calendar 23日目の記事です。

今回は表題の通りCloudGarageに「Heritrix」をインストールして動かしてみます。


Heritrixって何ぞ??

面倒くさい分かりやすくまとまっているので国立国会図書館のページを引用


「Heritrix」は数あるクローラの中の1つです。クローラは、「ロボット」や「ボット」と呼ばれることもあります。

https://webarchive.jira.com/wiki/display/Heritrix/Heritrix

クローラとはインターネット上のウェブページを巡回し、画像やPDFファイルなどを自動的に集めてくるプログラムのことをいいます。GoogleやBingなどの検索エンジンは独自に開発したクローラを使って、インターネット上の情報を収集し、それらを検索できるようにしています。

Heritrix は、インターネットアーカイブや国立国会図書館のWARPをはじめとして、大英図書館(British Library)、米国議会図書館(Library of Congress)など、世界中の国立図書館のウェブアーカイブ事業で使用されています。


と、まぁ一言でいうと「ウェブページを集めるボット」です。

で、特徴としては


HeritrixはJava言語で開発されているオープンソースソフトウェアです。インターネットアーカイブによって開発されました。Apache License, Version 2.0 を採用していますので、ユーザはそのライセンスのもとで自由に修正、再頒布等を行うことができます。

Heritrixにはウェブベースのインタフェースがありますの で、ブラウザを使っての設定や収集状況の確認ができます。

また、Heritrixは収集したウェブコンテンツをウェブアーカイブの保存用ファイルフォーマットであるARC形式やWARC形式で保存します。 これらのフォーマットで保存されたコンテンツは、オープンソースソフトウェアwaybackを使って閲覧することができます。


Javaで動くWEBアプリらしいです。そして「Internet Archive (https://archive.org/) 」が開発しています。

詳しくは国立国会図書館のページを見てください。イラスト付きで結構詳しく書かれています。


動作要件

Javaが動く環境であれば、なんでも。

CloudGarageであればアプリケーションテンプレートJava/Ubuntuをそのまま使えます。


セットアップ

公式Wikiに解説付きで手順が載ってます。

Home · internetarchive/heritrix3 Wiki · GitHub

注意点としては、CloudGarageに限らずJava8以上だとひと手間必要となります。


インスタンスをつくる

まずはインストール先となるサーバを用意をします。

今回はCloudGarageのミドルウェアテンプレート「Java/Ubuntu-16.04-64bit」を使用します。

必ず使うので8443番は開放しておいてください。(SSHを使う場合は22番も)

alt

またUbuntu・・・。CentOSはないの...


ミドルウェアのセットアップ

セットアップしていきます。

とはいっても、ダウンロードして展開、実行するだけですが


お約束

まずはお約束のアップデート

apt-get update

apt-get -y upgrade
apt-get -y dist-upgrade


モジュールのインストール

モジュールが不足しているため追加

apt-get -y install unzip


環境確認

Javaが入っていることはわかっているけど、念のため確認。

あと、パスを設定

root@heritrix:~# java  -version

openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-0ubuntu1.16.04.2-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)

root@heritrix:~# dirname $(readlink $(readlink $(which java)))
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin

root@heritrix:~# export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre


アプリケーションをセットアップ

ダウンロードして、環境変数を設定します。

※root直下にインストールしているので、パーミッションを付与

root@heritrix:~# wget http://builds.archive.org:8080/maven2/org/archive/heritrix/heritrix/3.1.1/heritrix-3.1.1-dist.zip

root@heritrix:~# unzip heritrix-3.1.1-dist.zip

root@heritrix:~# export HERITRIX_HOME=/root/heritrix-3.1.1

root@heritrix:~# chmod u+x $HERITRIX_HOME/bin/heritrix

root@heritrix:~# export JAVA_OPTS=-Xmx512M

root@heritrix:~# chmod 777 -R /root/heritrix-3.1.1

早速起動

root@heritrix:~# $HERITRIX_HOME/bin/heritrix -a admin:admin -b 0.0.0.0

Sun Dec 23 06:16:23 JST 2018 Heritrix starting (pid 14225)
ERROR: JVM terminated without running Heritrix.
This could be due to invalid JAVA_OPTS or JMX_PORT, etc.
See heritrix_out.log for more details.
Here are its last three lines:

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 3 more

あれ?

root@heritrix:~/heritrix-3.1.1# less heritrix_out.log

Exception in thread "main" java.lang.NoClassDefFoundError: sun/security/tools/KeyTool
at org.archive.crawler.Heritrix.useAdhocKeystore(Heritrix.java:438)
at org.archive.crawler.Heritrix.instanceMain(Heritrix.java:319)
at org.archive.crawler.Heritrix.main(Heritrix.java:189)
Caused by: java.lang.ClassNotFoundException: sun.security.tools.KeyTool
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 3 more

Google先生助けて

つ「Kris's blog: Heritrix, Java 8 and sun.security.tools.Keytool

root@heritrix:~/heritrix-3.1.1# keytool -keystore adhoc.keystore -storepass password \

> -keypass password -alias adhoc -genkey -keyalg RSA \
> -dname "CN=Heritrix Ad-Hoc HTTPS Certificate" -validity 3650

Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore adhoc.keystore -destkeystore adhoc.keystore -deststoretype pkcs12".

改めて起動

root@heritrix:~# $HERITRIX_HOME/bin/heritrix -a admin:admin --web-bind-hosts 0.0.0.0

Sun Dec 23 06:39:41 JST 2018 Heritrix starting (pid 15091)
Using ad-hoc HTTPS certificate with fingerprint...
SHA1:AA:CC:D3:EC:56:D8:AD:E9:59:9B:6F:65:A5:88:D1:F2:EA:87:C4:2F
Verify in browser before accepting exception.
engine listening at port 8443
operator login set per command-line
NOTE: We recommend a longer, stronger password, especially if your web
interface will be internet-accessible.


動かす

ここからはブラウザに移ります。

https://example.com:8443にアクセス

起動時の設定したadminadminでログイン

alt

適当な名前でジョブを作成

※殺風景なのはCSSが読み込めてないからです。

alt

できたジョブをクリック

alt

editをクリック

alt

最低2箇所を変更して、左下にあるSave chanagesをクリック

alt

ここと

metadata.operatorContactUrl=ENTER_AN_URL_WITH_YOUR_CONTACT_INFO_HERE_FOR_WEBMASTERS_AFFECTED_BY_YOUR_CRAWL

ここ

# URLS HERE

http://example.example/example

ジョプページに戻ってBuildをクリック

alt

そしてLaunchをクリック

alt

収集開始~

alt

終わったぽい

alt

集めたファイルはカレント配下のjobs/ジョブ名/latest/warcsにGZ圧縮され保存されている模様。

解凍するとwarcs形式になるので、適当なアプリで開く。とはいってもIA's public Wayback Machine (moved from SourceForge) ぐらいしか思いつかないが....

一応、テキストファイルなので、そのままでもみれる

root@heritrix:~/heritrix-3.1.1/jobs/test/latest/warcs# head -n 100 test

WARC/1.0
WARC-Type: warcinfo
WARC-Date: 2018-12-22T22:11:20Z
WARC-Filename: WEB-20181222221120289-00000-15091~localhost.localdomain~8443.warc.gz
WARC-Record-ID: <urn:uuid:bc768e71-fe5e-499d-9f97-b7231d1ebb02>
Content-Type: application/warc-fields
Content-Length: 349

software: Heritrix/3.1.1 http://crawler.archive.org
format: WARC File Format 1.0
conformsTo: http://bibnum.bnf.fr/WARC/WARC_ISO_28500_version1_latestdraft.pdf
isPartOf: basic
description: Basic crawl starting with useful defaults
robots: obey
http-header-user-agent: Mozilla/5.0 (compatible; heritrix/3.1.1 +https://twitter.com/cloudremix)

と、まぁ殴り書きになっているので後で誤字とか表記ゆれとかは直します。

以上


参考

GitHub - internetarchive/heritrix3: Heritrix is the Internet Archive's open-source, extensible, web-scale, archival-quality web crawler project.