はじめに
Q: ウェブアーカイブってなんだよ
A: 要するにInternet Archiveとかウェブ魚拓みたいな行為のことです。https://warp.da.ndl.go.jp/contents/reccommend/mechanism/mechanism01.html も読むといいんじゃないかな
Q: ArchiveTeamってなんだよ
A: Archive Team - Wikipedia を読もう。 https://wiki.archiveteam.org/ (公式サイト) も参考になるよ。reddit の /r/ArchiveTeam も見るといいかもしれない
Q: Warriorってなんだよ
A: ArchiveTeamのアーカイブ作業に使われているソフトウェア。パソコンがあれば誰でもボランティアとして参加でき、分散コンピューティング的な感じで世界各地から並列にウェブサイトをダウンロードする。VMかDockerで動かす。
Q: どういう仕組みなんだよ
A: (以下は Dev/Infrastructure - Archiveteam を参考にした)
- ArchiveTeamのサーバで動いているジョブ管理システム(Trackerという)が、各クライアント(これがWarrior)にジョブを割り当てる。
- ジョブを振られたWarriorは、実際にウェブサイトにアクセスしてコンテンツを保存し、それをArchiveTeamの管理する別のストレージにアップする。
- コンテンツはWARCファイルの形で保存される。内部的には独自カスタムしたwgetをダウンローダとして使っているらしい。
- 通常のwgetが吐くWARCファイルは、仕様に違反しているので非推奨とのこと(The WARC Ecosystem - Archiveteam)。
- 各Warriorから集められたWARCファイルは、整理されて最終的にはInternet Archiveに転送される。
Q: 他に情報源は?
A: 公式ドキュメント: https://wiki.archiveteam.org/index.php/ArchiveTeam_Warrior
この文章を書いている時点では、日本語のまとまった情報はおそらく https://clavis.info/wiki/running_archiveteam_warrior が唯一。
Q: ウェブアーカイブなんて何が大事なんだよ
A: この辺の記事を読んでください。認識が変わることを願います。
Q: Warriorってそんなに実績があるの?
A: かなりたくさんある。下記の表を参照。
最近サービス終了したgoo辞書も、日本の有志の方がArchiveTeamに連絡を取り、サイトマップ経由でURLリストを作成してWarriorに突っ込むことで大規模なアーカイブ化に成功している。
導入方法
Dockerがあるなら、これを docker compose up -d するだけ。後述のTipsは適用済みなので、下記を compose.yml としてコピペするだけでいい。
# based on https://selfhostedheaven.com/posts/20220228-help-out-archiving/ services: archiveteam-watchtower: container_name: archiveteam-watchtower image: containrrr/watchtower labels: - com.centurylinklabs.watchtower.enable=true - com.centurylinklabs.watchtower.scope=archiveteam-warrior volumes: - '/var/run/docker.sock:/var/run/docker.sock' command: '--label-enable --cleanup --interval 3600 --scope archiveteam-warrior' restart: unless-stopped archiveteam-warrior: container_name: archiveteam-warrior image: atdr.meo.ws/archiveteam/warrior-dockerfile environment: - DOWNLOADER=stepney141 # Change this to your nickname - SELECTED_PROJECT=auto - CONCURRENT_ITEMS=6 stop_signal: SIGINT stop_grace_period: 5m labels: - com.centurylinklabs.watchtower.enable=true - com.centurylinklabs.watchtower.scope=archiveteam-warrior ports: - '127.0.0.1:8001:8001' restart: always
公式サイトではVirtualBoxを使った導入方法が第一の選択肢として提示されているが、それはおそらくCUI操作に詳しくない一般人の参加を促すためだろう。一般ユーザ向けのVMで動かす方法の解説は下記を参照。スクリーンショットを使っているので詳しくなくてもわかりやすい。
一応、公式でも「Dockerでの動かし方」みたいなページがちゃんと用意されている。パワーユーザというかIT技術者向けの細かい情報も載っている。
CPU負荷は少ないので、必ずしも高性能なマシンでなくて大丈夫だが、動作にあたっては注意点がいくつかある。
1つ目はインターネットへの接続について。以下に留意すること。
2つ目は、公式で紹介されているDockerコマンドのままだと、ホスト先のグローバルIPアドレスの8001番ポートにWarriorの管理画面(コントロールパネル)が一般公開されてしまうこと。そのため archiveteam-warrior コンテナの作成時には --publish 127.0.0.1:8001:8001 のようにポート番号を指定し、明示的にlocalhostに公開するようにした方がいい。外から見たい場合はリバースプロキシなどを使えば認証をかけつつ独自ドメインでアクセスできる。この辺はWarriorに限らない一般的なノウハウとしてネット上に知見が多く投稿されているので細かい解説は譲る。私は【特に仕事してないVPSを惰性で契約しているタイプのオタク】なので、VPS に入れてCloudflare Tunnel経由でコントロールパネルにアクセスしている。
3つ目は、CONCURRENT_ITEMS (同時にサイトへのアクセスを行う最大接続数) の数値のこと。上のcompose.yamlでは最大値の6並列に設定してあるが、あまり並列数を増やしすぎるとアーカイブ先のサーバに負荷がかかりすぎるリスクもある。DoSと見なされてIP BANをされてしまったら元も子もない。様子を見て並列度を2くらいにするのも選択肢だ。(これはyamlをいじらなくても、後述するWeb UIでいつでも変更できる。) 逆に接続数を増やしたい場合は、上のyamlファイルに多少修正を加える必要はあるが、docker compose up --scale を使って複数のWarriorコンテナを作成するという選択肢もある。ただし、リクエストを送りすぎてDoS攻撃になってしまうリスクもあるので慎重に。*1
最後の4つ目は、おそらくIT技術者にとっては最も重大なことだが、Warriorはx86以外で直接動かすことができない。つまりRaspberry Pi, Apple Silicon MacではQEMUを使わないと動かない。 これはWarriorが使用しているダウンローダ (wget) に起因する問題で、x86と異なる環境ではwgetのWebアーカイブ機能が正しく動かない可能性があるためだそうだ。QEMUでx86をエミュレートすれば問題ない。Docker環境の場合、DockerでQEMUを使う設定をした上で、compose.yamlに platform: linux/amd64を付け加えれば大丈夫なはず。…だが、私はやったことがないのでQEMUの設定方法は提示できない。
ともかく、上のDockerコマンドを入力するなりVMで導入するなりを完了すると、localhost:8001 からコントロールパネルにアクセスできる。
このコントロールパネルから、ユーザ名と「どのウェブサイトの保存プロジェクトに参加するか」を設定する。ArchiveTeamでは多数のWebサイトの保存プロジェクトを同時並行で進めており、緊急性の低いものから高いものまで色々ある。1つのWarriorが一度に参加できるプロジェクトは1つだけだが、原則「ArchiveTeam’s Choice」を選んでおくと良い。人手の足りてないプロジェクトをWarriorが勝手に選んで参加してくれる。私の環境における「ArchiveTeam’s Choice」は、平常時にはTelegramの保存プロジェクトが割り当てられることが多い。
設定を済ませたら、後は放っておくだけでWarriorが自動でジョブを処理してくれる。
登録したプロジェクトに自分のすべきジョブがない場合は、ステータス画面にその旨が表示される。
DockerにしろVMにしろ、いずれにしても自宅サーバを動かしているタイプのオタク、もしくは特に仕事してないVPSを惰性で契約しているタイプのオタクは今すぐ導入すべき(分散コンピューティングプロジェクトという選択肢もあるけど)。
上で少し触れたが、Warrior で保存されたデータの管理は Wayback Machine (もっと言うとInternet Archive) に全面的に依存している。Internet Archiveが世のインターネットデータ保全の単一障害点となっている状況は、「データの保全」という観点からは極めて大きなリスクを孕む。「Warrior は Internet Archive の単一障害点化を促進するものだ」という見方もあるかもしれない。しかしだからといって、インターネットユーザ個人のストレージにデータを溜めこんだとしてもInternet Archiveの代替にはなりえない。事実上、Internet Archiveはインターネットデータ保全の最初にして最後の砦になっている。その現状を受け入れて、砦を有効活用していくための手段がWarriorなのだ。
追記
Warriorを7日以上起動していると、デフォルトでは今ある作業を中断して自動的に仮想環境の再起動がかかるようになっている。ただしDockerの場合は何らかの理由でコンテナ内にshutdownコマンドのバイナリが含まれておらず、再起動に失敗する(=7日経つとWarriorが停止する)不具合がある。従って起動から7日経ったら、改めて docker start archiveteam-warrior を打つ必要がある。
少なくとも1年前の時点で報告があるが、まだ直そうとしている人はいないようだ。
追々記(2025/04/17): GitHubのIssueで教えてもらったが、archiveteam-warriorのDockerコンテナを作成する際のオプションを --restart=on-failure の代わりに --restart=always とすると問題を回避できるようだ。ただしこれは「コンテナが止まったら常に再起動する」という意味のオプションであって、Dockerイメージ自体の根本的な問題解決にはなっていない。