a3mを試す
概要
a3mを試します。
a3mは以下のように説明されています。
a3m is a lightweight version of Archivematica focused on AIP creation. It has neither external dependencies, integration with access sytems, search capabilities nor a graphical interface.
(機械翻訳)a3mはArchivematicaの軽量版で、AIP(アーカイブ情報パッケージ)の作成に特化しています。外部依存関係、アクセスシステムとの統合、検索機能、グラフィカルインターフェースはありません。
Archivematicaとの違い
以下についても機械翻訳結果を掲載します。
The main differentiator is the lack of service dependencies. a3m does not depend on Gearman or external workers, MySQL, Elasticsearch or Nginx. a3m provides its own API server based on the gRPC stack and all processing is performed via system threads and spawned child processes. An embedded database based on SQLite is used to store temporary processing state.
(機械翻訳)主な違いはサービス依存性がないことです。a3mはGearmanや外部ワーカー、MySQL、Elasticsearch、Nginxに依存していません。a3mはgRPCスタックに基づいた独自のAPIサーバーを提供し、すべての処理はシステムスレッドと生成された子プロセスを介して実行されます。一時的な処理状態を保存するために、SQLiteに基づいた組み込みデータベースが使用されます。
インストール
以下を参考にします。
Dockerを使用します。以下のdocker-compose.ymlを作成しました。
services:
a3md:
image: ghcr.io/artefactual-labs/a3m:latest
ports:
- 7000:7000
networks:
- a3m-network
networks:
a3m-network:
external: true
そして、docker-compose.ymlが格納されている同じフォルダで、以下を実行して起動します。
docker network create a3m-network
docker compose up -d
AIPを作成する
以下を参考に進めます。
理解が怪しい点がありますが、サーバ上で実行することも、クライアントから利用することもできそうです。
詳細は以下をご確認ください。
サーバ上で実行する
まずライブラリをインストールします。
pip install a3m
そして、以下のように実行します。
a3m /a3m/examples --name="server"
以下のように出力されました。
AIP 226f0c78-e779-44c6-bc8e-17414f008241 is being generated...
Processing completed successfully!
Processing directoryを確認すると、7zファイルが作成されていました。
ls ~/.local/share/a3m/share/completed/
server-226f0c78-e779-44c6-bc8e-17414f008241.7z
クライアントから利用する
まずライブラリをインストールします。
python -m venv .venv
source .venv/bin/activate
pip install a3m
そして、address
引数と、処理対象のファイルをURLで指定します。
サーバのドメインを仮にexample.orgとしています。またいらすやさんの画像を利用しています。
a3m --address=example.org:7000 --name="client" https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5x8DUwBVjGR2IkVozOhVoe1zMnzIrcemz4s8xMsHR1gP8mV809urM_03Et8VWHxlGHXy1Vo2UD6x1z7SUVtVik0d0wCW37bbAIb1q7WOlKdyRiwpDkJiONBKEvgPdJFJFRTwGNMMeGUbW/s691/baby_role_towel_utsubuse.png
これも同様に、以下のように出力され、サーバ上に保存されました。
AIP 8f2c08c7-1ae0-42f5-9ae2-2908bc7fac54 is being generated...
Processing completed successfully!
Pythonで利用する
以下のようにすることで、cliと同様に、AIPを作成することができました。
import grpc
from a3m.server.rpc.client import Client
server_address = 'example.org:7000'
# 暗号化されていないチャネルを作成
channel = grpc.insecure_channel(server_address)
c = Client(channel)
res = c.submit(
url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5x8DUwBVjGR2IkVozOhVoe1zMnzIrcemz4s8xMsHR1gP8mV809urM_03Et8VWHxlGHXy1Vo2UD6x1z7SUVtVik0d0wCW37bbAIb1q7WOlKdyRiwpDkJiONBKEvgPdJFJFRTwGNMMeGUbW/s691/baby_role_towel_utsubuse.png",
name="client-py",
)
さらに、以下により、処理結果を取得することができました。
res_read = c.read(res.id)
res_read
status: PACKAGE_STATUS_COMPLETE
job: "Store AIP"
jobs {
id: "a247df6a-edd3-446b-868f-be4c0b5bc367"
name: "a3m - Download package"
group: "a3m"
link_id: "00000e0a-2cb2-4292-a412-58ea57aa6f7e"
status: STATUS_COMPLETE
start_time {
seconds: 1718237770
nanos: 720538000
}
}
jobs {
id: "8b5042e4-56c8-4d21-9263-73de14fd1cca"
name: "Remove hidden files and directories"
group: "Verify transfer compliance"
link_id: "50b67418-cb8d-434d-acc9-4a8324e7fdd2"
status: STATUS_COMPLETE
start_time {
seconds: 1718237771
nanos: 497992000
}
}
jobs {
id: "f921f6fb-a843-4d8d-92ba-209210da4178"
name: "Remove unneeded files"
group: "Verify transfer compliance"
link_id: "5d780c7d-39d0-4f4a-922b-9d1b0d217bca"
status: STATUS_COMPLETE
start_time {
seconds: 1718237771
nanos: 515314000
}
}
jobs {
id: "eb6435aa-2d63-41d6-bed0-6ae6c41528ac"
name: "Attempt restructure for compliance"
group: "Verify transfer compliance"
link_id: "ea0e8838-ad3a-4bdd-be14-e5dba5a4ae0c"
status: STATUS_COMPLETE
start_time {
seconds: 1718237771
nanos: 533858000
}
}
jobs {
id: "6fc1c185-2c99-4b3c-ad5c-e77ee8a56b50"
name: "Verify transfer compliance"
group: "Verify transfer compliance"
link_id: "438dc1cf-9813-44b5-a0a3-58e09ae73b8a"
status: STATUS_COMPLETE
start_time {
seconds: 1718237771
nanos: 554084000
}
}
jobs {
id: "2c3462d0-a711-458d-89fe-04bbea22f203"
name: "Verify mets_structmap.xml compliance"
group: "Verify transfer compliance"
link_id: "d0c463c2-da4c-4a70-accb-c4ce96ac5194"
status: STATUS_COMPLETE
start_time {
seconds: 1718237771
nanos: 573639000
}
}
jobs {
id: "90c0b640-dd58-49a8-a27f-66ca2a00568f"
name: "Assign UUIDs to directories?"
group: "Assign file UUIDs and checksums"
link_id: "bd899573-694e-4d33-8c9b-df0af802437d"
status: STATUS_COMPLETE
start_time {
seconds: 1718237771
nanos: 600004000
}
}
jobs {
id: "4f3173e5-1324-4a99-b341-7325155c0246"
name: "Assign UUIDs to directories"
group: "Assign file UUIDs and checksums"
link_id: "6441980c-b64b-447e-abc7-9351a2547f6a"
status: STATUS_COMPLETE
start_time {
seconds: 1718237771
nanos: 606370000
}
}
jobs {
id: "12a4ede6-4d35-46db-91ad-eb9fa2900fae"
name: "Assign file UUIDs to objects"
group: "Assign file UUIDs and checksums"
link_id: "dc144ff4-ad74-4a6e-ac15-b0beedcaf662"
...
start_time {
seconds: 1718237773
nanos: 159203000
}
}
考察
ProcessingConfig
以下に記載がある通り、ArchivematicaではXMLベースの設定ファイルを事前に用意しておく必要がありました。一方、a3mでは、transfer requestsの一部として、設定を提出できるようです。これにより、AIP作成における柔軟性が向上するのではないかと思います。
利用にあたって
本ツールは開発中ということで、まだ利用を開始するのは難しいかなと思いました。一方、AIPをよりシンプルに作成できるツールとして、今後の進展に期待したいと思います。
まとめ
参考になりましたら幸いです。
Discussion