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

4年経過し,ディスクの大きいサーバに移ったが,管理者の即応力が落ちたため,$moodledata=/var/lib/moodledata ディレクトリのあるdiskがfullになった後の挙動を観察することができた.ディスク使用量増加の主な原因は,学生による課題へのファイル提出.Moodle 4.4.
このときログインしようとすると,ログイン前ページが「エラー:セッションパーティションが満杯です。現在ログインできません。サーバ管理者にご連絡ください。」となる*1*2.$moodledata/sessions にセッション情報が保存できなくなるためと思われる.

この状態になると,管理者ロールのユーザもログインできない.したがって,
のうち,Webインターフェース経由の対処案は却下で,サーバへのSSHログインで対処する必要がある.df で100%に見えても,rootはreserveされたdiskを使って作業できるはず.
対処1
この状態でも,Apacheや,Moodleのスケジュールタスクはログファイル等を生み出して,開けたdiskを食い潰していく.そこで次の対応.
systemctl apache stop EDITOR=vi crontab -u www-data -e #でcron.php をコメントアウト
cron.php を止めるのは,この停止に伴って課題の締め切りを延長しようと思っているので,変更前のスケジュールに従って通知メールが送られないようにするという意図もある.
対処2
Moodleをmaintenance modeに置きたい.下の Moodle admin cli を使う.ログインを防ぐ以外に,"メンテナンス中です"というアナウンスに切り替えたかったのだが,結果としては,すぐApacheがディスク不足のために(?)responseを返せなくなって,ログイン前ページ自体が表示されなくなった.
対処3
本当にディスクに余裕を作る必要がある
手段
サーバのコマンドラインへでの操作による * シェルやmysqlでファイルを直に操作する * Moodle admin cli 管理者が実行できる Moodleの低レベルのphp-cli * moosh 管理者が実行できる Moodleの高レベルのcli
消去対象
- 採用 Moodleに限らない一時ファイルやログファイルをシェルの操作で消す
- 不採用 $moodledata 内の課題提出ファイルをシェルで消去する
- 可読なファイル名でないので不要な提出物やリソースかわからない
- 手動で消去するとデータベースの記録と不整合になるだろう
- 採用 Moodle admin cli
- purge_cache.php
- kill_all_sessions.php
- maintenance.php
- delete_course.php
- 採用 Moosh
- シェルとmysqlのラッパー.特定のコースを消す,特定のコースの特定の課題を,データベース的一貫性を保って消す,ことができる,ので有力な候補になる.しかし,ディスクが実際に開くのは,ゴミ箱に移された後,数日後に本当にcronで消去される*3
- activity-delete
- course-delete
- cache-clear
- 不採用 Mooshと同等のことをシェルとmysqlで行うこともできるだろう
対処3の失敗
Moodle admin cli, moosh の大部分は,一時的に追加のディスクを使うものと思われる.sudo -u root なら余分のディスクを使えるのだろうが,安全のためには sudo -u www-data でやりたいと思うと,使えるものがなかった.
対処?4
このMoodleサーバーは仮想マシン上にあったので,仮想マシン管理者に頼んでディスクを増やしてもらう.今回はこれを採用.そんな記事ありか?
対処5
- Apache起動
systemctl apache start
- 動作チェック
- Web インターフェースから課題の締め切り変更
- maintenance mode 解除
- 動作チェック
EDITOR=vi crontab -u www-data -e #でcron.php を有効化
- 停止していた旨の連絡
いつもどおりの教訓
ディスクに空きがあるうちに, コースや提出ファイルをバックアップや消去する作業をする. Moodle自身が管理者に警告を出してくれると助かるのが.
Moodle 5.0 から 5.1 へのアップグレードは怖くなかった(今のところ)
最近のMoodle *1では,Router, Composer の導入など,管理者にしか影響しない,しかし大きい(?)変更が多い.かなり先までロードマップが描かれているのだろう.
Moodle 5.1へのアップグレードで,ディレクトリ構成の変更というのが来た.いくつか3rd partyプラグインも導入しているので,下手にアップグレードするより遷宮*2した方がましかと思っっていたが,アップグレードしてみたらできた.
変更
Moodle 5.0でのアップグレード前の設定
#Apache2 DocumentRoot /var/www/html
/* Moodle's config.php */ $CFG->wwwroot = 'https://www.example.com/moodle'; $CFG->dirroot = '/var/www/html/moodle'; /* config.php に書く必要なし.config.php が置かれているディレクトリ */ $CFG->dataroot = '/var/lib/moodledata';
Moodle 5.1へのアップグレードでの変更
$CFG->dirroot_new = '/var/www/moodle'; /* config.php をこう書き換えるという意味ではない.Moodleの配布ファイル全体をここにmvしたという意味. */
手順
- Moodle admin で maintenance mode にする
- git fetch, pull, and switch
- $CFG->dirroot/public が作られる
- 後知恵としては,自分で導入したものが5.1で動くプラグインばかりなら,あらかじめ$CFG->dirroot/public 下に移動しておいたら簡単だった.
sudo mv $CFG->dirroot $CFG->dirroot_newln -s $CFG->dirroot/public $CFG->dirroot_new- Moodle admin でWebからアップグレード
- いくつかのプラグインが missing on disk になる
- データベースの記録では導入されているのに,public 下にそのプラグインがないという警告
- それでもアップグレードは完了する
- いくつかのプラグインが missing on disk になる
- missing on disk なプラグインのファイルは,$CFG->dirroot_new に移動されて,local, mod/* question/type question/behaviour などに残っている.これらは5.1では $CFG->dirroot_new/public 下に置かれるべきもの.Coreはそうなっている.そこで,手動で $CFG->dirroot_new/public 下にmvする
- Moodle adminでWebからアップグレードを完了する
- この過程で,長く使ってきたlocal プラグイン CSV Enrols & Groups が,Moodle全体にエラーを引き起こすらしいことに気づく.確かに5.* はサポート対象でない.mvせず前に,プラグイン概要から削除する.
- どのプラグインが原因か突き止めるのにちょっと時間がかかった,サポートされていないプラグインは1個ずつmvした方が楽かも
Webブラウザ内のOverleafエディタに適用されるスペルチェック
アプリ上のスペルチェックは様々なレイヤーで行われる.
macOSで,Webブラウザ内のOverleafエディタで意図しないスペルチェックが行われるとき,スペルチェックを設定変更したり,止めたりするときにチェックするところ.
Overleaf integration
ex. Writefull integration
Overleaf Account > Integrations > Language Feedback
Writefull integration - Overleaf, Online LaTeX Editor
Overleaf
Menu > Spell Check, Dictionary
Chrome Extension
ex. Grammerly for Desktop, Writefull for Overleaf
その他… > 拡張機能 >
Chrome
その他… > 設定 > 言語 > スペルチェック
テキスト入力
ex. ATOK
環境設定 >[入力・変換]シート > [英語-スペルチェック]>[スペルチェック候補を表示する]
macOS
設定>キーボード>テキスト入力
iPhone7+povo2のLINEアカウントをAndroid+no SIMに移す
目的
LINE bot 検証用に,古い私物iPhone(コンテンツあり)と前払格安SIM povo で運用していたLINEアカウントを, コンテンツ空の専用新品SIM-free でAndroidに移して,検証者さんに課したい.
- bot対ユーザの1対1のbotでは,私用LINEアカウントで実験すれば十分だが,1対多のbot(例:マッチングアプリ)では複数のLINEアカウントで実験したい
- LINEには1電話番号1アカウントしか作れない
- 月額料金は払いたくない(実験予算では払いにくい)
- 着信のみ料金無料に近いSIMで電話番号だけ確保したい
- 検証者には,私物iPhoneでなく専用のAndroidを渡したい
材料
- povo2 nanoSIM SIMカードのサイズや種類とは?サイズ変更時の注意点も解説!|povo ライブラリ|【公式】povo2.0
- Android Blackview Oscar FLAT 1C Oscal FLAT 1C 6.56" 2+32GB オクタコア 4700mAh スマートフォン - Blackview Global – Blackview Official Store
作業手順案1(失敗)
- 両者の電源を切る
- nanoSIMのハードウェアを差し直す
- Android起動,povoのモバイル回線有効化
- PlayストアからLINEアプリをインストール
- LINEアカウントを新規登録(旧アカウントは消える?)
モバイル回線とLINEアカウントがiPhoneからAndroidに移るはず
結果1(失敗)
- 調べてなかったけど,FLAT 1C は nanoSIMに対応してた!
- Android では nanoSIM が認識され,電波強度マーク4Gがでる
- SMS送受信, 通話発着信いずれもできない
- LINEアカウントを新規登録では,電話番号を入力してSMSで送られてくる認証コードを一定時間内に入力するか,通話して認証コードを聞き取らなくてはいけないがそれができない
- LINEアカウント移行しようとしても,SIMのない状態ではiPhoneのLINEアプリは起動しない
分析1
- povo の対応スマートフォンリストには Blackview のものは1個も載っていない.安全を期すなら,OPPOとかにしといたらよかったかも.
- しかし,Android はAndroidなんだし,できない理由が思いつかないんだけどなあ
- VoLTE を有効化できてない?
AndroidスマートフォンでSIMカードの開通手続きの設定を行っても通信ができません。 – povoサポート
作業手順案2
- iPhoneにSIMを挿した状態で,両者の電源をいれる
- iPhoneのLINEアプリを起動し移行用QRコードを表示
- 60秒ごとに更新されるが問題ない
- AndroidをWi-FI接続
- AndroidのLINEアプリのインストール過程で,iPhoneに表示された移行用QRコードをスキャン
- SIMはiPhoneに挿したまま
結果2
これでいいじゃん?
LaTeXだけで様々な分布関数の値を求める・グラフを描くには

LaTeX では,graphicx パッケージで関数のグラフの画像を貼ることができる.しかし,外部で*1画像ファイルを用意しておくのでなく,LaTeX内だけでグラフを描けないか?次のようなパッケージで,初等関数・三角関数・指数関数・対数関数くらいなら描ける.
- tikz -pgf https://ctan.org/pkg/pgf 低レベル,tikzpicture 環境
- pgfplots https://www.ctan.org/pkg/pgfplots 高レベル,axis 環境
グラフが描けるくらいだから,これらの関数の値を求めて,文字列としてタイプセットすることもることもできる.
統計学に現れる正規分布のガウス分布関数は四則演算と指数関数の組合せなのでこの方法で書けるが,その累積分布関数(誤差関数)やその逆関数(分位数関数)は明示的な形では書けないし,専用の関数は用意されていない.さらに,カイ二乗分布,t分布,F分布なども用意されていない*2.
では,LuaTeXの一部である lulalatex から呼び出せるスクリプト言語Lua*3ではこれらの関数があるのではと期待するが,実はない.そこで,多くの方がこれを補うLuaの非公式のパッケージを開発している.これらを LuaLaTeX から使うことができる.
- https://github.com/rgertenbach/Lua-Stats 確率密度関数,累積分布関数,分位数関数,仮説検定(分布:normal, T, Chi, F, beta, gamma),記述統計
- LuaLaTeX での使用例 https://github.com/hig3r/Lua-Stats/tree/lualatex
- https://github.com/r0fls/luastats 確率密度関数,累積分布関数,分位数関数,母数の最尤推定(分布:uniform, pareto, laplace, exponential, bernoulli)
- https://github.com/HubertRonald/LuaSF 乱数生成(分布: nomal, bernoulli, unif, expo, weibull, erlang, trian, binomial, geometric, poisson, chiSquare, gam, logno),正規分布の分位数関数,記述統計,
Lua-Stats の LuaLaTeX での使用例
\begin{luacode} stats = require("stats") local result = stats.dChisq(0.5,5) -- tex.print(result) \end{luacode}test The quantile at $p=0.5$ of the chi-square distribution with df$=5$ is \directlua{tex.print(stats.qChisq(0.5,5))}.
https://github.com/hig3r/Lua-Stats/tree/lualatex
https://github.com/hig3r/Lua-Stats/blob/lualatex/lualatex-stats-sample.pdf
tikzpicture 環境ではグラフが描けたが,pgfplots の高レベルの axis 環境では描けていない.
LuaSF の LuaLaTeX での使用例
Notes
*1:gnuplotやMathematicaやLLMで
*2:もちろん特定の母数に対して多項式近似をして値を求めたりグラフを描いたりすることはできる.例 https://tex.stackexchange.com/questions/40908/plotting-the-chi-square-distribution-with-tikz
*3:ゲームや組み込み用途で使われている.ヤマハのルータなど https://www.rtpro.yamaha.co.jp/RT/docs/lua/
*4:pst-func https://tex.stackexchange.com/questions/40908/plotting-the-chi-square-distribution-with-tikz
Moodleモジュールを「コースページに表示せずに利用可能にする」と編集権限のない教師にも表示されない

Moodle 4 のモジュール共通設定>利用には3つの選択肢
- コースページに表示する
- コースページで秘匿する (=教師, 編集権限のない教師には表示される)
- コースページに表示せずに利用可能にする
「コースページに表示せずに利用可能にする」は, デフォルトでは,
- URLを直接指定すれば学生含め全員に利用可能
- 学生には表示されない
- 教師には表示される(もちろん)
- 「編集権限のない教師」には表示されない (ので存在を知ることはできないが利用は可能)
編集権限のない教師は
- この「表示されせずに利用可能」にされたモジュール は,フォーラムやフィードバックにモジュールのURLを書いたり, AutoLinkを使ったりして学生に示して利用させることが可能
- 「秘匿」されたモジュールをコースページ上で見ることも,内容も見ることも可能
ので, 「コースページに表示せずに利用可能にする」の振る舞いは直観的でないと言えそう.ロールの再定義で何とかするのも難しい?
Moodle 4.1 LTSの課題フィードバックPDF注釈のための unoconv Document Converter の設定(含む日本語サポート)

オープンソースのLMSであるMoodleには, 学生がファイルを提出する課題 Assignment 活動がある. PDF注釈Annotate PDFによるフィードバックでは, そのファイルが一律にPDFに変換されて評定ページで教師に提示され, 教師はPDF注釈を加えて学生に返すことができる.
この過程にはいくつかの外部プログラム, ライブラリが介在しており, (特に日本語やHEICフォーマットをサポートする場合は)設定が複雑なのでこの記事で解説.
今まで, Moodle.org のフォーラムに記事を投稿してきた.
- (unoconv, 日本語) 課題の評定画面の課題ファイルの表示について https://moodle.org/mod/forum/discuss.php?d=338260 *「課題」ツールのPDF注釈機能について https://moodle.org/mod/forum/discuss.php?d=364983
この記事は hig3.hatenadiary.com の,最近のバージョンに対する更新.主に Moodle と Ubuntu の改善により手順が簡単になっている.
バージョン
- Ubuntu Server 22.04.3 Server LTS 要root
- Moodle 4.1.6 LTS 要admin
- unoconv 0.8.2
- python 3.10.12
- LibreOffice 7.6.4.1
流れ
PDF注釈は次のように進む.
- 学生が課題に提出したファイルがPDFならそのまま,PDF以外なら unoconv がPDFに変換する
- PDFは評定ページで ghostscript や pdftopnm によって表示される
- 評定ページで教師がPDFに書き込む操作をすると, tfpdf がPDF注釈が加える*1
この順で, 設定(手順)と確認(test)を示す.
PDFを表示する設定(PDF注釈を使用する設定)
Ghostscript のインストール
sudo apt install ghostscript
Moodle>Site Administration>Server>System paths>Path to ghostscript に /usr/bin/gsと設定.
test0
Moodle の課題でPDF注釈によるフィードバックを有効化できる
test1
Moodle > Site Administration >Plugins>Annotate PDF >Path to Ghostscript で, Test Ghostscript path でスタンプにより注釈された画像が表示される
test2
学生が課題にPDFをアップロードし,教師が評定を開くと,PDF注釈のページが表示される.この段階で日本語も表示される.
poppler-utils のインストール(optional)
PDFのWebページ上の表示(のみ,注釈とは無関係)が高速化される.
sudo apt install poppler-utils
Moodle>Site Administration>Server>System paths>Path to pdftoppm に /usr/bin/pdftoppmと設定*2.
提出ファイルのPDFへの変換を可能にする設定
unoconv のインストール
Universal Office Converter (unoconv) - MoodleDocsの手順の通り行う.
test
unoconv --version echo hello > afo.txt unoconv -f pdf afo.txt
Python 3.12でdeprecate…のような警告がでるが,放置してかまわないようだ.
Document Converter の有効化
Moodle>Site Administration>Plugin>Document converfters>Manage document converter で Unoconv を有効化, Google Drive など他のConverterより上位に置く.
test1
Moodle>Site Administration/Plugins/Unoconv で, Test unoconv path, Download the converted pdf test file でPDFファイルがダウンロードできるはず.
test2
PDF注釈を有効化した課題に afo.txt をアップロードすると,PDFに変換されたものが評定ページで表示される
提出ファイルのPDFへの変換を日本語対応にする設定
この段階で日本語テキストファイルを提出すると, PDFでは日本語部分が豆腐になる. そこで, unoconv に日本語フォントを与える.
Noto-CJK フォントの導入
sudo apt install fonts-noto-cjk fonts-noto-cjk-extra
unoconv を service にしている場合は service を再起動する
sudo systemctl restart unoconv
test1
echo 日本語 > foo.txt unoconv -f pdf foo.txt
test2
課題にアップロードした日本語テキストファイルも変換される
変換されたPDFへの注釈を可能にする
PDF注釈
この状態でできるはず.
test1
Moodle > Site Administration >Plugins>Annotate PDF >Path to Ghostscript で, Test Ghostscript path でスタンプにより注釈された画像が表示される
test2
PDF注釈で, ツール群がPDF表示の上に現れ, テキストツールで英語を書き込み, Download feedback PDFで, その内容が書かれたPDFファイルがダウンロードできる.
日本語によるPDF注釈を可能にする設定
この段階では, 注釈でつけた日本語のノートはPDF注釈後に豆腐になる. これを防ぐには, Moodle, tfpdf に日本語フォントを与える必要がある.
sudo vi $(MOODLE)/config.php
で tfpdf の持っているフォントを指定する.
$CFG->directorypermissions = 0777; $CFG->pdfexportfont='kozminproregular'; //$CFG->pdfexportfont='kozminpromedium'; // On Debian?
HEIC 形式のファイルもPDFに変換する設定
HEICはiOSデバイスが使う高圧縮な画像フォーマット. この段階では, 拡張子.heicのHEIC形式ファイルを課題に提出すると, PDF注釈ページではPDFに変換されず, Some of the files can only be accessed through download.という注記が表示される.
そこで,HEICからjpegへの変換をサポートする ImageMagick または libheif で前処理する導入する
Imagemagick のインストール
sudo apt install imagemagick
type -a convert
libheif のインストール
sudo apt install libheif-examples
type -a heif-convert
test
scp somewhere:iPhone/photo.heic . convert photo.heic photo.jpeg
converter.php の書き換え
- $(MOODLE)/files/converter/unoconv/classes/converter.phpで定義される converter クラスのメソッド 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がPDFに変換するようにする
128c128,145 < } --- > } else { // hig > if( \core_text::strtolower($fromformat) == 'heic'){ > $jpgfilename=$uniqdir . '/' . $file->get_id() . '.jpg'; > $cmd=escapeshellcmd("/usr/bin/convert"). ' '. >// $cmd=escapeshellcmd("/usr/bin/heif-convert"). ' '. > escapeshellarg($filename) . ' '. > escapeshellarg($jpgfilename); > > $output = null; > $currentdir = getcwd(); > chdir($uniqdir); > > $result = exec($cmd, $output, $returncode); > $filename=$jpgfilename; > > chdir($currentdir); > touch($filename); > } > } // hig
このファイル converter.php は,Moodle 4.0 から変わっていなかった.
test
課題に拡張子 .heic のHEIC形式ファイルを提出すると, PDFに変換され,評定ページで表示される.
この方法でよい理由
クラスメソッドpublic static function supports($from, $to) で, unoconv が拡張子$fromから$toへの変換をサポートしているかを判定している. このメソッドは結局, unoconv --show で出力される, 対応拡張子リストを参照している.
これにはHEICは含まれないので, Moodleは変換しようとしない. また, 実際 unoconvは HEIC形式ファイルを扱えない.
Imagemagick (convert) は HEIC形式を JPEG形式などに変換できるので, unoconv の前に convert で前処理することにした.
さらにやってもいいHEIC対応
Moodle > Site administration > Server > File types でHEICを登録すると, 提出ファイル一覧などで, 画像ファイルのアイコンが表示される.


![[改訂第9版]LaTeX美文書作成入門 [改訂第9版]LaTeX美文書作成入門](https://m.media-amazon.com/images/I/414goKtaBjL._SL500_.jpg)





