Hospedagem de arquivos em nuvem com Banana PI e OwnCloud [Completo]

Criando sua própria hospedagem de arquivos em nuvem (cloud) utilizando Banana PI (hardware) e OwnCloud (software).

bananapi-owncloud

Apresentação

Por se tratar de Post um tanto quanto técnico sobre construir um servidor de hospedagem em nuvem utilizando um minicomputador, talvez você prefira considerar soluções alternativas, como o DropBox, Google Drive ou equipamentos tipo MyCloud e Seagate Central. Não se trata de propaganda, até por que não uso nenhuma dessas soluções. Essa é uma rápida e válida reflexão sobre o que pode ser melhor para você, antes de começar (custos e benefícios).

Dropbox & Google Drive

dropbox gdrive

Usando o DropBox ou Google Drive, por exemplo, você paga uma taxa mensal que hoje gira em torno de 10 dólares por 1TB, e com isso você pode hospedar, acessar e compartilhar seus arquivos de qualquer dispositivo eletrônico ligado à Internet, sem se preocupar como implementações de software ou de segurança (firewall), backups, custos de energia elétrica, pane de hardwares, etc. Mas por outro lado, em que lugar estão realmente os seus dados (se é que isso importa para você)? Será que alguém, fora você, pode acessá-los (governo)? A longo prazo, não sairia mais barato uma solução própria? Em todo o caso, esta pode ser a opção mais cômoda para quem pode pagar e não quer esquentar a cabeça com implementações.

Dentro dessa ideia de terceirizar a sua Cloud, um serviço chamado MinhaTeca promete que “NÃO HÁ LIMITE para armazenar seus arquivos gratuitamente“. Teria que ver se existe algum tipo de limitação e até quando esse slogan vai se sustentar. Mas parece um diferencial importante entre os concorrentes. (Obrigado ao Salkys, de Cianorte, pela dica).

MyCloud & Seagate Central

mycloud4 seagate-central

Caso você não queira um serviço remoto, como o DropBox e Google Drive, você também pode optar por uma solução já pronta que ficará fisicamente dentro da sua casa ou escritório, como o MyCloud, da Western Digital ou o Seagate Central. Neste caso, o investimento inicial seria aproximadamente 130 dólares por 2TB de espaço em disco, e você ficaria livre das taxas mensais e teria maior “posse” dos seus dados. Contudo, agora ficará a seu encargo os custos com energia, backups, atualização de software (é possível?), pane de hardware (HDs, placas, portas), além de precisar de algumas configurações necessárias para funcionamento em nuvem. Verificando um desses em funcionamento, achei um tanto quanto lento. Mas parece interessante para quem precisa de mais espaço e não quer assumir um gasto mensal.

Banana PI + OwnCloud

bananapi-owncloud2
Em rápidas palavras, o Banana PI é uma placa miniaturizada com praticamente todos os componentes que um computador possui (processador, memória, USB, HDMI, audio, vídeo, etc). Já o OwnCloud é uma aplicação que funciona de forma similar ao Dropbox. Ambos são projetos open-source, o que permite livre distribuição, modificações, derivações e acesso ao código fonte. Com tantas opções consolidadas de Cloud (nuvem), porque então eu teria o trabalho de montar uma solução própria? Eu diria que com um minicomputador eu não fico limitado a uma funcionalidade apenas, afinal, eu tenho um sistema operacional rodando, podendo montar e disponibilizar qualquer serviço que eu quiser, sendo um deles a hospedagem de arquivos em nuvem. E isso tudo a um baixo consumo de energia, devido a miniaturização do hardware. Mas claro, você precisa ter alguns (muitos) conhecimentos para montar esta solução, além de ficar responsável por toda implementação e problemas advindos. O gasto inicial varia entre 150 e 200 dólares, considerando a compra do Kit BananaPI + HD de 4TB. Antes de optar por esta solução, sugiro você ler “Minhas impressões sobre Banana PI e OwnCloud”, ao final deste artigo.

Você pode testar o OwnCloud online (DEMO): http://demo.owncloud.org/. O vídeo a seguir (em inglês) ilustra bem como funciona o Owncloud:

ownCloud for Enterprise File Sync and Share from ownCloud, Inc. on Vimeo.

Enfim, fique com a solução que melhor lhe atenda. Não estou aqui para julgar qual é a melhor, pois cada uma pode ser interessante dependendo da sua realidade ou cenário. Quero apenas compartilhar minha experiência com o Banana PI e o OwnCloud, ok?

Introdução

Se você realmente está decidido a colocar a mão na massa e fazer sua própria solução de “nuvem”, então vamos lá! Ao final deste Post você será capaz de acessar seus arquivos de qualquer lugar do mundo a partir de tablet, iPhone, smartphone, notebook, computador ou qualquer dispositivo ligado à Internet. Além disto, conseguirá sincronizar arquivos entre seu PC e a nuvem, bem como ter a possibilidade de compartilhar os arquivos com qualquer pessoa.

Vamos dividir essa jornada em duas etapas: Hardware e Software, mas já adianto que o software será muito mais “hard”, acredite. Só peço um pouco de tolerância, pois estarei tentando reproduzir os passos que fiz dias atrás para que tudo funcionasse. Então, se algum detalhe se perder, paciência, avisa aí.

Hardware

Para inicio de conversa, você precisará obter o hardware. Eu particularmente escolhi o Banana PI, mas tem outros interessantes como Raspberry PI e o Cubieboard3. O Banana PI é um projeto open-source de computador feito por uma única placa (single-board computer – SBC). Ele pode rodar diferentes sistemas operacionais, como Android, Ubuntu e Debian. Possivelmente sua concepção tenha sido mais apropriada para a automação, mas tornou-se perfeitamente viável para outros fins.

banana-pi_05

Este Post foi testado apenas com Banana PI. Portanto, sugiro você comprar:
– 1 mini-pc/placa (que é o Banana PI propriamente dito)
– Fonte de energia (para alimentar a placa)
– Resfriador/Ceramic Cooling (para dissipar o calor do processador)
– 1 cabo sata (para ligar o HD à placa)
– 1 case (é opcional, serve para acomodar a placa)
– 1 HD (conforme sua necessidade. O meu era de 3TB)
– 1 SD Card (pode ser 8GB. O meu foi 32GB class 10)

Alguns revendedores já vendem o Kit (sem HD). Você pode procurar em sites como http://www.aliexpress.com/, com custo entre 50 a 80 dólares, fora o HD, que pode ser de até 4TB.

Uma vez que tenha as peças, conecte-as conforme a figura abaixo.

bananapi-connectFonte: imagem adaptada de http://forum.lemaker.org/thread-443-1-1-.html

Software

Considerando que você já está com seu Banana PI em condições, vamos iniciar as instalações de software. Seguiremos os seguintes passos:

Operações primárias – essenciais:
– 01. Instalar o Lubuntu no SD Card (sistema operacional)
– 02. Redimensionar/Expandir a partição do SD Card
– 03. Alterar senha padrão e configurar usuário sudoers
– 04. Definir IP fixo e nome do Host
– 05. Instalar o VNC – x11vnc (para acesso gráfico remoto)
– 06. Instalar o servidor Web (LAMP) e módulos adicionais
– 07. Instalar o PHPMyAdmin (para manipular o banco de dados)
– 08. Formatar e montar HD com partição NTFS 3G
– 09. Criar diretório de armazenamento no HD e permissões de acesso
– 10. Instalar o OwnCloud (gerenciador de arquivos em nuvem)

Operações secundárias – opcionais:
– 11. Fazer o Apache “ouvir” na porta 8080, ao invés da 80 (padrão)
– 12. Configurar o OwnCloud com conexão segura HTTPS
– 13. Abrir porta no roteador (Port Forwarding)
– 14. Criar um DDNS para acessar o OwnCloud da Internet
– 15. Atualizar o OwnCloud
– 16. Instalar um novo App no OwnCloud
– 17. Tornar o hostname do Lubuntu reconhecido na rede Windows
– 18. Sincronizar data e horário com NTP
– 19. Verificar Logs de acesso do Lubuntu
– 20. Trocar porta padrão do SSH
– 21. Criar memória Swap

Ao final do Post, veja também:
– Considerações finais
– Minhas impressões sobre Banana PI e OwnCloud

01. Instalar o Lubuntu no SD Card

Primeiro será preciso instalar o sistema operacional no Cartão SD. Iremos utilizar uma versão chamada Lubuntu, que é uma variante do Ubuntu usando LXDE desktop. Neste Post utilizaremos o arquivo de imagem “Lubuntu – Updated : 2014-08-07”. Veja abaixo as etapas que eu segui baseando-me nas instruções deste Guia.

Download o arquivo de imagem – Lubuntu
http://www.lemaker.org/resources/9-38/image_files.html
O arquivo de imagem tem em torno de 823 MB e será algo como “Lubuntu_For_BananaPi_v3.1.1.tgz”, descompacte ele para obter a imagem “Lubuntu_1404_For_BananaPi_v3_1_1.img” que será usada.

Download SDFormatter para formatar o SD Card
https://www.sdcard.org/downloads/formatter_4/eula_windows/
Baixe, descompacte e instale o SDFormatter. Insira o SD card no seu computador e execute o programa SDFormatter (como administrador), ajustando as opções “FORMAT TYPE” para QUICK e “FORMAT SIZE ADJUSTMENT” para “ON”. Importante: Verifique se a letra (Drive) do SD Card está correta e clique em Ok.

formatter1

formatter2

Usuários Linux, favor ver as instruções no Guia citado.

Download DiskImager para gravar a imagem no SD Card
http://sourceforge.net/projects/win32diskimager/files/Archive/
Baixe, descompacte e instale o DiskImager. Execute o programa e indique o local do arquivo de imagem (Lubuntu_1404_For_BananaPi_v3_1_1.img) e a letra do seu SD Card. Clique em “Write” para iniciar. Não mexa no SD card e nem desligue o computador durante este processo.

Diskimager

Usuários Linux, favor ver as instruções no Guia citado.

Testando a imagem – Lubuntu
Insira seu SD Card no BananaPI. Como ainda não temos acesso gráfico remoto (VNC), conecte o BananaPI à sua TV ou monitor HDMI, e não esqueça de ligá-lo também à rede com um cabo UTP/RJ45. Se tudo der certo, será feito o boot pelo SD Card, e o Lubuntu carregará, parando na tela de Login. Use a senha padrão “bananapi” para logar.

02. Redimensionar/Expandir a partição do SD Card

Depois de colocar o Lubuntu no SD Card, note que a instalação do sistema de arquivos (ext4) utilizou pouco mais de 3 GB, deixando o resto do cartão SD livre (e sem utilidade). Só que isso vai fazer muita falta posteriormente quando precisarmos instalar outros programas, armazenar logs, etc. Certamente se você não fizer isto, vai ter problema de falta espaço, como aconteceu comigo. Quando fui ver o /dev/root estava com 100% usado (lotado). Então, comece verificando seu espaço em disco:

Verificando espaço em disco (Filesystem)

1
bananapi@lemaker:~$ df -Bm -h

Vamos expandir a partição ao máximo aproveitando todo o SD Card. Para fazer isto eu segui essa dica “Banana Pi: resizing the SD card root partition on Lubuntu”. É importante deixar registrado que, apesar de eu ter feito isso somente depois de todos os meus dados já estarem no SD Card e no Hard Disk, eu não perdi nada! Mas fica por sua conta e risco, e pese a possibilidade de fazer um backup antes, se achar preciso. Tudo que fiz foi:

Abrir o prompt do fdisk tendo como alvo o SD Card (mmcblk0)

1
bananapi@lemaker:~$ sudo fdisk /dev/mmcblk0

A partir daí, entre com os seguintes parâmetros:

1
2
3
4
5
6
7
8
9
10
11
12
13
- Pressione 'p' para exibir a tabela de partições.
 
- Pressione 'd' para deletar a partição: digite '2' para escolher a segunda partição
 
- Pressione 'n' para criar uma nova partição: digite 'p' para selecionar uma partição do tipo primária.
 
- Número da partição (Partition number): tecle 'Enter' para aceitar o 2 como número da partição padrão (default). 
 
- Primeiro setor (First sector): tecle 'Enter' para aceitar o padrão (default). No meu caso, isto era 124928. 
 
- Último setor (Last sector):</em> tecle 'Enter' para aceitar o padrão (default). 
 
- Pressione 'w' para escrever a nova tabela de partição.

Reinicie para forçar o Kernel a reconhecer a nova tabela de partição

1
bananapi@lemaker:~$ sudo reboot

Após o sistema voltar, redimensione a partição

1
bananapi@lemaker:~$ sudo resize2fs /dev/mmcblk0p2

Ok, pronto! Verifique novamente o /dev/root e veja que o percentual em uso (Use%) diminuiu, pois você agora tem mais espaço já que o sistema de arquivos ocupou todo o Cartão de memória (No meu caso, 30Gb ou 29900Mb). Veja como ficou o antes e o depois de expandir o SD Card:

ANTES: 100% em uso (/dev/root)

1
2
3
4
5
6
7
8
9
10
11
bananapi@lemaker:~$ sudo df -Bm
Filesystem     1M-blocks    Used Available Use% Mounted on
/dev/root          3385M   3218M        0M 100% /
devtmpfs            438M      1M      438M   1% /dev
none                  1M      0M        1M   0% /sys/fs/cgroup
none                 88M      1M       87M   2% /run
none                  5M      0M        5M   0% /run/lock
none                438M      0M      438M   0% /run/shm
none                100M      1M      100M   1% /run/user
/dev/sda1       2861589M 356454M  2505135M  13% /media/cloud
/dev/mmcblk0p1       60M      5M       56M   8% /media/bananapi/324A-3901

DEPOIS: 12% em uso (/dev/root)

1
2
3
4
5
6
7
8
9
10
bananapi@lemaker:~$ sudo df -Bm
Filesystem     1M-blocks    Used Available Use% Mounted on
/dev/root         29900M   3358M    25293M  12% /
devtmpfs            438M      1M      438M   1% /dev
none                  1M      0M        1M   0% /sys/fs/cgroup
none                 88M      1M       87M   2% /run
none                  5M      0M        5M   0% /run/lock
none                438M      0M      438M   0% /run/shm
none                100M      1M      100M   1% /run/user
/dev/sda1       2861589M 464021M  2397569M  17% /media/cloud

Qualquer dúvida, veja o Artigo que mencionei.

03. Alterar senha padrão e configurar usuário sudoers

Para evitar problemas de segurança, é importante que você troque a senha padrão do usuário root e do bananapi, sabendo que ambas estão definidas por padrão como “bananapi”.

Abra um terminal no Lubuntu (Start > Accessories > LXTerminal), mude o usuário para root, e em seguida troque as senhas, veja:
Acessando como root

1
2
3
bananapi@lemaker:~$ su
Password: 
root@lemaker:/home/bananapi#

Trocando a senha do root

1
root@lemaker:/home/bananapi# passwd root

Basta informar a senha atual (bananapi) e a nova senha que você quer definir. Faça o mesmo para o usuário bananapi, assim:

Trocando a senha do usuário bananapi

1
root@lemaker:/home/bananapi# passwd bananapi

Para fazer determinadas operações, você precisará de permissões privilegiadas que só o root pode fazer. Mas ficar logado como root, não é uma boa prática. Com isso, você pode querer tornar o usuário comum bananapi capaz de resolver certos comandos, como root, por meio do comando sudo. Como o usuário bananapi não está no arquivo sudoers, então, precisamos colocá-lo lá, ok?

É só incluir o usuário bananapi no arquivo sudoers, assim:
Abrindo o arquivo /etc/sudoers

1
root@lemaker:/home/bananapi# sudo leafpad /etc/sudoers

Acrescente ao final do arquivo, a diretiva “bananapi ALL=(ALL) ALL”, ficando assim:
Definindo bananapi como sudo, em /etc/sudoers

1
2
#includedir /etc/sudoers.d
bananapi ALL=(ALL) ALL

04. Definir IP fixo e nome do Host

Configurando IP fixo
Como futuramente precisaremos nos referenciar ao BananaPI dentro da nossa rede, sugiro definir um IP fixo para ele. Isso você não precisa fazer por linha de comando, basta ir em “Start > Preferences > Networks Connections”. Selecione a conexão “Wired” (cabo) e clique em “Edit”. Na aba “IPV4 Settings”, selecione o método “Manual”, e clique em “Add” e informe seus dados de rede.

Vou dar um exemplo, mas obviamente você deve obter isso com base na sua rede. Você pode conseguir esses dados abrindo o command (Windows: start > search > cmd, digitando “ipconfig /all na tela preta que se abrirá”).
No meu caso ficou assim:
– Address: 10.0.0.10
– Netmask: 255.255.255.0
– Gateway: 10.0.0.1
– DNS Server: 10.0.0.1, 75.75.75.75, 8.8.8.8
Quando solicitado, informe a senha que você definiu no passo anterior. Clique em “Save” e “Close”.

Definindo nome do Host

1
bananapi@lemaker:~$ sudo leafpad /etc/hostname

E troque “lemaker” pelo nome que você quiser. No meu caso, chamei de mercurio. Então o arquivo /etc/hostname ficou assim:

Conteúdo do arquivo /etc/hostname

1
mercurio

Você pode querer associar o IP configurado ao nome definido. Para isto, altere também o arquivo /etc/hosts.

Vinculando IP ao nome

1
bananapi@lemaker:~$ sudo leafpad /etc/hosts

Conteúdo do arquivo /etc/hosts

1
2
3
127.0.0.1	localhost
127.0.1.1	mercurio
10.0.0.10	mercurio

Ao final, reinicie o Lubuntu: Start > Logout > Reboot.

Testando o IP e nome do Host configurados

1
bananapi@mercurio:~$ ifconfig

Note que o “inet addr” mudou para o IP que você definiu (no meu caso, o 10.0.0.10). O nome que você definiu para o host consta no próprio comando, após o “@” (no meu caso, “mercurio”), mas que também pode ser checado pelo comando hostname, assim:

Verificando o nome do Host

1
bananapi@mercurio:~$ hostname

05. Instalar o VNC – x11vnc (para acesso gráfico remoto)

Provavelmente você não vai querer ter um monitor exclusivo para seu BananaPI. Então, precisamos configurá-lo para permitir o acesso gráfico remoto via VNC (Virtual Network Computing). Eu fiz isto com base no site http://myrobotlab.org/. Basta seguir os seguintes passos, utilizando o Terminal do Lubuntu:

Crie um arquivo vazio chamado x11vnc

1
bananapi@mercurio:~$ sudo touch /etc/init.d/x11vnc

Abra o arquivo x11vnc criado com o editor leafpad (ou outro)

1
bananapi@mercurio:~$ sudo leafpad /etc/init.d/x11vnc

Copie e cole no arquivo x11vnc o script abaixo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/bin/sh
### BEGIN INIT INFO
# Provides: x11vnc-server
# Required-Start: networking
# Required-Stop: 
# Default-Start: S
# Default-Stop: 0 6
# Description: Manage X11VNC server
### END INIT INFO

## Script de démarrage de serveur VNC avant la fenêtre de connexion
## basé sur le serveur VNC x11vnc et le gestionnaire de fenêtre GDM
##
## emri.e9 [ AT ] gmail.com

## Limitation: lorsque plusieurs instances du serveur VNC sont lancées
## l'option stop les termine toutes, il n'est pas possible de choisir
## une instance en fonction du port écouté

## OPTIONS ############

## Utilisateur principal
## /!\ Ne correspond pas à l'utilisateur avec lequel est lancé le serveur !
## Correspond à l'utilisateur avec lequel vous allez vous loguez sur le
## serveur.
## Limitation: le verrouillage de la session lors de la déconnexion du client
##             VNC fonctionnera uniquement pour cet utilisateur.
## Je n'ai pas trouvé comment récupérer dynamiquement ceci pour l'adapter à
## la session en cours, si vous avez une solution, maillez moi ;)
USER=emri
 
## Fichier de log
LOGFILE=/var/log/x11vnc.log
 
## Permet de démarrer plusieurs instances si le serveur est déjà en train de
## fonctionner
ALLOW_MULTI_INSTANCES=false
 
## Port par défaut (sert aussi numéro de base pour avoir plusieurs instances)
## lorsque l'option ALLOW_MULTI_INSTANCES à true
DEFAULT_PORT=5900
 
## Autres options de x11vnc
## Pour la liste complète et détaillée des options (anglais)
## cf http://www.karlrunge.com/x11vnc/x11vnc_opts.html
EXTRA_OPTIONS="\
-shared \
-verbose \
-o $LOGFILE \
-forever \
-xkb"
 
## Commande de vérouillage de session lors de la deconnexion du client VNC
## L'utilisateur lançant le serveur x11vnc étant le root, le verrouillage de l'écran
## n'impose pas la saisie du mot de passe à nouveau, voici la raison du sudo -u.
## Si l'utilisateur spécifié dans USER n'est pas celui connecté, cette commande
## ne fonctionnera pas et l'écran ne sera pas verrouillé.
GONE_COMMAND="sudo -u $USER gnome-screensaver-command --lock"
 
## FIN DES OPTIONS ############

 
. /lib/lsb/init-functions
 
COMMAND=$1
 
## Gère le port envoyé via la ligne de commande (prioritaire sur DEFAULT_PORT)
if [ -z $2 ]; then
  PORT=$DEFAULT_PORT
else
  PORT=$2
fi
 
pid=
 
get_pid() {
  pid=`pidof x11vnc` || false
}
 
is_running() {
  get_pid
  if [ "X$pid" != "X" ] ; then
    return 0
  else
    return 1 
  fi
}
 
start() {
  ## Ligne de commande principale pour le démarrage du serveur 
  ## Pour ajouter des options, il est préférable de modifier les EXTRA_OPTIONS 
  ## plutot que cette ligne de commande
  return `x11vnc -bg -autoport $1 ${EXTRA_OPTIONS} -gone "${GONE_COMMAND}" -rfbauth /etc/x11vnc.pass -safer -auth guess -display :0 | gawk -F PORT= '{print $2}' `
}
 
X11VNC_stop() {
  log_daemon_msg "[X11VNC] Stopping server..."
 
  if is_running ; then
    kill $pid
    ret=0
  else
    log_warning_msg "[X11VNC] Server not running"
    ret=1
  fi  
  log_end_msg $ret
  return $ret
}
 
 
X11VNC_start() {
    log_daemon_msg "[X11VNC] Starting server listening on port ${PORT}..."
    if is_running && ! $ALLOW_MULTI_INSTANCES; then
        log_failure_msg "[X11VNC] Server already running. Operation aborted !"
        log_end_msg 1
        exit
    fi
    start $PORT
    real_port=$?
    if [ -z $real_port ] || [ $real_port -lt $PORT ]; then
      log_failure_msg "[X11VNC] Error(s) occured, consult log file for more informations"
      log_failure_msg "[X11VNC] ${LOGFILE}"
      log_end_msg 1
    else
      log_daemon_msg "[X11VNC] Server started on port $real_port"
      log_end_msg 0
    fi
}
 
 
case "$1" in
  start)
    X11VNC_start
    ;;
  stop)
    X11VNC_stop
    ;;
  restart)
    X11VNC_stop
    X11VNC_start
    ;;
  *) 
      log_failure_msg "Incorrect syntax: argument missing or incorrect"
      log_success_msg "Usage: $0 {start [port]|stop|restart [port]}"
    exit 1
esac

Torne o scrip acima executável, dando as permissões necessárias

1
bananapi@mercurio:~$ sudo chmod 755 /etc/init.d/x11vnc

Crie uma senha para evitar o acesso indesejado via VNC

1
bananapi@mercurio:~$ sudo x11vnc -storepasswd SUA_SENHA_AQUI /etc/x11vnc.pass

Adicionando o script x11vnc à inicialização

1
bananapi@mercurio:~$ sudo update-rc.d x11vnc defaults

Ao final, reinicie o Lubuntu: Start > Logout > Reboot.

Para testar o acesso gráfico remoto (VNC), vá em outro computador, baixe um cliente VNC, como por exemplo o Real VNC, e instale. Execute o atalho criado na área de trabalho, “VNC Viewer”, e informe o IP do seu BananaPI. Lembrando que você pode obter o seu IP através do comando “ifconfig”, no terminal do Lubuntu.

realvnc

Se tudo der certo, você acessará remotamente seu Lubuntu, não precisando mais do monitor ou TV HDMI. Caso você queira parar ou iniciar o serviço de VNC (x11vnc), use o Putty (para Windows) para fazer uma conexão SSH e ganhar acesso ao terminal e poder executar qualquer comando, inclusive para manipular o serviço de VNC, como estes:

Comandos do VNC (x11vnc) no Lubuntu: start, restart e stop

1
2
3
bananapi@mercurio:~$ sudo /etc/init.d/x11vnc start
bananapi@mercurio:~$ sudo /etc/init.d/x11vnc restart
bananapi@mercurio:~$ sudo /etc/init.d/x11vnc stop

Particularmente prefiro deixar o VNC parado (stop), e habilitá-lo (start) via SSH somente quando for usar. É menos um problema de segurança a se preocupar.

06. Instalar o servidor Web (LAMP) e módulos adicionais

Para criar nossa hospedagem de arquivos em nuvem, utilizaremos o OwnCloud. Este software funciona por meio de servidor Web. Para tanto, precisaremos instalar no Lubuntu/Linux o Apache, MySQL e PHP (LAMP).

Abra um terminal no Lubuntu (Start > Accessories > LXTerminal), e faça:
Instalação do LAMP

1
bananapi@mercurio:~$ sudo apt-get install lamp-server^

Instalação de módulos adicionais do PHP

1
bananapi@mercurio:~$ sudo apt-get install php5-gd php5-json

Para testar se o servidor Web (Apache) foi instalado corretamente, apenas abra o navegador (Lubuntu: Start > Internet > Firefox Web Browser) e digite na barra de endereço: http://localhost. Deverá ser exibindo algo assim:

lamp

Confirme se o arquivo de configuração do Apache está definido com estas diretivas para o diretório /var/www/html:

Abrindo o arquivo de configuração do Apache

1
bananapi@mercurio:~$ sudo leafpad /etc/apache2/apache2.conf

Diretiva “Directory /var/www/html”

1
2
3
4
5
<Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Aproveitando que estamos falando de Servidor Web, aconselho também a mudar algumas diretivas no “php.ini”, a fim de permitir maior tamanho de upload (arquivos enviados) e maior tempo de execução dos scripts PHP:

Abrindo o php.ini

1
bananapi@mercurio:~$ sudo leafpad /etc/php5/apache2/php.ini

Procure pelas diretivas abaixo, e mude para uma valor adequado a sua necessidade. Exemplo:
upload_max_filesize = 100M
post_max_size 100M
max_execution_time = 86400

Ao final, lembre-se de reiniciar o Servidor Web (Apache):
Reiniciando o Apache

1
2
3
4
bananapi@mercurio:~$ sudo /etc/init.d/apache2 stop
bananapi@mercurio:~$ sudo /etc/init.d/apache2 start
[ou]
bananapi@mercurio:~$ sudo /etc/init.d/apache2 restart

07. Instalar o PHPMyAdmin (Manipular o banco de dados)

O OwnCloud tenta usar por padrão o SQLite, mas como já temos o MySQL instalado (LAMP), vamos optar por ele como banco de dados.

Como iremos precisar criar uma base de dados no MySQL, sugiro instalarmos o PHPMyAdmin, a fim de facilitar o acesso e gerenciamento dos dados. Para instalar o PHPMyAdmin, vamos utilizar o gerenciador de pacotes Synaptic do próprio Lubuntu:
– Clique start > System Tools > Synaptic Package Manager
– Informe sua senha de root
– Na campo “Search”, busque por “phpmyadmin”
– Selecione “phpmyadmin” e clique em “Apply” (instale as dependências, se houver)
– Provavelmente será solicitado um senha para o MySQL, informe-a (você vai precisar disto depois).

Note que o PHPMyAdmin é instalado no diretório /usr/share/phpmyadmin/, mas nosso servidor Web Apache publica as páginas Web em /var/www/html. Portanto, precisaremos criar um link para que possamos acessar o PHPMyAdmin pelo Navegador, assim:

Criando link para acessar PHPMyAdmin pelo navegador

1
bananapi@mercurio:~$ sudo ln -sf /usr/share/phpmyadmin/ /var/www/html/phpmyadmin

Para testar se o PHPMyAdmin foi instalado corretamente, apenas abra o navegador (Lubuntu: Start > Internet > Firefox Web Browser) e digite na barra de endereço: http://localhost/phpmyadmin. Deverá ser exibindo algo assim:

phpmyadmin0

Criando a base de dados “owncloud” no PHPMyAmdin
Vamos criar a base de dados que o OwnCloud usará. Faça o login no PHPMyAmdin, com o usuário “root” e a senha do MySQL que você definiu durante o processo de instalação. Clique em “Banco de dados” (ou Databases) e digite o nome da base de dados: “owncloud”, como na figura abaixo. Basta clicar em Criar (Create)!

phpmyadmin3

08. Formatar e montar partição NTFS 3G no HD

Para ver se seu hd foi reconhecido pelo BananaPI/Lubuntu, acesse o utilitário em “Start > Accessories > Disks”. Deverá estar sendo exibido seu SD Card e seu HD. Aproveite para selecionar seu HD (à esquerda) e ver se (à direita) ele aparece definido como “Device: /dev/sda1” (ou algo semelhante). Guarde bem isto, pois vai usá-lo a seguir!

Agora vamos formatá-lo para NTFS. Abra um terminal no Lubuntu (Start > Accessories > LXTerminal), e faça:

Formatando o HD para NTFS

1
bananapi@mercurio:~$ sudo mkfs.ntfs -f /dev/sda1

As próximas etapas são fundamentais, é aqui onde a criança chora e mãe não vê! Eu perdi muito tempo e tive muitos problemas até conseguir chegar a uma solução. Combinei a ajuda dos seguintes Artigos:
– Artigo [1]: http://www.ubuntero.com.br/
– Artigo [2]: http://askubuntu.com

O que você deve fazer? Siga estes passos e poupe dor de cabeça:

Obter o UUID do dispositivo (sda1)

1
bananapi@mercurio:~$ sudo blkid

No meu caso, o UUID=28444C77529BC187. Pegue o seu! Na dúvida veja o artigo [1].

Abrir a tabela de partição

1
bananapi@mercurio:~$ sudo leafpad /etc/fstab

Coloque essa única linha no seu “fstab”, mas trocando pelo seu UUID.
Conteúdo do arquivo /etc/fstab

1
UUID=28444C77529BC187 /media/cloud ntfs-3g quiet,defaults,permissions,locale=en_US.utf8

Atenção: não use “defaults 0 0”. Na dúvida veja o artigo [2].

09. Criar diretório de armazenamento no HD e permissões de acesso

A instalação do OwnCloud está ficando para o final, justamente para que o ambiente esteja totalmente pronto para recebê-lo. Falta ainda definir um local para que seus arquivos sejam salvos. É obvio que o SD Card é muito limitado quanto a espaço de armazenamento, por isso vamos criar um diretório em nosso HD, e realizar algumas configurações.

Antes, porém, agradeço a um vídeo compartilhado no YouTube que foi definitivo para completar a instalação, e tudo viesse a funcionar.

O Apache, de onde irá rodar o OwnCloud, normalmente tem permissão para manipular os arquivos em /var/www/html. Para isto, ele usa um usuário e um grupo chamado www-data. Porém, nessa instalação, não sei ao certo o motivo, não havia esse grupo, só havia o usuário. Então, vamos criá-lo.

Abra um terminal no Lubuntu (Start > Accessories > LXTerminal) e mude o usuário para root:
Acessando como root

1
2
3
bananapi@mercurio:~$ su
Password: 
root@mercurio:/home/bananapi#

Crie o grupo www-data, utilizado pelo Apache

1
root@mercurio:/home/bananapi# groupadd www-data

Adicione o usuário www-data ao grupo www-data

1
root@mercurio:/home/bananapi# usermod -a -G www-data www-data

Crie o diretório “data” para armazenar arquivos do OwnCloud

1
root@mercurio:/home/bananapi# mkdir /media/cloud/data

Defina permissões para o diretório “data”

1
root@mercurio:/home/bananapi# chmod -R 0770 /media/cloud/data

Faça do Apache (usuário e grupo) o dono do diretório “data”

1
root@mercurio:/home/bananapi# chown -R www-data:www-data /media/cloud/data/

Ao final, lembre-se de reiniciar o Servidor Web (Apache):
Reiniciando o Apache

1
2
3
4
root@mercurio:/home/bananapi# /etc/init.d/apache2 stop
root@mercurio:/home/bananapi# /etc/init.d/apache2 start
[ou]
root@mercurio:/home/bananapi# /etc/init.d/apache2 restart

10. Instalar o OwnCloud (gerenciador de arquivos em nuvem)

Finalmente, com tudo pronto, vamos instalar o OwnCloud. Apenas lembrando, o OwnCloud é um projeto open-source de software para gerenciar o hospedagem de arquivos, similar ao DropBox.

Algumas características do OwnCloud:
– O código-fonte (PHP) pode ser instalado no Windows e Linux;
– Recurso de arrastar e soltar os arquivos diretamente página Web (nuvem) para fazer upload;
– App próprio para celular/tablet disponível no Google Play e App Store.
– Cliente desktop para sincronizar dados entre PC e nuvem e vice-versa.

Em caso de dúvida na instalação, você pode tentar o artigo deste site: http://pclinuxoshelp.com/

Para instalar o OwnCloud, siga os passos:
1. Abra o navegador (Lubuntu: Start > Internet > Firefox Web Browser)

2. Acesse https://owncloud.org/install/

3. Clique em “Archive File For server owners” e baixe o arquivo para Unix, provavelmente um .tar.bz2 (No meu caso, foi o owncloud-7.0.3.tar.bz2)

4. Como o arquivo deve ter sido salvo no diretório /home/bananapi/Downloads, será necessário movê-lo para o diretório de publicação do Apache, em /var/www/html/. Então, faça:

1
bananapi@mercurio:~$ sudo mv /home/bananapi/Downloads/owncloud-7.0.3.tar.bz2 /var/www/html/

5. Descompacte o arquivo .tar.bz2, um diretório owncloud será criado.

1
bananapi@mercurio:~$ sudo tar -xjf owncloud-7.0.3.tar.bz2

6. Vá ao navegador e digite http://localhost/owncloud. Se tudo der certo, abrirá a página para configuração e instalação do OwnCloud.

owncloud-install2

7. Informe um usuário e senha para criar uma conta de administrador.

8. No campo “Data folder”, informe o caminho para o diretório onde ficarão os dados: /media/cloud/data (esse é local no HD que nós já preparamos anteriormente).

9. Na configuração de banco de dados (configure the database), informe:
– Database user: root
– Database password: “senha do MySQL que você definiu durante o processo de instalação do PHPMyAmdin”
– Database name: owncloud
– localhost: localhost

10. Clique em “Finish setup” e pronto! É só fazer o login com os dados de administrador que você acabou de criar, e será exibido uma tela como esta:

OwnCloud_version_7

11. Fazer o Apache “escutar” na porta 8080, ao invés da 80 (padrão)

Isso é opcional! Aliás, nem faça isto se você pretende configurar o OwnCloud com conexão segura HTTPS. Neste caso, vá para o próximo tópico!

Se você não quiser usar a porta padrão (80), você pode definir outra, como a 8080. Neste caso, ao invés de fazer a chamada por http://localhost/owncloud, você precisaria chamar assim http://localhost:8080/owncloud.

Para isto, no arquivo /etc/apache2/ports.conf, em “Listen”, troque 80 por 8080.
Abrir arquivo /etc/apache2/ports.conf

1
bananapi@mercurio:~$ sudo leafpad /etc/apache2/ports.conf

Conteúdo do arquivo /etc/apache2/ports.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 8080
 
<IfModule ssl_module>
        Listen 443
</IfModule>
 
<IfModule mod_gnutls.c>
        Listen 443
</IfModule>
 
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Mude também…
Abrir arquivo /etc/apache2/sites-enabled/000-default.conf

1
bananapi@mercurio:~$ sudo leafpad /etc/apache2/sites-enabled/000-default.conf

Logo no início da linha, troque 80 por 8080.
Conteúdo parcial do arquivo /etc/apache2/sites-enabled/000-default.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<VirtualHost *:8080>
        # The ServerName directive sets the request scheme, hostname and port t$
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
 
[...]

Reinicie o Servidor Web (Apache) e teste no navegador, algo como http://localhost:8080/owncloud
Reiniciando o Apache

1
2
3
4
bananapi@mercurio:~$ sudo /etc/init.d/apache2 stop
bananapi@mercurio:~$ sudo /etc/init.d/apache2 start
[ou]
bananapi@mercurio:~$ sudo /etc/init.d/apache2 restart

12. Configurar OwnCloud com conexão segura – HTTPS

Para usar o OwnCloud sobre o protocolo HTTPS, eu segui esse rápido tutorial How to configure self signed SSL certificate in owncloud Ubuntu, fazendo os seguintes passos em um terminal:

Instale o OpenSSL

1
bananapi@mercurio:~$ sudo apt-get install openssl

Habilite os módulos de SSL e rewrite do Apache

1
2
3
bananapi@mercurio:~$ sudo su -
root@mercurio:~# a2enmod ssl
root@mercurio:~# a2enmod rewrite

Crie um diretório SSL dentro de /etc/apache2

1
2
bananapi@mercurio:~$ sudo su -
root@mercurio:~# mkdir -p /etc/apache2/ssl

Crie o certificado. Preencha as informações solicitadas

1
2
bananapi@mercurio:~$ sudo su -
root@mercurio:~# openssl req -new -x509 -days 365 -nodes -out /etc/apache2/ssl/owncloud.pem -keyout /etc/apache2/ssl/owncloud.key

Adicione no início do arquivo /etc/apache2/sites-enabled/000-default.conf do Apache, um Virtual Hosting, semelhante a este (faça suas adaptações nos paths e IP):
Conteúdo parcial do arquivo /etc/apache2/sites-enabled/000-default.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<VirtualHost 10.0.0.10:80>
  RewriteEngine on
  ReWriteCond %{SERVER_PORT} !^443$
  RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
</VirtualHost>
 
<VirtualHost 10.0.0.10:443>
  SSLEngine on
  SSLCertificateFile /etc/apache2/ssl/owncloud.pem
  SSLCertificateKeyFile /etc/apache2/ssl/owncloud.key
  DocumentRoot /var/www/html/cloud/
  <Directory /var/www/html/cloud>
    AllowOverride All
    order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

Reinicie o Apache

1
2
3
4
bananapi@mercurio:~$ sudo /etc/init.d/apache2 stop
bananapi@mercurio:~$ sudo /etc/init.d/apache2 start
[ou]
bananapi@mercurio:~$ sudo /etc/init.d/apache2 restart

Para testar, abra o navegador e entre com algo como https://10.0.0.10. A primeira vez, deve aparecer uma mensagem dizendo que “Esta conexão não é confiável”. No caso do Firefox, clique em “Entendo os riscos”, e confirme à exceção de segurança. Nos outros navegadores é parecido, normalmente pedem pra você aceitar o risco.

owncloud-https

Pronto! Seu Owncloud estará rodando sobre HTTPS. Lembre-se de redirecionar seu roteador/modem, de forma que toda requisição HTTPS que chegue nele (porta padrão 443), seja redirecionado para o BananaPI/Lubuntu, que no nosso exemplo tem o IP 10.0.0.10. Veja a seguir um pouco mais de informação sobre isso.

13. Abrir porta no roteador (Port Forwarding)

Como isso já é um assunto muito batido, então não vou entrar em detalhes. Caso você tenha alguma dúvida em como fazer isto no seu roteador, então, procure algo a respeito no google.com.

Mas basicamente o que você precisa fazer é “dizer” ao roteador que toda requisição que chegar na porta 8080 será direcionada para o computador 10.0.0.10 (bananapi), ficando parecido com a figura abaixo:
portforw

Ou parecido com essa outra figura, se for a porta 443 (https):
cloud_443

14. Criar um DDNS para acessar o OwnCloud da Internet

Por que você precisa de um DDNS? Para conseguir acessar o OwnCloud quando você estiver fora da sua rede, ou seja, na Internet. Por exemplo, dentro da sua rede você simplesmente abre o navegador e digita http://10.0.0.10:8080/owncloud e pronto, você acessa seus arquivos.

Obviamente quando você estiver fora da sua rede, isso não vai funcionar, pois o IP 10.0.0.10 é válido somente na sua rede. Neste caso, você deve acessar pelo seu atual IP válido, que pode ser obtido acessando sites como estes: http://meuip.info ou http://meuip.com.br, ficando algo como http://672.180.206.150:8080/owncloud

Mas o problema é que esse IP válido muda frequentemente, em especial quando se reinicia o roteador/modem. Daí entra a necessidade de se ter um DDNS, que é um domínio (NOME) que vai sempre apontar para seu IP atual, pois de dentro da sua rede haverá um aplicativo/script ATUALIZADOR que irá de tempo em tempo verificar se o IP mudou e informar ao DDNS.

Existem vários sites que prestam esse serviço, sendo os mais conhecidos o http://www.noip.com/ e o http://dyndns.org/. Eles tem versão FREE, mas possuem limitações, como ter que renovar a cada 30 dias.

Um outro que parece interessante é o http://freedns.afraid.org. Siga os passos:
1. Acesse http://freedns.afraid.org
2. Clique em “Dynamic DNS” e crie uma conta pelo menu “Setup an account here”.
3. Faça o login, clique no menu “Subdomains” e “add”
4. Note no combobox “Domain” que, no final, tem uma opção “Many many more available…”, clique ali!
5. Na tela seguinte, clique no link “Shared Domain Registry” e escolha um dos milhares de domínios disponíveis.

Pronto! Para testar, basta ir no navegador e digitar seu subdomínio e domínio escolhidos. Por exemplo, supondo que você tenha escolhido como subdomínio a palavra “nuvem” e como domínio o “t28.net”, então, basta acessar como algo assim: http://nuvem.t28.net:8080/owncloud.

Colocar script DDNS no Cron
Agora você precisa por o script do DDNS no Crontab do Lubuntu, para que possa atualizar o DDNS de tempo em tempo com seu IP atual. Vá ao site http://freedns.afraid.org/ e, logado, no menu “Dynamic DNS“, no final da página onde aparece o subdomínio+domínio que você escolheu, tem uma link “quick cron example”. Clique nele, e no final da página tem o exemplo do script já pronto que você deve colocar no crontab do Lubuntu para que ele atualize seu IP a cada 5 minutos.

Editar o crontab

1
crontab -e

Em seguida, digite o número correspondente a um Editor, exemplo: 3 para nano. Role o cursor até o final do arquivo e acrescente a linha abaixo

Atualizar DDNS/IP a cada 5 minutos no crontab (use o seu script/código conforme descrito acima)

1
0,5,10,15,20,25,30,35,40,45,50,55 * * * * sleep 10 ; wget -O - http://freedns.afraid.org/dynamic/update.php?e5IOo2xRRjBGaTFTWG8yRBX9iOplJk9TRjlmOjEzMDY5NDky >> /tmp/freedns_subdominio_dominioeescolhido.log 2>&1 &

Após inserir o script no Crontab, clique em CTRL+X para sair do NANO e em “Y” para salvar e na sequência digite ENTER (e não outra coisa).

Problemas de DDNS e NAT Loopback
Feito isto, uma vez que você esteja fora da sua rede, ou seja, na Internet, já será possível acessar seu OwnCloud com seu subdomínio+domínio, como por exemplo http://nuvem.t28.net:8080/owncloud, sem precisar mais se preocupar em saber qual é o seu IP válido.

Mas, como já dizia Murphy, “toda solução cria um novo problema”. agora surge um impasse. Se você estiver de fora da sua rede, Ok, o domínio vai funcionar. Contudo, se você estiver dentro da sua rede, não vai funcionar, pois é uma restrição da maioria dos roteadores/modens que não tem suporte a “Nat Loopback“, ou seja, não permite que um usuário se conecte ao seu próprio endereço IP público de dentro da sua LAN. Para resolver isso, ou você compra um roteador com suporte a Nat Loopback ou acesse com o IP local (tipo 10.0.10) quando estiver dentro da sua rede. Leia mais sobre esse problema no Artigo “Cannot access external IP address from LAN“.

15. Atualizar o OwnCloud

Para atualizar o OwnCloud, você pode fazer da forma descrita abaixo, desde que não seja atualizações grandes, ou seja, de versões tipo de 6 para 7. No exemplo, eu precisei fazer da versão 7.0.2 para 7.0.4,

Pare o Apache

1
root@mercurio:/home/bananapi# /etc/init.d/apache2 stop

Acesse o diretório onde está publicado o seu OwnCloud

1
root@mercurio:/home/bananapi# cd /var/www/html/

Renomeie o atual diretório do owncloud (no meu caso era cloud)

1
root@mercurio:/home/bananapi# mv cloud/ cloud2

Baixe a última versão do OwnCloud

1
root@mercurio:/home/bananapi# wget http://download.owncloud.org/community/owncloud-latest.tar.bz2

Descompacte o pacote do novo OwnCloud baixado

1
root@mercurio:/home/bananapi# tar xjf owncloud-latest.tar.bz2

Se for o caso, renomeie o diretório owncloud criado na descompactação pelo nome do diretório que você usava (no meu caso era cloud)

1
root@mercurio:/home/bananapi# mv owncloud cloud

Redefina o dono e grupo do novo diretório

1
root@mercurio:/home/bananapi# chown -R www-data:www-data cloud

Substitua o arquivo de configuração novo pelo seu antigo (que já tinha todos os dados)

1
root@mercurio:/home/bananapi# cp cloud2/config/config.php cloud/config/

Inicie o Apache

1
root@mercurio:/home/bananapi# /etc/init.d/apache2 start

Agora abra o navegador e acesse seu OwnCloud. No meu caso, http://10.0.0.10:8080/cloud. Uma página de atualização será exibida, basta confirmar e aguardar o término da atualização.

16. Instalar um novo App no OwnCloud

Acesse https://apps.owncloud.com/, e escolha o App que lhe interessar.

Vamos supor que seja o Music 0.3.4. Clique no ícone/página do App, e procure pelo link que permite você baixá-lo (normalmente é um arquivo .zip).

Acesse o diretório onde ficam os Apps no OwnCloud

1
root@mercurio:/home/bananapi# cd /var/www/html/cloud/apps

Baixe o App (localize o link de download)

1
root@mercurio:/home/bananapi# wget https://github.com/owncloud/music/releases/download/v0.3.4/music.zip

Descompacte o App (.zip)

1
root@mercurio:/home/bananapi# unzip music.zip

Remova o .zip baixado

1
root@mercurio:/home/bananapi# rm music.zip

Faça o login COMO ADMINISTRADOR no OwnCloud. Importante: se você já estiver logado, faça o Logout e então o Login novamente. No painel de controle, clique no menu “Arquivos” (no topo esquerdo da janela), e depois em “Aplicações”. Isso, não sei o porquê, pode demorar um pouco.

Procure pelo nome do App que você baixou e descompactou. No caso do exemplo, note que foi criado o menu “Music”, clique nele e depois clique no botão “Habilitar”. Pronto! Basta acessar alguma música no seu OwnCloud, que ela será tocada por meio do App Music (sem download, tipo Streaming), como uma espécie de playlist.

17. Tornar o hostname do Lubuntu reconhecido na rede Windows

Até aqui nos referenciamos ao Lubuntu/BananaPI pelo IP, pois ao fazer um “ping” pelo nome (no caso do exemplo, mercurio), a resposta era “A solicitação ping não pôde encontrar o host mercurio. Verifique o nome e tente novamente”.

Para tornar sua máquina linux reconhecida pelo nome numa rede com outras máquinas windows, você deve instalar uma biblioteca de pesquisa que vai permitir o Ubuntu converter nomes NetBIOS para IP. Esta biblioteca está contida no pacote libnss-winbind.
Instalando o libnss-winbind

1
bananapi@mercurio:~$ sudo apt-get install libnss-winbind

Após isto, note que já é possível em um terminal (command / cmd) de qualquer máquina Windows da sua rede, dar o comando “ping mercurio”, que a resposta será positiva, pois o hostname mercurio (Lubuntu) pode agora ser encontrado.

Mas se você tentar acessar o OwnCloud pelo navegador de dentro da sua rede, tipo https://mercurio, provavelmente pegará esse erro “You are accessing the server from an untrusted domain. Please contact your administrator. If you are an administrator of this instance, configure the “trusted_domain” setting in config/config.php. An example configuration is provided in config/config.sample.php. Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain: Add “mercurio” as trusted domain”.

Isso acontece, pois o nome “mercurio” não está sendo autorizado pelo OwnCloud. Para resolver isso, é só fazer o que se pede: adicionar o nome mercurio à lista de domínios seguros que fica no arquivo /var/www/html/cloud/config/config.php.

Acrescentando “mercurio” ao Array de domínios confiáveis

1
bananapi@mercurio:~$ sudo leafpad /var/www/html/cloud/config/config.php

Conteúdo parcial do arquivo config/config.php

1
2
3
4
5
6
7
8
[...]
  'trusted_domains' => 
  array (
    0 => '10.0.0.10',
    1 => 'mercurio',
    2 => 'nuvem.t28.net',
  ),
[...]

18. Sincronizar data e horário com NTP

É importante manter a data e o horário certinhos para manter a coerência em que ocorrem os eventos do sistema. Isso é importante até mesmo para determinar se alguém tentou ou está tentando invadir seu Lubuntu, por exemplo, via SSH. Para isto, utilizaremos o O NTP, que é um protocolo para sincronização dos relógios dos computadores em redes de dados, permitindo manter o relógio de um computador com a hora sempre certa e com grande exatidão.

No caso do Lubuntu que usei, o NTP já estava instalado e rodando, conforme visto pelo comando abaixo.

Testando se o NTP já está instalado

1
2
bananapi@mercurio:~$ sudo /etc/init.d/ntp status
 * NTP server is running

Mas se você precisar instalar o NTP, é simples:
Instalando NTP (opcional)

1
bananapi@mercurio:~$ sudo apt-get install ntp

No meu caso, não foi necessário alterar os servidores onde se afere a data/hora. Mas se precisar configurar algo no NTP, faça assim:
Configurando NTP (opcional)

1
bananapi@mercurio:~$ sudo nano /etc/ntp.conf

Por fim, talvez você queira acertar o fuso-horário, bastando rodar o comando abaixo e selecionar sua região.
Configurando fuso-horário

1
bananapi@mercurio:~$ sudo dpkg-reconfigure tzdata

Mole!

19. Verificar logs de acesso no Lubuntu

Mal coloquei o servidor “de cara” para a Internet, já vieram as tentativas de ataques via SSH (robots). Isso ficou claro olhando o Log de autenticação, com diversas entradas por segundos:

Tentativas de hackear via SSH

1
2
3
4
5
6
7
Dec 24 09:21:57 mercurio sshd[22023]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=62-210-151-213.rev.poneytelecom.eu  user=root
Dec 24 09:22:00 mercurio sshd[22023]: Failed password for root from 62.210.151.213 port 49658 ssh2
Dec 24 09:22:04 mercurio sshd[22023]: message repeated 2 times: [ Failed password for root from 62.210.151.213 port 49658 ssh2]
[...]
Dec 24 09:43:52 mercurio sshd[3545]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=server07.mycarequity.com  user=root
Dec 24 09:43:54 mercurio sshd[3545]: Failed password for root from 67.228.238.114 port 60512 ssh2
Dec 24 09:43:54 mercurio sshd[3545]: Received disconnect from 67.228.238.114: 11: Bye Bye [preauth]

Você pode monitorar os Logs de acesso abrindo um Terminal no Lubuntu e executando o comando abaixo:

Verificarndo Log de acesso

1
bananapi@mercurio:~$ sudo tail -f /var/log/auth.log

Por isso é importante ter uma senha forte e, quem sabe, implementar algumas regras de firewall (iptables) para evitar sucessivas tentativas de acesso e inchaço dos arquivos de Logs (em breve demonstrarei).

20. Trocar porta padrão do SSH

Algumas medidas de segurança precisam ser tomadas a fim de tentar reduzir os ataques (externos), a começar pela mudança da porta padrão do SSH, de 22 para uma outra, como 32000. Isso pode facilmente ser feito da seguinte forma:

Abra o aquivo de configuração SSH (Atenção no “d”: é sshd_config, e não ssh_config)

1
bananapi@mercurio:~$ sudo nano /etc/ssh/sshd_config

Altere a diretiva “Port” de 22 para 32000 (ou outra) – Arquivo /etc/ssh/sshd_config

1
2
# What ports, IPs and protocols we listen for
Port 32000

Reinicie o serviço SSH

1
bananapi@mercurio:~$ sudo service ssh restart

Cheque as portas abertas

1
bananapi@mercurio:~$ sudo netstat -tunlp

Dica de segurança sugerida pelo Mestre Eriberto Mota, que desde 2007 tem me ajudado com os ensinamentos Debian contidos no livro “Descobrindo o Linux”, além de palestras e bate-papos. Obrigado!

21. Criar memória swap

Ao notar uma certa lentidão quando o OwnCloud renderizava páginas para exibir conteúdo tipo múisca (.mp3), fotografia (.jpg) e vídeos (.mp4, .avi, .wmv, .asf, .mov, .mpg, etc), suspeitei que isto ocorria em razão do Banana PI ter apenas 1 GB RAM, e a instalação do Lubuntu não ter reservado algum espaço para fazer Swap.

Mas agora, como resolver isto já com tudo instalado? Eu segui os passos do artigo “How To Add Swap on Ubuntu 14.04” e deu certo para a criação de Swap, embora não tenha notado grande ganho com isto. Veja aí como fazer:

Para verificar se você tem swap disponível, dê o comando “free -h” e observe a coluna “total” com “0B” (zero bytes) de swap.
Verificando a memória swap

1
2
3
4
5
bananapi@mercurio:~$ free -h
             total       used       free     shared    buffers     cached
Mem:          874M       852M        21M        24M        84M       104M
-/+ buffers/cache:       664M       210M
Swap:           0B         0B         0B

Criando 1 GB de Swap

1
bananapi@mercurio:~$ sudo fallocate -l 1G /swapfile

Ajustando permissões do arquivo de Swap (root)

1
bananapi@mercurio:~$ sudo chmod 600 /swapfile

Configurando o sistema para usar o espaço de Swap

1
bananapi@mercurio:~$ sudo mkswap /swapfile

Ativando a Swap

1
bananapi@mercurio:~$ sudo swapon /swapfile

Pronto! Se você verificar novamente, vai ver que a Swap já existe. Note que a coluna total da Swap passou de “0” para “1023” MB (1 GB).
Verificando a Swap criada (já em uso)

1
2
3
4
5
bananapi@mercurio:~$ free -m
             total       used       free     shared    buffers     cached
Mem:           874        852         21         25         21         66
-/+ buffers/cache:        764        109
Swap:         1023         34        989

Mas não acabou, você precisa tornar essa configuração permanente, pois senão, quando reiniciar o sistema operacional, tudo vai se perder. Para isto, faça o seguinte:
Abra o fstab

1
bananapi@mercurio:~$ sudo nano /etc/fstab

No final do arquivo, adicione esta linha que diz ao S.O. para automaticamente usar a Swap criada.
Conteúdo adicionado ao final do arquivo /etc/fstab

1
/swapfile   none    swap    sw    0   0

Considerações finais

Na página de Instalação do OwnCloud você encontra, além do pacote para instalar o OwnCloud no servidor Web, dois aplicativos importantes:

Cliente desktop
Este software sincroniza o ownCloud com o seu computador, ou seja, se você criar, alterar ou excluir um arquivo no seu PC, isto será automaticamente replicado na nuvem e vice-versa. Você pode selecionar um ou mais diretórios em sua máquina local, de forma a sempre ter acesso aos seus arquivos mais recentes onde quer que esteja.

Mobile Apps
Você também pode instalar um App em seu dispositivo móvel tanto na App Store da Apple (iOS) quanto no Google Play Store (Android), permitindo-lhe o acesso, sincronização e fazer upload de seus dados em qualquer lugar.

Caso você tenha alguma dúvida de como usar o OwnCloud, veja o manual em http://doc.owncloud.org/.

Minhas impressões sobre Banana PI e OwnCloud

Nada mais útil que finalizar esse Post compartilhando minhas percepções sobre o resultado deste trabalho.

Banana PI
O Banana PI tem como positivo o fato de ser bem compacto (metade de um HD de 3.5″), porém, dependendo para o que se pretende utilizá-lo, pode deixar a desejar em termos de processamento e memória (apenas 1 GB). Notei que ele responde razoavelmente bem (performance) quanto às requisições via OwnCloud, inclusive, melhor que equipamentos como MyCloud.

O problema é que a medida que você adiciona muitos arquivos de música, vídeo e fotografias, ele literalmente “senta” para renderizar a página de exibição do conteúdo. Nesse momento, nota-se o uso de memória swap, provável razão pela qual tudo fica mais lento. Mas, apesar disto, não chega a se tornar inutilizável, só precisa talvez exercitar o teste de paciência. Para exibir uma lista simples dos arquivos de sistema até que é satisfatório.

OwnCloud
O software é uma ótima solução de nuvem, além de tudo, é grátis. Ele possui muitos dos principais recursos que você deva precisar, e tudo indica que as futuras versões serão cada vez mais aperfeiçoadas.

No momento (versão 7) acho que o ponto mais fraco do OwnCloud é a exibição/reprodução de mídias (músicas, fotografias e vídeos) e talvez você tenha dificuldades quanto a isto.

O que pude notar é que ele não suporta com eficiência a exibição de conteúdo por streaming (sob demanda). Por exemplo, quando você clica em um vídeo .avi, ele simplesmente baixa o vídeo ao invés de exibi-lo. Formatos como .flv e .mp4 (alguns .mp4 não reproduziram) até funcionam direto na tela, mas a maioria falha: .wmv, .avi, .mov, .asf, etc. De certa forma, meia-culpa disso é devido a conhecidas limitações Web, embora muitos casos já tenham soluções.

No caso de música (.mp3), há o mesmo problema, o que não justifica. O OwnCloud nativamente faz o download ao invés de reproduzir. Neste caso, você pode instalar um plugin (app) “Music”, que cria uma espécie de playlist de todos os seus .mp3, mas se você tiver milhares de músicas, vai ser quase impossível renderizar, pois a página fica muito carregada.

O mesmo problema ocorre para as fotografias (.jpg), ou seja, o sistema faz uma busca de todas as imagens em disco e tenta criar um álbum, mas se forem milhares de fotos, isso vai ser um parto. Obviamente, muito disso é um reflexo do baixo processamento e memória do Banana PI, mas um pouco de otimização do OwnCloud ajudaria a minimizar este tipo de problema.

O OwnCloud oferece suporte para criação de plugins (apps) de terceiros, o que torna possível agregar novas funcionalidades, mas na minha opinião ainda é um pouco desorganizado neste quesito.

Considerando que é mais fácil apontar os defeitos do que fazer algo em prol, então, é justo que ao menos eu deixe aqui meus parabéns e meu muito obrigado aos desenvolvedores do OwnCloud. A crítica é construtiva, pode ter certeza.

Encerro este longo Post por aqui. Por enquanto é isso, boa sorte!

Total de acessos: 23519

Um comentário sobre “Hospedagem de arquivos em nuvem com Banana PI e OwnCloud [Completo]

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *