O Owncloud é um serviço web para armazenamento e compartilhamento de arquivos similar ao Dropbox ou Google Drive. O principal diferencial do Owncloud é que ele pode ser implementado de forma privada. Por ser um software de código aberto qualquer pessoa ou empresa pode baixar e instalar na sua estrutura e ficar responsável pelos dados e pelo funcionamento do serviço. É baseado no conceito de "computação em nuvem" ("cloud computing").
A implementação típica do owncloud provê um servidor web rodando os serviços e armazenando os arquivos. A ideia do trabalho é utilizar dessa ferramenta para implementar um serviço de armazenamento de arquivos descentralizado e utilizar a internet para sincronizar os arquivos em locais diferentes.
Essa implementação traria alguns benefícios:
1. Redundância geográfica dos arquivos
2. Melhor velocidade de upload e download em diferentes locais(quando conectado a rede local)
3. Alta disponibilidade
Outro diferencial do projeto é a utilização de raspberry pi(computadores baratos do tamanho de um cartão de crédito e que consomem pouca energia) como servidores rodando as aplicações necessárias a implementação. O armazenamento fica a cargo de HD's externos conectados aos raspberry pi. Esta implementação tornasse viável e interessante para que pessoas comuns configurem e instalem nas casas de parentes próximos, podendo compartilhar os arquivos, como por exemplo fotos, músicas e filmes, de maneira fácil.
2 Desenvolvimento:
3 Implementação:
3.1 Principais ferramentas adicionais utilizadas
Maria-DB: MariaDB é um banco de dados que surgiu como fork do MySQL, criado pelo próprio fundador do projeto após sua aquisição pela Oracle. O owncloud requer um banco de dados onde são guardados os usuários criados, as configurações de usuário e os índices para os arquivos salvos.
Galera: O galera implementa um cluster de banco de dados síncrono multi-mestre disponibilizando uma alta disponibilidade de banco de dados. Ou seja, quando o Galera Cluster está em uso, podemos direcionar a leitura e gravação em qualquer nó, e qualquer nó individual pode ficar indisponível sem interrupção nas operações. Como o projeto é implementar o Owncloud de forma distribuida se faz necessário a utilização de um cluster de banco de dados.
Csync2: é um cluster de arquivos, um cliente bidirecional para sincronizar arquivos. A principal diferença para o Rsync por exemplo é a bidirecionalidade, ou seja, no rsync se alguém apaga um arquivo em um dos nós ele é resincronizado, e no csync2 reconhece ele apaga nos outros nós.
Raspberry Pi é um computador do tamanho de um cartão de crédito, que se conecta a um monitor de computador ou TV, e usa um teclado e um mouse padrão, desenvolvido no Reino Unido pela Fundação Raspberry Pi. Todo o hardware é integrado numa única placa. O principal objetivo é promover o ensino em Ciência da Computação básica em escolas.
Os passos abaixo devem ser feitos em todas os nós da implementação
Vai pedir senha do banco, por garantia coloque a mesma senha em todos.
Modificar o arquivo /etc/hosts para colocar o ip e nome de todas as maquinas, por exemplo:
192.168.15.228 debian1
192.168.15.229 debian2
192.168.15.230 debian3
</syntaxhighlight>
Crie e edite o arquivo /etc/mysql/conf.d/galera.cnf com o conteúdo:
[mysqld]
Pare o serviço mysql em todos os nós:
debian1 # systemctl stop mysql
debian2 # systemctl stop mysql
debian3 # systemctl stop mysqllmente
</syntaxhighlight>
Os passos abaixo devem ser feitos somente em um dos nós:
Copie o conteúdo de /etc/mysql/debian.cnf do primeiro nó para os outros para que todos fiquem com o mesmo conteúdo.
Crie e inicie o cluste:
debian1# galera_new_cluster
</syntaxhighlight>
Verifique a quantidade de usuários no cluster com o comando(irá pedir a senha do banco):
mysql -u root -p -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"'
</syntaxhighlight>
Inicie os serviços mysql nos outros nós e verifique com o comando acima se estão entrando no cluster.
systemctl start mysql
</syntaxhighlight>
Deverá aparecer algo como isso(em caso de 3 nós):
+--------------+
| cluster size |
+--------------+
| 3 |
+--------------+
</syntaxhighlight>
Criando o banco para o Owncloud(como o banco já estão sendo replicado só é necessários digitar os passos abaixo em um deles):
Digite o comando abaixo para entrar no modo de edição do banco(pedirá a senha do banco):
mysql -uroot -p</syntaxhighlight>
Dentro digite:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE IF NOT EXISTS owncloud;
GRANT ALL PRIVILEGES ON owncloud.* TO 'username'@'localhost' IDENTIFIED BY 'password';
quit
</syntaxhighlight>
Configurando o csync2:
Criar os certificados com os comandos abaixo em todas as maquinas:
openssl genrsa -out /etc/csync2_ssl_key.pem 1024
openssl req -new -key /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.csr
openssl x509 -req -days 600 -in /etc/csync2_ssl_cert.csr -signkey /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.pem
</syntaxhighlight>
Obs: não preencha as informações pedidas(Common Name (CN)...), somente dê enter.
Crie a pasta /etc/csync2 em todos os nós:
mkdir /etc/csync2</syntaxhighlight>
Gere uma chave em um dos nós e copie para os outros:
csync2 -k /etc/csync2/exemplo.key