AprendiNoLinux
(usa Ubuntu)
Enviado em 29/08/2011 - 13:05h
#!/bin/bash
#
#: package: transfer (***)
#: file: conf.sh
#: since: 2011-08-28 07:33 (GMT -03:00)
#: author: Geraldo T. Albuquerque - Twitter: @AprendiNoLinux
#: version: 0.04 Alfa
#------------------------------------------------------------------------------
#: objectives: Montar o ambiente de variáveis do aplicativo
#------------------------------------------------------------------------------
#: comments: coleta o máximo de infos do bash e do aplicativo. (Gambiarra)
#: Geralmente eu separo as variáveis de ambiente em outro arquivo.
#------------------------------------------------------------------------------
#: TODO: Indica uma tarefa a ser feita, pendência.
#: FIXME: Use para indicar um bug conhecido e precisa ser arrumado
#: XXX: Recado importante no local. Pedindo ajuda para solução, help-me.
#------------------------------------------------------------------------------
[ "$DIR_INSTALL" ] || DIR_INSTALL="$PWD"
# Variável que irá controlar se a instalação está OK em qualquer momento.
# Inicializada em 0 ( não OK ) É obrigado editar para ter certeza que vc
# sabe quais são as configs. Também poderá alterar alguns diretórios.
INSTALL_OK=0
# Contém o caminho completo ao home do usuário.
# Poderá ser usado como um caminho raiz para seus diretórios internos.
# Se mudar este valor por padrão, mudará todas localizações do arquivos.
# Todas as variáveis de diretórios herdam o que está definido em _HOME
# Tome cuidado e confira a sua estrutura de diretórios.
# Note que se você mudar o endereço da variável _HOME, irá ajustar todos os
# demais abaixo. Na dúvida, consulte o arquio meuambiente.tmp que será gerado.
_HOME="$HOME"
# Local base da aplicação. No protótipo, tudo deve estar abaixo de:
DIR_BASE="${_HOME}/transfer"
# Contém o editor preferencial, ex: nano, mcedit, etc...
_EDITOR="$EDITOR"
# Diretório atual PWD formato: /home/usuario/TESTES/v1 (padrão local)
# Diretório atual PWD formato: /home/usuario/TESTES/VIRTUAL (padrão SERVER)
# Diretório ANTERIOR formato: /home/administrador
_DIR_ATUAL="$PWD" # Deve ser o diretório do INSTALL
_DIR_ANTERIOR="$OLDPWD" # Onde estava antes de entrar aqui.
# Caminho PATH, formato: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
_PATH="$PATH" #
_PATH_SHELL="$SHELL" #/bin/bash
# PID do AGENTE ativo de SSH, formato: pid NNNN
_SSH_AGENT_PID="$SSH_AGENT_PID"
# Nome do usuário conectado, USER ou USERNAME, ex: meunome
_USER="$USER"
_USERNAME="$USERNAME"
# Qual o Id do usuário atual. Nas duas formas básicas. Se 0 (zero) é root.
_USER_ID="$(id -u)"
_USER_UID="$UID"
# HOSTNAME ou nome da máquina.
_HOSTNAME="$HOSTNAME"
# Controle de separador padrão do shell. Cuidado com esta variável.
# Para atribuir novo valor: IFS=: ( padrão normal é: ' \t\n' )
# Após usar, lembrar de retornar ao original: IFS="_IFS_ORIGINAL"
_IFS_ORIGINAL="$IFS"
#Executa as configurações do local.
DIR_INSTALL="${DIR_BASE}"
# Raiz do diretório absoluto para todos arquivos temporários.
# Qualquer diretório temporário será criado abaixo dele.
# Caso não exista, diretório será criado.
CONF_TMP="/tmp"
DIR_TMP_LOCAL="${DIR_BASE}${CONF_TMP:-${DIR_BASE}/tmp}"
# Local base onde irã ficar os Scripts personalizados.
# Cada tipo de aplicação deverá ter o seu próprio diretório para os Scripts.
# Muitas vezes poderá ser o próprio diretório do DIR_BASE.
# Note, a pasta de SCRIPTS é idenpendente de onde está sendo feito o trabalho.
DIR_SCRIPTS="${DIR_BASE}/libs" # Normalmente é outro diretório.
# Local onde ficarão todas as bibliotecas reaproveitáveis de código.
# Todos Scripts deverão compartilhar este endereço.
# Para o desenvolvimento, a variável está em sub-diretório do DIR_BASE
# Será movida futuramente após liberação da versão a outro local.
# Não tem importância o local onde estão os outros Scripts.
# As bibliotecas não precisam saber de seus diretórios.
# Quem precisa saber são os Scripts.
# Bibliotecas poderão verificar se o código que está solicitando seu
# trabalho é incompatível. Restrições de versão serão impostas.
DIR_LIBS="${DIR_BASE}/libs"
# local físico onte estarão os Scripts especializados das tarefas.
# Se nova versão no servidor remoto, atualização será automática.
# Este é o local REAL onde os Scripts estarão.
# Dependem da variável DIR_SCRIPTS e não de DIR_BASE, faz grande diferença.
# Neste momento, Scripts deverão estar ao alcance do usuário.
# Só um facilitador para os testes. Serão movidos a outro local furamente.
DIR_APLICATIVO="${DIR_SCRIPTS}"
# Diretório de bibliotecas de código reaproveitável.
# Se nova versão no servidor remoto, atualização será automática.
DIR_BIBLIOTECAS="${DIR_LIBS}"
# Caixa de serviço da máquina que irá realizar as operações.
# Se não existe, irei abortar a operação.
# Na versão final, a caixa de serviço deve ter arquivo de assinatura.
CONF_SERVICO="/service"
# Diretório físico dos serviços a serem realizados.
DIR_SERVICO="${DIR_BASE}${CONF_SERVICO}"
# Caixa que contém os serviços a serem realizados. Local RELATIVO.
# teste no diretório RECEBE porque não é possível neste momento simular vários.
# Dentro do diretório service, cada arquivo terá o comando dentro.
# No protótipo, os endereços serão os mesmos para alguns casos.
CONF_RECEBE="/recebe"
#Diretório físico do local para onde serão enviados os arquivos.
DIR_RECEBE="${DIR_BASE}${CONF_RECEBE}"
# Local RELATIVO para alocação dos pipes de comunicação.
CONF_PIPES="/pipes"
DIR_PIPES="${DIR_BASE}${CONF_PIPES}"
# Configuração do prefixo dos pipes para os serviços.
CONF_PREFIX_PIPES="service_pipe_"
# Local relativo para gravação de logs.
CONF_LOGS="/logs"
DIR_LOGS="${DIR_BASE}${CONF_LOGS}"
# Configuração do prefixo dos pipes para os serviços.
# Quando o serviço entrar em operação, o nome do arquivo de log vai ganhar
# o nome do serviço em operação. Geralmente será a data e hora minuto.
# Vários processos irão usar o mesmo log. Cada serviço terá o seu próprio log.
CONF_PREFIX_LOGS="log_service_"
# Local relativo ao que você deseja que seja enviado ao serviço.
# Quando um serviço está em operação, o diretório serviço contém arquivos.
# Sempre que um serviço for terminado, o diretório serviço estará vazio.
# Quando for iniciar um serviço, o sistema irá ler o diretório envio.
# Sempre o diretório envio deverá conter os arquivos para o próprixo serviço.
CONF_ENVIO="/envio"
DIR_ENVIO="${DIR_BASE}${CONF_ENVIO}"
# Prefixo dos Arquivos dentro do diretório envio.
# Dentro do arquivo cada linha poderá conter um Script a ser processado.
# Neste linha o Script poderá receber os parâmetros necessários.
# exemplo: arquivo: ./service_lj_01.sh
# parâmetros "$01 $02 $03 $04"
# Então a linha ficaria assim: ./service_lj_01.sh par1 par2 par3 etc...
# Se tiver mais de uma linha, adicione da mesma forma.
# é importante saber que o prefixo é sempre igual conforme abaixo.
# Se não quiser passar parâmetros, cada linha conterá apenas o
# endereço completo onde o Script estará e nada mais.
# A sua criatividade é que vai comandar. Escolha a melhor no seu caso.
CONF_FILES_PREFIX_ENVIO="service_"
# XXX: Coletar o prefixo das variáveis DIR_* para teste de uma função
# XXX: que irá verificar a existência dos diretórios de configuração.
# XXX: Testar se tem permissões para gravar, ler e criar.
# XXX: Parâmetro adicional poderá ser passado se não for obrigatório.
# XXX: Protosuário deve ser alertado se faltar algum diretório.
# XXX: Exemplo: Diretório envio deve existir. Se falhou, aplicativo deve parar.
#: FIXME: É possível automatizar este processo ?
# Será usada ao longo do aplicativo para evitar carga de source desnecessário.
SOURCE_CHECK_AMBIENTE="${BASH_SOURCE[0]}"
if [ -e "$DIR_SCRIPTS/libs.sh" ]
then
echo " Tudo Ok seguindo em frente, linha: $BASH_LINENO"
source "$DIR_SCRIPTS/libs.sh" #Carrega bibliotecas de funções.
else
echo "Não encontrou arquivo fundamental. Aplicativo irá abortar...."
read -t 5
exit 1
fi
set > meuambiente.tmp