2020年7月31日金曜日

【64】BitCurator Access Redaction Tools (インストール成功版)

今日はなんだか始める前から眠気が半端じゃありません。
でも、頑張って大人の勉強会についていきます~

始める前の雑談
AtoM2.6.1がそろそろでる。マルチリンガル機能を強化するらしい。翻訳も一緒に改善される予定のよう。夏休みに一日翻訳をやりますか…

ではここから本題
BitCurator Access Redaction Tools を試してみます。
これが何をするものなのかは61回のブログを読んでください。簡単に言ってしまうと墨消ししてくれるツールです。

インストール

今日は以下のマニュアルを見ながら、最後までインストールを成功させましょう。
bitcurator-access-redaction Quick Start Guide
Githubにもマニュアルあります~
我々は、Githubのマニュアルでインストールを勧めました。マニュアル通りでインストールすれば良いということがわかったのですが、PDFガイドと一緒に見ていると間違いやすいところが2箇所あります。

Bitcurator 1.7.28 以上を使っている場合は、すぐ次を実行します。Prerequisites部分は飛ばします。(https://github.com/BitCurator/bitcurator-access-redaction#prerequisites

そして、Pythonのバージョンに注意が必要です。PDFのガイドにはこのことが書いてないので混乱しやすいです。

Note! In the BitCurator Environment, both Python 2.7 and Python 3.5 are installed, and the "pip" command links to Python 3.5 version of pip. You must use "pip2" to install with Python 2.7 (currently required due to a dependency on pylightgrep).

我々も以下の部分でエラーが発生しました。どうもpipにはPython3.5がインストールされるような設定になっているためのようです。

$ cd bitcurator-access-redaction
$ cd libredact
$ pip2 install -e .
 →ここでエラーが発生しました。

そこで、Pythonのバージョンを下げるために、pythonがあるディレクトリー下で以下を実施。エラーを解消できました。

sudo rm python-config
sudo ln python-2.7 python
sudo ln python2.7-config python-config
python -V     #バージョン確認


※参考:インストール中にあるsudo -H とは?
https://teratail.com/questions/169492
ユーザのホームディレクトリ($HOME)を書き換えるオプション。

ツールの大まかな流れ

このツールが動く大まかな流れは、
  1. disk imageを取る(test_image.rawを作成)
  2. Digital Forensics XML fileを作成(fiwalkを利用、ファイル名やMD5のようなハッシュ値を比較するためのもの)
  3. configファイルを作成(test_image_config.txt、どう墨消しするかを指定) 
  4. configファイルを実行($ redact-cli -c ~/Desktop/test_image_config.txtで実行)
  5. test_image_redacted.rawがアウトプットされる
です。

Configファイルのルール
ここでconfigファイルのルールを理解することが必要になります。以下はテストで実行するルールですが、マニュアルにはないコメント(#)を赤で追加しました。
# インプットするファイルの指定
INPUT_FILE /home/bcadmin/Desktop/test_image.raw # 事前に作成したDigital Forensic XMLファイルの指定
DFXML_FILE /home/bcadmin/Desktop/test_image_fw.xml
# アウトプットフアィルの指定
OUTPUT_FILE /home/bcadmin/Desktop/test_image_redacted.raw

# Targets The Whale.txt 
FILE_NAME_MATCH *Whale.txt FUZZ

# Targets Dorian Gray.txt
FILE_MD5 114583cd8355334071e9343a929f6f7c FILL 0x44

# Targets DRINKME.TXT
FILE_SHA1 7f9f0286e16e9c74c992e682e27487a9eb691e86 FILL 0x44

# Fill Kafka sequences in Metamorphsis.txt with K
SEQ_EQUAL Kafka FILL 0x4B

# employmentなんとかのファイルにある社会保障番号のようなものを0x44(ASCIIではアルファベットD)で埋める
SEQ_MATCH \d{3}-?\d{2}-?\d{4} FILL 0x44

# Scrub EATME.TXT
FILE_SEQ_EQUAL pineapple-upside-down-cake SCRUB

# Scrub Alice in Wonderland
FILE_DIRNAME_EQUAL looking-glass SCRUB

# Ignore EATME.TXT.BACKUP
IGNORE *.BACKUP

# Commit the redaction (write out a redacted disk image)
COMMIT

上記の操作は以下のルールに沿っています。(PDFガイドp11)
Rule Command Format: [target condition] [action]

Target Conditions:
FILE_NAME_EQUAL <filename> - target a file with the given filename
FILE_NAME_MATCH <pattern> - target any file with a given filename pattern
FILE_DIRNAME_EQUAL <directory> - target all files in the directory
FILE_MD5 <md5> - target any file with the given md5
FILE_SHA1 <sha1> - target any file with the given sha1
FILE_SEQ_EQUAL <string> - target any file that contains <a string>
FILE_SEQ_MATCH <pattern> - target any file that contains a sequence matching <a pattern>
SEQ_EQUAL <string> - target any sequences equal to <a string>
SEQ_MATCH <pattern> - target any sequences matching <a pattern>

Actions:
SCRUB overwrite the bytes in the target with zeroes
FILL 0x44 overwrite by filling with a given character (here, 0x44, or ASCII 'D')
FUZZ fuzz the binary, but not the strings

しかし、指定した内容が正しく実行されたかがよくわかりません。例えば、SCRUBはゼロに埋めるという処理ですが、予想よりはるかに多いファイルの中がゼロで埋め尽くされていました。
画像の左が元のファイル、右が00で埋められたファイル


そこで、SCRUBが含まれている処理を付けたり外したりして、処理されたファイル数を調べて見ました。configファイルにある以下のSCRUB処理が対象です。
① FILE_DIRNAME_EQUAL looking-glass SCRUB
② FILE_SEQ_EQUAL pineapple-upside-down-cake SCRUB
  1. ①、②両方実行:42個 (ここだけXMLファイルを除外)
  2. ①のみ実行:9個
  3. ②のみ実行:41個
  4. ①、②両方除外:8個
この結果から、SCRUBがどう動いているか…よくわかりません。例えば、SEQ_EQUAL Kafka FILL 0x4Bの場合は、Kafkaの名前部分だけがKKKKKに変更されたことが確認できました。しかし、SCRUBのようによくわからない部分も… 

ここで他の設定を入れてみて処理ファイルの数を確認したりしましたが、ファイルの内容を全部把握していないこともあり、結果が正確かがいまいちわかりませんでした。ということで、今日はこのあたりで終わりです。次回は、Configファイルのルールについてもう少し勉強します。

---------------------------------------------
次回は、9月4日(金)です。
8月は、な・つ・や・す・み! いぇ~~

後日追記
以下は参考資料です〜 読みましょう〜

Testing bca-redtools in the BitCurator Environment

Redacting Private and Sensitive Information in Born-Digital Collections

2020年7月27日月曜日

【63】番外編 形態素解析器SudachiをAtoM2.6に導入

番外編2です。Kuromojiよりも語彙や分割能力に優れた形態素解析器SudachiをAtoM2.6に導入できたので、報告します。
正確に言えば、AtoM2.6のために使っているElasticsearchに、プラグインelasticsearch-sudachiをインストールしました。
プラグインelasticsearch-sudachiは、こちらのサイトを参照。https://github.com/WorksApplications/elasticsearch-sudachi
インストールは、こちらの手順を参考にしました。https://qiita.com/sorami/items/99604ef105f13d2d472b

まずは、AtoM2.6に入っているElasticsearchのバージョンを確認します。
マシンは、ubuntu 18.04(virtual machine)、java1.8です。
curl http://localhost:9200 (curlがなければsudo apt install curlでインストール)
 "number" : "5.6.16",
 "lucene_version" : "6.6.1"
の二つをチェックしておきます。
このバージョンに応じてsudachiを設定します。

gitとMavenを使うので、事前にインストール。
sudo apt install git
sudo apt install maven

ここからelasticsearch-sudachiを入れていきますが、最新版を入れたせいで、えらい目に遭いました。以下、苦労した話を書いた後に、簡単に進められると考えられるやり方について触れます。

ソースコードを持ってくる
git clone https://github.com/WorksApplications/elasticsearch-sudachi.git
ソースコードは、/home/ユーザー(ユーザーはご自身のものを入れてください)の直下にあります。
そっちに移動して
cd elasticsearch-sudachi
ビルドする。
mvn package
以下のエラーが起こります。
Caused by: org.apache.maven.plugin.compiler.CompilationFailureException: Compilation failure
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
これを修正していきます。

javacが必要(*)。
sudo apt install openjdk-8-jdk-headless software-properties-common

設定ファイルを変更(**)。
sudo vim elasticsearch-sudachi/pom.xml
4~7行目あたりにある<version>、<lucene.version>を次に変更。
             <version>5.6.16-2.0.2-SNAPSHOT</version>
             <lucene.version>6.6.1</lucene.version>
33~38行目あたりの<plugin>内に緑を追加。
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <fork>true</fork>
                    <executable>/usr/lib/jvm/java-8-openjdk-amd64/bin/javac</executable>
                </configuration>

再度、ビルドに失敗する。
エラーメッセージは、
/home/ユーザー/elasticsearch-sudachi/src/main/java/com/worksap/nlp/elasticsearch/sudachi/index/SudachiTokenizerFactory.java:[43,29] エラー: 不適合な型: SettingsをStringに変換できません:
でした。そこを確認して修正する。
sudo vim /home/ユーザー/elasticsearch-sudachi/src/main/java/com/worksap/nlp/elasticsearch/sudachi/index/SudachiTokenizerFactory.java
41〜50行目あたりのファイル記述を変更。
    public SudachiTokenizerFactory(IndexSettings indexSettings,
            Environment env, String name, Settings settings) throws IOException {
        -super(indexSettings, settings, name);
        +super(indexSettings, name, settings);
        mode = getMode(settings);
        discardPunctuation = settings.getAsBoolean("discard_punctuation", true);
        resourcesPath = new SudachiPathResolver(env.configFile().toString(),
                settings.get("resources_path", "sudachi")).resolvePathForDirectory();
        settingsPath = new SudachiSettingsReader(env.configFile().toString(),
                settings.get("settings_path")).read();
    }

再々度、ビルドに失敗。
エラーメッセージは
[ERROR] /home/ユーザー/elasticsearch-sudachi/src/test/java/com/worksap/nlp/lucene/sudachi/ja/TestSudachiAnalyzer.java:[156,58] エラー: intは間接参照できません
[ERROR] /home/ユーザー/elasticsearch-sudachi/src/test/java/com/worksap/nlp/lucene/sudachi/ja/TestSudachiAnalyzer.java:[159,58] エラー: intは間接参照できません
[ERROR] /home/ユーザー/elasticsearch-sudachi/src/test/java/com/worksap/nlp/lucene/sudachi/ja/TestAnalysisSudachi.java:[184,20] エラー: クラス Builderのメソッド loadFromStreamは指定された型に適用
です。解決していきます。
sudo vim /home/ユーザー/elasticsearch-sudachi/src/test/java/com/worksap/nlp/lucene/sudachi/ja/TestSudachiAnalyzer.java
155〜159行を修正。
155             query = queryParser.parse("京都");
156-           assertThat(searcher.search(query, 5).totalHits.value, is(0L));
       +           assertThat(searcher.search(query, 5).totalHits, is(0));
157
158            query = queryParser.parse("岩波");
159-             assertThat(searcher.search(query, 5).totalHits.value, is(0L));
      +           assertThat(searcher.search(query, 5).totalHits, is(0));

sudo vim /home/ユーザー/elasticsearch-sudachi/src/test/java/com/worksap/nlp/lucene/sudachi/ja/TestAnalysisSudachi.java
186行目
186-                        .loadFromStream(RESOURCE_NAME_SUDACHI_ANALYSIS_JSON, input, true)
186+                       .loadFromStream(RESOURCE_NAME_SUDACHI_ANALYSIS_JSON, input)
と直しました。

mvn package
でビルドに成功。

インストールを試みる。
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install file:///home/ユーザー/elasticsearch-sudachi/target/releases/analysis-sudachi-5.6.16-2.0.2-SNAPSHOT.zip
エラーがまた発生。
ERROR: `elasticsearch` directory is missing in the plugin zip
昼寝して落ち着く。その後、次のファイルを全部書き換え。
sudo vim elasticsearch-sudachi/src/main/assemblies/plugin.xml
<assembly>
<id>executable</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<files>
<file>
<source>src/main/extras/plugin-descriptor.properties</source>
<outputDirectory>elasticsearch</outputDirectory>
<filtered>true</filtered>
</file>
<file>
<source>LICENSE</source>
<outputDirectory>elasticsearch</outputDirectory>
<filtered>false</filtered>
</file>
</files>
<dependencySets>
<dependencySet>
<outputDirectory>elasticsearch</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<includes>
<include>com.worksap.nlp:*</include>
<include>org.glassfish:javax.json</include>
</includes>
</dependencySet>
</dependencySets>
</assembly>
をコピーペースト。

もう一度、
mvn package
して、
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install file:///home/ユーザー/elasticsearch-sudachi/target/releases/analysis-sudachi-5.6.16-2.0.2-SNAPSHOT.zip
インストールに成功。
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin list
analysis-sudachiがあればOK.

とまあ、長いこと書いてきましたが、Gitから適切なバージョンのソースコードがあれば恐らく問題なしです。
git clone —depth=1 -b v5.6.16-2.0.2 https://github.com/WorksApplications/elasticsearch-sudachi.git
を取ってきて、
(*)(**)
を行えば、mvn packageによるビルドは問題ないと思います。

続いて、辞書をインストール。一番語彙の多いフル辞書を入れます。
wget https://object-storage.tyo2.conoha.io/v1/nc_2520839e1f9641b08211a5c85243124a/sudachi/sudachi-dictionary-latest-full.zip
unzip sudachi-dictionary-latest-full.zip
sudo mkdir /etc/elasticsearch/sudachi
sudo cp /home/ユーザー/sudachi-dictionary-20200330/system_full.dic /etc/elasticsearch/sudachi
Elasticsearchを再起動。
sudo /etc/init.d/elasticsearch restart
analysis-sudachiのインストールを確認する。
curl -X GET 'http://localhost:9200/_nodes/plugins?pretty'
pluginsにanalysis-sudachiが入っていれかどうかを確認。
Elasticsearchに辞書があるかも確認する。
sudo ls /etc/elasticsearch/sudachi/

最後にAtoMでSudachiが動くように設定する。Kuromojiと一緒です。
cd /usr/share/nginx/atom
sudo nano plugins/arElasticSearchPlugin/config/search.yml
japanese:
   tokenizer: sudachi_tokenizer
   filter: [sudachi_baseform, sudachi_split, sudachi_ja_stop]
     フィルターはたくさんあるので、今後、要検討です。
sudo nano plugins/arElasticSearchPlugin/lib/arElasticSearchMapping.class.php 
   'it' => 'italian',
'
   ja' => 'japanese',

以上です。
Gitから適切なバージョンのソースコードさえ持ってこれたら、非常に簡単な作業にな離ます。ですが、今回は失敗も含めた作業過程を紹介しました。今後、ブラッシュアップしていくつもりです。






2020年7月23日木曜日

【62】番外編AtoM2.6のインストール

AtoM2.6のインストールについて、マニュアルhttps://www.accesstomemory.org/en/docs/2.6/admin-manual/installation/linux/ubuntu-bionic/#mysql
のみでは不十分な点があったので、備忘録としてブログを更新します。
マニュアル通りに進めると、最後のRun the web installerのDatabase登録のところで詰みます。データベースのパスワードを拒否するのです。これはAtoM2.6から、mysql8.xを使うようになり、DBユーザーの認証の初期設定が変ったために起こる問題です。

工夫がいるのは、mysqlの設定です。
Create Databaseの作業は、まずマニュアル通り、

sudo mysql -h localhost -u root -p -e "CREATE DATABASE atom CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;"

を打ちます。
さらに、マニュアルにしたがい、

sudo mysql -h localhost -u root -p -e "CREATE USER 'atom'@'localhost' IDENTIFIED BY '12345';"
sudo mysql -h localhost -u root -p -e "GRANT ALL PRIVILEGES ON atom.* TO 'atom'@'localhost';"

を打ちます。'12345'は、任意のパスワードです。

それで、追加するのは次の命令文。

sudo mysql -h localhost -u root -p -e "ALTER USER ‘atom’@‘localhost' IDENTIFIED WITH mysql_native_password BY '12345';"

'12345'は、上記のパスワードなので、必ず一致させます。

この命令文が何をやったかは次の記事が参考になります。
https://motomotosukiyaki.com/mysql-from-php-server-requested-authentication-method-unknown-to-the-client/

完全に理解していないので、推測で説明します。
まずMysqlに入ります。

$ sudo mysql -u root -p

データベースのユーザーを示すテーブルに切り替える?

mysql> use mysql 

ユーザー一覧を表示します。

mysql> select user, host, plugin from user;

ここで、atomの認証(plugin)がcaching_sha2_passwordとなっているのが問題です。
認証を上で設定したパスワードの12345に変更してやります。

mysql> alter user 'atom'@'localhost' identified with mysql_native_password by '12345';

atomというユーザーがパスワード12345でMysqlに入れるようになりました。
mysql> select user, host, plugin from user;
で再確認。

以上の設定で、Run the web installerのDatabase登録を無事終えることができました。

さて、次回の道場は7/31(金)です。
よろしくお願いします。





2020年7月19日日曜日

【61】BitCurator Acess toolsお試しーPart2

久しぶりにブログ担当となりました平野です。しかも、当日(2020-07-10)ブログ担当を決めるのを忘れてしまい、遡及的に記憶を頼りに書くことを引き受けてしまいました。反省。

当日、少しZoom入室が遅れたため、入ったときには、前回うまくいかなったBitCurator Access Webtoolsについて、われらが導師である入澤先生と、具体的なオペレーションを担当している元さんとの間で「あーすればこーなるのだ」という会話が交わされ、前回の問題がすっかり解決するところでした。

というわけで、そこの部分の細かいところは、元さん、補足をお願いいたします。

あっさりWebtoolsが動いて、これを使えばディスクイメージのファイルをウェブブラウザ経由で見ることができることがわかりました。(そういうことですよね?)

インストールのしかた、使い方は BitCurator Acess Webtools Quick Start Guide をご参照ください。

あっさり動いてしまったので、さて今日は何をしようかという話になり、とりあえずもう一つ残っているBitCurator Access Redactionを試してみることにしました。

これも、GitHub上の情報とBitCurator Access Redaction Quick Start Guide を参照しながら進めていきます。

そして、この時点で私たちは、いったいこのアプリケーションが何をするものなのか、よくわかっていなかったのでした(笑)。例によってあーでもないこーでもないと言いながらやっていると、じわじわと見えてくることもあるのですが、要するに、ディスクイメージをウェブブラウザで見えるようにするのはいいとして、そこには見えてしまったらこまる情報もたくさんあるだろうと。そういう情報を編集して、00を上書きしたり(scrub)、必要な処理を一括で行えるのがこのAcces Redactionであることがわかりました。

とりあえずどんな情報にどんな処理をして、どのディスクイメージに対して作業をするかを、Guideの通りにconfiguration fileに書き込んで、いよいよこのコマンドを打ち込みます。

$ redact-cli -c ~/Desktop/test_image_config.txt

今回は、ここでstuck。

インストールの開始時、ちょっと指示を読み違えて、作業するディレクトリとかを間違えていたのかもしれないね、ということになり、次回もういちど、慎重にやってみることになりました。

これで、だいたいBitCuratorが何をしているかわかったのですが、作業のあいまに(様々な処理をPCがしている間にけっこう待ち時間があるので)「アーカイブズとしてこれをどう使うのかねえ」という話になりました。

例えば大学アーカイブズが有名な先生の個人文書(PCやポータブルHDDやUSBを含む)を受贈することになったときに(どこかのサーバーからアーカイブズが管理するサーバーへファイルが移管されるときは別の話)

BitCuratorでディスクイメージを作成し、そのコピーに様々な処理をかけて、ファイルシステムやファイルに関する情報を抽出し、さらにファイルを読めるようにする

BitCurator NLPで、ディスクイメージに自然言語処理をかけて、ディスク全体にどんなトピックやエンティティが登場し、それらが相互にどう関係し合っているかを可視化する(おそらく、評価・選別や、整理の優先順位を決めるのに役立つ)

BitCurator Access Webtoolsで、ディスクイメージ上のファイルを、ウェブブラウザで見られるようにする

BitCurator Access Redactionで、Webtoolsで見せてはまずい情報を、コマンド一発で処理することができる

という話なのかなあという....これを組み合わせれば、例えば個人から受け入れたデジタル文書を、ざっくり機械的に処理して、とりあえず館内のPCで限定公開することも可能になるのかなあという感じでしょうか。

あとは、この最初のディスクイメージをしっかり保存しなきゃいけないわけですが、それをArchivematicaに入れるのか、入れるとどうなるのかを見てみたいね、という話にもなったような気がします。

私が記憶しているのは以上です。
参加していた方、補足をお願いしまーす。









2020年7月4日土曜日

【60】Bitcurator Access Toolのインストール

投稿者、私用のため余裕がありません。本ブログ記事のなかで、一番薄い内容になります。

Bitcurator Access Toolの内容は
https://bitcurator.net/bitcurator-access/
を見よう。

インストールの方法は次の二つを参照しよう。
Github:https://github.com/bitcurator/bitcurator-access-webtools
クイックスタート:http://distro.ibiblio.org/bitcurator/docs/BCA-Quickstart.pdf

このアプリはVirtual BoxとVagrant(ヴェイグラント)を使います。
Vagrantの解説は
https://qiita.com/ozawan/items/160728f7c6b10c73b97e
を読もう。

本日はまずbitcurator-access-webtoolsをWindows 10のマシンにダウンロードした。
“bitcurator-accesswebtools-X.X.X”を展開する。
Windowsマシンのコマンドラインを開き、次を実行。
vagrant box add bento/ubuntu-18.04
時間かかるので、今後の研究会などについて相談。

終わったので、次を実行。
cd \Users\your-user-name\Desktop\bitcurator-accesswebtools-X.X.X
vagrant up
説明書には30分と書いてあったが、小一時間たっても処理が終わらず。
Zoom解散。その後、処理は終わり、無事起動したらしい。
次回は、起動したアプリを確認します。

次回日程:7/10(金)19:00頃から。

お時間ありましたら、ご参加ください。




最近の投稿

【108】Archives in the Digital Age: The use of AI and machine learning in the Swedish archival sectorを読む

 Gijs Aangenendt氏の修士論文、Archives in the Digital Age: The use of AI and machine learning in the Swedish archival sectorを半分読みました。 前半は、AIを扱ったアーカ...

人気の投稿