docs/troubleshooting/gogetprivate.md

27 lines
3.5 KiB
Markdown
Raw Normal View History

2023-12-05 16:13:28 +00:00
## Проблема с go get пакета, находящегося в приватном репозитории
Суть проблемы go get может не дать склонировать из приватного репозитория. К этому могут привести несколько проблем
### fatal: could not read Password for
Если произошло такое, знначит go get пытается получить пакет по https, gitlab запрашивает пароль, но go get в авторизацию по паролю не особо умеет, поэтому и выдаёт такую ошибку.
Что нужно сделать
1) убедиться, что в gitlab добавлены ключи для доступа по ssh. В принципе, по https не получаем пакеты и ничего не клонириуем, чисто ssh. Чисто статистически с ним проблем меньше
2) Если не добавлены, то сгенерировать и добавить. Если устройств, с которых работаете несколько, то лучше добавить отдельный ключ для каждого устройтсва
3) В linux системе отредактировать ~/.gitconfig, добавив правило замены урла или заменив, если такое уже присутствует
```
[url "git@penahub.gitlab.yandexcloud.net:"]
insteadOf = https://penahub.gitlab.yandexcloud.net/
```
Что тут происходит - git помнит правила insteadOf в порядке указанном в гитконфиге. При столкновении с урлом, которых подходит под правило insteadOf, он меняет его на url указанный в секции, т.е. просто реплейсит. При этом он использует первое найденное правило, ибо если ты уже нашел способ разрешить проблему, как понять, что нужно искать дальше, если ты тупой кусок кода?
### Host key verification failed.
Скорее всего, у вас в системе для ssh используется не та пара, кототрая сохранена в gitlab. Стоит обновить значения. в linux пара ключей находится обычно в ~/.ssh. Советую генерить id_rsa, ибо с другими форматами ключей иногда бывают проблемы, суть которых я ещё не понял
### Прочие советы
Ещё бывают проблемы от того, что go get по умолчанию ищет пакеты в общем открытом хранилище, типа sumdb, точнее не помню. Ему надо явно указать, какие репозитории находятся в приватных репозиториях, путём установки переменной окружения GOPRIVATE, где через запятую перечислить пути до репозиториев с используемыми приватными пакетами. И, для удобства, советую добавить экспорт этой переменной окружения в profile или ~/.(shellname)rc