kilin> how to> moodle

Moodle 2.6のインストールメモ

(2014.3.7)

学習支援ソフトMoodle(Moodle 2.6+)のインストールメモ,いくつかの追加機能(アンケート,フィードバック)と,改良方法。
Moodle: オープンソースのコース管理システム (CMS - Course Management System),学習管理システム (LMS - Learning Management System),仮想学習環境 (VLE - Virtual Learning Environment).
北里大学Moodle
(環境) CentOS 6.5 (SElinux無効)
Moodle1.9のインストール方法はここ Moodle2.8のインストール方法はここ

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

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

# yum install httpd
# yum install mysql
# yum install mysql-server
# yum install gd

# 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*

Apache

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

#DirectoryIndex index.html index.html.var
DirectoryIndex index.php index.html index.html.var
#
AcceptPathInfo on
#
また,フォルダ内ファイルがブラウザで表示されないように(セキュリティ向上のため),httpd.conf内のIndexesを削除する。
起動
# /etc/init.d/httpd start

MySQL

MySQLサーバーを動かし,
/etc/init.d/mysqld start
rootユーザのパスワード設定
# mysql -u root
mysql> set password for root@localhost=password('rootパスワード');
mysql> exit;
データベース作成(データベース名 moodle,ユーザ名 moodleuser,パスワード ???
# mysql -u root -p
mysql> show databases; mysql> CREATE DATABASE moodle DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; mysql> 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
確認
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| moodle             |
| mysql              |
+--------------------+
mysql> exit;

PHP

php.iniを編集.ファイルのアップロードの最大サイズ,メモリ制限は多めに設定.
# vi /etc/php.ini
magic_quotes_gpc = On (必須ではありませんが、お勧めします) magic_quotes_runtime = Off (デフォルトのまま) file_uploads = On (デフォルトのまま) session.auto_start = 0 (デフォルトのまま) session.bug_compat_warn = Off (デフォルトのまま) upload_max_filesize = 2000M
post_max_size = 2000M
memory_limit = 2000M

Moodle *

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

config.php

http://サーバ名/moodle/ にアクセス.質問に答えていく.httpポートをあけるには,/usr/sbin/setupを使うか
# /sbin/iptables -I RH-Firewall-1-INPUT -p tcp --dport 80 -j ACCEPT;
*質問中でURLが http://.../moodle のようになるが最後に / を補わない.
*質問は「続く」でたくさんのページがあるが必ず最後まで答える.
*途中で設定ファイル config.php が作られるが,moodleディレクトリに apache が書き込めないので,表示された config.php をコピーしてエディタにペーストし,moodle ディレクトリ/var/www/html/moodle/に保存.所有者,パーミッションを以下のように変更.
# chown root.apache config.php
# chmod o-r config.php

cron

http://サーバ名/moodle/admin/cron.php をブラウザで見てうまく働くことを確認し,次のように設定(使い方はviと同じ).
# crontab -e

*/5 * * * * wget -q -O /dev/null http://サーバ名/moodle/admin/cron.php

サービスON

# /sbin/chkconfig httpd on
# /sbin/chkconfig mysqld on

SSL(任意)

http://kilin.clas.kitasato-u.ac.jp/howto/https.html の手順でおこなう.ポート80番(http)は閉じポート443番(https)をあける.httpsポートをあけるには,/usr/sbin/setupを使うか
# /sbin/iptables -I RH-Firewall-1-INPUT -p tcp --dport 443 -j ACCEPT;
そして,moodle ディレクトリ/var/www/html/moodle/のconfig.phpの
$CFG->wwwroot = 'http://...';
を,
$CFG->wwwroot = 'https://...';
に変える.また,crontab -eで設定した
http://サーバ名/moodle/admin/cron.php
https://サーバ名/moodle/admin/cron.php
に変える。なお,起動時にhttpsをあけるには,/usr/sbin/setupを使うか,rootでログインしてGUIのファイアウオール設定ツールを使う.
以上でインストール完了.ここで念のためシステムを再起動したほうがよい。

サイト管理

https://サーバ名/moodle/ にアクセスし,adminでログインし,[サイト管理]で以下を設定.
[ロケーション]-[ロケーション設定]-[デフォルトの国]country: 日本
[サーバ]
-[Eメール]-[文字セット]sitemailcharset: ISO-2022-JP  ← Moodle 2には無い?
-[セッションハンドリング]-[クッキー接頭辞]sessioncookie: moodle <- このムードルの名前
[ユーザ]-[プラグイン]
 -[ゲストログインボタン]: 非表示
 -[メールアドレスの変更時、ドメインを制限する]verifychangedemai: No

日本語ファイル名対応

zipファイル格納された日本語ファイル名のファイルを展開したとき,展開ファイルが文字化けしてしまうので,lib/moodlelib.php の7790行目付近に以下の青字の1行を追加する。また,adminの[サイト管理]-[サーバ]-[システムパス]-[zipのパス]zip: と-[unzipのパス]upzip: は空白のままにする。
function unzip_cleanfilename ($p_event, &$p_header) {
//This function is used as callback in unzip_file() function
//to clean illegal characters for given platform and to prevent directory traversal.
//Produces the same result as info-zip unzip.
  $p_header['filename'] = mb_convert_encoding($p_header['filename'], 'UTF-8', 'SJIS');
  $p_header['filename'] = ereg_replace('[[:cntrl:]]', '', $p_header['filename']); //strip control chars first!
  $p_header['filename'] = ereg_replace('\.\.+', '', $p_header['filename']); //directory traversal protection
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {

サイト管理2

あとは,https://サーバ名/moodle/ にアクセスし(つまり,インストールしたMoodleにアクセスし),adminでログインして,[サイト管理]で色々設定.
(システムパス)
[サーバ]-[システムパス]
-[duのパス]pathtodu: /usr/bin/du
-[aspellのパス]aspellpath: /usr/bin/aspell
(ユーザ,コース管理)
[セキュリティ]-[サイトポリシー]
 メール変更確認 emailchangeconfirmation: No
 [ユーザ写真閲覧にユーザのログインを強制する forceloginforprofileimage]を有効に (チェック)する。
 (学生がユーザプロファイルにアップロードした写真へログインせずにアクセスできないようにする)
[セキュリティ]-[HTTPセキュリティ]
 セキュアクッキーのみ cookiesecure: Yes ←SSLを使っている場合
[サーバ]-[クリーンアップ]
 コースからユーザを登録抹消する日数 longtimenosee: 365日 ← Moodle 2には無い?
[コース]-[コースデフォルト設定]
 フォーマットformat: トピックフォーマット
 セッション数numsections: 15
[コース]-[ユーザ登録方法]
 コースウェルカムメッセージを送信する sendcoursewelcomemessage: No ← Moodle 2には無い?
[ユーザ]-[パーミッション]-[ロールの定義]
 [コース作成者]の[ユーザデータをバックアップする]という項目を[設定なし]から[許可]へ変更.
(モジュール)
[プラグイン]
-[活動モジュール]-[活動管理]で[フィードバック]を[表示]にする。
-[フィルタ]-[フィルタ設定]
 -[TeX表記法] On
 -[用語集自動リンク] On
(見た目)
[アピアランス]-[テーマ]-[テーマ設定]-[コーステーマを許可する] allowcoursethemes: Yes
[フロントページ]-[フロントページ設定]
 [フロントページ]を[ニュースアイテム]に変更.
 [ログイン時のフロントページアイテム]を[コース一覧]と[カテゴリ一覧]に変更.

カスタマイズ

ログインユーザ名を強制的に半角にする。LDAPでログイン認証する場合,LDAPがユーザ名の全角,半角を区別しない場合の対策。(https://moodle.org/mod/forum/discuss.php?d=83972
プログラム修正前にMoodleに管理者としてログインし,「サイト管理 > サーバ > 動作環境」内の「php_extension mbstring」欄の右端が「OK」になっていることを確認してから,login/index.phpの122行目に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));
コースのリンクの色
が,学生が入れないコースでは「青」ではなく「灰色」になる。灰色は「無効」と誤解されやすいので,学生が入れないコースでも「灰色」ではなく「青」にする方法。(Mitsuhiro Yoshidaより)

course/renderer.phpの1224行目を修正する。

[ 修正前 ]
// course name
$coursename = $chelper->get_course_formatted_name($course);
$coursenamelink = html_writer::link(new moodle_url('/course/view.php', array('id' => $course->id)), 
                                    $coursename, array('class' =>$course->visible ? '' : 'dimmed'));


[ 修正後 ]
// course name
$coursename = $chelper->get_course_formatted_name($course);
$coursenamelink = html_writer::link(new moodle_url('/course/view.php', array('id' => $course->id)),
    //                              $coursename, array('class' =>$course->visible ? '' : 'dimmed'));
                                    $coursename, array('class' =>$course->visible ? '' : ''));

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

まず,http://moodle.org/plugins/view.php?plugin=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でログインして,[サイト管理]-[通知]をクリック.(2.0の場合は,モジュールの一覧が出るので[アップグレード]ボタンをクリック)
なお,questionnaire for Moodle1.9は我々北里大学の高等教育開発センターで翻訳しました。不適切な翻訳などがあれば,「Moodle日本語翻訳フォーラム:questionnaireの翻訳」へ投稿して下さい。

別の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-26.zip
バックアップをとってから,古いmoodleファイルを更新.
# cd /var/www/html/
# rsync -a /root/moodle/ ./moodle19/
https://サーバ名/moodle/admin/ にブラウザからアクセスする.データベースのアップグレードがおこなわれる.
*モジュール(アンケートなど)のアップデートも同じように行うことができるはず.

アンインストール

mysqlのデータベースmoodleを削除.
# mysql -u root -p
mysql> show databases;
mysql> drop database moodle;
mysql> 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
mysql> データベースmoodle を作成
mysql> use moodle;
mysql> source moodle.sql
mysql> exit;
cronを復元

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

a.comというサーバに再構築するには,a.comにログインして「復元手順」をおこない,/var/www/html/moodle/のconfig.phpに記述されているサーバURL
$CFG->wwwroot = 'http://...';
$CFG->wwwroot = 'https://a.com...';
のようにa.comに書き換える.そして
cronを編集

バックアップ

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

参考

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現在