Arquivos e serviços¶
- /usr/local/bin/pss
Arquivo executável.
- /opt/pss/config/pss.properties
Configurações globais, logs, caminhos de pastas etc. Após alterações, reiniciar o serviço.
- /opt/pss/config/pss.json
Arquivo de configuração principal. Criado e atualizado automaticamente. Na inicialização, o serviço tenta carregar exatamente este arquivo. A estrutura do arquivo — veja O arquivo de configuração pss.json.
- /opt/pss/config/pss_last.json
Uma cópia do último pss.json que carregou de forma limpa. É reescrita a cada inicialização em que foi justamente o pss.json que carregou; uma inicialização sobre um arquivo de reserva não a atualiza — caso contrário ela deixaria de ser a última íntegra. Serve como primeira alternativa se o arquivo principal não puder ser analisado. Em um nó que nunca foi reiniciado desde a instalação, e onde o diretório de configurações está fechado para escrita, esse arquivo não existe.
- /opt/pss/config/pss_back.json
Cópia de segurança da configuração anterior em funcionamento. É criada apenas ao restaurar as configurações a partir de uma cópia salva anteriormente na interface web (Manutenção) e é usada como alternativa após o pss_last.json. O serviço não mantém uma cópia de segurança regular, por isso em um nó onde as configurações nunca foram restauradas esse arquivo não existe.
- /opt/pss/config/pss_default.json
Arquivo de configuração padrão. Fornecido junto com o pacote e aplicado como última alternativa se nem pss.json, nem pss_last.json, nem pss_back.json puderem ser carregados. É a partir dele também que o pss.json de trabalho é criado logo na primeira inicialização: o arquivo define a porta da interface web
8808e a conta admin / admin.- /opt/pss/config/bad/
Arquivo dos arquivos pss.json danificados. Se o arquivo de configuração principal não puder ser analisado na inicialização, ele é movido para cá com um nome no formato pss_YYYYMMDD_HHMMSS.json. O diretório é criado automaticamente e não cresce sem limite: nele permanecem os vinte arquivos com os nomes mais altos. Para mais detalhes, consulte a seção Comportamento na inicialização e em erros de configuração.
- /opt/pss/data
Pasta de armazenamento de dados. Criada e atualizada automaticamente. Pode ser alterada no arquivo de configurações globais.
- /usr/lib/systemd/system/pss.service
Arquivo de unidade systemd do serviço.
- /var/log/pss
Pasta de gravação de logs. Pode ser alterada no arquivo de configurações globais.
Nome do serviço — pss. Executa sob o usuário pss.
O trabalho com a chave é assegurado pelo pacote do sistema de proteção aksusbd — ele inclui os serviços hasplmd e aksusbd. O pacote pstreamer declara uma dependência dele, na versão 10.33 ou mais recente: ele próprio não contém o serviço de proteção, mas está no mesmo repositório, de modo que o gerenciador de pacotes o instala junto. Um serviço de proteção mais antigo não consegue carregar as bibliotecas do fornecedor que o pstreamer coloca em /var/hasplm.
Comportamento na inicialização e em erros de configuração¶
Na inicialização, o serviço tenta carregar sucessivamente os arquivos de configuração da pasta /opt/pss/config:
pss.json — arquivo de configuração principal.
pss_last.json — uma cópia da última configuração que carregou de forma limpa.
pss_back.json — cópia de segurança da configuração de trabalho anterior.
pss_default.json — configurações padrão fornecidas com o pacote.
É usado o primeiro arquivo carregado com sucesso. Se os quatro arquivos estiverem ausentes ou danificados, o serviço inicia com configurações vazias — nelas não há nenhuma conta. Nesse caso o administrador é criado manualmente: parar o serviço, acrescentar em pss.json uma entrada em web-server.login com as chaves id, login e password e iniciar o serviço novamente — uma edição feita no serviço em execução é sobrescrita a partir da memória (A API ou o arquivo de configuração).
Da existência do pss_last.json decorrem duas coisas. Primeira: apagar o pss.json já não inicia o nó do zero — o serviço subirá com o pss_last.json e o gravará de volta em pss.json. Não haverá alerta, mas isso também não passará despercebido: no registro fica uma entrada e na interface web aparece uma mensagem de inicialização. Para realmente zerar o nó, apaga-se o pss.json junto com o pss_last.json e o pss_back.json — então o serviço sobe com o pss_default.json. O restante do diretório de configurações não deve ser tocado: sem o pss.properties o serviço não inicia de forma alguma. Segunda: o pss_last.json vale exatamente o quanto for recente a última inicialização limpa. As configurações alteradas pela interface web que nunca sobreviveram a um reinício existem apenas no pss.json, e um retorno à última configuração operacional não as preservará.
Um arquivo de configuração inaceitável. Se o pss.json não puder ser lido, o serviço o move para o arquivo /opt/pss/config/bad/ com o nome pss_YYYYMMDD_HHMMSS.json; a data e a hora no nome são o momento do arquivamento em UTC, a mesma contagem que o registro usa por padrão. Depois disso o serviço prossegue com o carregamento na ordem habitual e regrava a configuração em funcionamento em pss.json a partir do arquivo que de fato carregou. Os detalhes (nome da chave, descrição do erro, nome do arquivo no repositório) são registrados no log de operação, e o alerta sobre o carregamento malsucedido também indica diretamente o caminho do repositório.
O carregamento é interrompido por: um erro de sintaxe JSON, um valor null, uma forma de valor incorreta (um objeto onde se espera um valor único, e vice-versa), um número ou outra palavra em lugar de true e false, uma cadeia longa demais, um identificador de entrada de array ausente ou repetido, a repetição de um valor declarado único. Uma chave desconhecida não descarta o arquivo: ela é ignorada, no log é escrito um aviso com o nome da seção e da chave, e na próxima gravação a chave desaparece do arquivo. A análise completa do que o serviço aceita ao ler o arquivo e do que ele rejeita está em O que o serviço faz ao ler o arquivo.
Somente o arquivo principal pss.json é arquivado. Os arquivos pss_last.json, pss_back.json e pss_default.json não são arquivados quando danificados — as entradas do log são suficientes para o diagnóstico, e os próprios arquivos permanecem em seu lugar e podem ser corrigidos manualmente.
Se em /opt/pss/config/bad/ já houver um arquivo com a mesma marca de tempo (por exemplo, com duas inicializações malsucedidas no mesmo segundo), o novo recebe um sufixo numérico — pss_YYYYMMDD_HHMMSS_2.json e seguintes; a cópia salva anteriormente não se perde. O diretório não pode crescer sem controle: o surgimento de uma nova cópia deixa nele os vinte arquivos com os nomes mais altos, e os demais são apagados. Para os repositórios que o serviço nomeia pela hora, esses são justamente os vinte mais recentes; arquivos alheios deixados no diretório também contam e ocupam esses lugares, por isso não convém guardar nada supérfluo em bad/. Uma edição malsucedida — uma cópia; um reinício por si só não cria novas cópias, porque o arquivo rejeitado já foi movido e no seu lugar foi gravado um funcional.
Valores numéricos fora do intervalo permitido. Se no arquivo de configuração ocorrer um valor numérico menor que o mínimo permitido ou maior que o máximo permitido para esse parâmetro, o serviço não descarta o arquivo por completo. Em vez disso, é registrado no log um aviso indicando o nome do parâmetro, o valor lido e o limite aplicado, e o próprio valor é ajustado ao limite do intervalo permitido mais próximo (o mínimo ou o máximo). Após a conclusão do carregamento, o serviço regrava automaticamente pss.json com os valores já corrigidos, de modo que, na reinicialização seguinte, esses avisos não aparecem mais.
Além do registro, a correção é anunciada pela notificação de partida do serviço na interface web: ela informa o número de valores ajustados ao limite e remete ao registro para os detalhes. Leia-a após uma atualização que tenha estreitado alguma faixa: a correção é silenciosa e, em um parâmetro de retenção, significa que os dados além do novo limite serão apagados pela próxima passagem de limpeza.
Esse comportamento se aplica somente no carregamento inicial do arquivo de configuração. Ao alterar as configurações pela interface web ou pela API HTTP (Gerenciamento pela API HTTP), os valores fora do intervalo permitido continuam sendo rejeitados com um erro — sem correção automática.
A recusa não devolve o nó ao estado anterior: o que o nó conseguiu ler antes do valor inválido permanece aplicado, e a mensagem de gravação recusada não significa que nada mudou (Como chegam os erros).
Editar o arquivo manualmente, validá-lo pelo esquema e transferir as configurações para outro nó ou outra versão — O arquivo de configuração pss.json e Editar, verificar e transferir as configurações.