Moodle als E.L.O. op een school
"Hoe start ik met het maken van een ELO op een school"
Een ELO is een elektronische leeromgeving, waarbij men kan denken aan files delen, binnen projecten werken, forums, informatie delen. In het engels heet dat een CMS (course management system) of e-learning. Een bekendere ELO is Moodle, die ook bij Kennisnet gebruikt wordt/werd (dacht ik). Deze omgeving draait op een webserver waarbij als enige eis gesteld wordt dat er ondersteuning moet zijn voor php en een database als mysql of postgresql. Onze ELO werd uiteindelijk http://elo.raayland2.nl .
Doelstelling
Het doel is Moodle als ELO in te gaan zetten. Nu kun je uit een breed assortiment server-OS-en kiezen die een webserver met php en een database ondersteunen. Voor de hand liggen Netware6.5, Win2000 (workstation of server) en Linux. Omdat Linux verreweg de laagste systeemeisen stelt kiezen we daarvoor. Mijn test-hardware is een wat oudere laptop met een pcmcia-netwerkkaart. Vanwege die netwerkkaart zijn distro's als Trustix/Tawie onbruikbaar; dit zijn gespecialiseerde server-distro's die geen pcmcia ondersteunen. Een BSD als OpenBSD is wat lastiger. Ik kies voor RedHat8.0 met Apache2, PHP4 en MySQL3. Voor het gebruik en de installatie van Moodle kun je terecht op www.moodle.org . Ik liep toch nog tegen wat haken en ogen aan... vandaar ook dit document.
Specificaties
- RedHat8.0, Apache2.040-8, PHP42.2-8, MySQL3.23.52-3, OpenSSH3.4p1-2, Ip-tables1.2.6a-2 met Moodle1.1.1. Ik heb geen X-onderdelen geinstalleerd!
- Toshiba Satellite (PII/266) 4030 CDT met 128 Mb RAM en een Xircom pcmcia-netwerkkaart als eerste test. Later werd het een PIII/933 en deze werd ook onze ELO-server online.
- Dokumentatie van Moodle: op de Moodle-site document A en document B zijn heel handig.
- Apache draaide ik eerst niet op poort80 maar poort445 vanwege de veiligheid. De moodle-database-user is moodle2. De beheerder/supervisor binnen Moodle is de moodle-user admin. Ook maak ik een extra user die ik beheer-rechten geef; user moodle. Dit account krijgt de applicatie-beheerder. De wachtwoorden staan in het wachtwoorden-bestand.
- Remote beheer kan via SSH met putty of winscp. En beveiliging nu? Nmap of Nmap-win ziet nu alleen poort 22 (ssh) en 445 (waarvan nmap denkt dat het eoa MS-service (de AD) is ;-) ) waardoor de beveiliging voor het belangrijkste stuk geregeld is. Andere poorten zijn door de firewall dmv iptables dicht gezet.
- Voor extra beveiliging kun je modsecurity ( www.modsecurity.org ) voor Apache gebruiken. Een flexibele module die veel beveiliging kan toevoegen. Werkt goed met apache1.3.x, maar vaak minder/niet met apache2.x.
- RedHat8 updaten? Ja hoor, dat kan... RedHat ondersteunt versie 8 niet meer, maar er zijn zgm legacy updates (community-updates).... bijvoorbeeld via http://download.fedoralegacy.org/redhat/8.0/updates/i386/
De Moodle
installatie
- De installatie is gedaan volgens de 2 bovenstaande documenten. Maar er waren wel een paar dingen die anders gingen. Ook kun je wat hebben aan deze doc: http://www.reallylinux.com/docs/installmoodle.shtml
- Apache via poort 445 gaat via /etc/httpd/conf/httpd.conf. Ik maakte /usr/moodle en /usr/moodle_data die ik via chmod 777 volledig open heb gezet. De laatste is een upload-map binnen Moodle.
- Het duurde een tijd voordat ik uiteindelijk de hele handel aan de gang had. Alles ging eigenlijk heel snel, maar de html-pagina's dir door de php-scripts gegeneerd werden bleven leeg. Een script-fout, een config-fout, een database-fout?
- Ik volg eerst document A. PHP testen ging vlot met een phptest.php; dat werkte. Maar ik zat uiteindelijk met lege html-files. Zal dan wel iets in de database zijn.... document B opgesnord en doorgenomen.
- Paar handige mysql-commando's (bezoek bijvoorbeeld deze site: http://www.mysql.com/documentation/mysql/bychapter/index.html) :
- mysql -u root -p
- help
- create database moodle;
- use moodle;
- use mysql;
- show tables;
- show columns from user;
- select * from user;
- grant all privileges on moodle.* to 'root2'@localhost identified by 'password-root2';
- quit
- Via www.mysql.com en de documentatie aldaar zag ik dat de aanwijzingen in document A niet echt lekker waren. Het grant-commando bij § 5 "Create a database" klopte niet (helemaal). De user was volgens het document moodleuser@localhost, maar het moest zijn 'moodleuser'@localhost. Voor het gemak gaf ik root2 meer database-rights (grant all)... Het grant-commando is zoals boven beschreven: grant all privileges on moodle.* to 'root2'@localhost identified by 'password-root2';
- Verder merkte ik dat soms de url afgesloten moest worden met 2 slashes. Dus http://ip-adres:445/moodle// of http://hostfilename:445/moodle// .
- Verder heb ik index.htm in de webroot aangepast zodat een directe doorverwijzing gebeurt naar de moodle-map. Maar na het goede grant-commando kon ik verder...
- Http://ip-adres:445/moodle/admin (§ 8 van document A) laat de installatie vervolgen. Via php wordt de moodle-datbase ook gevuld en wordt er om een uitgebreide na-configuratie gevraagd. Nu kun je als admin in je eigen moodle-pagina. Je kunt moodle gaan vullen... en gebruiken!
- Ahum... geef achteraf ook de mysql-database-user root een wachtwoord. Dat kan met een mysql-commando, maar (eenvoudiger) ik heb ook PhpMysqlAdmin geinstalleerd (hierbij is phpmysql een must, trouwens). Nu kun je via http://ip-adres:445/admin/phpMyAdmin// (let weer op de dubbele slash) de databases en mysql zelf beheren. Als die root-user geen mysql-password heeft is dat relatief eenvoudig te hacken.
- Installeer ook de postgresSQL-php-driver (php-pgsql*.rpm)... anders loopt het moodle.php-script niet lekker.
- Lees de documentatie goed! Veel dingen lijken kleine details, maar voer je ze niet uit, dan zal dat later in het gebruik veel kleine problemen opleveren!
Verdere aanvullingen...
- De moodle-cron kun je met http://hostfilename:445/moodle/admin/cron.php (best leuk!) incidenteel doen. Later uiteraard netjes via crond (via cron.5mins). Wel handig als je in /etc/crontab de mailto-optie wijzigt in: MAILTO="", zodat de root niet al die mails lokaal krijgt. Zie dus ook de moodle-docs...
- Cronjob met ntpdate om de systeemtijd te updaten. Ip-tables houdt de time-ports dicht.... bij ntpdate moet je even "service iptables top" doen, gevolgd door "ntpdate 172.20.64.29" en "service iptables start". Netter is even die time-ports ook open te zetten.
- Backuppen doe ik door een cron.daily script. Hierbij backup ik de database volgens de documentatie en exportreer ik deze samen met de moodle-files (/usr/moodle_data) naar een Novell-volume. Om de zoveel tijd maak ik een ghost-backup van de server zelf; let op bij Ghost dat je in de opties "image disk" aan zet.
- Hoe je mysql-db's backupt kun je mooi hier zien: http://sourceforge.net/projects/automysqlbackup/
- Wil je meer weten over hoe ik de ELO technisch gezien maakte, mail me dan... linux at raayland punt nl.
- De update naar Moodle1.2 vanuit versie 1.1.1. ging niet goed. Ik moest terug. Maar hoe doe je dat...
/sbin/service/mysql stop {Mysql-service stoppen}
/bin/cp -R -f /var/lib/mysql/moodle/* /test {Kopieer de moodle-database-files als extra copy}
rm -f /var/lib/mysql/moodle/* {verwijder de verkeerde versie van de database}
mysql -u root -p {Mysql-prompt starten}
use moodle; {Moodle-database gebruiken}
\. /test/restore/moodle-backup.sql; {importeer de backup-sql-file}
quit {Moodle-prompt stoppen}
/bin/cp -R -f /test/moodle1.1.1/* /var/lib/html/moodle {de 1.1.1-scripts terug kopieren}
/sbin/service/mysql start {Mysql-service weer starten}
Nu bleek (na een wel succesvolle update) dat ik ook de php-memory-limit (Zie de Moodle-faq online over memory_limit in php.ini) moest ophogen van 8 Mb naar 16 Mb.
Wij gaan (na tests met pop3-authenticatie) authenticeren via ldap; iedereen met een novell/nds-account kan dan in onze ELO. En hoewel secureforms al mooi is, willen we toch naar https i.p.v. http... vanwege de nds-passwords is https dan wel beter.
Als na een tijd de database groter is, is optimalisatie (purgen/prunen) wellicht nodig. Doe dan "mysqlcheck -o database" om de lege ruimtes te laten verdwijnen.
Misschien is portsentry als IDS en AIDE als integritychecker een idee om te gaan gebruiken, naast de al genomen maatregelen buiten de ELO zelf.
Https werkt wel, maar heeft toch bepaalde nadelen. Word-docs hebben afwijkende certificaten in zich. En voor de snelheid is http ook prettiger. Inloggen op de elo-server met http. En alleen voor het inlog-scherm https. Dat kan zo...
http://moodle.org/mod/forum/discuss.php?d=3707#20903
Using this theoretical $CFG->loginpage that points to the https://... version would ....
in login/index_form.html:
<form action="<?php echo $CFG->loginpage ?>/login/index.php" method="post" name="form" id="form">
instead of:
<form action="index.php" method="post" name="form" id="form">
be the correct place to ensure a secure login?
Of course for this to work cleanly secureforms would need to be switched off which might defeat the purpose somewhat.
Voor de eerste form-action in login/index_form.html doe je dat dan...
<form action="https://elo.raayland2.nl/moodle/login/index.php" method="post" name="form" id="form">
Bovenstaande tip zou in versie 1.4 opgelost zijn door de setting loginhttps in config.php. Maar nogal eens werkt ie niet of is de keuze in de beheer-module niet te kiezen. In versie1.4+ (nightly stable) werkte het niet. Nu blijft bovenstaande tip wel gewoon werken!
Hoe meer ruimte te krijgen voor gebruikers-bestanden in Moodle.... Bij ons zijn de volumes zgn ext3-linux-partities. Deze resizen na een grotere harddisk (ter vervanging) ligt voor de hand.
Ik heb dus maar het eea nagezocht over ext3-partities resizen. Ext3 is een traditioneel ext2-volume maar dan met journaling. Wil je ext3 resizen, dan moet je journaling er tijdelijk af halen, ext2 resizen en journaling er weer op zetten. Tricky.
En ext2 resizen is op zich niet erg lastig, maar wel als het om tussenliggende partities gaat. Dan is het een heel gedoe... eerst partities opschuiven en dan de bewuste partitie resizen. Ook via Knoppix en gtparted is dat een lastige klus, die men meestal ontwijkt....
Wat meestal gedaan wordt is een extra volume maken en dat linken in een map op het volume wat je eigenlijk wilde vergroten. Als user lijkt het dan of je partitie/volume dan groter geworden is. Het effect is dus bereikt.
Je wilt bijvoorbeeld voor Moodle meer data kwijt in /usr/moodle_data, dan maak je een extra volume (m_data bijvoorbeeld) en linkt dat volume als moodle_data in /usr. Even van tevoren de map moodle_data backuppen en later terug zetten. Dit is dan ook de methode die ik adviseer uit te voeren. Het kan bijvoorbeeld zo (waarbij /dev/hda7 een nieuwe partitie is):
# cd /usr
# mv moodle_data moodle_data_old
# mkdir /usr/moodle_data
# cfdisk (via rpmfind.net (cfdisk en libcurs4); maak partitie /dev/hda7 idg)
# reboot (ja, ja... moet voor partities)
# mkfs -t ext3 /dev/hda7
# e2label /dev/hda7 /m_data
# mcedit /etc/fstab (voeg mount-point toe; zoals /usr of /var)
# mount /m_data
# mkdir /m_data/moodle_data
# ln -s /m_data/moodle_data /usr
# chmod 777 /usr/moodle_data
# /bin/cp -R -f /usr/moodle_data_old/* /usr/moodle_data
Later upgraden van RedHat8 naar Fedora (bijvoorbeeld Fedora Core2)? Kijk eens naar deze docs.
Inmiddels draaien we alweer Moodle1.5.1. Naast veel nieuwe features (gezipt is Moodle ruim 2 keer zo groot) vallen een paar dingen op voor de beheerder. Er is een zgn. onderhoudsmodus voor updates. Verder kan de Https-logon nu eenvoudig aan/uit. Ik gebruik de oude methode echter zoals hierboven beschreven om mezelf niet uit te sluiten bij Moodle. Ook kun je nu meer authenticatietypes door elkaar gebruiken. Ook PAM. Iets wat ons in de weg zat was het niet kunnen wijzigen van passwords voor (externe) users. Change-password voor niet ldap-users: kan nu via http://site/moodle/login/change_password.php. Maak hier een aparte pagina van: handig!
door MrLeeJohn