この記事は、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番も)
また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
にアクセス
適当な名前でジョブを作成
※殺風景なのはCSSが読み込めてないからです。
最低2箇所を変更して、左下にあるSave chanages
をクリック
ここと
metadata.operatorContactUrl=ENTER_AN_URL_WITH_YOUR_CONTACT_INFO_HERE_FOR_WEBMASTERS_AFFECTED_BY_YOUR_CRAWL
ここ
# URLS HERE
http://example.example/example
集めたファイルはカレント配下の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)
と、まぁ殴り書きになっているので後で誤字とか表記ゆれとかは直します。
以上