HyraxでIIIFの設定を行う

HyraxはIIIFに対応している。IIIFサーバにriiif、ビューワにUniversal Viewerを利用しているが、デフォルトでは有効にはなっていない。

github.com

universalviewer.io

IIIFサーバを有効にするには、Hyraxの config/initializers/hyrax.rb を以下のように変更する。

  # Enable IIIF image service. This is required to use the
  # UniversalViewer-ified show page
  #
  # If you have run the riiif generator, an embedded riiif service
  # will be used to deliver images via IIIF. If you have not, you will
  # need to configure the following other configuration values to work
  # with your image server:
  #
  #   * iiif_image_url_builder
  #   * iiif_info_url_builder
  #   * iiif_image_compliance_level_uri
  #   * iiif_image_size_default
  #
  # Default is false
  config.iiif_image_server = true # この行を編集

Hyraxを再起動した後、新しく画像をアップロードし、Universal Viewerによる画像ビューワが表示されることを確認する。

f:id:nabeta:20180716175126p:plain

Hyraxでファイルのサムネイルを作成する

Hyraxでは、アップロードしたファイルのサムネイルを生成できるようになっているが、いくつかの設定を行う必要がある。

LibreOffice

サムネイルの生成はLibreOfficeを用いて行うようになっているので、libreofficeパッケージをインストールする。

$ sudo apt install libreoffice

次に、Hyraxの config/initializers/hyrax.rb を編集し、LibreOfficeのパスを指定する。

  # Path to the file derivatives creation tool
  config.libreoffice_path = "/usr/bin/soffice"

OpenJDK

Ubuntu 18.04ではlibreofficeパッケージをインストールすると、Java10(openjdk-11-jre)もインストールされる。しかし、インストール時に触れたとおり、Java10では同梱されているJettyと、その上で動作するFedoraが起動しない。このため、update-java-alternativesコマンドを用いて、既定でJava8を使用する設定を行う。

$ sudo update-java-alternatives --set java-1.8.0-openjdk-amd64
$ java -version
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-0ubuntu0.18.04.1-b11)
OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)

FITS

Hyraxはファイルのメタデータの抽出に、FITS(The File Information Tool Set)を利用している。ダウンロードのページから、現時点での最新版のfits-1.3.0.zip*1をダウンロードして展開する。なお、GitHubにあるFITSのリポジトリで公開されているzipファイルには実行ファイルが含まれていないので、ここでは使用しない。

$ cd
$ sudo apt install unzip
$ wget https://projects.iq.harvard.edu/files/fits/files/fits-1.3.0.zip
$ unzip -d fits fits-1.3.0.zip
$ cd fits

fits.shを実行して、ヘルプが出力されることを確認する。

$ ./fits.sh -h
usage: fits
 -f <arg>   alternate fits.xml configuration file location (optional)
 -h         print this message
 -i <arg>   input file or directory
 -o <arg>   output file or directory if -i is a directory
 -r         process directories recursively when -i is a directory
 -v         print version information
 -x         convert FITS output to a standard metadata schema
 -xc        output using a standard metadata schema and include FITS xml

次に、Hyraxの config/initializers/hyrax.rb を編集し、FITSのパスを指定する。

  # Path to the file characterization tool
  config.fits_path = "/home/vagrant/fits/fits.sh"

ActiveJob

サムネイルの作成は、RailsのActiveJobを用いた非同期処理で行えるようになっているが、今回は開発環境で動作させるため、非同期処理を行わないようにする。Hyraxの config/environments/development.rb を以下のように変更する。

Rails.application.configure do
  # 途中省略
  
  # 次の行を追加
  config.active_job.queue_adapter = :inline
end

以上の設定が終わったら、Hyraxを再起動する。

$ bin/rails hydra:server

Hyraxが起動したら画像ファイルをアップロードし、サムネイルの表示、ならびにファイルのMIMEタイプやハッシュなどのメタデータが追加されていることを確認する。 f:id:nabeta:20180714125318p:plain

*1:HyraxのREADMEには1.0系を使用するように書いてあるが、手元の環境で1.3.0を試したところ、1.1.0で報告されているJPEGファイルからのメタデータの抽出の問題は起こっていないようなので、ここではテストを兼ねて1.3.0を使用することにする。

Hyraxにファイルを登録する

前回はユーザアカウントの作成を行ったので、今度はそのアカウントを使って、Hyraxにファイルを登録してみることにする。

nabeta.hatenadiary.jp

ダッシュボードの"Works"から"Add new work"ボタンを選び、"Descriptions"タブでタイトルや著者名を入力し、"Files"タブでファイルをアップロードする。画面右側の"Save Work"パネルの"Visibility"で公開範囲を選び、"I have read and agreed to the Deposit Agreement"にチェックを入れて"Save"ボタンを押すと、Hyraxにファイルが登録される。

f:id:nabeta:20180702205541p:plainf:id:nabeta:20180702205553p:plain

f:id:nabeta:20180702210318p:plain

ファイルは「コレクション」を用いて整理できるようになっている。コレクションを作成するには、ダッシュボードの"Collection"から"New Collection"ボタンを選び、コレクションの種別で"User Collection"を選ぶ。コレクションの名前や説明文を入力して、"Save"ボタンを押すと、コレクションが保存される。

f:id:nabeta:20180702210815p:plainf:id:nabeta:20180702210807p:plain

コレクションの情報を入力するには、先ほどのWorkの作成画面の"Relationships"タブで、"Add to collection"リストを選ぶ。登録対象のコレクションを選択するには、コレクションの名前の先頭2文字を入力する必要がある。

f:id:nabeta:20180702211227p:plain

Hyraxのユーザアカウントを作成する

前回の記事ではHyraxの開発用サーバの起動まで進めたが、まだユーザアカウントが作成されていない。

nabeta.hatenadiary.jp

そこで、画面右上の"Login"リンクからログイン画面に移動し、"Sign Up"リンクを選択する。ユーザ名にはメールアドレスを使用するようになっているので、メールアドレスとパスワードを入力して"Sign Up"ボタンを押すと、アカウントが作成され、ダッシュボードの画面が表示される。ここでは、 nabeta@example.jp というアカウントを作成している。

f:id:nabeta:20180626003016p:plainf:id:nabeta:20180626003024p:plain

f:id:nabeta:20180626003145p:plain

ただし、この状態では特に権限が付与されていないため、リポジトリの設定変更もファイルのアップロードもできない。このため、まずは先ほど作成したアカウントに管理者権限を付与することにする。

管理者権限の追加方法は、HyraxのWikiの"Setting up test app for workflow"というページに記述されているので、その手順に従う。初期状態では、 config/role_map.yml というYAMLファイルで権限の管理を行っているので、以下のように編集する。

$ pwd
/home/vagrant/my_hyrax
$ vi config/role_map.yml
development:
  archivist:
    - archivist1@example.com
  # 以下の2行を追加
  admin:
    - nabeta@example.jp

編集が終わったら、開発用サーバをCtrl+Cで停止し、再度起動する。また、デフォルトのワークフローの定義を読み込むコマンドを実行する。

$ bin/rails hydra:server
$ bin/rails hyrax:workflow:load  

再度Hyraxにログインすると、ダッシュボードに管理メニューが追加されている。

f:id:nabeta:20180626010515p:plain

なお、Hyraxではhydra-role-managementという権限管理のためのモジュールが別途利用できるようになっており、こちらを使うとWebブラウザ上で権限管理が行えるようだが、今回はひとまずYAMLファイルで進めることにする。

Hyraxをインストールする

機関リポジトリ構築用ソフトウェアのHyraxを試してみることにする。

Hyraxは、機関リポジトリ用のフレームワークであるSamvera(旧Hydra)の上に構築されたソフトウェアである。ソースコードやドキュメントは、GitHubで公開されている。この記事の公開時点での最新バージョンは2.1.0。

github.com

HyraxはRuby on Railsを用いて開発されているので、まずRubyの実行環境を用意する。今回はUbuntu Server 18.04上でrbenvとruby-buildを用いて、Ruby 2.5.1をインストールしている。

$ rbenv install 2.5.1
$ rbenv global 2.5.1

次に、Rails 5.1の最新版をインストールする。現時点では5.1.6。

$ gem install rails -v=5.1.6

データベースにはPostgreSQLMySQLSQLiteが使用できるが、今回はSQLiteを使用する。

$ sudo apt install libsqlite3-dev

また、JavaScriptのランタイムとして、nodejsをインストールしておく。

$ sudo apt install nodejs

さらに、READMEに書いてあるPrerequisitesに従って、必要なソフトウェアをインストールする。ただし、SolrとFedoraは後で開発用サーバを実行するときに自動的にダウンロードされるので、ここではまだインストールしていない。また、Ubuntu 18.04でLibreOfficeのパッケージ(libreofice)をインストールすると、依存パッケージとしてJava10(openjdk-11-jre)がインストールされるが、Java10では開発用のFedoraが起動しないので、LibreOfficeもここではインストールしていない。

$ sudo apt install openjdk-8-jre-headless redis imagemagick ffmpeg

準備ができたら、Hyraxのアプリケーションを作成する。ここではアプリケーション名をmy_hyraxとしている。 このコマンドは、検索用のユーザインターフェースであるblacklightのインストールなど、多くのモジュールの追加を行うため、実行に時間がかかる。

$ rails _5.1.6_ new my_hyrax -m https://raw.githubusercontent.com/samvera/hyrax/v2.1.0/template.rb

実行が完了したら、rails hydra:server コマンドで、Hydraの開発用サーバを起動する。初めて実行する際に、SolrとFedoraがダウンロードされる。

$ cd my_hyrax
$ bin/rails hydra:server

起動が完了すると、以下のようなメッセージが出力される。

[main] INFO org.eclipse.jetty.server.Server - Started @26940ms
Fedora: http://127.0.0.1:8984/rest
Solr..: http://127.0.0.1:8983/solr/hydra-development
=> Booting Puma
=> Rails 5.1.6 application starting in development 
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.11.4 (ruby 2.5.1-p57), codename: Love Song
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop

Webブラウザで http://localhost:3000 を開くと、Hyraxのトップページが表示される。

f:id:nabeta:20180624034743p:plain

開発用サーバが起動している状態で、ターミナルをもう一つ開き、初期データを読み込むコマンドを実行する。

$ cd my_hyrax
$ bin/rails hyrax:default_admin_set:create
$ rails generate hyrax:work Work

実行が完了したら、開発用サーバを一度Ctrl+Cキーで停止し、もう一度起動する。

$ bin/rails hydra:server

まずはここまで。

あけましておめでとうございます

 今年は「Next-L Enju」というシステムそのものを作る話から、Next-Lの思想*1を持ったシステムによる、新しいサービスを作る話を中心に進めていきます。

 具体的に言うと、今年のプロジェクトでの自分のテーマは「もしProject Next-LがNACSIS-CATとレファレンス協同データベースを作ったら」です。やる気自体はだいぶ以前からあるのですが、システム単独の話がひとまず区切りを迎えたので、今年始めないと始めるときがありません。

*1:これも明文化しないといけませんね。