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