uVersion
Русский
Скачать →

Wiki

Установка на Ubuntu / Debian

Пакет .deb: три вопроса, каталог данных, установка офлайн, резервное копирование и удаление.

Ubuntu 24.04+, Debian 13+ (x86_64). Две команды, три вопроса.

Установка

1. Скачать пакет

С машины, которая будет размещать сервер, в обычном сеансе:

cd /tmp && wget -N https://uversion.io/downloads/server/uversion-server_latest_amd64.deb

URL _latest_ всегда указывает на последнюю опубликованную версию. Флаг -N указывает wget повторно загружать файл, только если удалённый файл новее: удобно для обновления без накопления копий .deb.1, .deb.2 и т. д. cd /tmp позволяет избежать косметического предупреждения apt ("unsandboxed as root"), когда .deb находится в вашей домашней директории.

2. Запустить установку

Одна команда, в каталоге, куда вы только что скачали пакет:

sudo apt install ./uversion-server_latest_amd64.deb

Установщик задаёт тогда три вопроса, в порядке трёх следующих шагов. Они появляются в синем полноэкранном диалоге: вы перемещаетесь клавишей Tab и подтверждаете клавишей Enter.

3. Ответить: каталог данных

По умолчанию: /var/lib/uversion. Именно сюда попадает содержимое ваших версионируемых файлов, то есть это каталог, который растёт, а значит тот, который вы хотите держать на своём большом диске. Принимаются не все пути: раздел Выбор каталога данных приводит четыре правила, и установщик отказывает, называя нарушенное правило.

Первый вопрос установщика Debian, в синем полноэкранном диалоге: путь каталога данных, предзаполненный значением /var/lib/uversion.

4. Ответить: разместить базу данных тоже в каталоге данных?

По умолчанию: нет. Это самый весомый по последствиям вопрос установки, и у этого значения по умолчанию есть цена, которую стоит знать, прежде чем оставить его как есть.

Этот ответ решает, достаточно ли одного диска, чтобы восстановить ваш сервер.

  • Нет (по умолчанию): база данных PostgreSQL остаётся в системном каталоге (/var/lib/postgresql), отдельно от ваших данных. Если машина погибнет, уцелевший диск данных содержит содержимое файлов, но больше ни одной ревизии, ни одной учётной записи, ни одной блокировки и ни одного разрешения. Это не сервер, который перезапускают: это груда байтов.
  • Да: установщик создаёт выделенную базу данных внутри каталога данных и записывает туда процедуру восстановления. Одного уцелевшего диска, плюс PostgreSQL и этого пакета, тогда достаточно, чтобы перестроить сервер на другой машине.

Две оговорки, которые стоит знать, прежде чем ответить «да». Этот каталог базы данных может быть повторно открыт только мажорной версией PostgreSQL, которая его создала, так что восстановление через несколько лет может потребовать явно установить эту версию. И диск тогда несёт также лицензионный ключ, секрет JWT и пароль базы данных: обращайтесь с ним как с секретом. Этот ответ меняется позже командой sudo dpkg-reconfigure uversion-server.

5. Ответить: код активации

Обязателен, кроме случая, когда лицензия уже присутствует на машине или на диске, выбранном на шаге 3: в этом случае установщик сообщает вам об этом отдельным сообщением и не задаёт вопрос, потому что код активации одноразовый, а ваш уже израсходован машиной, с которой пришёл этот диск.

Поле принимает три формы, и это ваш выход, если у машины нет Интернета: короткий код UV-XXXX-XXXX-XXXX, абсолютный путь к файлу, содержащему ваш полный лицензионный ключ, или этот полный ключ, вставленный напрямую (длинная строка, начинающаяся с eyJ). Только при первой форме установщик связывается с licence.uversion.io, чтобы обменять код на полный ключ.

6. Записать то, что выводится в конце

Установка завершается цветной рамкой: имя пользователя admin, временный пароль, адрес сервера и отпечаток сертификата. Запишите их: файл, содержащий этот пароль, удаляется, как только вы его меняете.

Сводка, выводимая в конце установки: имя администратора, временный пароль и адрес сервера.

Затем вы можете перейти к Первый вход.

Прерванную установку можно безопасно перезапустить. Если вы закрыли окно, если пропала сеть или если установщик остановился на ошибке, просто перезапустите ту же команду apt install. Ваш код активации не теряется повторно: как только он был обменян, полученный ключ записывается на диск и повторно используется при последующих попытках. А чтобы вернуться к любому ответу впоследствии, без переустановки: sudo dpkg-reconfigure uversion-server. Это универсальная команда-выручалочка этой страницы.

Выбрать каталог данных, который установщик примет

Четыре правила. Первые три проверяются до того, как израсходуется ваш код активации, так что отказ вам ничего не стоит: вы исправляете и начинаете заново.

  • Ни под /home, ни под /root. Сервер работает под системной учётной записью, намеренно лишённой любого доступа к личным каталогам: он никогда не смог бы там читать или писать и не запустился бы.
  • Никаких пробелов в пути. Путь копируется как есть в настройки службы, где пробел разделяет два значения. Внешний диск, автоматически смонтированный под именем вроде /media/jean/My Book, попадает именно на это.
  • Абсолютный путь, то есть начинающийся с /.
  • Каждый родительский каталог должен пропускать учётные записи uversion и postgres. Это наименее очевидная ловушка, и она не видна, когда устанавливаешь от имени root: созданный вручную и закрытый родительский каталог (например, /perforce с root:root 0750, унаследованный от репозитория Helix) пропускает всю установку, а затем блокирует службу при первом же доступе. Симптом — служба, которая отказывается запускаться с status=200/CHDIR, или «Permission denied» при первой записи.

Чтобы проверить этот последний пункт до запуска установки, отобразите разрешения всей цепочки каталогов, ведущей к вашему выбору:

namei -l /srv/uversion        # remplacez par le chemin que vous voulez utiliser

В каждой строке должен быть x в последнем столбце разрешений (столбце «прочих»). Если какого-то не хватает, установщик называет вам виновный каталог и точную команду, которую нужно выполнить, вида sudo chmod o+x /le/dossier. Он никогда сам не изменяет каталог, который ему не принадлежит: открыть доступ в вашем дереве — ваше решение, а не его.

Куда попадают файлы

Два места, и только одно из двух следует за вами, если вы меняете каталог данных.

В каталоге данных (том, что из вопроса 1): содержимое ваших версионируемых файлов (под data/chunks), TLS-сертификат и его отпечаток (под data/tls), идентичность сервера (server-id, last-validated-at), начальный пароль администратора (initial-admin-password, стирается, как только вы его меняете), база данных PostgreSQL (pgdata) и комплект восстановления (recovery), если вы ответили «да» на вопрос 2.

В /etc/uversion/, который никогда не перемещается: файл конфигурации config.toml, голая копия лицензионного ключа (licence-key) и пароль базы данных (db-password).

Все команды на этой странице используют <data-dir> вместо жёстко прописанного пути, потому что этот путь — тот, который выбрали вы. Чтобы прочитать настоящее значение на уже установленной машине:

sudo sed -n 's/^WorkingDirectory=//p' /etc/systemd/system/uversion-server.service.d/10-data-dir.conf

Проверка установки

Три независимые проверки, выполнять в этом порядке: служба работает, она слушает, и она ни о чём не сообщила.

1. Служба работает

systemctl status uversion-server

Ожидается: active (running). Любое другое значение отсылает к устранению неполадок.

2. Сервер слушает по HTTPS на 8443

ss -tlnp | grep 8443

Должна появиться строка. Если ничего не выводится, а служба при этом работает, обычно это значит, что TLS был отключён в конфигурации: сервер тогда переходит на обычный HTTP, и 8443 вообще перестаёт слушать.

3. В журналах нет ошибок

sudo journalctl -u uversion-server -n 50

journalctl — это читатель системных журналов: именно сюда сервер пишет то, что делает, и это первое место, куда стоит заглянуть, когда что-то не запускается.

Повторно показать отпечаток сертификата

Заменив <data-dir> значением, прочитанным выше:

sudo cat <data-dir>/data/tls/fingerprint

Повторно показать начальный пароль администратора

Пока он не был изменён, он всё ещё на диске:

sudo cat <data-dir>/initial-admin-password

«No such file or directory» здесь означает, что пароль уже был изменён: это ожидаемое поведение, файл удаляется в этот момент.

Неинтерактивная и офлайн-установка

Две разные потребности, один и тот же механизм: предзаполнить ответы перед запуском apt, так чтобы не появлялось ни одного вопроса. Система, которая хранит эти ответы, называется debconf, и ею управляют из командной строки.

1. Предзаполнить три ответа

По одной строке на вопрос, ровно те три, что и в интерактивной установке:

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. Установить без диалога

Поскольку ответы уже на месте, установка больше ни о чём не спрашивает:

sudo DEBIAN_FRONTEND=noninteractive apt install -y ./uversion-server_latest_amd64.deb

Офлайн-вариант: дать ключ вместо кода

В сети без доступа к Интернету код активации не может быть обменян: некого достичь. Получите тогда ваш полный лицензионный ключ из личного кабинета на подключённом рабочем месте, положите его на машину и укажите путь к файлу вместо кода, на шаге 1 выше. Это единственный выход, и он предусмотрен:

echo 'uversion-server uversion-server/licence-key string /root/uversion-licence.key' | sudo debconf-set-selections

Файл должен содержать ключ один, на одной строке, без кавычек и иного содержимого вокруг. Ошибочно указанный целый config.toml отклоняется явно. Третья возможная форма, если вы предпочитаете не класть файл: вставить полный ключ прямо в значение, вместо пути.

Сделать резервную копию перед любой рискованной операцией

Три вещи, которые нужно скопировать, и сохраняются они не одинаково: база данных (учётные записи, ревизии, блокировки, разрешения), каталог данных (содержимое файлов) и конфигурация, которая живёт в другом месте и о которой забывают.

1. База данных

Она сохраняется от имени учётной записи postgres, никогда не от root: у PostgreSQL нет «роли» (его слово для учётной записи базы данных) по имени root, так что команда, запущенная прямо от root, завершается ошибкой с сообщением, которое выглядит как сбой, тогда как это вопрос идентичности.

Если вы ответили нет на вопрос о базе данных (значение по умолчанию), она живёт в системном кластере:

sudo -u postgres pg_dump -Fc uversion > /tmp/uversion.dump

Если вы ответили да, она живёт в отдельном кластере, который нужно назвать явно, иначе вы сохраните не тот:

pg_lsclusters                                    # repere la ligne "uversion" et sa version
sudo -u postgres pg_dump --cluster <major>/uversion -Fc uversion > /tmp/uversion.dump

2. Каталог данных

Служба остановлена, для согласованной копии:

sudo systemctl stop uversion-server
sudo tar czf /tmp/uversion-data.tar.gz -C <data-dir> .
sudo systemctl start uversion-server

3. Конфигурация

/etc/uversion/ не следует за каталогом данных и не находится в базе данных: она несёт лицензионный ключ, секрет, который подписывает сеансы, и пароль базы данных. Без неё восстановление на новой машине начинается заново с новым секретом, так что вся команда отключается разом, и приходится снова запрашивать лицензию.

sudo tar czf /tmp/uversion-etc.tar.gz -C /etc uversion

Удаление

Внимание: эти команды удаляют ваши репозитории, историю, учётные записи пользователей и конфигурации. Сначала сделайте резервную копию из предыдущего раздела, если хотите иметь возможность вернуться назад.

1. Очистить пакет

Очистка убирает бинарный файл, службу, ответы конфигурации, /etc/uversion/ и системную учётную запись uversion. Она намеренно сохраняет базу данных и каталог данных: это ваши файлы, менеджер пакетов не стирает их у вас за спиной.

sudo systemctl stop uversion-server 2>/dev/null
sudo apt purge -y uversion-server

Не запускайте sudo apt autoremove --purge после этого удаления. PostgreSQL пришёл как зависимость этого пакета, поэтому apt предложит его убрать, а его собственная очистка стирает все базы данных машины, включая те, что не имеют никакого отношения к uVersion. Пакет ставит предохранители при установке, но команды всё равно стоит избегать.

2. Следовать последовательности, которую очистка только что вывела

База данных и каталог данных всё ещё на месте, и команды для их удаления зависят от вашей машины: именно поэтому они вычисляются и печатаются на экран, а не написаны здесь.

Прочтите то, что выводит очистка: дальнейшее зависит от вашей машины. Скрипт удаления смотрит, где на самом деле находится ваша база данных, а затем печатает на экран точную последовательность команд для вашего случая, включая пути и номер версии. Следуйте именно ей, а не универсальному рецепту: приблизительная команда либо уничтожает не ту базу данных, либо вообще ничего.

Две ловушки, которых эта последовательность избегает и которые объясняют, почему она вычисляется для вас, а не копируется из руководства:

  • DROP DATABASE без указания кластера нацеливается на не тот сервер базы данных. Если вы ответили «да» на вопрос о базе данных, ваша живёт в выделенном кластере: команда по умолчанию обращается к системному кластеру, не находит, что удалять, и оставляет вас в уверенности, что дело сделано.
  • rm -rf каталога данных без предварительного удаления кластера оставляет призрачную базу данных, всё ещё объявленную системе, которая падает при каждом запуске машины, требуя каталог, которого больше нет. Порядок важен: pg_dropcluster --stop, затем удаление каталога.

3. Удалить комплект восстановления

Делается, если диск должен покинуть ваш контроль (перепродажа, возврат из аренды, утилизация): этот каталог содержит ваш лицензионный ключ, секрет JWT и пароль базы данных, и он переживает очистку по своей конструкции.

sudo rm -rf <data-dir>/recovery

4. Убедиться, что системная учётная запись удалена

Обычно она уже убрана очисткой. Команда не имеет эффекта, если она исчезла:

sudo deluser --system uversion 2>/dev/null || true

5. Проверить, что ничего не осталось

Четыре проверки, каждая с тем, что вы должны прочитать напротив:

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)