Wiki
Installer sur Ubuntu / Debian
Paquet .deb : les trois questions, le dossier de données, l'installation hors ligne, la sauvegarde et la désinstallation.
Ubuntu 24.04+, Debian 13+ (x86_64). Deux commandes, trois questions.
Installer
1. Télécharger le paquet
Depuis la machine qui hébergera le serveur, en session ordinaire :
cd /tmp && wget -N https://uversion.io/downloads/server/uversion-server_latest_amd64.deb
L'URL _latest_ pointe toujours vers la dernière version publiée.
Le drapeau -N dit à wget de ne re-télécharger que si le
fichier distant est plus récent : utile pour mettre à jour sans accumuler des
copies .deb.1, .deb.2, etc.
cd /tmp évite un avertissement apt cosmétique
(« unsandboxed as root ») quand le .deb est dans votre dossier personnel.
2. Lancer l'installation
Une seule commande, dans le dossier où vous venez de télécharger le paquet :
sudo apt install ./uversion-server_latest_amd64.deb
L'installateur pose alors trois questions, dans l'ordre des trois étapes suivantes. Elles s'affichent dans un dialogue bleu en plein écran : vous vous déplacez avec Tab et validez avec Entrée.
3. Répondre : le dossier de données
Défaut : /var/lib/uversion. C'est là qu'atterrit le contenu de vos fichiers
versionnés, donc le dossier qui grossit, donc celui que vous voulez sur votre grand disque.
Tous les chemins ne sont pas acceptés : la section
Choisir un dossier de données donne les
quatre règles, et l'installateur refuse en nommant la règle enfreinte.
4. Répondre : mettre aussi la base sur le dossier de données ?
Défaut : non. C'est la question la plus lourde de conséquences de l'installation, et ce défaut a un coût qu'il faut connaître avant de le laisser tel quel.
Cette réponse décide si un seul disque suffit à remonter votre serveur.
- Non (défaut) : la base PostgreSQL reste dans le dossier système
(
/var/lib/postgresql), séparée de vos données. Si la machine meurt, le disque de données survivant contient le contenu des fichiers, mais plus aucune révision, aucun compte, aucun verrou et aucune permission. Ce n'est pas un serveur que l'on redémarre : c'est un tas d'octets. - Oui : l'installateur crée une base dédiée à l'intérieur du dossier de données, et y écrit une procédure de récupération. Un seul disque survivant, plus PostgreSQL et ce paquet, suffisent alors à reconstruire le serveur sur une autre machine.
Deux contreparties à connaître avant de répondre oui. Ce dossier de base
ne peut être rouvert que par la version majeure de PostgreSQL qui l'a créé,
donc une reconstruction dans plusieurs années peut demander d'installer explicitement
cette version. Et le disque porte alors aussi la clé de licence, le secret JWT et le mot
de passe de la base : traitez-le comme un secret. Cette réponse se change
plus tard avec sudo dpkg-reconfigure uversion-server.
5. Répondre : le code d'activation
Obligatoire, sauf si une licence est déjà présente sur la machine ou sur le disque choisi à l'étape 3 : dans ce cas l'installateur vous l'annonce dans un message dédié et ne pose pas la question, parce qu'un code d'activation est à usage unique et que le vôtre a déjà été consommé par la machine d'où vient ce disque.
Le champ accepte trois formes, ce qui est votre porte de sortie si la machine
n'a pas Internet : le code court UV-XXXX-XXXX-XXXX, un chemin
absolu vers un fichier contenant votre clé de licence complète, ou cette
clé complète collée directement (une longue chaîne commençant par
eyJ). Avec la première forme seulement, l'installateur contacte
licence.uversion.io pour échanger le code contre la clé complète.
6. Noter ce qui s'affiche à la fin
L'installation se termine sur un encadré coloré : identifiant admin, mot de
passe temporaire, adresse du serveur et empreinte du certificat. Notez-les :
le fichier qui contient ce mot de passe est supprimé dès que vous le changez.
Vous pouvez ensuite suivre Premier login.
Une installation interrompue se relance sans risque. Si vous
coupez la fenêtre, si le réseau tombe ou si l'installateur s'arrête sur une erreur, relancez
simplement la même commande apt install. Votre code d'activation n'est
pas reperdu : dès qu'il a été échangé, la clé obtenue est écrite sur le
disque et réutilisée aux tentatives suivantes. Et pour revenir sur n'importe quelle réponse
après coup, sans réinstaller :
sudo dpkg-reconfigure uversion-server. C'est la commande de rattrapage
universelle de cette page.
Choisir un dossier de données que l'installateur acceptera
Quatre règles. Les trois premières sont vérifiées avant que votre code d'activation ne soit consommé, donc un refus ne vous coûte rien : vous corrigez et vous recommencez.
- Ni sous
/home, ni sous/root. Le serveur tourne sous un compte système volontairement privé de tout accès aux dossiers personnels : il ne pourrait jamais lire ni écrire là, et ne démarrerait pas. - Aucun espace dans le chemin. Le chemin est recopié tel quel dans les
réglages du service, où un espace sépare deux valeurs. Un disque externe monté
automatiquement sous un nom comme
/media/jean/My Booktombe exactement là-dessus. - Un chemin absolu, c'est-à-dire commençant par
/. - Chaque dossier parent doit laisser passer les comptes
uversionetpostgres. C'est le piège le moins évident, et il ne se voit pas quand on installe en tant queroot: un dossier parent créé à la main et fermé (par exemple un/perforceenroot:root0750, hérité d'un dépôt Helix) laisse passer toute l'installation, puis bloque le service au premier accès. Le symptôme est un service qui refuse de démarrer avecstatus=200/CHDIR, ou un « Permission denied » à la première écriture.
Pour vérifier ce dernier point avant de lancer l'installation, affichez les permissions de toute la chaîne de dossiers menant à votre choix :
namei -l /srv/uversion # remplacez par le chemin que vous voulez utiliser
Chaque ligne doit porter un x dans la dernière colonne de permissions (celle des
« autres »). S'il en manque un, l'installateur vous nomme le dossier fautif et la commande
exacte à passer, du type sudo chmod o+x /le/dossier. Il ne modifie jamais lui-même
un dossier qui ne lui appartient pas : ouvrir un accès sur votre arborescence est votre
décision, pas la sienne.
Où vont les fichiers
Deux emplacements, et un seul des deux vous suit si vous changez le dossier de données.
Dans le dossier de données (celui de la question 1) : le contenu de vos
fichiers versionnés (sous data/chunks), le certificat TLS et son empreinte (sous
data/tls), l'identité du serveur (server-id,
last-validated-at), le mot de passe administrateur initial
(initial-admin-password, effacé dès que vous le changez), la base PostgreSQL
(pgdata) et le kit de récupération (recovery) si vous avez répondu
oui à la question 2.
Dans /etc/uversion/, qui ne bouge jamais : le fichier de
configuration config.toml, la copie nue de la clé de licence
(licence-key) et le mot de passe de la base (db-password).
Toutes les commandes de cette page utilisent
<data-dir> à la place d'un chemin en dur, parce que ce chemin est
celui que vous avez choisi. Pour lire la vraie valeur sur une machine déjà
installée :
sudo sed -n 's/^WorkingDirectory=//p' /etc/systemd/system/uversion-server.service.d/10-data-dir.conf
Vérifier l'installation
Trois contrôles indépendants, à passer dans cet ordre : le service tourne, il écoute, et il n'a rien signalé.
1. Le service tourne
systemctl status uversion-server
Attendu : active (running). Toute autre valeur renvoie au
dépannage.
2. Le serveur écoute en HTTPS sur 8443
ss -tlnp | grep 8443
Une ligne doit apparaître. Si rien ne sort alors que le service tourne, c'est en général que TLS a été désactivé dans la configuration : le serveur passe alors en HTTP simple et 8443 n'écoute plus du tout.
3. Les journaux ne montrent pas d'erreur
sudo journalctl -u uversion-server -n 50
journalctl est le lecteur de journaux du système : c'est là que le serveur écrit
ce qu'il fait, et le premier endroit à regarder quand quelque chose ne démarre pas.
Réafficher l'empreinte du certificat
En remplaçant <data-dir> par la valeur lue plus haut :
sudo cat <data-dir>/data/tls/fingerprint
Réafficher le mot de passe administrateur initial
Tant qu'il n'a pas été changé, il est encore sur le disque :
sudo cat <data-dir>/initial-admin-password
« No such file or directory » ici veut dire que le mot de passe a déjà été changé : c'est le comportement attendu, le fichier est supprimé à ce moment-là.
Installation non interactive et hors ligne
Deux besoins différents, une même mécanique : préremplir les réponses avant
de lancer apt, de sorte qu'aucune question ne s'affiche. Le système qui stocke ces
réponses s'appelle debconf, et il se pilote en ligne de commande.
1. Préremplir les trois réponses
Une ligne par question, exactement les trois de l'installation interactive :
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. Installer sans dialogue
Les réponses étant déjà en place, l'installation ne pose plus rien :
sudo DEBIAN_FRONTEND=noninteractive apt install -y ./uversion-server_latest_amd64.deb
Variante hors ligne : donner la clé au lieu du code
Sur un réseau sans accès à Internet, le code d'activation ne peut pas être échangé : il n'y a personne à joindre. Récupérez alors votre clé de licence complète depuis votre espace compte sur un poste connecté, déposez-la sur la machine, et donnez le chemin du fichier à la place du code, à l'étape 1 ci-dessus. C'est la seule porte de sortie, et elle est prévue :
echo 'uversion-server uversion-server/licence-key string /root/uversion-licence.key' | sudo debconf-set-selections
Le fichier doit contenir la clé seule, sur une ligne, sans guillemets ni
autre contenu autour. Un config.toml entier pointé par erreur est refusé
explicitement. Troisième forme possible, si vous préférez ne pas déposer de fichier : coller
la clé complète directement dans la valeur, à la place du chemin.
Sauvegarder avant toute opération risquée
Trois choses à copier, et elles ne se sauvegardent pas de la même façon : la base de données (comptes, révisions, verrous, permissions), le dossier de données (le contenu des fichiers) et la configuration, qui vit ailleurs et qui est celle qu'on oublie.
1. La base de données
Elle se sauvegarde en tant que compte postgres, jamais en tant que
root : PostgreSQL n'a pas de « rôle » (son mot pour un compte de base de données)
nommé root, donc la commande lancée directement en root échoue avec un message qui
ressemble à une panne alors que c'est une question d'identité.
Si vous avez répondu non à la question sur la base (le défaut), elle vit dans le cluster système :
sudo -u postgres pg_dump -Fc uversion > /tmp/uversion.dump
Si vous avez répondu oui, elle vit dans un cluster séparé, qu'il faut nommer explicitement, sinon vous sauvegardez le mauvais :
pg_lsclusters # repere la ligne "uversion" et sa version
sudo -u postgres pg_dump --cluster <major>/uversion -Fc uversion > /tmp/uversion.dump
2. Le dossier de données
Service arrêté, pour une copie cohérente :
sudo systemctl stop uversion-server
sudo tar czf /tmp/uversion-data.tar.gz -C <data-dir> .
sudo systemctl start uversion-server
3. La configuration
/etc/uversion/ ne suit pas le dossier de données et n'est pas dans la base :
il porte la clé de licence, le secret qui signe les sessions et le mot de passe de la base.
Sans lui, une restauration sur machine neuve repart avec un secret neuf, donc toute l'équipe
est déconnectée d'un coup, et il faut redemander une licence.
sudo tar czf /tmp/uversion-etc.tar.gz -C /etc uversion
Désinstaller
1. Purger le paquet
La purge retire le binaire, le service, les réponses de configuration,
/etc/uversion/ et le compte système uversion. Elle
préserve volontairement la base de données et le dossier de données : ce sont
vos fichiers, un gestionnaire de paquets ne les efface pas dans votre dos.
sudo systemctl stop uversion-server 2>/dev/null
sudo apt purge -y uversion-server
Ne lancez pas sudo apt autoremove --purge derrière cette
désinstallation. PostgreSQL est arrivé comme dépendance de ce paquet, apt va donc
proposer de le retirer, et sa propre purge efface toutes les bases de la
machine, y compris celles qui n'ont rien à voir avec uVersion. Le paquet pose des garde-fous
à l'installation, mais la commande reste à éviter.
2. Suivre la séquence que la purge vient d'afficher
La base et le dossier de données sont toujours là, et les commandes pour les retirer dépendent de votre machine : c'est pourquoi elles sont calculées et imprimées à l'écran plutôt qu'écrites ici.
Lisez ce que la purge affiche : la suite dépend de votre machine. Le script de désinstallation regarde où se trouve réellement votre base, puis imprime à l'écran la séquence de commandes exacte pour votre cas, chemins et numéro de version compris. Suivez celle-là plutôt qu'une recette générique : une commande approximative détruit soit la mauvaise base, soit rien du tout.
Deux pièges que cette séquence évite, et qui expliquent pourquoi elle est calculée pour vous plutôt que copiée d'un guide :
- Un
DROP DATABASEsans nommer le cluster vise le mauvais serveur de base. Si vous avez répondu oui à la question sur la base, la vôtre vit dans un cluster dédié : la commande par défaut s'adresse au cluster système, ne trouve rien à supprimer, et vous laisse croire que c'est fait. - Un
rm -rfdu dossier de données sans avoir d'abord retiré le cluster laisse une base fantôme toujours déclarée auprès du système, qui échoue à chaque démarrage de la machine en réclamant un dossier qui n'existe plus. L'ordre compte :pg_dropcluster --stop, puis la suppression du dossier.
3. Supprimer le kit de récupération
À faire si le disque doit quitter votre contrôle (revente, retour de location, mise au rebut) : ce dossier contient votre clé de licence, le secret JWT et le mot de passe de la base, et il survit à la purge par construction.
sudo rm -rf <data-dir>/recovery
4. S'assurer que le compte système est parti
Il est normalement déjà retiré par la purge. La commande est sans effet s'il a disparu :
sudo deluser --system uversion 2>/dev/null || true
5. Vérifier qu'il ne reste rien
Quatre contrôles, chacun avec ce que vous devez lire en face :
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)