Já fizemos muitos elogios aqui no blog ao Dropbox. Desde que escrevemos o primeiro artigo sobre ele muitas outras opções de disco virtual surgiram, mas ainda é a minha favorita. Só tem um defeito: eu acho um serviço caro. Custava, quando este artigo foi escrito, US$ 9,99 por mês ou US$ 99,00 por ano por 1 TB de espaço.
Procurando alternativas DIY, achei uma chamada OwnCloud, um software para você criar um Dropbox só seu. O software usa LAMP e é relativamente fácil de implementar. Possui a maior parte dos recursos do Dropbox e construir uma solução deste tipo é divertido, pelo menos para mim 😉
Agora vamos mostrar como usar o Owncloud, um Raspberry Pi e um HD externo para criar uma solução elegante de disco virtual. Você poderá usar a feature Camera Uploads que o Dropbox possui!
- Compre um Raspberry PI, pode ser o modelo B mesmo (com duas portas USB). Tenha uma boa fonte, cartão de pelo menos 8 GB, um case e um dissipador para o processador. Eu prefiro conectar o Raspberry PI usando cabo de rede mesmo, sem dongles WiFi.
- Instale o Raspbian, a imagem está aqui e tem um tutorial de instalação aqui.
- Redefina a senha de root (sudo passwd e digite e repita a senha nova). OBSERVAÇÃO: Todos os passos abaixo deverão ser executados com o usuário root.
- Coloque um IP fixo nele (isso vai ser importante quando você quiser publicar o seu “Dropbox” na internet). Para isso abra o arquivo /etc/network/interfaces e deixe conforme abaixo:
auto lo iface lo inet loopback iface eth0 inet static address 192.168.200.131 netmask 255.255.255.0 gateway 192.168.200.1 dns-nameservers 8.8.8.8 8.8.4.4
- Desabilite a interface gráfica (no terminal digite raspi-config, escolha a opção 3 (Enable boot…), escolha a primeira opção (Console text…) e escolha Ok.
- Mude o hostname para algo criativo como… dropbox (no terminal digite raspi-config, escolha a opção 8 (Advanced Options), escolha a opção A2 Hostname, escolha Ok, digite o nome escolhido e escolha OK.
- Diminua o uso de memória pela GPU. Você não vai precisar de muita memória, pois desabilitou a interface gráfica. Eu mudei para 8 MB. (no terminal digite raspi-config, escolha a opção 8 (Advanced Options), escolha a opção A3 Memory Split, digite 8 e escolha OK.
- Desligue seu Raspberry Pi e conecte o seu HD externo. Não tente alimentar o seu HD pela USB, não vai funcionar. Existem tutoriais na internet que mandam alterar o arquivo /boot/config.txt e dizem permitir usar um HD externo de 2.5″ sem fonte. Como eu tenho um HD externo de 3.5″ eu não tenho alternativa, se quiser tentar o faça por sua conta e risco… e me conte o resultado depois 😉
- Desabilite o swap no seu cartão SD. Nós vamos habilitar o swap no HD externo, que além de ser mais rápido, potencialmente pode aumentar a durabilidade do ser cartão SD. (no terminal execute: update-rc.d -f dphys-swapfile remove)
- Desabilite as consoles de terminal adicionais, você não vai precisar delas e vai poupar um pouco de memória. (sed –i ‘/[2-6]:23:respawn:/sbin/getty 38400 tty[2-6]/s%^%#%g’ /etc/inittab)
- Particione seu HD externo. Crie 4 partições: A primeira partição de 1 GB para swap, a segunda de 30 GB para o banco de dados, a terceira para backups do banco de dados e a quarta para os dados dos arquivos. Tem um tutorial aqui de como particionar seu disco usando fdisk.
- Formate as partições do seu HD. Escolha o sistema de arquivos de sua preferência. Para os mais tradicionais EXT4 ou outro formato, caso você seja um usuário avançado de Linux. Eu e o Ericson fizemos algumas experiências interessantes usando o Btrfs, que suporta desduplicação a nível de arquivo ou a nível de blocos, o que poupa espaço. Mas a configuração é complexa e o Btrfs não é muito rápido. Não esqueça de formatar a partição de swap também. Caso você tenha seguido o layout do passo anterior os comandos para formatar serão mkswap /dev/sda1 ; mkfs.ext4 /dev/sda2 ; mkfs.ext4 /dev/sda3 ; mkfs.ext4 /dev/sda4
- Crie os pontos de montagem (no meu caso eu criei os diretórios /mnt/dbfiles /mnt/backup e /mnt/files) em inclua as entradas no /etc/fstab para a montagem no boot. Caso você tenha seguido o layout de particionamento dos passos anteriores as entradas no /etc/fstab ficarão assim:
/dev/sda1 swap swap defaults 0 0 /dev/sda2 /mnt/dbfiles ext4 defaults 1 1 /dev/sda3 /mnt/backup ext4 defaults 1 2 /dev/sda4 /mnt/files ext4 defaults 1 3
- Depois monte tudo (mount -a) e ative o swap (swapon /dev/sda1). Dê um df -h e veja como ficou. No meu caso ficou assim:
Filesystem Size Used Avail Use% Mounted on rootfs 7.1G 2.7G 4.1G 40% / /dev/root 7.1G 2.7G 4.1G 40% / devtmpfs 239M 0 239M 0% /dev tmpfs 49M 232K 49M 1% /run tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 97M 0 97M 0% /run/shm /dev/mmcblk0p1 56M 9.8M 47M 18% /boot /dev/sda2 30G 44M 28G 1% /mnt/dbfiles /dev/sda3 9.8G 23M 9.2G 1% /mnt/backup /dev/sda4 2.7T 74M 2.6T 1% /mnt/files
- Dê permissão para o Apache modificar o diretório /mnt/files (chown www-data:www-data -R /mnt/files)
- Instale os pacotes necessários para o ownCloud funcionar. (apt-get update ; apt-get install php5 php5-gd php5-mysql php5-curl php5-intl php5-mcrypt php5-imagick mysql-server mysql-client apache2)
- Enquanto instala, será pedida uma senha para o usuário root do MySQL. Se quiser deixar em branco (eu não recomendo) dê Enter.
- Quando terminar a instalação, baixe o ownCloud. (wget https://download.owncloud.org/community/owncloud-latest.tar.bz2)
- Extraia o ownCloud (tar -jxf owncloud-latest.tar.bz2 -C /var/www/)
- Dê permissão para o Apache na pasta do ownCloud. (chown -R www-data.www-data /var/www/owncloud/)
- Crie o banco de dados (mysql -u root -p). Se você definiu uma senha para o root do mysql digite-a.
- Crie um banco de dados chamado clouddb (create database clouddb;)
- Dê direito ao clouddbuser no banco de dados recém-criado. (grant all on clouddb.* to ‘clouddbuser’@’localhost’ identified by ‘oWnCl0udPass’;)
- Digite quit para sair da console do mysql.
- Crie o arquivo de configuração do apache para o ownCloud /etc/apache2/conf.d/owncloud.conf e adicione as linhas abaixo:
<IfModule mod_alias.c> Alias /owncloud /var/www/owncloud </IfModule> <Directory "/var/www/owncloud"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny allow from all </Directory>
- Agora precisamos instalar um módulo do PHP chamado Zend OpCache para acelerar o funcionamento do ownCloud. Um dos defeitos do Raspberry Pi é ter uma CPU lenta. O Zend OpCache vai “pré-compilar” os scripts do PHP em bytecodes que executam muito mais rápido, que os scripts interpretados:
- Execute: apt-get install php-pear build-essential php5-dev
- Confira qual a versão mais nova do OpCache neste site. No momento da criação deste procedimento a versão era a 7.0.4.
- Instale o OpCache. Este passo é meio demorado: pecl install zendopcache-7.0.4
- Dê um find para descobrir onde que o opcache.so foi instalado. (find / -name opcache.so). No meu caso o resultado do comando foi: /usr/lib/php5/20100525+lfs/opcache.so. Vamos usar este caminho no passo seguinte.
- Edite o arquivo /etc/php5/mods-available/opcache.ini e coloque o conteúdo abaixo. Note que no parâmetro zend_extension foi usado o caminho do opcache.so descoberto no passo anterior.
zend_extension=/usr/lib/php5/20100525+lfs/opcache.so
opcache.revalidate_freq=0 opcache.validate_timestamps=0 opcache.max_accelerated_files=7963 opcache.memory_consumption=192 opcache.interned_strings_buffer=16 opcache.fast_shutdown=1 - Crie um link simbólico para o PHP subir o OpCache na inicialização: ln -s /etc/php5/mods-available/opcache.ini /etc/php5/conf.d/20-opcache.ini
- Reinicie o apache (/etc/init.d/apache2 restart)
- Execute o comando php -v. O retorno deve ser parecido com este:
-
PHP 5.4.36-0+deb7u1 (cli) (built: Dec 31 2014 19:14:50) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies with Zend OPcache v7.0.4, Copyright (c) 1999-2014, by Zend Technologies
- Abra o Chrome ou o Firefox e digite: http://192.168.1.100/owncloud e digite as informações solicitadas:
- O nome do usuário administrador, não use admin, muito manjado.
- Digite uma senha forte. (10 caracteres, letras maiúscula e minúscula, pelo menos 1 caractere especial e pelo menos 1 número)
- Digite o caminho onde os arquivos ficarão armazenados. No nosso caso será na pasta /mnt/files
- Digite o usuário do banco de dados: clouddbuser
- A senha: oWnCl0udPass
- E finalmente o nome do banco de dados: clouddb
- Clique em Concluir configuração.
- Mova os datafiles para o hd externo:
- Pare o MySQL (/etc/init.d/mysql stop)
- Mova os arquivos e pastas do diretório /var/lib/mysql para o /mnt/dbfiles (cd /var/lib/mysql ; mv * /mnt/dbfiles)
- Altere o arquivo /etc/mysql/my.cnf o parâmetro datadir para
datadir = /mnt/dbfiles
- Altere as permissões para que o MySQL consiga modificar os arquivos (chown mysql:mysql -R /mnt/dbfiles)
- Suba o MySQL (/etc/init.d/mysql start)
- Inclua no cron a linha abaixo para executar tarefas que o ownCloud precisa executar regularmente. (crontab -e e digite a linha abaixo)
*/15 * * * * php -f /var/www/owncloud/cron.php
- Pronto! A configuração básica do seu Personal Dropbox Tabajara está pronta. Por enquanto ele estará acessível somente dentro da rede local da sua casa pelo endereço http://192.168.200.131/owncloud.
- Você também poderá instalar no seu celular o aplicativo ownCloud, que entre outras coisas pode fazer algo equivalente ao que o Dropbox faz com o Camera Uploads, jogando automaticamente as suas fotos e vídeos no seu ownCloud server. Existe um aplicativo pago (que custa um dólar) ou você pode instalar um homônimo alternativo, que eu testei e funcionou. Note que, sem configurar o acesso à internet do seu servidor ownCloud, o Upload automático só funcionará quando você estiver na sua rede local.
- Você poderá instalar um cliente no seu computador (Windows, Linux ou Mac) para criar uma pasta que será sincronizada automaticamente com o seu servidor onwCloud de modo idêntico ao Dropbox.
No próximo post, eu continuo as configurações para deixá-lo seguro com HTTPS, como disponibilizá-lo para a internet e fazer o backup do seu bando de dados.
Referências usadas neste tutorial
- http://www.raspberrypi.org/documentation/installation/installing-images/windows.md
- http://www.techsneeze.com/configuring-static-ip-raspberry-pi-running-raspbian
- http://ask.xmodulo.com/disable-desktop-gui-raspberry-pi.html
- https://extremeshok.com/1081/raspberry-pi-raspbian-tuning-optimising-optimizing-for-reduced-memory-usage/
- http://tldp.org/HOWTO/Partition/fdisk_partitioning.html
- http://www.element14.com/community/message/67034?tstart=0
- http://www.itzgeek.com/how-tos/linux/centos-how-tos/install-owncloud-7-on-centos-7-rhel-7.html
- http://fideloper.com/install-zend-opcache
- https://www.scalingphpbook.com/best-zend-opcache-settings-tuning-config/
- http://forum.owncloud.org/viewtopic.php?f=8&t=10692