К содержимому
gtcnsl
EN RU

Установка

gtcnsl — один статический бинарник. Скачайте под свою архитектуру, проверьте, сделайте исполняемым — готово.

Актуально для v1.3.0

Загрузка

Ничего не нужно компилировать и никакого рантайма ставить. Выберите сборку под вашу машину и скачайте через curl.

$ curl -fsSL https://dl.gtcnsl.ru/v1.3.0/gtcnsl-v1.3.0-linux-amd64 -o /usr/local/bin/gtcnsl && chmod +x /usr/local/bin/gtcnsl

amd64 — это большинство облачных VPS и десктопов; arm64 — современные ARM-серверы и Raspberry Pi 4/5; armv7 — 32-битные ARM-платы.

Проверка загрузки

С каждым релизом идёт checksums.txt с SHA-256 каждого бинарника. Положите его рядом со скачанным файлом и сверьте — это та же проверка SHA-256, что gtcnsl self-update делает перед заменой бинарника.

curl -fsSLO https://dl.gtcnsl.ru/v1.3.0/checksums.txt
sha256sum --check --ignore-missing checksums.txt
i
Что именно проверяется
--ignore-missing сверяет с манифестом только реально скачанные файлы, так что загрузка под одну архитектуру проверяется чисто (остальные архитектуры из checksums.txt пропускаются).

Положить в PATH

Сниппет установки уже пишет в /usr/local/bin/gtcnsl и ставит бит исполнения. Если скачивали вручную — сделайте это явно:

sudo install -m 0755 gtcnsl-v1.3.0-linux-amd64 /usr/local/bin/gtcnsl
!
Root для операций с сервисами
Установка Gitea и управление systemd-юнитами требуют root. Команды только на чтение (gtcnsl config get, gtcnsl doctor) — нет.

Проверить запуск

gtcnsl version

Вы увидите версию, коммит сборки и целевую архитектуру. Если команда не найдена — оболочка ещё не подхватила /usr/local/bin: откройте новую сессию.

Поддерживаемые платформы

gtcnsl тестируется на дистрибутивах и архитектурах ниже. Другие современные systemd-дистрибутивы, скорее всего, тоже работают, но не проверены.

Дистрибутив Версия Архитектуры
Debian 13 amd64 · arm64
Ubuntu 24.04 LTS amd64 · arm64
Rocky 9 amd64 · arm64

Профили сервинга: HTTP или сразу HTTPS

По умолчанию gtcnsl gitea install поднимает обычный HTTP на :3000 — правильный выбор за реверс-прокси или во внутренней сети. Если TLS должна терминировать сама Gitea, выберите профиль при установке:

# Встроенный Let's Encrypt на :443 (:80 отвечает на ACME-челлендж и редиректит).
# --acme-tos — ваше явное согласие с условиями CA; оно никогда не подразумевается.
gtcnsl gitea install --yes --serving https-acme \
    --domain git.example.com --acme-email you@example.com --acme-tos

# Свой сертификат (корпоративный CA, wildcard) — порт по умолчанию 443.
gtcnsl gitea install --yes --serving https-manual \
    --domain git.example.com \
    --cert-file /etc/gitea-tls/fullchain.pem --key-file /etc/gitea-tls/privkey.pem

Оба HTTPS-профиля проходят префлайты до того, как что-либо скачано: целевые порты должны быть свободны, файлы сертификата — существовать и читаться пользователем git, а для ACME домен проверяется (best effort) на то, что указывает на этот хост. Юнит gtcnsl выдаёт CAP_NET_BIND_SERVICE, поэтому непривилегированный git биндит :443/:80 без ухищрений.

Уже установлено по HTTP? Живой инстанс переключается без переустановки:

gtcnsl gitea enable-https --yes --serving https-acme \
    --domain git.example.com --acme-email you@example.com --acme-tos

Переключение едет на декларативной машинерии конфига — атомарная запись с бэкапом, рестарт, health-check — и при любой ошибке (сертификат не выдан, DNS ещё не указывает сюда) автоматически откатывается к рабочему HTTP-конфигу. Если рукописный юнит не даёт capability для портов ниже 1024, --grant-caps кладёт маленький drop-in от gtcnsl; сам файл юнита никогда не редактируется. У gtcnsl doctor появилась проба когерентности, которая ловит конфиг «https на :443», чей юнит на самом деле не может забиндить порт.

Уже есть Gitea? Адоптируйте её

Если на хосте уже стоит Gitea — руками или другим инструментом — переустанавливать не нужно. gtcnsl gitea install обнаружит её и обновит на месте (см. «Обновления»), а gtcnsl gitea adopt возьмёт установку под управление не перенося никакие данные:

gtcnsl gitea adopt                      # dry-run: печатает план, ничего не меняет
gtcnsl gitea adopt --yes --emit-template app.ini.tmpl
gtcnsl gitea adopt --yes --unit         # опционально: нормализовать рукописный юнит

Adopt выносит секреты из app.ini в secrets.ini с теми же значениями (без рестарта), затягивает права world-readable app.ini и генерирует шаблон без секретов для коммита в git — открывая config apply и secrets rotate. --unit разделяет рукописный unit-файл на управляемую базу gtcnsl и operator-owned drop-in, причём сам systemd доказывает, что поведение не изменилось (иначе — автооткат).

Что дальше

Бинарник в PATH — и вы в трёх командах от работающего Gitea с CI.