Categorias
biologia aplicativos artigos

Gene Fetcher tool no Zim Desktop Wiki

Tenho usado o Zim Desktop Wiki como caderno de anotações faz algum tempo. Ele salva as notas como arquivo texto com marcação wiki permitindo que eu acesse o conteúdo diretamente com outros editores e facilitando o backup (eg, pasta de notas sincronizada no Dropbox).

Comecei a mexer com genes no doutorado e estava guardando as sequências em arquivos texto soltos por aí. Pra manter as coisas organizadas (já que a quantidade de genes começou a aumentar) resolvi tentar guardar cada sequência em uma nota separada no Zim. Assim posso organizar os genes de maneira mais intuitiva, fica mais fácil encontrar o que estou procurando e ainda posso acessar as sequências programaticamente com scripts.

Cada gene pode ter marcadores indicando que aquela página é uma sequência, o organismo, o tipo de gene (relacionado com que processos do desenvolvimento) e o nome mais comum para agrupar genes ortólogos. Com os marcadores fica fácil filtrar as notas. Na imagem abaixo eu cliquei no gene vasa e de cara dá pra ver que tenho as sequências do peixe paulistinha (D. rerio), humanos (H. sapiens) e drosófila (D. melanogaster).

Example of gene sequence in Zim Desktop Wiki importado com o Gene Fetcher.
Example of gene sequence in Zim

O link para a sequência no NCBI também é útil, caso precise voltar lá para checar alguma informação. Por fim tenho a sequência no formato FASTA, que é o que vou usar na maioria dos casos. Criar uma página assim consome alguns comandos, copy/paste e cliques, então fiz um script simples para automatizar isso.

No Zim você pode rodar scripts customizados que interagem com as páginas do caderno de notas. Criei o Gene Fetcher para gerar a página a partir do identificador da sequência. Basta você colar o identificador numa nova página, selecioná-lo com o cursor e rodar. As informações serão adicionadas ao final da página.

Nada muito revolucionário, mas útil. Pelo menos pra mim, por enquanto. Também pode ser usado fora do Zim, é só passar os argumentos certos.

Categorias
aplicativos artigos

Shell script para backup usando rsync e ssh em DHCP no Ubuntu

Fiz uma versão nova e mais completa, deste script. Confira aqui.

No meu computador mantenho apenas arquivos essenciais para o trabalho da semana/mês e vou estocando tudo em discos rígidos externos progressivamente. Contudo, como eles são meio desorganizados, queria um jeito prático de fazer backup completo dos arquivos diários de trabalho.

A solução foi criar um script em shell (bash) que fizesse uma cópia exata do meu computador para outra máquina conectada na rede local.

Depois de uma rápida pesquisa vi que o rsync era a ferramenta que estava procurando para o trabalho. Não é preciso muito para conseguir fazer o backup com o rsync, basta usar o seguinte comando (cheque a documentação para entender os argumentos):

rsync -ah --delete -e ssh /home/user1 user2@IPouHostname:/home/user2/Backup/
#nota de precaução: o --delete faz com que os arquivos no destino sejam deletados, caso estejam ausentes na origem

No entanto, foi preciso configurar algumas coisas para que tudo corresse bem nas duas máquinas rodando Ubuntu.

Como minha rede local é DHCP as máquinas não tem um IP estático. Queria rodar o script sem precisar saber o IP do destino usando apenas o hostname (nome da máquina na rede). Quando tentei conectar via ssh usando o hostname original não consegui. Para funcionar é necessário simplesmente mudar o hostname da máquina de destino para hostname.local. Siga estas instruções resumidas abaixo:

  1. Abra o arquivo /etc/hosts com um editor de texto pelo terminal

    sudo vim /etc/hosts

  2. Mude a linha

    127.0.1.1 hostname

    para

    127.0.1.1 hostname.local

  3. Salve o arquivo e abra o arquivo /etc/hostname com

    sudo vim /etc/hostname

  4. Mude o hostname para hostname.local e salve
  5. Reinicie a máquina ou execute:
    1. sudo /etc/init.d/hostname.sh stop
    2. sudo /etc/init.d/hostname.sh start
    3. sudo /etc/init.d/network restart

Com isso foi possível conectar via ssh sem precisar saber o IP, apenas com o hostname. Outra pendenguinha é que o ssh precisa da senha de usuário da máquina de destino para se conectar. Pra evitar isso e conseguir fazer o login remotamente sem precisar digitar a senha siga estes passos (isso permite com que você possa iniciar o backup sem precisar estar por perto, por exemplo deixar agendado para rodar o script 1 vez por semana).

Com isso resolvido abra o script abaixo num editor de texto, edite os detalhes de configuração, salve e execute o script num terminal. Para executar torne o arquivo executável com o comando

chmod 755 backup.sh

e execute com

./backup.sh

Tentei fazer com que meu computador ligasse remotamente (para que nem precisasse ligar a máquina de destino pra fazer backup – o script a ligaria remotamente), mas não consegui. Tem instruções sobre o wakeonlan aqui.

O script abaixo basicamente:

  • Checa se a máquina de destino está ligada (se estiver desligada ele avisa, põe no log e fecha)
  • Se estiver ligada ele executa o rsync (o –delete-before deleta os arquivos do destino antes de copiar os arquivos novos; útil se não houver muito espaço no disco do destino – o padrão é –delete que vai deletando e copiando progressivamente)
  • O terminal mostra todas as operações e calcula a duração do backup. Tudo isso fica registrado num arquivo log

Obviamente sugestões são muito bem vindas! Segue então o script:

#!/bin/bash

# Script para backup via SSH usando o rsync
# Versão 0.1

## Configuração!!! ##
# Mude os parâmetros abaixo, referentes ao seu sistema

# Arquivo log
LOG=/home/user0/.backup`date +%Y-%m-%d`.log

# Destino
# IP ou hostname da máquina de destino
DESTINO=destino.local

# Usuário no destino
USR=user1

# Diretório de destino
DIR=/home/user1/Backup/

# Origem
# Diretório de origem
SRC=/home/user0

## Fim das Configurações!!! ##

# Checar se a máquina de destino está ligada
/bin/ping -c 1 -W 2 $DESTINO > /dev/null
if [ "$?" -ne 0 ];
then
   echo -e `date +%c` >> $LOG
   echo -e "\n$DESTINO desligado." >> $LOG
   echo -e "Backup não realizado\n" >> $LOG
   echo -e "--- // ---\n" >> $LOG
   echo -e "\n$DESTINO desligado."
   echo -e "Backup não realizado.\n"
else
   HORA_INI=`date +%s`
   echo -e `date +%c` >> $LOG
   echo -e "\n$DESTINO ligado!" >> $LOG
   echo -e "Iniciando o backup...\n" >> $LOG
   rsync -ah --delete --stats --progress --log-file=$LOG -e ssh $SRC $USR@$DESTINO:$DIR
   HORA_FIM=`date +%s`
   TEMPO=`expr $HORA_FIM - $HORA_INI`
   echo -e "\nBackup finalizado com sucesso!" >> $LOG
   echo -e "Duração: $TEMPO s\n" >> $LOG
   echo -e "--- // ---\n" >> $LOG
   echo -e "\nBackup finalizado com sucesso!"
   echo -e "Duração: $TEMPO s\n"
   echo -e "Consulte o log da operação em $LOG.\n"
fi

# Afazeres

#  - Incluir em cron job!
#  - Definir como lidar com o arquivo.log (deletar, arquivar, deixar...)
#  - Incluir wakeonlan para ligar o computador se estiver desligado
#  - Desligar máquina de destino após o término do backup
#  - Criar alça para quando a transferência falhar (e.g.,falta de espaço)