GARE: Erro “Não está inscrito nesta disciplina” quando o utilizador é aluno da disciplina

Existem duas possibilidades para este erro ocorrer.

1. Nos cargos globais do Moodle as permissões estão modificadas ou não têm valores os valores por defeito.

2. Na tabela de contextos (mdl_context) a path está corrompida e os contextos estão trocados. Por exemplo, um módulo pode ter na path contextos de outras categorias ou outras disciplinas. Neste caso é necessário forçar a reconstrução da tabela de contextos.
Ver aqui como se faz: http://docs.moodle.org/19/en/How_to_rebuild_context_paths

Moodle erro enrol ao fazer login

No meu caso acontecia porque activaram todos os plugins de autenticação das disciplinas.

“This seems to be a issue with course enrollment plugin. One of the enrolment plugins the Course -> Enrolments caused this issue for me. I just unchecked the plugin and it worked for me. But I havent figured out why that happens .”

http://moodle.org/mod/forum/discuss.php?d=122491&parent=649056

Users não conseguem fazer login

No meu caso este era o meu problema:
“Check the value of mnet_localhost_id in the mdl_config database table. It’s normally 1 but must match the mnet_hostid field in your user records in the mdl_user table for the user to be recognised. It can sometimes get changed spuriously during upgrades or site migrations.”

Bastou mudar no mdl_config a opção de 3 para 1 e voilá!

http://docs.moodle.org/23/en/Installation_FAQ#I_can.27t_log_in_-_I_just_stay_stuck_on_the_login_screen

MySQL: Replicação Master-Slave no CentOS 6

Master Server: 192.168.22.56
Slave Server: 192.168.22.73
MySQL Data path: /var/lib/mysql
MySQL slave user named slave_user

[Master]

Configurar o servidor Master.

# vim /etc/my.cnf

# [mysqld] section
# Start Modification
# First line is probably already there
datadir = /var/lib/mysql
server-id = 1
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/var/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin
# Stop Modification

Reiniciar o MySQL para carregar as alterações

# service mysqld restart

[Slave]

A mesma coisa para o servidor Slave

# vim /etc/my.cnf

# [mysqld] section
# Start Modification
# First line is probably already there
datadir = /var/lib/mysql
server-id = 2
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/var/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
# Stop Modification

Reiniciar o MySQL para carregar as alterações

# service mysqld restart

[Master]

Vamos criar o utilizador que vai ser usado na replicação e dar-lhe as permissões. Neste caso permitimos a replicação a partir de qualquer host mas poderia ser limitado.

# mysql -u root -p
mysql> STOP SLAVE;
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'slave_password';
mysql> FLUSH PRIVILEGES;

Agora vamos bloquear a escrita nas tabelas e obter a posição do log de onde o Slave vai começar a replicar.

mysql> USE mysql; # pode ser qualquer base de dados
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | POSITION | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      334 |              |                  |
+------------------+----------+--------------+------------------+
1 ROW IN SET (0.00 sec)

[Slave]

Vamos então configurar o Slave para ler o log do Master, a começar na posição que vimos em cima.

mysql> CHANGE MASTER TO MASTER_HOST='192.168.22.56', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=334;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G;

Basta confirmar que as variáveis de saída têm estes valores:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

 

Se não conseguirem que os servidores comuniquem (a variável Slave_IO_Running estará a No, a Slave_IO_State apresenta uma tentativa de ligação e o ERROR apresenta uma mensagem de ligação falhada) então provavelmente falta abrir a porta do MySQL na firewall.

# iptables -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT

 

Para quem usar hostnames em vez de IPs, no caso de mudar de hostname poderá ter que fazer FLUSH HOSTS em ambos os servidores. No caso de usarem o ficheiro /etc/hosts então é certo que têm que o fazer.

Prevenir ataques DDoS com Apache mod_evasive

# yum install httpd-devel
# yum install mod_evasive

* É necessário ativar o repositório EPEL

Reinicia-se o Apache para ativar o módulo

# /etc/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]

Verificar que o módulo está ativo

# php -r 'phpinfo();' | grep -i evasive
^ Loaded Modules | core prefork http_core mod_so mod_auth_basic mod_auth_digest mod_authn_file mod_authn_alias mod_authn_anon mod_authn_dbm mod_authn_default mod_authz_host mod_authz_user mod_authz_owner mod_authz_groupfile mod_authz_dbm mod_authz_default util_ldap mod_authnz_ldap mod_include mod_log_config mod_logio mod_env mod_ext_filter mod_mime_magic mod_expires mod_deflate
mod_headers mod_usertrack mod_setenvif mod_mime mod_dav mod_status mod_autoindex mod_info mod_dav_fs mod_vhost_alias mod_negotiation mod_dir mod_actions mod_speling mod_userdir mod_alias mod_rewrite mod_proxy mod_proxy_balancer mod_proxy_ftp mod_proxy_http mod_proxy_connect mod_cache mod_suexec mod_disk_cache mod_file_cache mod_mem_cache mod_cgi mod_version mod_evasive20 mod_perl mod_php5 mod_proxy_ajp mod_python mod_ssl |

Agora vamos configurar o módulo. Esta é a configuração que estou a testar de momento, parece funcionar bem mesmo num servidor partilhado com muitos acessos.

Editar o ficheiro /etc/httpd/conf.d/mod_evasive.conf:

<IfModule mod_evasive20.c>
   DOSHashTableSize 3097
   DOSPageCount 6
   DOSSiteCount 100
   DOSPageInterval 2
   DOSSiteInterval 2
   DOSBlockingPeriod 600
</IfModule>

Reinicia-se novamente o Apache para recarregar as configurações:

# /etc/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]

Moodle: DragMath não funciona no Windows XP

Em vários sites o DragMath não funcionava quando se acedia através do Windows XP. Depois de muitas voltas, dei conta que o applet estava a ser bloqueado pelo mod_security. Na lista de robots existia uma string “windows xp 5” e o header do cliente era “Mozilla/4.0 (Windows XP 5.1) Java/1.7.0_04”.

Consegui dar com o problema porque reparei que os acessos ao .jar e ao .applet estavam a ser devolvidos com 403.

ModSecurity: Access denied with code 403 (phase 2). Matched phrase "windows xp 5" at REQUEST_HEADERS:User-Agent. [file "/etc/httpd/modsecurity.d/base_rules/modsecurity_crs_35_bad_robots.conf"] [line "26"] [id "990012"] [rev "2.1.2"] [msg "Rogue web site crawler"] [data "windows xp 5"] [severity "WARNING"] [tag "AUTOMATION/MALICIOUS"] [tag "WASCTC/WASC-21"] [tag "OWASP_TOP_10/A7"] [tag "PCI/6.5.10"] [hostname "xxxx.pt"] [uri "/lib/DragMath/applet/Display/MainApplet/class.class"]

Para resolver isto tive que alterar o ficheiro /etc/httpd/modsecurity.d/base_rules/modsecurity_35_bad_robots.data e eliminar a linha com a string “windows xp 5”.