kilin> how to> moodle

Moodle 3のインストールメモ

(2017.3.10)

学習支援ソフトMoodle(Moodle 2.8-3.0)のインストール,プラグイン追加(アンケート,テーマ)と,不具合修正。
Moodle: オープンソースのコース管理システム (CMS - Course Management System),学習管理システム (LMS - Learning Management System),仮想学習環境 (VLE - Virtual Learning Environment).
北里大学Moodle
(環境) CentOS 7.0 (SElinux無効)  注:CentOS6以下ではPHP, MySQLのバージョン条件を満たしません。
以前のバージョンのインストール方法 Moodle1.9 Moodle2.6 Moodle2-3

(以下プロンプトが # ならroot,$ なら普通のユーザー)

yumでインストールしておくべきもの

phpは5.6以上が必要なので,yumにremiリポジトリを導入してから以下のコマンドを打つ。
# yum install httpd
# yum install mysql <- mariadb(注)がインストールされる
# yum install mariadb-server
# yum install gd

# yum remove php-* <- 古いバージョンのphpをアンインストール。

# yum install php
# yum install php-mysql
# yum install php-gd
# yum install php-mbstring
# yum install php-ldap
# yum install php-xmlrpc
# yum install php-xml
# yum install php-intl
# yum install php-soap

# yum install tetex*
古いバージョンのphpが入っていた場合はここで一度rebootする。
注:MariaDBとはMySQLの開発者が開発しているMySQLのブランチ。MySQLと同じコマンドが使え,同等以上の性能。"MariaDB is a MySQL fork that is developed and maintained by original MySQL developers organised under MariaDB Foundation."

Apache

httpd.conf のDirectoryIndex に index.php を追加し,その下の行にAcceptPathInfo on を追加.
# vi /etc/httpd/conf/httpd.conf

<IfModule dir_module> # DirectoryIndex index.html DirectoryIndex index.php index.html </IfModule> #
AcceptPathInfo on
#
また,フォルダ内ファイルがブラウザで表示されないように(セキュリティ向上のため),httpd.conf内のIndexesを削除する。
サービスとして起動
# systemctl start httpd
# systemctl enable httpd
ファイアウォール
httpポートが開いてなければ(初期状態ではSSHとdhcpv6-clientのみ開いていている),以下のコマンドでhttpポートを開く(1行目:今開る,2行目:再起動後も開ける,3行目:確認)。
# firewall-cmd --add-service=http --zone=public
# firewall-cmd --add-service=http --zone=public --permanent
# firewall-cmd --list-services

MySQL (MariaDB)

MySQLサーバーをサービスとして動かし,
# systemctl start mariadb
# systemctl enable mariadb
rootユーザのパスワード設定
# mysql -u root
MariaDB [(none)]> set password for root@localhost=password('rootパスワード');
MariaDB [(none)]> exit;
データベース作成(データベース名 moodle,ユーザ名 moodleuser,パスワード ???
# mysql -u root -p
MariaDB [(none)]> show databases; MariaDB [(none)]> CREATE DATABASE moodle DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; MariaDB [(none)]> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO moodleuser@localhost IDENTIFIED BY '???';
注)Apache と MySQL が同居しない場合はlocalhostをWebサーバのホスト名にする.
参考:rootのパスワードを削除する方法(パスワードを忘れてしまった場合の対処法)
# /etc/init.d/mysqld stop
# /usr/bin/mysqld_safe --user=root --skip-grant-tables & mysql mysql
mysql> update mysql.user set Password=null where Host='localhost' and User='root';
mysql> quit;
# /etc/init.d/mysqld restart
確認
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| moodle             |
| mysql              |
+--------------------+
MariaDB [(none)]> exit;

PHP

php.iniを編集.ファイルのアップロードの最大サイズ,メモリ制限は多めに設定.
# vi /etc/php.ini
file_uploads = On (デフォルトのまま) session.auto_start = 0 (デフォルトのまま) session.bug_compat_warn = Off (デフォルトのまま) upload_max_filesize = 2000M
post_max_size = 2000M
memory_limit = 2000M
date.timezone="Asia/Tokyo" (デフォルトではコメントアウトされている)

SSL(任意)

http://kilin.clas.kitasato-u.ac.jp/howto/https.html の手順でSSLを設定,httpdを再起動して,httpポートは閉じhttpsポートをあける。
# systemctl restart httpd

# firewall-cmd --remove-service=http --zone=public
# firewall-cmd --remove-service=http --zone=public --permanent # firewall-cmd --add-service=https --zone=public
# firewall-cmd --add-service=https --zone=public --permanent # firewall-cmd --list-services
SSLを使わない場合は,以下の手順のhttpsをhttpとすること。
もし,Moodleをインストールした後でSSL化したい場合は,SSL化した後で以下の二箇所のhttpをhttpsに変えればよい。

Moodle *

Moodle を http://download.moodle.org/ からダウンロード
# wget ムードルファイルのURL(http://.../moodle-latest-28.zip)
/var/www/htmlに展開(以下では /var/www/html/moodle).展開コマンドは
# cd
# unzip moodle-latest-28.zip
# mv moodle /var/www/html/
データ用ディレクトリを /var/www/moodledata に設定.apache が読み書きできるようにする.アップロードされたファイルはここに入る.
# cd /var/www/
# mkdir moodledata
# chown -R apache.apache moodledata

config.php

https://サーバ名/moodle/ にアクセス。質問に答えていく。
# chown root.apache config.php
# chmod o-r config.php

cron

次のコマンド
# cd /var/www/html/moodle/admin/cli; php cron.php
がうまく働くことを確認して,crontabに次のように設定する(使い方はviと同じ).。
# crontab -e

*/5 * * * * cd /var/www/html/moodle/admin/cli; php cron.php > /dev/null
なお,セキュリティが甘くなるが,デフォルト設定をMoodle 2.8以前に戻したい場合は,サイト管理 > セキュリティ > サイトポリシーの「コマンドラインでのみcronを実行する cronclionly」をNoにする。
以上でインストール完了。ここで念のためシステムを再起動してサイトが閲覧できることを確認する。

サイト管理

https://サーバ名/moodle/ にアクセスし,adminでログインし,[サイト管理]で以下を設定.
[ロケーション]-[ロケーション設定]
-[デフォルトの国]country: 日本
[サーバ]
-[セッションハンドリング]-[クッキー接頭辞]sessioncookie: moodle <- このムードルの名前
[プラグイン]-[認証]-[認証管理]
 ゲストログインボタン guestloginbutton [非表示]
 メールアドレスの変更時、ドメインを制限する verifychangedemail: No

サイト管理2

あとは,https://サーバ名/moodle/ にアクセスし(つまり,インストールしたMoodleにアクセスし),adminでログインして,[サイト管理]で色々設定.
(システムパス)
[サーバ]-[システムパス]
-[duのパス]pathtodu: /usr/bin/du
-[aspellのパス]aspellpath: /usr/bin/aspell
(ユーザ,コース管理)
[セキュリティ]-[サイトポリシー]
 メール変更確認 emailchangeconfirmation: No
 ユーザ画像の閲覧にユーザのログインを強制する forceloginforprofileimage: Yes
 (学生がユーザプロファイルにアップロードした写真へログインせずにアクセスできないようにする)
  デフォルト登録キーポリシー groupenrolmentkeypolicy: No
 (パスワードポリシーに基づきグループ登録キーをチェックしない)
[セキュリティ]-[HTTPセキュリティ]
 セキュアクッキーのみ cookiesecure: Yes ←SSLを使っている場合
[コース]-[コースデフォルト設定]
 フォーマットformat: トピックフォーマット
 セッション数numsections: 15
[ユーザ]-[パーミッション]-[ロールを定義する]
 [コース作成者]-[編集]の[ユーザデータをバックアップする moodle/backup:userinfo]という項目を[許可]。
  ケイパビリティ[コースを削除する moodle/course:delete]を[許可]。
 [ロールの割り当てを許可する]の[教師]の行の[教師]をチェック。
[プラグイン]-[登録]-[自己登録]
 登録キーを要求する enrol_self | requirepassword: No
 パスワードポリシーを使用する enrol_self | usepasswordpolicy: No
 既存の登録を有効にする enrol_self | status: Yes
 コースウェルカムメッセージを送信する enrol_self | sendcoursewelcomemessage: No
[アピアランス]-[ナビゲーション]
 ユーザのデフォルトホームページ defaulthomepage: ダッシュボードまたはサイト
(モジュール)
[プラグイン]
-[活動モジュール]
 -[活動を管理する]で[フィードバック]を[表示]にする。
 -[課題]
  -[提出プラグイン]-[ファイル提出]-[最大提出サイズ]をサイトアップロード上限に。
  -[課題設定]で[学生に提出受領書を送信する] assign | submissionreceipts: のチェックをはずす。
-[フィルタ]-[フィルタ設定]
 -[TeX表記法] On
 -[用語集自動リンク] On
(見た目)
[アピアランス]
 [テーマ]-[テーマ設定]-[コーステーマを許可する] allowcoursethemes: Yes
 [コース]-[コース連絡先] coursecontact: [編集権限のない教師]にもチェックを入れる。
[フロントページ]-[フロントページ設定]
 [フロントページ]を[アナウンスメント]に変更。
 [ログイン時のフロントページアイテム]を[登録済みコース]と[カテゴリ一覧]に変更.
フォーラム投稿で届くメール下部の「この投稿をコンテクスト内に表示する」を「この投稿を表示する」に修正する。(by Yoshida Mitsuhiro)
  1. 管理 > サイト管理 > 言語設定 > 言語カスタマイゼーション
  2. 「選択 ...」プルダウンメニューから「日本語 (ja)」を選択する。
  3. 「編集のために言語パックを開く」をクリックする。
  4. 「ストリングを表示するコンポーネント」で「forum.php」を選択する。
  5. 「次のテキストを含むストリングのみ」に「この投稿をコンテクスト内に表示する」を入力する。
  6. 「ストリングを表示する」をクリックする。
  7. 「ローカルカスタマイゼーション」に新しい訳語「この投稿を表示する」 を入力する。
  8. 「修正を言語パックに保存する」をクリックする。
  9. 「続ける」をクリックする。

不具合の修正

以下の不具合は,本体コードを修正してくれるようにMoodle Trackerに報告中(by Mitsuhiro Yoshida)。

LDAPがユーザ名の全角,半角を区別しない場合の対策

ログインユーザ名を強制的に半角にする。LDAPでログイン認証する場合,LDAPが,(OpenLDAPのように)ユーザ名の全角,半角を区別しない場合の対策。(https://moodle.org/mod/forum/discuss.php?d=83972
プログラム修正前にMoodleに管理者としてログインし,「サイト管理 > サーバ > 動作環境」内の「php_extension mbstring」欄の右端が「OK」になっていることを確認してから,login/index.phpの123行目に1行追加。(by Yoshida Mitsuhiro)
[ 修正前 ]
/// Check if the user has actually submitted login data to us

if ($frm and isset($frm->username)) {  // Login WITH cookies

    $frm->username = trim(core_text::strtolower($frm->username));


[ 修正後 ]
/// Check if the user has actually submitted login data to us

if ($frm and isset($frm->username)) { // Login WITH cookies

    $frm->username = mb_convert_kana($frm->username, 'a', 'utf-8');
    $frm->username = trim(core_text::strtolower($frm->username));

プラグイン

questionnaire(アンケート)モジュールを入れる

まず,https://moodle.org/plugins/mod_questionnaire よりquestionnaireモジュールを入手。
questionnaire.zipを/var/www/html/moodle/mod/にコピーして展開.
# cd /var/www/html/moodle/mod/
# cp /root/questionnaire.zip .
# unzip questionnaire.zip
https://サーバ名/moodle/にアクセスして,adminでログインして,指示に従ってインストールする。

theme

https://moodle.org/plugins/browse.php?list=category&id=3 よりテーマ(theme)を入手。
theme_...zipを/var/www/html/moodle/theme/にコピーして展開。
# cd /var/www/html/moodle/theme/
# cp /root/theme_...zip .
# unzip theme_...zip
https://サーバ名/moodle/にアクセスして,adminでログインして,指示に従ってインストールする。上記サイトには13種類のテーマファイルが置いてある。
theme_aardvark_moodle28_*.zip
theme_archaius_moodle28_*.zip
theme_bcu_moodle28_*.zip
theme_contemporary_moodle28_*.zip
theme_decaf_moodle28_*.zip
theme_dynamic_moodle28_*.zip
theme_easy_moodle28_*.zip
theme_essential_moodle28_*.zip
theme_evolved_moodle28_*.zip
theme_sharp_moodle28_*.zip
theme_shoehorn_moodle28_*.zip <- 使えない
theme_shoelace_moodle28_*.zip
theme_simple_moodle28_*.zip
theme_uikit_moodle28_*.zip

バックアップ

データベースのバックアップ(???はMysql rootのパスワード,moodleはmoodleのデータベース名)
# mysqldump -u root -p??? -Q -e moodle > moodle.sql
と,moodleとmoodledataディレクトリをrsyncで定期的に自動バックアップしておけばOK.トラブルが生じても,アンインストールして正常に動作していた状態へ復元できる.

別のMoodleを入れるには

同じサーバに別のMoodleを入れるには,もう一つのMoodleのデータベースmoodle2,ユーザmood2leuser(パスワード ????)をつくる.
# mysql --default-character-set=utf8 -u root -p 
mysql> CREATE DATABASE moodle2 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle2.* TO moodle2user@localhost IDENTIFIED BY '???'; 
mysql> quit;
次に,もう一つのMoodleをインストールするディレクトリを決める./var/www/html/moodle2とする.そして,/moodle/を/moodle2/に読み替えて上記*からの作業を行う.

アップデート

新しい Moodle を http://download.moodle.org/ からダウンロードして,/rootに展開.
# cd
# unzip moodle-latest-28.zip
バックアップをとってから,moodleファイルを削除して,更新。
# cd /var/www/html/
# mv moodle moodle.bk
# mv /root/moodle/ .
https://サーバ名/moodle/admin/ にブラウザからアクセスする。データベースのアップグレードがおこなわれる。その後config.phpのパーミッションを設定,,不具合の修正を行う。モジュール(アンケートなど)はアップグレード後,最新版をインストールする。

アンインストール

mysqlのデータベースmoodleを削除.
# mysql -u root -p
MariaDB [(none)]> show databases;
MariaDB [(none)]> drop database moodle;
MariaDB [(none)]> exit;
moodleディレクトリとmoodleデータディレクトリを削除.
# rm -rf /var/www/moodledata
# rm -rf /var/www/html/moodle
cronを削除
# crontab -e
とやって,cronで書いた行
*/5 * * * * wget -q -O /dev/null https://サーバ名/moodle/admin/cron.php
をddで削除.:wqで保存.

誤ってアンインストールしてしまった場合の復元手順

moodleディレクトリとmoodleデータディレクトリを復元。
# rsync -a バックアップしたmoodledata/ /var/www/moodledata/
# rsync -a バックアップしたmoodle19/ /var/www/html/moodle/
mysqlのデータベースの復元。
# mysql -u root -p
MariaDB [(none)]> データベースmoodle を作成
MariaDB [(none)]> use moodle;
MariaDB [(moodle)]> source moodle.sql
MariaDB [(moodle)]> exit;
cronを復元

別のサーバにデータも含めて再構築するには

a.comというサーバに再構築するには,a.comにログインして「復元手順」をおこなう。

参考

Moodleのインストール (http://docs.moodle.org/ja/Moodleのインストール) 2010.2現在
Japanese Moodle (http://moodle.org/course/view.php?id=14) 2008.12現在
Moodleのセキュリティ (http://docs.moodle.org/ja/Moodleのセキュリティ) 2010.3現在
Moodleのアップグレード (http://docs.moodle.org/ja/Moodleのアップグレード) 2010.3現在
CentOS7のファイアウォール(http://www.unix-power.net/centos7/firewalld.html)2015.2現在