Wiki
Instalar no Ubuntu / Debian
O pacote .deb: as três perguntas, o diretório de dados, a instalação off-line, o backup e a desinstalação.
Ubuntu 24.04+, Debian 13+ (x86_64). Dois comandos, três perguntas.
Instalar
1. Baixar o pacote
A partir da máquina que hospedará o servidor, em uma sessão comum:
cd /tmp && wget -N https://uversion.io/downloads/server/uversion-server_latest_amd64.deb
A URL _latest_ sempre aponta para a versão publicada mais recente.
A flag -N diz ao wget para baixar novamente apenas se o
arquivo remoto for mais recente: útil para atualizar sem acumular cópias
.deb.1, .deb.2, etc.
cd /tmp evita um aviso cosmético do apt
("unsandboxed as root") quando o .deb está no seu diretório home.
2. Iniciar a instalação
Um único comando, no diretório onde você acabou de baixar o pacote:
sudo apt install ./uversion-server_latest_amd64.deb
O instalador faz então três perguntas, na ordem dos três passos a seguir. Elas aparecem em um diálogo azul em tela cheia: você se desloca com Tab e confirma com Enter.
3. Responder: o diretório de dados
Padrão: /var/lib/uversion. É onde aterrissa o conteúdo dos seus arquivos versionados,
ou seja, o diretório que cresce, portanto aquele que você quer no seu disco grande. Nem todo caminho é
aceito: a seção
Escolher um diretório de dados dá as quatro
regras, e o instalador recusa nomeando a regra infringida.
4. Responder: colocar o banco de dados também no diretório de dados?
Padrão: não. É a pergunta de maior consequência da instalação, e esse padrão tem um custo que convém conhecer antes de deixá-lo como está.
Essa resposta decide se um único disco basta para reconstruir seu servidor.
- Não (padrão): o banco de dados PostgreSQL permanece no diretório do sistema
(
/var/lib/postgresql), separado dos seus dados. Se a máquina morrer, o disco de dados sobrevivente contém o conteúdo dos arquivos, mas nenhuma revisão, nenhuma conta, nenhum bloqueio e nenhuma permissão. Não é um servidor que se reinicia: é um monte de bytes. - Sim: o instalador cria um banco de dados dedicado dentro do diretório de dados e escreve ali um procedimento de recuperação. Um único disco sobrevivente, mais PostgreSQL e este pacote, bastam então para reconstruir o servidor em outra máquina.
Duas contrapartidas a conhecer antes de responder sim. Esse diretório de banco de
dados só pode ser reaberto pela versão maior do PostgreSQL que o criou, de modo que
uma reconstrução daqui a vários anos pode exigir instalar explicitamente essa versão. E o disco passa
então a carregar também a chave de licença, o segredo JWT e a senha do banco de dados:
trate-o como um segredo. Essa resposta muda mais tarde com
sudo dpkg-reconfigure uversion-server.
5. Responder: o código de ativação
Obrigatório, a menos que já haja uma licença na máquina ou no disco escolhido no passo 3: nesse caso o instalador avisa você em uma mensagem dedicada e não faz a pergunta, porque um código de ativação é de uso único e o seu já foi consumido pela máquina de onde vem esse disco.
O campo aceita três formas, que é a sua saída se a máquina não tiver Internet: o
código curto UV-XXXX-XXXX-XXXX, um caminho absoluto para um arquivo que
contenha sua chave de licença completa, ou essa chave completa colada diretamente
(uma longa sequência que começa com eyJ). Somente com a primeira forma o instalador
contata licence.uversion.io para trocar o código pela chave completa.
6. Anotar o que aparece no final
A instalação termina em uma caixa colorida: usuário admin, senha temporária, endereço
do servidor e impressão digital do certificado. Anote-os: o arquivo que contém essa
senha é excluído assim que você a altera.
Em seguida, você pode seguir Primeiro login.
Uma instalação interrompida é reiniciada sem risco. Se você fechar a
janela, se a rede cair ou se o instalador parar em um erro, basta relançar o mesmo comando
apt install. Seu código de ativação não se perde de novo: assim que ele
é trocado, a chave obtida é gravada no disco e reutilizada nas tentativas seguintes. E para voltar a
qualquer resposta depois, sem reinstalar: sudo dpkg-reconfigure uversion-server. É o
comando de recuperação universal desta página.
Escolher um diretório de dados que o instalador aceite
Quatro regras. As três primeiras são verificadas antes de o seu código de ativação ser consumido, então uma recusa não custa nada a você: você corrige e recomeça.
- Nem sob
/home, nem sob/root. O servidor roda sob uma conta de sistema deliberadamente privada de qualquer acesso aos diretórios pessoais: ele nunca poderia ler nem escrever ali, e não iniciaria. - Nenhum espaço no caminho. O caminho é copiado tal como está para as
configurações do serviço, onde um espaço separa dois valores. Um disco externo montado
automaticamente sob um nome como
/media/jean/My Bookcai exatamente nisso. - Um caminho absoluto, ou seja, começando por
/. - Cada diretório pai deve deixar passar as contas
uversionepostgres. É a armadilha menos evidente, e ela não aparece quando se instala comoroot: um diretório pai criado à mão e fechado (por exemplo um/perforceemroot:root0750, herdado de um depósito Helix) deixa passar toda a instalação e depois bloqueia o serviço no primeiro acesso. O sintoma é um serviço que se recusa a iniciar comstatus=200/CHDIR, ou um "Permission denied" na primeira escrita.
Para verificar este último ponto antes de lançar a instalação, exiba as permissões de toda a cadeia de diretórios que leva à sua escolha:
namei -l /srv/uversion # remplacez par le chemin que vous voulez utiliser
Cada linha deve trazer um x na última coluna de permissões (a dos "outros"). Se faltar
algum, o instalador nomeia o diretório culpado e o comando exato a executar, do tipo
sudo chmod o+x /le/dossier. Ele nunca modifica por conta própria um diretório que não lhe
pertence: abrir um acesso na sua árvore é sua decisão, não a dele.
Para onde vão os arquivos
Dois locais, e apenas um dos dois segue você se você mudar o diretório de dados.
No diretório de dados (o da pergunta 1): o conteúdo dos seus arquivos versionados
(sob data/chunks), o certificado TLS e sua impressão digital (sob data/tls),
a identidade do servidor (server-id, last-validated-at), a senha inicial de
administrador (initial-admin-password, apagada assim que você a altera), o banco de dados
PostgreSQL (pgdata) e o kit de recuperação (recovery) se você respondeu sim à
pergunta 2.
Em /etc/uversion/, que nunca se move: o arquivo de configuração
config.toml, a cópia nua da chave de licença (licence-key) e a senha do banco
de dados (db-password).
Todos os comandos desta página usam
<data-dir> no lugar de um caminho fixo, porque esse caminho é aquele que
você escolheu. Para ler o valor real em uma máquina já instalada:
sudo sed -n 's/^WorkingDirectory=//p' /etc/systemd/system/uversion-server.service.d/10-data-dir.conf
Verificar a instalação
Três verificações independentes, a passar nesta ordem: o serviço roda, ele escuta, e não sinalizou nada.
1. O serviço roda
systemctl status uversion-server
Esperado: active (running). Qualquer outro valor remete à
resolução de problemas.
2. O servidor escuta em HTTPS na 8443
ss -tlnp | grep 8443
Uma linha deve aparecer. Se nada sair enquanto o serviço roda, em geral é porque o TLS foi desativado na configuração: o servidor passa então a HTTP simples e a 8443 deixa de escutar por completo.
3. Os logs não mostram erro
sudo journalctl -u uversion-server -n 50
journalctl é o leitor de logs do sistema: é onde o servidor escreve o que faz, e o
primeiro lugar para olhar quando algo não inicia.
Reexibir a impressão digital do certificado
Substituindo <data-dir> pelo valor lido acima:
sudo cat <data-dir>/data/tls/fingerprint
Reexibir a senha inicial de administrador
Enquanto não tiver sido alterada, ela ainda está no disco:
sudo cat <data-dir>/initial-admin-password
"No such file or directory" aqui significa que a senha já foi alterada: é o comportamento esperado, o arquivo é excluído nesse momento.
Instalação não interativa e off-line
Duas necessidades diferentes, um mesmo mecanismo: preencher as respostas de antemão
antes de lançar o apt, de modo que nenhuma pergunta apareça. O sistema que armazena essas
respostas se chama debconf, e é pilotado pela linha de comando.
1. Preencher de antemão as três respostas
Uma linha por pergunta, exatamente as três da instalação interativa:
echo 'uversion-server uversion-server/data-dir string /srv/uversion' | sudo debconf-set-selections
echo 'uversion-server uversion-server/db-on-data-dir boolean true' | sudo debconf-set-selections
echo 'uversion-server uversion-server/licence-key string UV-XXXX-XXXX-XXXX' | sudo debconf-set-selections
2. Instalar sem diálogo
Como as respostas já estão no lugar, a instalação não pergunta mais nada:
sudo DEBIAN_FRONTEND=noninteractive apt install -y ./uversion-server_latest_amd64.deb
Variante off-line: dar a chave em vez do código
Em uma rede sem acesso à Internet, o código de ativação não pode ser trocado: não há ninguém a contatar. Recupere então sua chave de licença completa a partir da sua área de conta em um posto conectado, coloque-a na máquina e dê o caminho do arquivo em vez do código, no passo 1 acima. É a única saída, e ela está prevista:
echo 'uversion-server uversion-server/licence-key string /root/uversion-licence.key' | sudo debconf-set-selections
O arquivo deve conter a chave sozinha, em uma linha, sem aspas nem outro conteúdo em
volta. Um config.toml inteiro apontado por engano é recusado explicitamente. Terceira
forma possível, se você preferir não colocar um arquivo: colar a chave completa diretamente no valor,
no lugar do caminho.
Fazer backup antes de qualquer operação arriscada
Três coisas a copiar, e elas não são copiadas da mesma maneira: o banco de dados (contas, revisões, bloqueios, permissões), o diretório de dados (o conteúdo dos arquivos) e a configuração, que vive em outro lugar e que é a que se esquece.
1. O banco de dados
Ele é copiado como a conta postgres, nunca como root: o PostgreSQL não tem
nenhum "papel" (sua palavra para uma conta de banco de dados) chamado root, então o
comando lançado diretamente como root falha com uma mensagem que parece uma pane quando é uma questão
de identidade.
Se você respondeu não à pergunta sobre o banco de dados (o padrão), ele vive no cluster do sistema:
sudo -u postgres pg_dump -Fc uversion > /tmp/uversion.dump
Se você respondeu sim, ele vive em um cluster separado, que é preciso nomear explicitamente, senão você faz backup do errado:
pg_lsclusters # repere la ligne "uversion" et sa version
sudo -u postgres pg_dump --cluster <major>/uversion -Fc uversion > /tmp/uversion.dump
2. O diretório de dados
Serviço parado, para uma cópia coerente:
sudo systemctl stop uversion-server
sudo tar czf /tmp/uversion-data.tar.gz -C <data-dir> .
sudo systemctl start uversion-server
3. A configuração
/etc/uversion/ não segue o diretório de dados e não está no banco de dados: ela carrega
a chave de licença, o segredo que assina as sessões e a senha do banco de dados. Sem ela, uma
restauração em máquina nova recomeça com um segredo novo, então toda a equipe é desconectada de uma vez,
e é preciso pedir uma licença de novo.
sudo tar czf /tmp/uversion-etc.tar.gz -C /etc uversion
Desinstalar
1. Purgar o pacote
A purga retira o binário, o serviço, as respostas de configuração, /etc/uversion/ e a
conta de sistema uversion. Ela preserva de propósito o banco de dados e o
diretório de dados: são seus arquivos, um gerenciador de pacotes não os apaga pelas suas costas.
sudo systemctl stop uversion-server 2>/dev/null
sudo apt purge -y uversion-server
Não rode sudo apt autoremove --purge depois desta
desinstalação. O PostgreSQL chegou como dependência deste pacote, então o apt vai propor
retirá-lo, e a purga dele apaga todos os bancos de dados da máquina, inclusive os que
nada têm a ver com o uVersion. O pacote coloca salvaguardas na instalação, mas o comando continua a
ser evitado.
2. Seguir a sequência que a purga acabou de exibir
O banco de dados e o diretório de dados ainda estão lá, e os comandos para retirá-los dependem da sua máquina: por isso eles são calculados e impressos na tela em vez de escritos aqui.
Leia o que a purga exibe: o restante depende da sua máquina. O script de desinstalação olha onde seu banco de dados realmente está e então imprime na tela a sequência exata de comandos para o seu caso, caminhos e número de versão incluídos. Siga aquela em vez de uma receita genérica: um comando aproximado destrói ou o banco de dados errado, ou nada.
Duas armadilhas que esta sequência evita, e que explicam por que ela é calculada para você em vez de copiada de um guia:
- Um
DROP DATABASEsem nomear o cluster mira no servidor de banco de dados errado. Se você respondeu sim à pergunta sobre o banco de dados, o seu vive em um cluster dedicado: o comando padrão se dirige ao cluster do sistema, não encontra nada para excluir, e deixa você acreditar que está feito. - Um
rm -rfdo diretório de dados sem antes ter retirado o cluster deixa um banco de dados fantasma ainda declarado ao sistema, que falha a cada inicialização da máquina reclamando um diretório que não existe mais. A ordem importa:pg_dropcluster --stop, e depois a exclusão do diretório.
3. Remover o kit de recuperação
A fazer se o disco tiver que deixar seu controle (revenda, devolução de aluguel, descarte): esse diretório contém sua chave de licença, o segredo JWT e a senha do banco de dados, e ele sobrevive à purga por construção.
sudo rm -rf <data-dir>/recovery
4. Garantir que a conta de sistema se foi
Normalmente já é retirada pela purga. O comando não tem efeito se ela desapareceu:
sudo deluser --system uversion 2>/dev/null || true
5. Verificar que nada resta
Quatro verificações, cada uma com o que você deve ler ao lado:
systemctl status uversion-server # "not-found" ou "inactive"
ls /etc/uversion 2>&1 # "No such file"
id uversion # "no such user"
sudo -u postgres psql -tAc "SELECT 1 FROM pg_database WHERE datname='uversion';" # (vide)