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:
- 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)
- 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 )
- 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?