Apache2のmod_authnz_ldapからmod_auth_openidcに移行する可能性

Apache2のmod_authnz_ldapで, .htaccessAuthBasicProvider ldap を指定して組織のLDAPサーバを引いてディレクトリごとに認可していた.

環境の変化により, LDAPが使えなくなるが, Google WorkspaceのOpenID Connectは使えるので, 3rd party module mod_auth_openidc を使ってそちらに移行することを検討.

以下の記事が詳しく, とても有用だった. qiita.com

複数のDirectoryの ~/.htaccess に別々のRequire claim email:user1@example.com email:user1@example.com を書こうという話なのだが, 設定ファイルauth_openidc.conf で設定される OIDCCookiePath は, 相対URLとして上位(一部分)でなければいけないという(文書化されていない)要求があるようだ. デフォルトの/ならそうなる. 上の記事では, LocationとOIDCCookiePathを同じにしている. Locationが1個なら, それも可能な設定.

HEIC対応のImageMagickをCentOS7.9にインストール

普通にyumでインストールするにはCentOS7.9 は古すぎる. 対応するrpmを置いているrepositoryを探した.

  • remi から ImageMagick6 ImageMagick6-heic (plugin)
  • remi から libheif (ImageMagick6-heicのdependency, heif は heicと類縁の画像形式)
  • rpmfusion から 足りない libde265 と x265-libs (libheifのdependency, codec)

を, なんとか dependency を満たして導入できた.

インストールできたのは 6.9.12-63 で, iPhoneで撮ってPreview.appで加工したHEICをJPEGPNGにできている.

CentOS7で, 他にHEICを扱える画像処理ソフトウェアとして, vips-heic, ImageMagick7-heic もリストされていたが, 結局は libheif が必要で, どちらかが導入容易ということはなさそうだった.

利用目的はこれ. hig3.hatenadiary.com

Moodleの課題のPDF注釈フィードバックで日本語,JPEG,HEICを扱う with unoconv Document Converter

オープンソースのLMSであるMoodleには, 学生がファイルを提出する課題 Assignment 活動がある. PDF注釈Annotate PDFによるフィードバックでは, そのファイルが一律にPDFに変換されて評定ページで教師に提示され, 教師はPDF注釈を加えて学生に返すことができる.

この過程にはいくつかの外部プログラム, ライブラリが介在しており, (特に日本語フォントを要する場合は)設定が複雑. 今まで, Moodle.org のフォーラムに記事を投稿してきた.

PDF注釈は次のように進む.

  • 学生が課題に提出したファイルを unoconv がPDFに変換する
  • PDFはページで pdftopnm によって表示される
  • 評定ページで教師がPDFに書き込む操作をすると, tfpdf が注釈が加える

この順で, Universal Office Converter (unoconv) - MoodleDocsを参考に, 設定(手順)と確認(test)を示す.

バージョン

提出ファイルのPDFへの変換を可能にする設定

unoconv のインストール

su
apt install 
apt install libreoffice
chmod 777 /run/user/1000

Moodle>Site Administration>Plugins>Document converters>Unoconv>Path to unoconv document converterに /usr/bin/unoconvと設定.

Document Converter の有効化

Moodle>Site Administration>Plugin>Document converfters>Manage document converter で Unoconv を有効化, Google Drive など他のConverterより上位に置く.

test

unoconv --version
echo hello > afo.txt
unoconv -f pdf afo.txt

afo.pdfが生成できるはず((apt install unoconvだけだと, dependency でlibreoffice-core-noguiがインストールされるが, それだけだと, RuntimeException になる.libreofficeをインストールするとlibreoffice-core-nogui`はアンインストールされる)).

Apache HTTP Server が unoconv を使えるようにする設定

Directory permission

su
mkdir /var/www/.config
chmod 777 /var/www/.config

*1.

test

Moodle>Site Administration/Plugins/Unoconv で, Test unoconv path, Download the converted pdf test file でPDFファイルがダウンロードできるはず.

Moodle でPDFの表示を可能にする設定

poppler のインストール

su
apt install poppler-utils

Moodle>Site Administration>Server>System paths>Path to pdftoppm に /usr/bin/pdftoppmと設定*2.

test

PDF注釈にチェックした課題で, 学生が英語テキストファイルを提出すると, 教師は評定ページで, PDFに変換されたものが見られるはず.

変換を日本語対応にする設定

この段階で日本語テキストファイルを提出すると, PDFでは日本語部分が豆腐になる. そこで, unoconv に日本語フォントを与える.

Noto-CJK フォントの導入

su
apt install fonts-noto-cjk

test1

unoconv --version
echo 日本語 > foo.txt
unoconv -f pdf foo.txt

test2

日本語テキストファイルも変換されるはず

変換されたPDFへの注釈を可能にする設定

注釈は, Moodleについてくる tFPDF により行われる. PHPファイルとしては($MOODLE)/mod/assign/feedback/editpdf/fpdi/Tfpdf あたり.

Ghostscript のインストール

su
apt install ghostscript

Moodle>Site Administration>Server>System paths>Path to ghostscript に /usr/bin/gsと設定.

test1

Moodle > Site Administration >Plugins>Annotate PDF >Path to Ghostscript で, Test Ghostscript path でスタンプにより注釈された画像が表示される

test2

PDF注釈で, ルール群がPDF表示の上に現れ, テキストツールで英語を書き込み, Download feedback PDFで, その内容が書かれたPDFファイルがダウンロードできる.

日本語による注釈を可能にする機能

この段階では, 日本語のノートは豆腐になる. これを防ぐには, Moodle, tfpdf に日本語フォントを与える必要がある.

su
vi $(MOODLE)/config.php

で tfpdf の持っているフォントを指定する.

$CFG->directorypermissions = 0777;
$CFG->pdfexportfont='kozminpromedium';

拡張子jpegのファイルもunoconvで変換する設定

この段階で, 拡張子 jpg のJPEG形式ファイルはPDFに変換されるが, 拡張子が jpeg だと変換されない.

unoconv の書き換え

su
vi /usr/bin/unoconv

末尾に次を追加

fmts.add('graphics', 'jpg', 'jpg', 'Joint Photographic Experts Group', 'draw_jpg_Export') ### 3
fmts.add('graphics', 'jpg', 'jpeg', 'Joint Photographic Experts Group', 'draw_jpg_Export') ### 3 追加
fmts.add('presentation', 'jpg', 'jpg', 'Joint Photographic Experts Group', 'impress_jpg_Export') ### 19
fmts.add('presentation', 'jpg', 'jpeg', 'Joint Photographic Experts Group', 'impress_jpg_Export') ### 19 追加

test1

unoconv --show

test2

拡張子 jpeg のファイルを課題に提出するとPDFに変換され, 評定ページに表示される.

この方法でよい理由

$(MOODLE)/files/converter/unoconv/classes/converter.phpで定義される converter クラスのメソッドpublic static function supports($from, $to) で, unoconv が拡張子$fromから$toへの変換をサポートしているかを判定している. このメソッドは結局, unoconv --show で出力される, 対応拡張子リストを参照している.

unoconvは

unoconv -f pdf afo.jpeg

を正しく扱うが, 対応拡張子リストには [.jpeg]が表示されないので, それを追加している.

HEIC 形式のファイルを前処理で JPEG に変換する設定

HEICはiOSバイスが使う高圧縮な画像フォーマット. この段階では, 拡張子.heicのHEIC形式ファイルを課題に提出すると, PDF注釈ページではPDFに変換されず, Some of the files can only be accessed through download.という注記が表示される.

Imagemagick のインストール

su
apt install imagemagick
type -a convert

converter.php の書き換え

  • convert クラスのメソッド protected static function fetch_supported_formats() が返す拡張子の配列に, 要素 'heic' を追加する.
388c405
<             self::$formats = array_unique($formats);
---
>             self::$formats = array_unique(array_merge($formats,['heic']));
  • convertクラスのメソッド public function start_document_conversion(\core_files\conversion $conversion) で, 作業ディレクトリへの提出ファイルのコピーが終わった後, 拡張子が 'heic'である場合のみ, /usr/bin/convert でJPEG形式に変換する処理を追加し, 以下, 変換されたJPEG形式ファイルをunoconvで変換する.
128c128,145
<             }
---
>             } else { // hig
>                 if( \core_text::strtolower($fromformat) == 'heic' ){
>                     $jpgfilename=$uniqdir . '/' . $file->get_id() . '.jpg';
>                     $cmd=escapeshellcmd("/usr/bin/convert"). ' '.
>                         escapeshellarg($filename) . ' '.
>                         escapeshellarg($jpgfilename);
>
>                     $output = null;
>                     $currentdir = getcwd();
>                     chdir($uniqdir);
>
>                     $result = exec($cmd, $output, $returncode);
>                     $filename=$jpgfilename;
>
>                     chdir($currentdir);
>                     touch($filename);
>                 }
>             } // hig

test

課題に拡張子 .heic のHEIC形式ファイルを提出すると, PDFに変換され表示される.

この方法でよい理由

heic はunoconv --showで表示されないので, Moodleは変換しようとしない. また, 実際 unoconvは HEIC形式ファイルを扱えない.

Imagemagick (convert) は HEIC形式を JPEG形式などに変換できるので, この問題に対処する方法として,

  • unoconv のwrapperを書いて, convert を前処理として呼び出す
  • $(MOODLE)/files/converter/unoconv/classes/converter.php を書き替えて unoconv の前に convert を呼び出すようにする.

の2つが考えられる. ここでは後者を採用した.

さらにやってもいいこと

Moodle > Site administration > Server > File types で, JPEGやHEICを登録すると, 提出ファイル一覧などで, 画像ファイルのアイコンが表示される.

*1:Universal Office Converter (unoconv) - MoodleDocsには, Ubuntuの例で別のディレクトリ名が書いてあるが, Debianならたぶんこうだと思う

*2:なければghostscriptにfallbackするらしい

Disk full に近くなったときMoodleに起きること, してはいけない対処

UNIX/Linuxがdisk full になったときの振る舞いは root としてよく遭遇してきた.

今回は, CentOS6上のMoodle 3.11で, /var/lib/moodledata や MySQL が置かれた disk が full に近くなったとき, どのような振る舞いが見られるか観察する機会があった.

ページのAJAX UIを操作するだけでも, 「データベースに書けない」という警告のモーダルが出る, GETやページ遷移しようとすると, データベースと接続できないというPHPの(Moodleの?)エラーメッセージに飛ばされる*1.

この場合の想定される原因

課題に提出された多数の大きい画像ファイルで, 消去してもさしつかえないもの

考えられた対処と採用した対処と結果

  • 不採用 /var/lib/moodledata 内のファイルを手動で消去する
    • 可読なファイル名でないので不要な提出物やリソースかわからない
    • 手動で消去するとデータベースの記録と不整合になるだろう
  • 不採用 不要なコースをバックアップして消去する
    • バックアップファイルは(いったん?) /var/lib/moodledata 内に作られるから, 一時的であれディスク使用率をさらに高めるだろう, または完了しないおそれがある
  • 不採用 課題はそのままで提出ファイルをWebインターフェースから消去する
    • 教師に提出物の編集を許す設定なら, 1個ずつ手動で消去することはできるが, ファイルの個数が多すぎる
  • 採用 多数の不要な提出ファイルと紐付いた活動(課題)を消去し, ゴミ箱からも消去する
    • 課題を消去すれば, 紐付いた提出ファイルも cron で近々消去されるはず.
    • 結果 1つの課題は問題なく消去できた. 別の課題では, かえってディスク消費量が増して「データベースと接続できない」というエラーメッセージしか出なくなった. ゴミ箱に移す過程でも一時ファイルが作られるものと思われる

いつもどおりの教訓

ディスクに空きがあるうちに, コースや提出ファイルをバックアップや消去する作業をする. Moodle自身が管理者に警告を出してくれると助かるのが.

DSC_2833

*1:ファイルのアップロードも試行してみればよかった

Problems in upgrading from Moodle 3.10.3 to 3.11.3+

  • ひとつのコースが, invalidcoursemoduleid で使えなくなった. fix が進行中らしいので次の release を待つ. ちょうど開講終了したばかりのコースだが, 復習には必要. なお, 問題のコースから全インポート, や, 3.10 のときのバックアップをリストア, して作ったコースでは問題は生じない.
  • assignment に提出され unoconv で変換されたPDFが grading tool で表示されない… convert じゃなくて表示の話だろうと思って, cache, theme あたりをあたったが違っていた(?). 3.11 で導入された poppler-util の pdftopnm によるPDF to PNG変換を有効化したら直った. このシステムパスを管理者が手で書かない限りは, 従来機能していた gs に fallback するはずなのだが.
    • あらたに poppler-utils をインストールした(Debian).
  • なんか, すべての活動の日付と完了条件をはっきりしろって言われてる圧が強い. オンライン授業下で全授業Moodleでやる学生さんにはそういうのは大事でしょう.

macOS 11 の OneDrive でファイルオンデマンド

macOS 11 の OneDrive でファイルオンデマンドを使うには ローカルディスクが AFPS である必要 (ディスクユーティティの「消去」で「大文字/小文字を区別しない」Mac OS 拡張(ジャーナリング)に再フォーマット)

https://support.microsoft.com/ja-jp/office/mac-%E7%94%A8-onedrive-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB-%E3%82%AA%E3%83%B3%E3%83%87%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E9%A0%98%E5%9F%9F%E3%82%92%E7%AF%80%E7%B4%84%E3%81%99%E3%82%8B-529f6d53-e572-4922-a585-e7a318c135f0

Gaming Keyboard DREVO SEER PRO を Mac で使う

多少の浮気をしつつも, デスクトップ用には US配列の Sun Keyboard, HHK(無印), HHK Lite などを使ってきた(HHK Professional は自分のタイピング量と速度からは過大だと思った). Macに移ってから, ぜんぜん違うタッチの Wireless Keyboard, Magic Keyboard (テンキー無)を使っていた.

青色LEDの発明から何年もが過ぎた今, なぜかLEDでカラーに光るゲーミングキーボードを使ってみようかという気になった(広報用写真にも使えるかも?). キータッチはなぜか昔に戻ってみて, 買ったのは Gateron 茶軸のこれ.

Seer 61 PRO | DREVO :: Game With Cool Tech.

当初, macOS 10.15 Catalina と有線USB接続したところ, 設定>キーボードに "USB Keyboard" として現れた. この状態では Fn+<>? による矢印キー(HHK無印と同じ方式)が使えなかったが, 次のサイトからユーティリティとドライバをインストールして再起動すると, "SEER PRO" と表示されるようになり, 矢印キーも機能した.

Software | DREVO :: Game With Cool Tech.

不満は, 左上の`や〜がfn1との兼用で, Fn との同時押しになること.