domingo, 3 de julho de 2016

Instalando owncloud no Raspberry PI 2

Neste nosso post, vou mostrar como instalar o owncloud no seu raspberry pi 2. Eu já vi alguns locais mostrando a instalação e não achei que estavam completos, sempre faltava alguma coisa que a gente tinha que adivinhar.

Assim vamos começar com uma instalação a partir do zero, isto é, baixamos o raspbian jesse lite do site (https://www.raspberrypi.org/downloads/). Nossa escolha pela versão Lite é que assim temos uma instalação limpa com poucos programas instalados. Esta versão não tem nem mesmo a interface gráfica. Desta forma ganhamos também em desempenho, pois não tem programas que não precisamos rodando no PI2.

Instalando imagem


No nosso caso estamos usando Windows, desta forma precisamos de um aplicativo para copiar o Jesse para dentro do miniSD. O procedimento em raspberry é bastante eficiente. Basicamente você tem que baixar o programa Win32DiskImager do site da Sourceforge e instalá-lo no seu comptuador. Depois de instalado, basta rodar, selecionar a imagem que você fez download (normalmente a iamgem baixada está zipada, portanto você tem que descompactar), selecionar a unidade onde está o miniSD e selecionar a opção de WRITE. Quando acabar a cópia, basta remover o SD e colocá-lo no PI2.

Rodando o PI pela primeira vez

Ligue o seu PI2. Ele dará o boot e você poderá entrar. O usuário padrão é pi com a senha raspberry. Você pode configurar as opções regionais usando o comando sudo raspi-config. O raspi-config apresenta uma tela como a mostrada abaixo:




No meu caso eu começei para trocar as opções de locale para pt-BR.UTF-8, o timezone para São Paulo, o layout para brasileiro e Wifi country para BR. Neste post não mostro o uso do Wifi, fica para uma outra oportunidade. Nossa conexão foi ethernet.




Também aproveitei para trocar o nome do host. Por default o SSH server está habilitado, se no seu caso não estiver também é nesta opção que podemos ativá-lo.




Aparentemente as novas versões do Raspian (a minha é Jesse) já fazem durante a inicialização a expansão do filesystem para ocupar todo o seu cartão SD. O meu por exemplo tem 32GB e já foi totalmente reconhecido pelo PI2. Se no seu caso isto não ocorrer e você quiser aumentar o espaço, use a opção (1) do menu de opções avançadas do raspi-config.





Instalações adicionais e configuração inicial

Para usar o owncloud é necessário ter um servidor web instalado. Iremos usar o NGINX que é bem leve e funciona com o PI2. Iniciamos configurando o usuário:

$ sudo usermod -a -G www-data www-data

Agora precisamos instalar uns pacotes que incluem o nginx, php5, sqlite, certificados, php5-fpm etc. Demora um pouco esta atualização. Pode ser que você tenha um update primeiro.

$ sudo sudo apt-get update

$ sudo sudo apt-get install curl libapr1 libcurl4-openssl-dev libtool memcached nginx openssl php-apc php-pear php5 php5-curl php5-cgi php5-cli php5-dev php5-fpm php5-gd php5-imagick php5-intl php5-json php5-mcrypt php5-sqlite php5-common php5-memcache php-xml-parser sqlite sqlite3 ssl-cert varnish



Vamos criar um certificado SSL. Note que estamos criando um certificado válido por 3 anos (se você quiser mudar o tempo basta alterar 1095 para a quantidade de dias desejada). Você precisará preencher uma perguntas durante a execução da criação do certificado. O comando abaixo irá gerar uma chave RSA de 2048 bits. Você pode dar uma olhada em https://www.openssl.org/docs/manmaster/apps/req.html para mais opções.


$ sudo openssl req $@-new -x509 -days 1095 -nodes -out /etc/nginx/cert.pem -keyout /etc/nginx/cert.key

Modifique as permissões para garantir segurança.

$ sudo chmod 600 /etc/nginx/cert.pem

$ sudo chmod 600 /etc/nginx/cert.key


Eu alterei meu arquivo /etc/hosts para poder chamar o meu PI2 de pi-owncloud.




Altere o arquivo /etc/php5/fpm/php.ini:

  • Ache upload_max_filesize e troque o valor para 2000M
  • Ache post_max_size e troque o valor para 2000M

Grave o arquivo alterado. Isto vai permitir transferências de arquivos de 2GB (este é o limite).

Altere o arquivo /etc/php5/fpm/pool.d/www.conf. Ache a linha:

  • listen = /var/run/php5-fpm.sock

e troque para

  • listen = 127.0.0.1:9000

Grave o arquivo.

Abra o arquivo /etc/dphys-swapfile e altere a linha contendo:

  • CONF_SWAPSIZE=100

para

  • CONF_SWAPSIZE=512

Grave o arquivo.

Vamos ativar o fpm:

$ sudo update-rc.d php5-fpm enable

Altere o arquivo /etc/nginx/site-available/default (este é o conteúdo completo do meu arquivo de configuração):

upstream php-handler {
  # para usar php5-fpm
  server 127.0.0.1:9000;
  #server unix:/var/run/php5-fpm.sock;
}

server {
  listen 80;
  server_name pi-owncloud;
  # garante que será https
  # fazendo um redirecionamento
  return 301 https://$server_name$request_uri;
}

server {
  # SSL configuration (ipv4 e ipv6)
  listen 443 ssl ;
  listen [::]:443 ssl ;

  ssl_certificate /etc/nginx/cert.pem;
  ssl_certificate_key /etc/nginx/cert.key;

  root /var/www/owncloud;

  # Add index.php to the list if you are using PHP
  index index.php

  server_name _;

  add_header X-Content-Type-Options nosniff;
  add_header X-Frame-Options "SAMEORIGIN";
  add_header X-XSS-Protection "1; mode=block";
  add_header X-Robots-Tag none;
  add_header X-Download-Options noopen;
  add_header X-Permitted-Cross-Domain-Policies none;

  location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
  }


  # alterar o "max upload size"
  client_max_body_size 2000M;
  Fastcgi_buffers 64 4K;

  # Disable gzip to avoid the removal of the ETag header
  gzip off;

  location / {
    # garante que sempre será chamado o index.php
    rewrite ^ /index.php$uri;
  }

  location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
    deny all;
  }

  location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
    deny all;
  }

  location ~
^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {

    include fastcgi_params;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param HTTPS on;
    #Avoid sending the security headers twice
    fastcgi_param modHeadersAvailable true;
    fastcgi_param front_controller_active true;
    fastcgi_pass php-handler;
    fastcgi_intercept_errors on;
  }

  location ~ ^/(?:updater|ocs-provider)(?:$|/) {
    try_files $uri/ =404;
    index index.php;
  }

  # Adding the cache control header for js and css files
  # Make sure it is BELOW the PHP block
  location ~* \.(?:css|js)$ {
    try_files $uri /index.php$uri$is_args$args;
    add_header Cache-Control "public, max-age=7200";
    # Add headers to serve security related headers (It is intended
    # to have those duplicated to the ones above)
    # Before enabling Strict-Transport-Security headers please 
    # read into this topic first.
    add_header Strict-Transport-Security "max-age=15768000;
    # includeSubDomains; preload;";
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;

    # Optional: Don't log access to assets
    access_log off;
  }

  location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
    try_files $uri /index.php$uri$is_args$args;
    # Optional: Don't log access to other assets
    access_log off;
  }
}


Note que na minha configuração o owncloud ficará em /var/www/owncloud.
Se você quiser mais informações olhe em na documentação do owncloud, ela é bastante precisa.

Instalando owncloud

Faça o download do ownload no site https://owncloud.org/install/.
O meu caso estou utilizando a versão 9.0.3.
As linhas abaixo copiam o owncloud zipado do site para dentro do diretório tmp, descompactam os arquivos no diretório owncloud. Move este diretório para dentro do diretório onde ele irá rodar e acerta as permissões. No meu caso o diretório final será /var/www/owncloud. E por fim apaga o download.

$ cd /tmp

$ wget https://download.owncloud.org/community/owncloud-9.0.3.tar.bz2

$ tar xvf owncloud-9.0.3.tar.bz2

$ sudo mv owncloud/ /var/www/

$ sudo chown -R www-data:www-data /var/www

$ rm -rf owncloud*

$ sudo mkdir -p /var/owncloud/data

$ sudo chown -R www-data:www-data /var/owncloud/data

É necessário fazer uma alteração do arquivo /etc/php5/fpm/pool.d/www.conf. Localize as linhas abaixo de descomente. A linha contendo env[PATH] deve conter o resultado de echo $PATH no shell.

; Pass environment variables like LD_LIBRARY_PATH.
; All $VARIABLEs are taken from
; the current environment.
; Default Value: clean env
env[HOSTNAME] = $HOSTNAME

env[PATH] = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games

env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Reinicie o PI2.

A configuração agora é feita via web. No meu caso https://192.168.10.12.
Se você tentar acessar via http, você será redirecionado para https. O meu navegador (chrome) apresenta a seguinte tela ao tentar acesso:



É necessário aceitar a exceção para entrar o owncloud:


Você deve preencher o nome do primeiro usuário (e que será o administrador) do owncloud. Digite a senha (tem um bug que às vezes indica que sua senha é fraca mesmo quando não é - veja meu exemplo). Você pode escolher qualquer senha. Você precisa clicar em "Armazenamento & Banco de dados" para poder indicar onde os dados do owncloud ficarão. No meu caso usei o diretório que criamos no passo inicial (/var/owncloud/data).



Se você quiser criar seu armazenamento em um pendrive sugiro dar uma olhada neste tutorial. Ele tem um passo a passo da instalação do owncloud (com apenas uns passos faltando), mas tem uma parte bacana sobre como montar automaticamente o pendrive (e com NTFS). Se você for utilizar fat, basta trocar a opção ntfs-3g do fstab que ele mostra para vfat.

Após clicar em "Concluir configuração", será aberta a tela inicial do owncloud.

No menu no alto à esquerda, onde está escrito "pi" na minha tela abaixo, você encontrará a opção de administração que permite criar novos usuários.


Aproveite...