Install and configure moodle in CentOS 6.3 with video streaming and recording

Moodle is a E-learning platform free as in free beer. Moodle is a CMS (Course Management System) and also known as a LMS (Learning Management System) or a VLE (Virtual Learning Environment).

I was in need to install a configure a system like this and I’ve chosen Moodle not also because is one of the best out there, but because is also free.

One of the key features that i was also needing was a video streaming and recording facility.  Moodle has it all (through plugins).

What I’m going to describe here is an installation of Moodle from the very beginning:

How to connect Android (ICS and JB) to Linux for file access

Since Android switch from mass storage to MTP, it’s being hard to connect an Android phone to Linux and use it to browse files. I had that problem every single day, having to resort to another choices.

I’ve tried this on Gentoo Linux and Ubuntu 12.04, but I guess it should work on any distribution.

Since using mass storage, two partitions cannot be mounted simultaneously, Android developers switch to MTP. Here’s a better explanation

Some parts of this tutorial have been borrowed from here:

Most credits should go to Bilal Akhtar (from

What I’ve did was taken a step further. Since udev can execute scripts automatically, why not use udev to manage most of the operations?

Note: unless specified, all commands are to be run as the root user (or if you use sudo, just prepend sudo to the commands)

Install packages

For this to work, we’ll rely on fuse and libmtp


apt-get install mtp-tools mtpfs


emerge -av sys-fs/fuse sys-fs/mtpfs media-libs/libmtp

Go to /media (or /mnt) and create a folder with a relevant name for the device

cd /media

mkdir AsusFT201

We’re doing this because udev only knows about the removed device when you actually remove it and that’s is not good to remove the device without first umount it. Here’re going with Bilal Akhtar solution (references in the bottom of the document) and have an alias to umount the device

Now, on the computer, run the following command:

tail -f /var/log/messages (or tail -f /var/logo/syslog on Ubuntu)

Now connect your device to the computer. In your device, make sure to select “Media device (MTP)”

The kernel messages after connecting the device:

Oct 8 16:43:27 nightraider kernel: [ 5263.446971] usb 1-3: default language 0x0409
Oct 8 16:43:27 nightraider kernel: [ 5263.447477] usb 1-3: udev 11, busnum 1, minor = 10
Oct 8 16:43:27 nightraider kernel: [ 5263.447479] usb 1-3: New USB device found, idVendor=04e8, idProduct=6860
Oct 8 16:43:27 nightraider kernel: [ 5263.447481] usb 1-3: New USB device strings: Mfr=2, Product=3, SerialNumber=4
Oct 8 16:43:27 nightraider kernel: [ 5263.447483] usb 1-3: Product: SAMSUNG_Android
Oct 8 16:43:27 nightraider kernel: [ 5263.447484] usb 1-3: Manufacturer: SAMSUNG
Oct 8 16:43:27 nightraider kernel: [ 5263.447486] usb 1-3: SerialNumber: 111X1111XY11111Z
Oct 8 16:43:27 nightraider kernel: [ 5263.447552] usb 1-3: usb_probe_device
Oct 8 16:43:27 nightraider kernel: [ 5263.447555] usb 1-3: configuration #1 chosen from 2 choices

SerialNumber is the line we’re looking for.

With this value, let’s create the udev rules.

create the following file:

(I use vi, you can use emacs or gedit. Still, you don’t know what you’re missing by not trying vi)

vi /etc/udev/rules.d/81-android.rules

Read here why the file is called 81-android.rules

and add the following lines (replace 111X1111XY11111Z with the serial with your device):

SUBSYSTEM==”usb”, ATTRS{serial}==”111X1111XY11111Z”, MODE=”0666″, GROUP=”plugdev”, SYMLINK+=”AndroidPhone”, RUN+=”/usr/bin/mtpfs -o allow_other /media/ AsusFT201″


The full path of the commands is necessary. Read the udev manual for more information

I went with serial because it is unique and I’ve seen the idDevice change in the same computer. – can someone confirm if this is possible ?

Now save and quit the editor.

Reload the udev rules:

udevadm control –reload-rules

Now, edit /etc/fuse.conf and remove the comment from the last line (just delete the ‘#’)





Add yourself to the fuse group (if not already)

To find out, type:

id (as your user)

uid=1000(username) gid=1000(username) groups=1000(username),4(adm),24(cdrom),27(sudo),29(audio),30(dip),44(video),46(plugdev),60(games),105(fuse),109(scanner),111(lpadmin),115(netdev),124(sambashare),1012(sharing),1013(bumblebee)

If you don’t have the group in your list, just run the following command:

gpasswd -a <your_username> fuse
Adding user <your_username> to group fuse

On Gentoo you need to add your user to the group disk

The command is the same, just replace fuse with disk

You need to logout and login again for it to take effect (if not in the group)

After that, just plug your device and wait a bit. I’m saying wait a bit because for me, my phone (with ICS) and my tablet (with JB) take a while to mount. Don’t know why. This happens in both distributions.


To unmount the device, just edit your .bashrc file (in your home) and add the following lines:

vi ~/.bashrc

Give it the name you want – replace android-disconnect

alias android-disconnect=”fusermount -u /media/AsusFT201″

Save and quit

Now, execute the command:

source ~/.bashrc

Now you can remove the device issuing the command android-disconnect


Gnome 3 open with custom applications

Gnome 3 is an excellent piece of software ! Is just amazing, but lacks some things. In gnome 2, when we wanted to open an file with an application not in the menu, we could use “Open With” and choose an application – All in graphic mode.

Well, in gnome 3, that’s not possible (at least, after searching a lot, could not find) –


If we choose “Open With Other Application”, we get the “Recommended Applications” and we can choose “Show other Applications”, but the application does not appear.

So, how can we add an application not in the list ?

I want to open AVI files with mplayer and not with Totem. So we get to the command line. Using mimeopen, we can set the default application for files:


Using the -d parameter, we set the default application. The application asks for the application to open, and we can choose “3) Other” and is done.

Instalar Koha 3.00.06 em Centos 5.5

install koha-3.00.06 on Centos 5.5

Koha é um ILS (Integrated Library System – Sistema de Gestão de Bibliotecas) gratuito e Open Source. É usado em todo o mundo, demonstrando a sua robustez.

Sendo todo baseado em PERL, não é dificil de instalar, mas tem muitas dependências e o processo é demorado.

Activar repositórios necessários


rpm -ivh rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm

Repositórios Opcionais – Não necessárias à instalação do Koha

O Repositório EPEL (Extra Packages for Enterprise Linux) é um repositório construído por voluntários do projecto do Fedora para criar um repositório de pacotes adicionais de grande qualidade que complementa o Red Hat Enterprise Linux e distribuições compatíveis (tipo o CentOS). Este repositório fornece muitos pacotes para CentOS/RHEL, que não são parte dos repositórios oficiais, mas que são desenhados para trabalhar com estas distribuições.

rpm -ivh epel-release-5-4.noarch.rpm

Verificar repositorios

yum repolist

Instalar o plugin yum-priorities

yum install yum-priorities

Este plugin vai-nos permitir definir prioridades nos repositorios para evitar problemas com actualizações e preferências ao instalar determinados pacotes

editar o ficheiro /etc/yum/pluginconf.d/priorities.conf e verificar que está activado
enabled = 1

A cada repositorio, adicionamos (ou configuramos) a prioridade, de 1 a 99.
priority=N (mais pequeno, mais prioritario)

Definições recomendadas são:
Mirrors do Centos [base], [addons], [updates], [extras] com priority=1
[contrib] .. priority=2

Repositorios de terceiros, superior a 10

Antes de se começar a instalar o koha propriamente dito, é necessário ter algumas aplicações necessárias instaladas.

HTTP SERVER – Servidor Web

yum install httpd

configurem o apache como desejarem

vim /etc/httpd/conf/httpd.conf

Adicionem o apache aos serviços de arranque
chkconfig --levels 345 httpd on

Base de dados – MySQL

yum install mysql-server

Adicionar ao arranque
chkconfig --levels 345 mysqld on

Configurar o Mysql
/etc/init.d/mysqld start


Criar a base de dados para o koha
mysql -uroot -p
create database koha;
create user 'kohaadmin'@'localhost' identified by '<password>';
grant select, insert, update, delete, create, drop, alter, lock tables on koha.* to  'kohaadmin'@'localhost';
flush privileges;

Instalar o memcached

O memcached (que é usado pelo koha, se instalado) é um sistema de distribuição de objectos em memória, de alta-performance.

Por problemas com o pacote perl-Net-SSLeavy, temos que o instalar à mão. O que está disponivel (e instalado) é a versão 1.30 e precisamos pelo menos da versão 1.33.
Remover o anterior
yum remove perl-Net-SSLeay

rpm -ivh perl-Net-SSLeay-1.36-1.el5.rfx.x86_64.rpm

Instalar o memcached e adicionar ao arranque da máquina

yum install memcached

/etc/init.d/memcached start
chkconfig --levels 345 memcached on

O memcached corre no porto 11211
Para verificar definições:

echo "stats settings" | nc localhost 11211
STAT maxbytes 67108864
STAT maxconns 1024
STAT tcpport 11211
STAT udpport 11211
STAT verbosity 0
STAT oldest 0
STAT evictions on
STAT domain_socket NULL
STAT umask 700
STAT growth_factor 1.25
STAT chunk_size 48
STAT num_threads 4
STAT stat_key_prefix :
STAT detail_enabled no
STAT reqs_per_event 20
STAT cas_enabled yes
STAT tcp_backlog 1024
STAT binding_protocol auto-negotiate
STAT auth_enabled_sasl no
STAT item_size_max 1048576

Mais informações no site do memcached

Instalar Zebra Utilities

Necessario gcc e automake
yum install gcc (retira as dependencias necessarias)

Instalar aplicacoes necessarias
yum install bison libxml2-devel libxslt-devel libicu-devel tcl-devel libxlt-devel expat-devel

Efectuar o download da aplicacao YAZ

tar -zxvf yaz-4.1.1.tar.gz
cd yaz-4.1.1.tar.gz
make install

cd idzebra-2.0.44
make install

Adicionar utilizador e grupo koha

group add koha
useradd -d /usr/share/koha -g koha -s /bin/false koha

Dependencias do KOHA

DBI 1.53

Agora temos duas opcoes – Segundo o INSTALL do koha, podemos executar o ficheiro perl e ele instala todas as dependencias via CPAN, ou instalamos manualmente:

Os que podemos instalar via yum:

yum install -y perl-Algorithm-CheckDigits perl-CGI-Session perl-Class-Accessor perl-Class-Factory-Util perl-DBD-MySQL perl-Data-ICal perl-Date-Calc perl-Date-Manip perl-Date-ICal perl-Digest-SHA perl-Email-Date perl-GD perl-GD-Barcode perl-List-MoreUtils perl-Lingua-Stem perl-IPC-Cmd perl-HTML-Template perl-HTML-Template-Pro perl-HTML-Scrubber perl-Mail-Sendmail perl-MARC-Record perl-MIME-Lite perl-PDF-API2 perl-Schedule-At perl-POE perl-Text-CSV perl-Text-CSV_XS perl-Text-Iconv perl-XML-Dumper perl-XML-LibXML perl-XML-LibXSLT perl-XML-RSS perl-XML-SAX-Writer perl-YAML-Syck

NOTE: O koha posteriormente queixa-se das versoes instaladas: Aqui ficam algumas actualizacoes:


rpm -Uvh perl-DBI-1.616-1.el5.rfx.i386.rpm

rpm -Uvh perl-DBD-MySQL-4.014-1.el5.rfx.x86_64.rpm

Os restantes, instalamos via CPAN
perl -MCPAN -e shell

install Biblio::EndnoteStyle
install CGI::Session::Serialize::yaml
install HTTP::OAI
install DBI (apesar de estar disponivel pelo yum, o koha queixou-se)
install MARC::Charset MARC::Crosswalk::DublinCore
install MARC::File::XML
install Net::LDAP::Filter
install PDF::API2::Page PDF::API2::Util
install PDF::Reuse PDF::Reuse::Barcode
install SMS::Send
install Text::CSV::Encoded
install XML::Simple

O ZOOM corre bem (compilação é efectuada), mas falha nos testes e não instala. Podemos forcar a instalação com o seguinte comando:
force install Net::Z3950::ZOOM

tar -zxvf koha-3.00.06-all-translations.tar.gz (ou seja qual o nome do vosso ficheiro)
cd koha-3.00.06

perl Makefile.PL
Responder a questoes colocadas pelo ficheiro de instalacao.
Eu fiz assim:

Installation mode - Standard
Base installation directory - /usr/share/koha
User Account - koha
Group - koha
DBMS - Mysql
Database server - localhost
DMBS - 3306
Name of Database (criado em cima) - koha
Username - kohaadmin
password - <password>
Install zebra configuration files - yes
MARC Format for zebra indexing - <depende da vossa biblioteca>
Primary language - en
Authorities indexing mode - dom (mais recente, mais rapido)
Zebra database user - kohauser
zebra database password - zebrastripes
SRU cinfiguration files - yes
SRU database host - localhost
SRU port for bibliographic data - 9998
SRU port for authority data - 9999
PazPar2 - yes
Zebra bibliographic server host - localhost
PazPar2 port - 11001
PazPar2 host - localhost
PazPar2 port - 11002
Database test suit - no

O koha a seguir mostra as dependencias do perl que ainda nao estejam satisfeitas.
No meu caso, ele queixa-se do DBI que não encontra… mas ele está instalado.

make install

Seguindamente, a instalação pede-nos para definirmos duas variáveis de ambiente. O melhor local para as colocar será em /etc/profile

vi /etc/profile e acrescentar:

export KOHA_CONF=/etc/koha/koha-conf.xml
export PERL5LIB=/usr/share/koha/lib

Para as definir imediatamente, executem
source /etc/profile

Para definir as configurações para o servidor do koha

ln -s /etc/koha/koha-httpd.conf /etc/httpd/conf.d/

Para o koha funcionar bem, precisamos que o apache tenha o mod_rewrite activado. Para verificar,

grep mod_rewrite /etc/httpd/conf/httpd.conf

e tem que aparecer a seguinte linha:
LoadModule rewrite_module modules/
Editar o ficheiro /etc/httpd/conf/httpd.conf e acrescentar:

(manter a linha Listen 80)
Listen 8080

Reiniciamos o apache
/etc/init.d/httpd restart

Servicos Zebra

Agora, temos que arrancar com o zebrasrv, mas vamos colocar em background (daemon mode):
zebrasrv -D -f /etc/koha/koha-conf.xml
e vamo-nos certificar que inicia sempre que efectuarmos um reboot ao servidor, adicionando a seguinte linha a /etc/rc.local

echo "/usr/local/bin/zebrasrv -D -f /etc/koha/koha-conf.xml" >> /etc/rc.local

Para finalizar, navegar ate:
http://<vosso_servidor_koha>:8080/ e finalizar a instalação


O Koha mantem os logs em /var/log/koha. Se tiverem algum problema sera aqui que devem comecar a verificar a origem do mesmo.

Dependências de PERL
Se o koha se queixar de algum problemad de dependências, verifiquem se foi instalado o pacote do qual ele se queixa por RPM.
rpm -qa | grep -i <pacote | parte do nome>
Se obtiverem resultados, significa que foi instalado por RPM.
Neste caso, instalem o mesmo pacote pelo CPAN.


Replicação entre servidores MySQL

MySQL é uma das base de dados Open Source mais utilizadas no mundo. 

Este tutorial vai mostrar como criar um servidor de replicação do MySQL.

A replicação no MySQL permite que tenhamos um ou mais servidores exactamente iguais.

Nota: A replicação não é nenhum processo de Backup. Tudo o que for efectuado no servidor Master será imediatamente replicado para o servidor Slave.

Vamos mostrar como replicar uma base de dados (exemplodb) já existente no master para o servidor slave.

Configurar o Master


Agora, vamos entrar no MySQL e criar um utilizador para replicação

mysql -uroot -p

grant replication slave on *.* to '<utilizador_replicacao>'@'%' identified by '<password>';

flush privileges;

Seguidamente, configurar o servidor para a replicação:

Editar o ficheiro /etc/my.cnf para activar a funcionalidade de network no MySQL. Se as seguintes linhas existirem, têm que as comentar:


#bind-address            =

Seguidamente, temos que indicar ao MySQL para que base de dados deve escrever logs,  (estes logs vão permitir ao servidor slave verificar o que se passa no servidor Master),  que ficheiro usar para os escrever e indicar que este servidor é o Master.

Relativamente aos logs, eu gosto de os manter separados, assim, criei uma directoria em /var/logs chamada mysqld.

cd /var/log

mkdir mysqld

chown mysql:mysql -R mysqld

Novamente, editamos o ficheiro /etc/my.cnf e acrescentamos as seguintes linhas na zona [mysqld]:




Guardamos e reiniciamos o servidor Master.

/etc/init.d/mysqld restart

Neste momento, ja temos o MySQL a criar logs binários.

Configuração Slave

No servidor slave, vamos editar o ficheiro /etc/my.cnf e na secção [mysqld]:



master-host= <tambem podem user o hostname>


master-user=utilizador_replicacao (criado em cima)






Agora, reiniciem o serviço:
/etc/init.d/mysqld restart

Inserir os dados no SLAVE

No servidor Master

Assumindo que têm um slave vazio. Se o servidor master estiver constantemente a ser acedido, temos que prevenir o acesso às tabelas antes de as replicar. Se não houver dados a serem acedidos no servidor, podem passar este passo.

mysql -uroot -p

mysql> flush tables with read lock;

Agora, iremos usar o mysqldump para retirar os dados:

mysqldump -uroot -p exemplodb > exemplodb.sql

Copiem o ficheiro exemplodb.sql para o servidor slave.


No servidor Slave

mysql -uroot -p

create database exemplodb

mysql -uroot -p -D exemplodb < exemplodb.sql


Colocar a replicação a funcionar

A partir deste momento, estamos prontos para colocar os servidores a replicar

No servidor Master

mysql -uroot -p

Precisamos de saber qual a posição nos logs onde o master está:

mysql> show master status;


| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |


| mysqld-bin.000001 |       98 | exemplodb     |                 | 


Escreva a informacao em cima, vamos precisar dela para o servidor slave. Esta informação vai permitir saber desde quando o servidor slave vai replicar os dados. Se não colocarmos esta informação, só começa a replicar a partir do momento que o slave iniciar.

mysql> quit;

No servidor Slave

mysql -uroot -p

Agora vamos parar o slave e indicar-lhe exactamente onde procurar no log do servidor master. Usamos os valores do resultado anterior no servidor Master.

slave stop

change master to master_host='', master_user='utilizador_replicacao', master_password='password', master_log_file='mysqld-bin.000001', master_log_pos=98;

slave start



master_host : o endereço (ou hostname) do servidor Master
master_user : o utilizador criado em cima para efectuar a replicação
master_password : a password dada ao utilizador em cima
master_log_file : o ficheiro visto em cima quando vimos o status do master
master_log_pos : o valor também mostrado na tabela vista em cima.

O servidor Slave vai agora ficar à espera de alterações, mas antes, ainda existe uma coisa a fazer.

De volta ao Master

mysql -uroot -p

unlock tables;

Nota: Só é preciso efectuar o comando em cima se foi efectuado o comando FLUSH TABLES WITH READ LOCK;


O manual do Mysql indica que, se as tabelas forem InnoDB, que se devem adicionar os seguintes parâmetros ao my.cnf, em [mysqld]:


Pronto. Neste momento todos os dados do Master já se encontram no slave. Qualquer alteração efectuada no Master será replicada para o slave. Atenção, isto é válido para qualquer comando, até drop. Como foi dito no inicio, a replicação não é uma forma de bakcup.


Open Source Development


o programa DB2 on Campus é um projecto da IBM para promover o uso do DB2 em universidades. Ao abrigo deste programa muita informação é disponibilizada e consequentemente, livros.

Para quem está interessado em aprender novos temas e aprofundar alguns conhecimentos, a IBM disponibiliza no wiki da DB2 on Campus alguns livros gratuitos sobre os mais variados temas, não só sobre o DB2.

Foi nesse espaço que encontrei este livro: Open Source Development. Achei este livro muito interessante porque fala de assuntos de forma objectiva e simples que abordei na cadeira de Engenharia de Software durante o meu mestrado em MOSS.

A IBM é uma das grande pioneiras do Open Source, disponibilizando muitos recursos online e gratuitos.

Um desses casos são os redbooks e o site developerWorks.

Deviam explorar.