kilin> how to> moodle

Moodle 1.9のインストールメモ

(2010.10.10-2013.5.29)

学習支援ソフトMoodle(Moodle 1.9.19+)のインストールメモ.いくつかの追加機能(アンケート,フィードバック)と,Moodleを携帯で利用できるMoodle For Mobileのインストール法とそれらの若干の改良方法もメモしておきます.
Moodle: オープンソースのコース管理システム (CMS - Course Management System),学習管理システム (LMS - Learning Management System),仮想学習環境 (VLE - Virtual Learning Environment).
北里大学Moodle北里大学Moodle教職員用
(環境) CentOS 5.9 (SElinux無効)
Moodle1.8, 2.0もここに書いた方法でインストールできます。Moodle2.6のインストール方法はこちら三重大学版はこちら

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

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

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

# yum install php53
# yum install php53-mysql
# yum install php53-gd
# yum install php53-mbstring
# yum install php53-ldap
# yum install php53-xmlrpc
# yum install php53-xml
# yum install php53-intl <- moodle2.xの場合

# 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
#
起動
# /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 = 1000M

Moodle *

Moodle 1.9を http://download.moodle.org/ からダウンロード
# wget http://download.moodle.org/download.php/stable19/moodle-weekly-19.zip
/var/www/htmlに展開(以下では /var/www/html/moodle).展開コマンドは
# cd
# unzip moodle-weekly-19.zip
# mv moodle /var/www/html/
データ用ディレクトリを /var/www/moodledata に設定.apache が読み書きできるようにする.アップロードされたファイルはここに入る.
# cd /var/www/
# mkdir moodledata
# chown -R apache.apache /var/www/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
-[セッションハンドリング]-[クッキー接頭辞]sessioncookie: moodle <- このムードルの名前
[ユーザ]-[認証]-[認証の管理] -- Moodle2.0では[ユーザ]->[プラグイン]
 -[ゲストログインボタン]: 非表示
 -[メールアドレスの変更時、ドメインを制限する]verifychangedemai: No

日本語ファイル名対応

(1) コースにファイル名に全角文字を含むファイルをアップロードすると全角文字がすべて削除されてしまう.全角文字の混じったファイル名のファイルをアップロードしたい場合はconfig.phpに以下の2行を追加する.
$CFG->unicodedb = true;
$CFG->unicodecleanfilename = true;
(2) 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') {
(3) 日本語ファイル名のファイルをzipファイルに圧縮すると格納されたファイルが文字化けしてしまうので,lib/pclzip/pclzip.lib.php の2555行目付近に以下の青字の3行を追加する。また,adminの[サイト管理]-[サーバ]-[システムパス]-[zipのパス]zip: と-[unzipのパス]upzip: は空白のままにする。
$p_header['filename'] = mb_convert_encoding($p_header['filename'], 'SJIS', 'auto');
$p_header['stored_filename'] = mb_convert_encoding($p_header['stored_filename'], 'SJIS', 'auto');
$p_header['filename_len'] = strlen($p_header['filename']);

// ----- Look for pre-add callback
if (isset($p_options[PCLZIP_CB_PRE_ADD])) {
 
 //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A 
pre-callback '".$p_options[PCLZIP_CB_PRE_ADD]."()') is defined for the 
extraction");

サイト管理2

あとは,https://サーバ名/moodle/ にアクセスし(つまり,インストールしたMoodleにアクセスし),adminでログインして,[サイト管理]で色々設定.
(システムパス)
[サーバ]-[システムパス]
-[zipのパス]zip: 空白のままにする(/usr/bin/zipと入れるとzip内日本語ファイルが文字化けする)
-[unzipのパス]unzip: 空白のままにする(/usr/bin/zipと入れるとzip内日本語ファイルが文字化けする)
-[duのパス]pathtodu: /usr/bin/du
-[aspellのパス]aspellpath: /usr/bin/aspell
(ユーザ,コース管理)
[セキュリティ]-[サイトポリシー]
 メール変更確認 emailchangeconfirmation: No
[セキュリティ]-[HTTPセキュリティ]
 セキュアクッキーのみ cookiesecure: Yes ←SSLを使っている場合
[サーバ]-[クリーンアップ]
 コースからユーザを登録抹消する日数 longtimenosee: 365日 ← Moodle 2には無い?
[コース]-[コースデフォルト設定]
 フォーマットformat: トピックフォーマット
 週/トピックの数numsections: 13
[コース]-[ユーザ登録方法]
 コースウェルカムメッセージを送信する sendcoursewelcomemessage: No ← Moodle 2には無い?
[ユーザ]-[パーミッション]-[ロールの定義]
 [コース作成者]の[ユーザデータをバックアップする]という項目を[設定なし]から[許可]へ変更.
(モジュール)
[プラグイン]-[フィルタ]-[フィルタ設定]
-[マルチメディアプラグイン] Yes [設定] すべて(swfも)チェックする.
-[TeX表記法] Yes
-[用語集オートリンク] Yes
[プラグイン]-[活動]-[活動の管理]
-[ワークショップ] On
(見た目)
[アピアランス]-[テーマ]-[テーマ設定]-[コーステーマを許可する] allowcoursethemes: Yes
[フロントページ]-[フロントページ設定]
 [フロントページ]を[ニュースアイテム]に変更.
 [ログイン時のフロントページアイテム]を[コース一覧]と[カテゴリ一覧]に変更.

セキュリティ

デフォルトでは,ユーザプロファイルにアップロードした写真へログインせずにアクセスすることが可能.以下のいずれかの対策をおこなう.
ユーザが個人的な写真をアップロードできないようにするには:
config.phpに $CFG->disableuserimages = true; を追加して,ユーザが個人的な写真をアップロードできないようにする.
ログインなしのユーザ写真アクセスを禁止するには:
/var/www/html/moodle/user/pix.phpを下記のように改造する.
require_once('../config.php');
require_once($CFG->libdir.'/filelib.php');

require_login(); <- 追加

カスタマイズ

ログインユーザ名を強制的に半角にする。LDAPでログイン認証する場合,LDAPがユーザ名の全角,半角を区別しない場合の対策。(https://moodle.org/mod/forum/discuss.php?d=83972
プログラム修正前にMoodleに管理者としてログインし,「サイト管理 > サーバ > 動作環境」内の「php_extension mbstring」欄の右端が「OK」になっていることを確認してから,login/index.phpの108行目に1行追加。
[修正前]
} else if ($frm) { // Login WITH cookies

$frm->username = trim(moodle_strtolower($frm->username));

[修正後]
} else if ($frm) { // Login WITH cookies

$frm->username = mb_convert_kana($frm->username, 'a', 'utf-8');
$frm->username = trim(moodle_strtolower($frm->username));
コースのリンクの色
が,学生が入れないコースでは「青」ではなく「灰色」になる。灰色は「無効」と誤解されやすいので,学生が入れないコースでも「灰色」ではなく「青」にする方法。(Mitsuhiro Yoshidaより)

course/lib.phpの2039行目あたりをコメントアウトする。

[ 修正前 ]
    if (isset($course->context)) {
        $context = $course->context;
    } else {
        $context = get_context_instance(CONTEXT_COURSE, $course->id);
    }

    $linkcss = $course->visible ? '' : ' class="dimmed" ';

    echo '<div class="coursebox clearfix">';
    echo '<div class="info">';
    echo '<div class="name"><a title="'.get_string('entercourse').'"'.


[ 修正後 ]
    if (isset($course->context)) {
        $context = $course->context;
    } else {
        $context = get_context_instance(CONTEXT_COURSE, $course->id);
    }

//    $linkcss = $course->visible ? '' : ' class="dimmed" ';

    echo '<div class="coursebox clearfix">';
    echo '<div class="info">';
    echo '<div class="name"><a title="'.get_string('entercourse').'"'.

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の翻訳」へ投稿して下さい。

feedback(フィードバック)パッケージを入れる(see 注意3)

まず,http://download.moodle.org/download.php/packages19/feedback_package.zip よりfeedbackパッケージを入手.(see 注意2)
# cd
# wget http://download.moodle.org/download.php/packages19/feedback_package.zip

feedback_package.zipを/var/www/html/moodle/にコピーして展開.README.txtは上書きしない.
# cd /var/www/html/moodle/
# cp /root/feedback_package.zip .
# unzip feedback_package.zip
https://サーバ名/moodle/にアクセスして,adminでログインして,[サイト管理]-[通知]をクリック.
(注意1)feedbackパッケージは下記MFMで使用するので,必ずMFMより前にインストールすること.
(注意2)最新のfeedbackパッケージではMFMが動作しない.MFMを使う場合は2008年3月以前のバージョンを使うこと.我々が動作確認したバージョン2007073101はここにあります
(注意3)Moodle2.xではフィードバックはMoodle本体に初めから入っている。別途インストールする必要はない。
このパッケージをアンインストール(削除)するには?
まず,配置したファイルを削除.
# cd /var/www/html/moodle/
# rm -rf mod/feedback
# rm -rf blocks/feedback
次に,データベースからmdl_feedbackで始まる名前のテーブルを消す.
# mysql -u root -p
# mysql> use moodle;
# mysql> show tables like '%feedback%'; ←名前にfeedbackを含むテーブルを表示
# mysql> drop table mdl_feedback;
# mysql> drop table mdl_feedback_completed;
# mysql> drop table mdl_feedback_completedtmp;
# mysql> drop table mdl_feedback_sitecourse_map;
# mysql> drop table mdl_feedback_template;
# mysql> drop table mdl_feedback_tracking;
# mysql> drop table mdl_feedback_value;
# mysql> drop table mdl_feedback_valuetmp;
そして,mdl_modulesテーブルとmdl_blockテーブルからnameフィールドが「feedback」のレコードを消す.
# mysql> delete from mdl_modules where name = 'feedback';
# mysql> delete from mdl_block where name = 'feedback';
# mysql> quit;

Moodle for Mobile(MFM)を入れるには

(注意!必ず上記feedbackパッケージをインストールしておくこと.)
まず,http://docs.moodle.org/en/Moodle_for_Mobiles_installation よりMFMを入手.
# cd
# wget http://download.moodle.org/patches/mobile.zip
/var/www/html/moodleに展開.
# cd /var/www/html/moodle/
# cp /root/mobile.zip .
# unzip mobile.zip
/var/www/html/moodle/course/lib.phpを2箇所変更.(これで編集モードのケータイアイコンを呼び出す)
# cd course
# cp lib.php lib.php.org
# vi lib.php
(1)2行目に以下を追加.
include_once($CFG->mfm_dirroot.'/course/mfmbuttons.php');
(2)echo make_editing_buttons($mod, $absolute, true, $mod->indent, $section->section);行の下に以下を追加.
echo make_mobile_enable_button($mod, $absolute, $section->section);
standardかstandardwhite以外のテーマを使っている場合は, /var/www/html/moodle/customscripts/theme/で,standardまたはstandardwhiteをコピーして,ファイル名を使用しているテーマ名に変更.
/var/www/html/moodleconfig.phprequire_once("$CFG->dirroot/lib/setup.php");をコメントアウトして,行を追加.(これでMFMを呼び出す)
# cd /var/www/html/moodle/
# cp config.php config.php.org
# vi config.php
//require_once("$CFG->dirroot/lib/setup.php");
require_once($CFG->dirroot.'/mobile/customscripts/lib/setup.php');
最後に,https://サーバ名/moodle/admin/ に携帯ブラウザからアクセスしてadminでログインする.データベースのアップグレードがおこなわれる.携帯ブラウザ実機でなくエミュレータ(iモードHTMLシミュレータIIなど)でもOK.
以上で携帯で「小テスト」と「フィードバック」ができるようになる.(コースに小テストをつくると携帯アイコンが表示されるので,それをONにする)
(注意)adminの[サイト管理]で[フロントページ]-[フロントページ設定]で[フロントページ]に[ニュースアイテム]を表示すると,携帯ブラウザでMFMのコースが表示されない.つまりMFMが使えない.この問題を含めて北里大学でのMFMのカスタマイズについてはここをご覧下さい

別の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 1.9を http://download.moodle.org/ からダウンロードして,/rootに展開.
# cd
# unzip moodle-weekly-19.zip
バックアップをとってから,古いmoodleファイルを更新.
# cd /var/www/html/
# rsync -a /root/moodle/ ./moodle19/
https://サーバ名/moodle/admin/ にブラウザからアクセスする.データベースのアップグレードがおこなわれる.
なお,MFMがインストールされていて,このアップデートで /var/www/html/moodle/course/lib.php が更新された場合は,再度 lib.php ファイルの修正をおこなう必要がある.
*モジュール(アンケートなど)のアップデートも同じように行うことができるはず.
*MFMのアップデートはまだやったことがない.

アンインストール

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