Documentação
Atualizações do agente
O agente atualiza-se segundo um horário que se define, ou no momento em que se carrega no botão. Esta página explica o que torna uma versão de confiança, quando é que a plataforma distribui uma por sua conta e como instalar uma à mão.
O que torna uma versão fiável
Dois factos independentes têm de coincidir antes de um binário novo correr no seu host: o seu hash tem de dar o valor que a plataforma publicou e tem de trazer uma assinatura válida sobre os seus bytes em bruto, feita com a chave de publicação da plataforma.
- A soma de verificação prova que o download está intacto. Nada diz sobre quem o produziu.
- A assinatura prova quem o produziu. É verificada pelo agente antes de ser preparado o que quer que seja e, de novo, por um script que só o root pode modificar, antes de o binário ser instalado.
- A chave pública que essa segunda verificação usa pertence ao root. A conta de serviço com que o agente corre não a pode substituir, por isso comprometer o agente continua a não permitir executar um binário como root.
- Uma versão sem assinatura é recusada. Tal como uma versão cuja assinatura não corresponde, mesmo quando a soma de verificação corresponde.
Atualizar a partir do painel
Quando um agente está desatualizado, o painel di-lo no topo da sua página e na lista de agentes. Prima o botão e a plataforma entrega ao agente uma ligação de download de curta duração, pela ligação que já está aberta.
- Um agente: o aviso na sua página ou o cartão de atualização no separador de definições.
- Vários de uma vez: selecione-os na lista de agentes e atualize a seleção. A contagem no botão inclui apenas os agentes que podem mesmo ser atualizados neste momento.
- O painel de controlo tem um botão direto por cada agente desatualizado, para não ser preciso ir à procura.
- O progresso sobrevive ao recarregamento da página: é lido do comando em execução, não de algo que o navegador memorize.
O horário noturno
Cada agente tem um horário, e de origem está ativo às 03:00, hora da Europa central. Se numa das horas definidas existir uma versão mais recente, a plataforma entrega-a a esse agente tal como o botão faz. O resto não muda: o mesmo binário assinado, as mesmas verificações no anfitrião, o mesmo regresso atrás.
- Várias horas por agente, seis no máximo, numa grelha de cinco minutos. Seis chega para de quatro em quatro horas e é pouco o suficiente para se ler de relance.
- As horas são lidas no mesmo relógio de parede que o resto do painel. Uma hora que não existe na noite em que o relógio adianta corre uma hora mais tarde em vez de ser saltada, e uma hora que existe duas vezes corre uma só vez.
- Há uma janela de recuperação de quinze minutos e nada mais. Uma atualização pensada para as 03:00 não se quer às 09:00: a noite foi escolhida de propósito.
- Um agente que estava desligado à sua hora salta a noite sem gastar a sua vez, e apanha a seguinte. Um agente que estava alcançável mas já em dia gasta a vez, para que a sua história mostre que alguém foi ver.
- No máximo cinco agentes de uma conta partem por minuto. Uma frota de quarenta descarrega cerca de 22 MB cada um, a partir de uma só rede, e espalhar isso por oito minutos cabe na janela de recuperação.
- Chega um aviso quando uma atualização agendada corre bem e quando alguma falha, agrupado por conta. Um agente que falha avisa no máximo uma vez por dia, para que um anfitrião encravado não encha os avisos com a mesma frase.
O que acontece no host
O agente descarrega o binário novo ao lado de si próprio, verifica a soma de verificação e a assinatura, e só então termina. O systemd reinicia o serviço, um passo pertencente ao root verifica mais uma vez o binário preparado, instala-o de forma atómica e testa se arranca mesmo antes de o manter. Se alguma dessas etapas falhar, o binário antigo fica onde está e o serviço volta com ele.
Fazê-lo à mão
Não é obrigatório usar o painel. Tudo o que o botão faz resume-se também a alguns comandos, e o painel imprime-os já com a soma de verificação e a assinatura atuais preenchidas. Os dois passos que vale a pena manter num script próprio são os passos de verificação:
Verifique a soma de verificação do que descarregou.
echo "<sha256-from-the-panel> provibr-agent-linux-x86_64" | sha256sum -c -Verifique a assinatura contra a chave pública que está no host. É este o passo que um simples download não dá, e é o que conta.
openssl pkeyutl -verify -pubin -inkey /usr/local/lib/provibr-agent/license-signing.pub -rawin \
-in ./provibr-agent-linux-x86_64 -sigfile ./provibr-agent-linux-x86_64.sig