quinta-feira, 21 de julho de 2016

COPS | Disponibilização web de uma biblioteca do Calibre

Com a crescente digitalização dos mais diversos livros e consequente disponibilização gratuita de muitas obras no domínio público, torna-se interessante a possibilidade de ter um acesso prático e fácil a um acervo digital deste tipo.

O software Calibre [1] permite gerir uma biblioteca digital de forma muito fácil, fornecendo mecanismos rápidos para a organização e catalogação da mesma. Aceita diversos tipos de ficheiros incluindo os mais que comuns EPUB e PDF.
Resta acrescentar que é um projeto open source e que está disponível para "todos" os sistemas operativos.

O Calibre possui um diretório de trabalho onde fica registada toda a informação referente à Biblioteca Digital.

O projeto COPS [2] foi desenvolvido pelo Sébastien Lucas e permite fazer com que um servidor web com PHP possa disponibilizar de forma rápida e acessível a biblioteca digital criada pelo Calibre.

0. Pré-Requisitos

A instalação será feita num servidor ubuntu 16.04 LTS com apache2 e php com algumas extensões instaladas.

apt-get install apache2 php php-gd php-sqlite3 php-json php-intl php-xml

Deverá ser feita a criação de uma biblioteca digital com o Calibre e ter acesso à mesma.

1. Instalação do COPS

Deve obter-se o ZIP com o código do COPS disponível aqui cops-1.0.0.zip e extrair-se na pasta do webserver.

cd /var/www/html
wget https://github.com/seblucas/cops/releases/download/1.0.0/cops-1.0.0.zip
unzip cops-1.0.0.zip

Para facilitar pode renomear-se o diretório:
mv cops-1.0.0 cops

A partir de agora é possível aceder a:
http://servidor/cops

2. Configuração do COPS

Deve abrir-se o ficheiro de configuração config_default.php e alterar o necessário, com especial atenção:
  • $config['calibre_directory'] = 'ebooks/'; // deve ter o caminho para os ficheiros, neste caso ebooks.
  • $config['cops_full_url'] = 'http://servidor/cops'; // deve ter o endereço completo do servidor COPS
  • $config['cops_title_default'] = "Biblioteca Digital"; // nome que é apresentado na biblioteca digital
  • $config['cops_language'] = 'pt_PT'; // para ficar com a interface em Português

3. Disponibilização da Biblioteca

Falta apenas enviar a biblioteca digital criada pelo Calibre para o servidor, que pode ser feita recorrendo a diversos métodos (FTP, SFTP, rsync, etc), tendo o cuidado de deixar todos os ficheiros no diretório ebooks (configurado anteriormente).

A partir deste momento toda Biblioteca Digital estará disponível num browser à distâncias de uns cliques:
http://servidor/cops

Referências

[1] - https://calibre-ebook.com/
[2] - http://blog.slucas.fr/en/oss/calibre-opds-php-server

terça-feira, 19 de julho de 2016

rsync | Backups automáticos com rsync por SSH

Servidor RSYNC

Neste exemplo utiliza-se um servidor ubuntu 16.04 LTS mas esta configuração deve funcionar para qualquer outra distribuição Linux com as devidas alterações.
Foi criado um utilizador designado utilizador.

0. Instalação
apt-get install rsync

É possível criar um local de trabalho, neste caso /srv/BACKUP
mkdir /srv/BACKUP
chown utilizador:utilizador -R /srv/BACKUP

1. Configuração
O ficheiro de configuração é /etc/rsyncd.conf e um exemplo simples:
uid = utilizador
gid = utilizador
socket options = SO_KEEPALIVE

[BACKUP]
    path = /srv/BACKUP
    comment = Backup [500GB]
    read only = false
    auth users = utilizador


Após a configuração é necessário ativar o modo de serviço (daemon) do rsync:
nano /etc/default/rsync
Deve descomentar-se a linha (remover o # no início):
RSYNC_ENABLE=true

Para arrancar o serviço:
service rsync start

As opções permitem a gestão básica: stop (parar), restart (reiniciar) e status (estado).

O reload não é necessário porque o rsync lê o ficheiro de configuração a cada nova ligação que recebe.

2. Testar o serviço
Para testar é possível recorrer a outra máquina que esteja na rede com o rsync instalado e executar:
rsync rsync://servidor
BACKUP             Backup [500GB]

Ao aceder ao módulo de BACKUP irá pedir uma palavra-passe, que não foi definida na configuração inicial, e, por isso, irá falhar:
rsync rsync://servidor/BACKUP
Password:
@ERROR: auth failed on module BACKUP
rsync error: error starting client-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]


Cliente para backups

Para que o cliente possa enviar os ficheiros automaticamente sem haver pedido de senhas, é necessário configurar o acesso ao servidor por SSH por chave, isto é sem ser necessário introduzir uma palavra-passe. Esta forma é mais segura e permite a automatização das tarefas de backup pretendidas.

Neste caso é utilizada uma máquina cliente com o utilizador user que será o responsável pelo envio dos backups para o servidor.

0. Configuração do acesso por SSH com chave pública ao servidor
A criação das chaves no cliente com:
mkdir ~/.ssh/
ssh-keygen -t rsa

Copiar a chave criada para o servidor e habilitar o acesso SSH sem password para o utilizador do servidor:
ssh-copy-id utilizador@servidor

Testar para verificar se já não pede password com:
ssh utilizador@servidor


1. Script para Backups
Um script para automatizar os backups poderá ser o seguinte:
#!/bin/bash
# script by Mário Pinto @ 2016.07.19

# RSYNC SERVER - Complete URI for the server including protocol
SERVER="servidor"
USER="utilizador"
RSYNC_SERVER="$USER@$SERVER:/srv/BACKUP/"
COMMAND="rsync -qzar --delete"

# HOSTNAME and LOG_FILE
HOSTNAME=`hostname`
LOG_FILE=$HOSTNAME".log"
DATE=`date +%Y.%m.%d@%H:%M:%S`
START=`date +%s`

echo -e "HOST: $HOSTNAME\t $DATE\nBacking up to $RSYNC_SERVER$HOSTNAME" > $LOG_FILE

# Directories/Files to backup separated with a space ' '
BACKUP_DIRS="/home/user/DATA /home/user/ISO"

# Execute the backup for each directory/file specified
for i in $BACKUP_DIRS
do
  echo -ne "\tBacking up $i... " >> $LOG_FILE
  if $COMMAND $i $RSYNC_SERVER$HOSTNAME  ; then
    echo "OK" >> $LOG_FILE
  else
    echo "KO" >> $LOG_FILE
  fi
done


END=`date +%s`
DURATION=$(( $END - $START ))

echo -e "Done in $DURATION seconds." >> $LOG_FILE

rsync -qraz $LOG_FILE $RSYNC_SERVER"logs/"
cat $LOG_FILE
rm $LOG_FILE
exit 0


Poderá ser guardado como ~/rBackup

Deverá ser colocado como executável:
chmod 755 ~/rBackup

E testado:
./rBackup
HOST: cliente     2016.07.19@13:00:35
Backing up to utilizador@servidor:/srv/BACKUP/cliente
    Backing up /home/user/DATA... OK
    Backing up /home/user/ISO... OK
Done in 4 seconds.


2. Automatização do Backup
Se tudo for automático, resta criar um cronjob para o script, por exemplo:
crontab -e
 2 * * * nice /home/user/rBackup