Onde colocar meu servidor, configuração e dados (grandes)? / srv? / etc? / usr / local / bin? /home/me/.whatever?

2

Eu estava pesquisando este site para uma boa resposta à minha pergunta, o melhor que pude encontrar foi this . (Eu acho que para colocar minha configuração em /etc , aplicação em /usr/local/bin e dados em /home/firda/.tunnel ou em algum lugar em /var ou /srv ou /usr .)

Prefácio:

Estou escrevendo aplicativo de servidor em C ++. Deve ficar no meio de outros servidores, aplicativos móveis e unidades (pequenos dispositivos, por exemplo, no carro). Geralmente, ele escutaria na porta TCP (para lidar com clientes = aplicativos e servidores móveis) e na porta UDP (onde os dados iriam de / para ipsec / racoon e / ou porta aberta - comunicação com dispositivos, protocolo personalizado). Ele não precisa de privilégios de root (porta > 1000, por exemplo, 11235), então, decidi definir o bit SUID e atribuir a propriedade à minha conta (para executá-lo na minha conta mesmo se eu iniciá-lo como root). É assim que eu implemento agora (do MAKEFILE)

deploy      := /usr/local/bin
user        := firda
name        := tunnel
watchdog    := tunnel-watchdog
names       := $(name) $(watchdog)

deploy:
    cp $(names) $(deploy)/
    chown $(user):$(user) $(patsubst %,$(deploy)/%,$(names))
    chmod a-rwx,u+xs $(patsubst %,$(deploy)/%,$(names))
    $(deploy)/$(watchdog)

e adicionado /usr/local/bin/tunnel-watchdog a /etc/rc.local (o tet-watchdog apenas se bifurca para executar o túnel e reiniciá-lo se ele morrer). Quando eu quiser implantá-lo, copio as fontes para meu diretório pessoal ( /home/firda/tunnel ), digite make test para criar e fazer o autoteste (em uma conta não raiz), então kill desses dois processos em execução (depois ps -fu firda para conhecer PIDs) e digite make deploy para copiar novos executáveis para /usr/local/bin e iniciá-lo novamente (na conta root).

Perguntas:

  1. Onde colocar a configuração básica? ( /etc/tunnel/config now - especifica números de porta, mas agora também contém credenciais / configurações de usuário / unidade)
  2. Onde colocar dados básicos como configuração de tempo de execução (nomes de usuário, credenciais, senhas , chaves de cifra , IDs de dispositivos - tudo pode ser alterado remotamente por protocolo TCP personalizado). (por enquanto, /etc/tunnel/config.tmp é criado após algum tempo limite quando, por exemplo, usuário é adicionado, /etc/tunnel/config - > /etc/tunnel/config.bak e /etc/tunnel/config.tmp - > /etc/tunnel/config )
  3. Onde colocar grandes dados de leitura / gravação persistentes ? (isso é o que precisa ser feito - todos os dados de todas as unidades colocadas em algum arquivo grande, mas nenhum dBase, loja virtual customizada - /home/firda/whatever ? /srv/something ?)

Eu sei que posso colocar todos os arquivos em meu diretório pessoal (é o meu próprio servidor, que provavelmente não será distribuído para ninguém, ... quem sabe), mas gostaria de conhecer a melhor prática conselhos para fazê-lo corretamente (não para cruzar habbits administrador como particionamento de disco e cotas - Eu gostaria de saber como é feito normalmente, como isso pode ser feito, quais pastas são boas para alguns sistema de backup ). Obrigado.

P.S .: Este não é um servidor web (até agora), mas eu acho que as respostas podem ser semelhantes. Essa pergunta pode parecer duplicada para a que eu criei, mas não fiquei satisfeito com a resposta, então, especifiquei meu próprio aplicativo e necessidades (a questão do particionamento, cotas e backups especialmente).

FEEDBACK:

Padrão de hierarquia do sistema de arquivos divide os diretórios de acordo com dois critérios: somente leitura ( /usr , /etc , /opt e /boot ) - todos estes são para executáveis e configuração estável, não para dados. Segundo critério é compartilhável (independente de plataforma) e não compartilhável (dependente de plataforma). Os dados devem ir em /var tree com uma exceção adicionada: /srv pode ser usado para dados somente leitura e leitura / gravação (perfeito para serviços que desejam ambos os tipos de arquivos em um diretório).

Por enquanto, provavelmente usarei /etc para configuração básica (incluindo parâmetros para alteração de diretórios), /usr/local/bin para o aplicativo e /var/local para meus dados. (Usando /srv poderia ser a segunda opção.)

Algum comentário antes de fecharmos esta questão?

    
por firda 09.08.2014 / 14:14

1 resposta

2

O único documento que tenta entender tudo isso é o Padrão de Hierarquia do Sistema de Arquivos ; a.k.a. a ESF.

Não fornece uma resposta fácil e direta à sua pergunta. Parece haver 3 opções:

  1. Use /opt/tunnel e mantenha todos arquivos relacionados ao aplicativo lá.
  2. Use o sistema de empacotamento e empacote seu aplicativo como um pacote Debian. Neste caso, o documento que você quer é o Manual de Normas Debian , especialmente o capítulo 9, O sistema operacional .
  3. Use os diretórios /usr/local e /*/local relacionados. Leia a ESF

A opção 1 é mais comum para software proprietário e corporativo, mas não está muito no espírito do restante do sistema. A opção 2 é definitivamente a melhor em termos de ter um bom sistema, mas é muito trabalhoso se você não está acostumado com o software de empacotamento. A opção 3 é o método tradicional e historicamente mais comum, e o FHS será o mais útil para você aqui, mas você provavelmente também gostaria de investigar como outras pessoas e softwares (que você de outra forma respeita) resolveram o mesmo problema.

    
por 09.08.2014 / 22:31