Crie seu próprio Dropbox usando um Raspberry PI e um HD externo

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!

  1. 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.
  2. Instale o Raspbian, a imagem está aqui e tem um tutorial de instalação aqui.
  3. 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.
  4. 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
  5. 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.
  6. 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.
  7. 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.
  8. 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 😉
  9. 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)
  10. 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)
  11. 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.
  12. 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
  13. 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
  14. 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
  15. Dê permissão para o Apache modificar o diretório /mnt/files (chown www-data:www-data -R /mnt/files)
  16. 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)
  17. Enquanto instala, será pedida uma senha para o usuário root do MySQL. Se quiser deixar em branco (eu não recomendo) dê Enter.
  18. Quando terminar a instalação, baixe o ownCloud. (wget https://download.owncloud.org/community/owncloud-latest.tar.bz2)
  19. Extraia o ownCloud (tar -jxf owncloud-latest.tar.bz2 -C /var/www/)
  20. Dê permissão para o Apache na pasta do ownCloud. (chown -R www-data.www-data /var/www/owncloud/)
  21. Crie o banco de dados (mysql -u root -p). Se você definiu uma senha para o root do mysql digite-a.
  22. Crie um banco de dados chamado clouddb (create database clouddb;)
  23. Dê direito ao clouddbuser no banco de dados recém-criado. (grant all on clouddb.* to ‘clouddbuser’@’localhost’ identified by ‘oWnCl0udPass’;)
  24. Digite quit para sair da console do mysql.
  25. 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>
  26. 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:
    1. Execute: apt-get install php-pear build-essential php5-dev
    2. 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.
    3. Instale o OpCache. Este passo é meio demorado: pecl install zendopcache-7.0.4
    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.
    5. 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
    6. 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
    7. Reinicie o apache (/etc/init.d/apache2 restart)
    8. Execute o comando php -v. O retorno deve ser parecido com este:
    9. 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
  27. Abra o Chrome ou o Firefox e digite: http://192.168.1.100/owncloud e digite as informações solicitadas:
    1. O nome do usuário administrador, não use admin, muito manjado.
    2. Digite uma senha forte. (10 caracteres, letras maiúscula e minúscula, pelo menos 1 caractere especial e pelo menos 1 número)
    3. Digite o caminho onde os arquivos ficarão armazenados. No nosso caso será na pasta /mnt/files
    4. Digite o usuário do banco de dados: clouddbuser
    5. A senha: oWnCl0udPass
    6. E finalmente o nome do banco de dados: clouddb
    7. Clique em Concluir configuração.
  28. Mova os datafiles para o hd externo:
    1. Pare o MySQL (/etc/init.d/mysql stop)
    2. Mova os arquivos e pastas do diretório /var/lib/mysql para o /mnt/dbfiles (cd /var/lib/mysql ; mv * /mnt/dbfiles)
    3. Altere o arquivo /etc/mysql/my.cnf o parâmetro datadir para
      datadir = /mnt/dbfiles
    4. Altere as permissões para que o MySQL consiga modificar os arquivos (chown mysql:mysql -R /mnt/dbfiles)
    5. Suba o MySQL (/etc/init.d/mysql start)
  29. 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
  30. 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.Tela de logon ownCloud
  31. 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.Interface Web ownCloud
  32. 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

Nem tudo que você compra pelo Buscapé é mais barato

Acabei de pegar uma furada que poderia ter me custado quase 200 reais a mais. O primeiro foi via o site Buscapé, o segundo foi direto no site da FastShop.

buscape-fastshop-igual-preco-mais-caro

fastshop-mais-baratoPode ser um problema de cadastro da FastShop, do Buscapé ou dos dois, mas é bom ficar esperto, porque até um tempo atrás era quase regra que compras feitas por dentro do Buscapé eram mais baratas do que às feitas diretos no site das lojas.

Quem quer ficar mais inteligente?

Acho que todo mundo quer. Ser mais rápido, mais preciso e criativo é o sonho de todos. Não só estudantes mas muitos profissionais de todas as áreas querem ser melhores do que são hoje. Nesta linha o Lumosity promete, através de técnicas de neurociência, melhorar a performance de todos que utilizarem os exercícios, camuflados em jogos, disponíveis para que quiser se cadastrar.

lumosity

Os jogos não são chatos, o que ajuda a manter o usuário motivado a voltar o site do dia seguinte para mais uma sessão de treinamento. Na versão gratuita você pode fazer somente parte do treinamento diário. Segundo a Lumosity, há muita ciência envolvida na criação dos jogos. Veja dois exemplos:

lumosity-game-fish

 

lumosity-game2

O projeto se mantém por mensalidade pelos usuários. O plano anual, custa aproximadamente 70 dólares. Eu testei e achei bacana, mas a limitação diária para o treinamento para as contas gratuitas incomoda um pouco.

Há uma página extensa sobre como os jogos ajudam a melhorar a performance intelectual que você pode ler, em inglês, aqui.

Afinal, no que vai dar a “Primavera Brasileira”?

Todos ainda estão espantados com as recentes manifestações que começaram contra o aumento em 20 centavos na passagem de ônibus urbanos em São Paulo. Depois de São Paulo, várias outras cidades do Brasil tiveram movimentos similares com mais ou menos violência (não vou entrar no mérito se a polícia se excedeu ou não).

Eu acho que  existem motivos muito mais relevantes que este para inciar um protesto do que um aumento na passagem de ônibus, que monetariamente não foi assim tão importante. A lista de reivindicações possíveis seriam muitas, abaixo algumas delas:

  • Carga tributária excessiva e complexa (talvez pareça coisa de burguês)
  • Saúde e educação (assuntos muito manjados e chatos)
  • Contra a PEC 37 (PEC o quê?)
  • Prisão dos mensaleiros (a última previsão é de terminar tudo daqui a 2 anos. E olha que o Supremo Tribunal Federal é a última instância da justiça)
  • Indiciamento do Lula (afinal acho que o maior esquema de corrupção da história deste país não foi ideia só do José Dirceu)
  • Mais segurança com maior efetivo e polícia melhor treinada (para ter maior precisão nos tiros com bala de borracha…)
  • Reforma política (para evitar o aparecimento de novos Tiriricas e Enéas)
  • Liberdade de imprensa (a cúpula do governo federal pensa seriamente em mexer nisso)

Aqui em Curitiba, pela TV, até vi alguns cartazes pedindo alguns dos itens da lista acima. Bacana. Mas a pauta de reivindicações está tão fragmentada que mesmo que um prefeito, governador ou a Dilma quisesse atender, qual delas seria? A tarifa de ônibus? Talvez esta seja a mais irrelevante de todas.

Movimentos como o Diretas Já! ou do Impeachment do Collor tinha uma motivação, só uma motivação para mobilizar milhões. Talvez por isso estas manifestações foram marcantes na história do Brasil. A própria Primavera Árabe, que foi bem sucedida no Egito, Líbia (apesar do altíssimo custo) e na Tunísia, tinha somente uma motivação. Hoje temos “n” motivos para reclamar, sendo que a tarifa de ônibus é o menos importante deles, e para piorar tem um monte de baderneiros que se aproveitam do anonimato para tocar o terror.

Ou o movimento, que apesar de relevante no número de participantes não tem nenhuma organização, fecha uma pauta comum para protestar de maneira mais planejada ou tudo isso esfria em 2 semanas.

Faz sentido ou estou completamente equivocado? Por favor, comentem.

Como salvar em CSV os logs de segurança do Windows de maneira fácil e rápida

A Microsoft praticamente não mudou (até o Windows Server 2008) o modo que armazena os logs no Windows desde o Windows NT. Os logs são armazenados em arquivos de extensão evt, que não são indexados o que torna eventuais pesquisas muito  lentas.

Dos vários logs que o Windows armazena, o que mais cresce é o log de segurança. Lá são armazenados os registros de operações como troca de senha, criação e modificação de grupos, logons e logoffs em computadores. Se seu domínio tem muitos usuários (mais de 1000), os logs crescem muito rápido. No domínio da empresa que trabalho (com mais de 10.000 usuários), existem 3 controladores de domínio, cada um com 3 GB de log, que não mantém mais de 24 horas de logs!

Um outro problema dos logs de segurança é a necessidade de mantê-los acessíveis por longo período para atender pedidos de auditoria. Isso implica em exportá-los periodicamente já que o tamanho máximo do arquivo de log no Windows é 4 GB.

Na interface do Visualizador de Eventos é possível exportar os logs em formato CSV, mas não é produtivo, nem viável, todo dia realizar a exportação dos logs. A alternativa neste caso é utilizar alguma ferramenta para isso.

Existem várias dezenas de ferramentas pagas para realizar esta tarefa e pelo menos uma gratuita que eu conheço: o EventCombMT. As pagas normalmente são mais caras que o próprio Windows e o EventCombMT está ultrapassado, já que a última versão é de quase 10 anos atrás.

Uma alternativa é criar o seu próprio exportador de logs. Existem métodos para isso usando Visual Basic Script ou PowerShell. Eu optei pela última, que apesar da sintaxe exótica é a linguagem de script mais poderosa que eu já vi. Com ela dá para fazer tudo o que você quiser dentro do Windows.

O script em anexo exporta o log em formato CSV e troca as quebras de linha de dentro dos campos de texto por espaço tornando viável a pesquisa. Além disso compacta o arquivo usando o método de compressão PPMD que comprime até 200 vezes para 1, economizando muito espaço de armazenamento.

Se você quiser usar o script que eu fiz, faça download aqui.

Você precisará instalar o 7-Zip e precisará alterar as variáveis $log,  $diretorio e $repositoriologs de acordo com suas necessidades.

Você deve agendar o script para rodar em cada um dos seus domain controllers de 6 em 6 horas, tomando cuidado de usar uma chave de administrador para executar o agendamento e marcar a combobox para Executar com privilégios mais altos (em inglês Run with highest privileges).

Será gerado no final um arquivo 7z que pode ser lido diretamente sem precisar descompactar com o comando abaixo:

"c:Program Files (x86)7-Zip7z.exe" ^
e -so -bd arquivos_dos_logs.7z 2> nul | ^
find /I "string a ser procurada"

Para fazer o mesmo no Linux basta instalar o pacote para descomprimir arquivos to tipo 7z e criar o arquivo /bin/7zcat (com o conteúdo abaixo) e torná-lo executável:

#!/bin/bash
PATH=${GZIP_BINDIR-'/bin'}:$PATH
exec 7z e -so -bd "$@" 2>/dev/null | cat

Depois executar o comando 7zcat arquivos_dos_logs.7z 2> /dev/null | grep “string a ser procurada”

Para descobrir o que significa cada código de evento, acesse este artigo da Microsoft.

O que estamos fazendo com as crianças do Brasil?

Este vídeo é uma palestra ministrada na Primeira Igreja Batista de Campo Grande pela pastora Damares Alves, que trabalha como assessora jurídica da frente parlamentar evangélica do Congresso Nacional. Muitas vezes nós cristãos não sabemos o perigo que nossas crianças estão correndo se depender das vontades de quem comanda o Ministério da Educação e o Ministério da Saúde. O que podemos fazer é nos mobilizar, usando nossos direitos de cidadãos, para as coisas mostradas neste vídeo sejam mudadas para que fiquem de acordo com valores baseados na palavra de Deus. Assista o vídeo até o final. Vale a pena.

Super-Homem versus Homem-Aranha

  • Super Herói.
  • Força Sobre-humana.
  • Uniforme Azul e Vermelho.
  • Não cresceu com os pais.
  • Trabalha no jornal de uma grande cidade.

De quem estou falando?

Super-Homem ou Homem-Aranha?

Pois é esta similaridade levou a DC Comics a entrar com uma ação contra a Marvel Comics por considerar que o Homem Aranha é uma cópia descarada do Super Homem.

Em função do tempo que os dois estão por aí e pelo volume de dinheiro que cada personagem já movimentou desde sua criação é de se esperar que será uma causa bilionária, talvez a maior de todos os tempos.

SpiderManSuperman

 

Agora a Suprema Corte dos Estados Unidos terá até 1º de abril do ano que vem para decidir quem está com a razão.

Como criar um vídeo Time-Lapse

Time-lapse é uma técnica onde a frequência da captura dos frames do vídeo é muito menor do que no filme final, ou seja, nele é possível ver uma semente crescendo, uma flor florescendo ou um pôr do sol acontecendo em segundos. Abaixo alguns exemplos notáveis:

Abertura do seriado House of Cards

Curitiba, cidade em Movimento, vídeo produzido pela RPC TV

Bacana, né? Mas que tal você produzir um time-lapse também? Difícil? Não é não. Basta ter um celular com Android com uma câmera fotográfica e seguir os seguintes passos:

1) Instale o Silent Continuous Shooting, e configure-o para tirar uma foto a cada 10 segundos e o tamanho da foto de 800×480.
2) Consiga um suporte para o seu celular ficar completamente parado (um clips dobrado conforme abaixo serve) e aponte para algo que queira acompanhar. Um bom começo é ver o crescimento de uma planta.
2013-03-13 09.15.43

2013-03-13 09.16.50
3) Conecte o seu celular no carregador porque tirar uma foto a cada 10 segundos vai acabar com a bateria dele rapidinho.
4) Inicie a sequência de fotos. É bom ficar longe por umas 2 ou 3 horas. Se você configurar para tirar uma foto a cada 10 segundos você terá no final do processo de 700 a 1000 fotos.
5) Depois disso, pare o Silent Continuous Shooting e instale no seu celular o programa AndroZip. Crie com ele um arquivo zip com a pasta ContShooting do seu celular. Fica muito mais fácil levar um arquivo zip do que as 1000 fotos.
6) Copie o arquivo zip gerado para o seu computador e deszipe em uma pasta. Você terá todas a fotos que seu celular tirou.
7) No Linux eu instalei o memcoder e usando uma linha parecida com a abaixo criei o vídeo abaixo do Crescimento de um girassol:
mencoder mf://*.jpg -mf w=800:h=480:fps=25:type=jpg -ovc lavc
-lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o output.avi
8) No Windows você pode usar o Windows Movie Maker.

O meu vídeo ficou assim:

Referência:
Encoding from multiple input image files
Time-lapse photography