05 марта 2026 № 1 (2026)

ROSARIUM

газета советского программиста

Дополнительные темы

На этой странице

Shell-completions

Некоторые Go-приложения могут генерировать shell-completions. Если lazygit поддерживает это, вы можете добавить их в пакет:

%install
install -Dm0755 lazygit %{buildroot}%{_bindir}/lazygit

# Генерация completions (если поддерживается)
./lazygit completion bash 2>/dev/null && {
    install -Dm0644 <(./lazygit completion bash) \
        %{buildroot}%{_datadir}/bash-completion/completions/lazygit
    install -Dm0644 <(./lazygit completion zsh) \
        %{buildroot}%{_datadir}/zsh/site-functions/_lazygit
    install -Dm0644 <(./lazygit completion fish) \
        %{buildroot}%{_datadir}/fish/vendor_completions.d/lazygit.fish
} || :

Если поддержки нет – || : не даст сборке упасть. Пути для completions:

ShellПутьПояснение
bash/usr/share/bash-completion/completions/lazygitСтандартный путь для bash-completion
zsh/usr/share/zsh/site-functions/_lazygitПрефикс _ обязателен для zsh
fish/usr/share/fish/vendor_completions.d/lazygit.fishСуффикс .fish обязателен

Не забудьте добавить файлы в %files:

%files
%license LICENSE
%doc README.md
%{_bindir}/lazygit
# Раскомментируйте, если completions генерируются:
# %{_datadir}/bash-completion/completions/lazygit
# %{_datadir}/zsh/site-functions/_lazygit
# %{_datadir}/fish/vendor_completions.d/lazygit.fish

Go module proxy и воспроизводимость

GOPROXY=off

В секции %build мы установили GOPROXY=off. Это критически важно:

export GOPROXY=off

Без этого Go может попытаться проверить контрольные суммы модулей через sum.golang.org, даже если модули уже есть в vendor/. На ABF это приведёт к ошибке:

verifying module: checksum mismatch ... GONOSUMCHECK or GONOSUMDB to bypass

С GOPROXY=off Go полностью работает офлайн. Никаких сюрпризов при сборке.

Воспроизводимые сборки

Для полной воспроизводимости также рекомендуется:

export GONOSUMCHECK=*
export GONOSUMDB=*
export GOFLAGS="-mod=vendor -trimpath"

Флаг -trimpath убирает абсолютные пути из бинарника (вместо /home/user/rpmbuild/BUILD/... в отладочной информации будет относительный путь). Это делает сборку воспроизводимой независимо от пути, где она выполнялась.

Структура файлов в пакете

В отличие от C/C++ проектов, Go-приложение устанавливает минимум файлов:

/usr/bin/lazygit                             ← бинарник
/usr/share/doc/lazygit/README.md             ← документация
/usr/share/licenses/lazygit/LICENSE          ← лицензия

Нет библиотек, нет заголовков, нет pkg-config, нет man-страниц (если проект их не генерирует). Пакет получается предельно простым.