Aplicações e configurações

May 17th, 2004 § 6 comments

Uma das coisas que sempre me incomoda em um sistema — seja nos que eu uso, seja nos que eu mesmo crio — é onde o mesmo guarda as configurações. Esse incômodo tem dois lados: primeiro, na questão de guardar essas configurações em backups, para o caso de perda de dados; segundo, na questão de compartilhamento de código.

O primeiro lado é de longe o que mais atrapalha e acontece em ambos os sistemas operacionais que eu uso freqüentemente: o Linux e o Windows. Provavelmente acontece me outros sistemas também, embora eu já tenha lido que o Mac OS lida com a questão de forma mais adequada.

No Linux, existem dois pontos principais onde uma aplicação pode guardar configurações, respectivamente os diretórios /etc e /home. O primeiro é normalmente usado para aplicações do sistema, já que ele é um diretório cujas permissões são mais restritas, sendo geralmente só acessíveis aos usuários de administração e programas que rodam como serviços. O segundo é usado para guardar as configurações dos próprios usuários e programas que eles eventualmente tenham instalado. Nos dois casos, é possível fazer um backup meramente salvando ambos os diretórios.

O problema acontece, então, quando aplicativos decidem guardar configurações em locais diferentes, geralmente por existirem em um estado intermediário de acesso, incapazes de acessar diretórios do sistema e não podendo guardar permissões por usuário, por serem de uso geral. É o caso, por exemplo, de aplicações Web. Essas aplicações tender a ser instaladas em locais compartilhados, onde os usuários interessados podem fazer as modificações necessárias sem comprometer o sistema.

A questão é que, nesses casos, como as aplicações não podem acessar os diretórios do sistema, elas acabam guardando suas configurações nos seus próprios diretórios de código ou dados. Pior, algumas misturam dados e códigos, dificultando a identificação do que precisa ser salvo ou não. O resultado é que cada aplicação adiciona um novo caminho que precisa ser salvo em backups — em alguns casos, um caminho que precisa ser filtrado para que o backup não tenha informações desnecessárias.

No Windows, sempre que eu preciso reinstalar o sistema, eu acabo perdendo informações de um aplicação ou outra que colocaram seus dados de configuração no seus próprios diretórios de instalação. Embora o Windows tem um diretório especificamente criado para tais dados, muitas aplicações o ignoram ou somente fazem um uso parcial do mesmo. E o próprio Windows guarda informações lá, como o registro, que pela sua natureza não podem ser simplesmente copiadas de um backup para o sistema sem necessidade de alteração em caso de falhas catastróficas.

Nesse aspecto, o Linux é melhor já que guarda a maior parte de suas informações em formatos de texto, que podem ser rapidamente alterados em um editor comum. Mas mesmo no Linux é possível esquecer de salvar algumas essas configurações e perder tempo na instalação de um novo sistema. MovableType, MoinMoin, SquirrelMail e outras aplicações Web que uso, todas tem seus arquivos de configurações sob os diretórios de código, forçando-me a lembrar de manter esses diretórios extras em backups. Pior ainda, ter a configuração em arquivos comuns misturados com o código causa um problema de segurança. Alguns aplicação são forçadas a usar truques para impedir que os arquivos de configuração sejam vistos externamente.

O segundo lado, o do compartilhamento de código, também é um que causa problemas. Aplicações Web, cujo código em geral roda diretamente no servidor, quando passam a ser mantidas por versão tendem a ter toda a estrutura replicado no mesmo, incluindo eventuais arquivos de configuração. Se os desenvolvedores não tomarem cuidado, criando filtros de exclusão ou coisa similar, esses arquivos ficam sendo modificados a cada check in no controle de versão à medida que os desenvolvedores fazem suas modificações. Quando um outro desenvolvedor faz o check out dos arquivos, ele corre o risco de sobrescrever suas próprias configurações e perder minutos de trabalho tentando restaurar suas configurações antigas.

Como usuário, não é minha obrigação ficar cuidando desses aspectos e eu acabo sempre me irritando tendo que configurar dezenas de aplicações que deveriam saber como seu comportar melhor. Como administrador de sistemas, a questão das aplicações que guardam suas configurações em locais despadronizados só aumenta o meu trabalho. Como desenvolvedor de sistemas, é minha obrigação guarantir que tanto usuários como administrador de sistemas tenham uma vida mais fácil no que concerne a essa questões. Desenvolvedores de sistema, então, deveriam prestar mais atenção onde suas aplicações guardam seus dados.

No Windows, para aplicações do sistema isso é praticamente impossível já que o próprio sistema não tem um local padrão único para esses dados, facilmente acessível a backups. No Linux, isso quer disser o diretório /etc para aplicações de sistema.

Aplicações comuns deveriam sempre guardar seus dados no diretório do usuário que as instalou. No Windows, é o diretório Documents And Settings, sob o disco do sistema, em versões mais novas do sistema operacional. No Linux, é o diretório /home, de preferências em diretórios escondidos. Felizmente, no Linux, a maioria das aplicações já sem comportam assim.

Para o terceiro tipo de aplicações, as que precisam guardar seus dados em diretórios com graus diversos de permissões, o ideal é permitir o reposicionamento do arquivo de configurações. Seja por variáveis de ambiente, links ou arquivo mestre que simplesmente indique ou inclua o caminho real da configuração, uma aplicação deve estar pronta para ler seus dados de qualquer lugar.

Recentemente, instalando aplicações Web em meu servidor, eu adotei a prática de criar um diretório padrão para guardar as aplicações. Nesse diretório, há um sub-diretório para cada aplicação, contendo todas suas configurações. Como o sistema é Linux, eu fui capaz de criar um link simbólico para esse diretório e seus arquivos nos locais onde as aplicações esperam seus dados. No Windows, eu provavelmente não conseguiria isso na maior parte dos casos.

É claro que nem sempre é possível fazer isto, mesmo no Linux. Mas mesmo usuários comuns poderiam se beneficiar de um esquema similar se as aplicações colaborassem para salvar seus dados em um local comum, fora de seus diretórios de código ou executáveis.

Para o problema do compartilhamento de configurações em um sistema de controle de versão, eu venho adotando uma prática diferente nos sistemas novos em que tenho trabalhado. O controle de versão guarda um modelo genérico da configuração e o arquivo de configuração, dependendo da linguagem, simplesmente inclui o arquivo de configuração real, que pode estar em outro lugar, ou é um mero link para o arquivo real. Em alguns casos mais rasos, o caminho de configuração da aplicação está em uma variável de ambiente. Isso tem evitado problemas de arquivos sobrescritos desnecessariamente. No caso de sistema que possuem plugins, o mesmo deveria prover uma API que estes possam usar para salvar suas respectivas configurações.

Se você é um desenvolvedor, seja qual a estratégia você for adotar, sempre compensa pensar um pouco nessas questões na hora de criar um novo sistema. Você se beneficiará e seus usuários agradecerão.

§ 6 Responses to Aplicações e configurações"

  • sérgio says:

    Pelo visto, enquanto esteve de férias(forçadas) da blogosfera escreveu vários post…e agora vai soltando-os gradativamente ;-)

  • Ronaldo says:

    Por incrível que pareça, esses textos foram produzidos pouco antes de serem colocados aqui. Quando o site saiu do ar, eu até tinha a inteção de fazer algo assim, mas a preguiça falou mais alto :-)

    De qualquer forma, quando você vir o próximo texto a ser colocado aqui você vai duvidar da minha palavra… :-P

  • Kenji says:

    Poxa, com toda essa verbosidade, confessa, já estava tendo tremedeiras em ficar tanto tempo sem escrever né?! :-D

  • Ronaldo says:

    Tá bom, eu confesso. Eu estava tendo até sonhos com o conteúdo. Tudo o que eu via pela frente era blogável.. :-P

  • caffo says:

    Depois de ler esse post (principalmente a parte sobre criar um diretório único para o armazenamento dos programas), não pude deixar de pensar no gobolinux. Não sei se você conhece, mas fica aqui a dica.

    http://www.gobolinux.org/

    Bem vindo novamente :)

  • Ronaldo says:

    Interessante essa distro. Não conhecia. Mais uma para adicionar ao rol das que eu preciso testar para ver o que encontro de útil. Essa área de configurações no Linux é uma porcaria. O pessoal da LSB podia especificar alguma coisa nesse sentido.

What's this?

You are currently reading Aplicações e configurações at Superfície Reflexiva.

meta