git clone приводит к gnutls_handshake не удался: Получен TLS-пакет неожиданной длины

Вопрос или проблема

Я использую Ubuntu 12.04 и git 1.7.9.5.

Несколько дней назад git работал нормально. Похоже, что установка или конфигурация модуля passenger для apache2 изменила какой-то необходимый пакет или изменила файл, используемый одним из них, и теперь любые попытки выполнить git clone заканчиваются:

error: gnutls_handshake() failed: A TLS packet with unexpected length was received. while accessing https://github.com/fnando/i18n-js.git/info/refs
fatal: HTTP request failed

Все ссылки, которые я могу найти на эту ошибку при попытке git clone, устарели и, похоже, касаются ошибки в стандартной установке git. Я попытался выполнить шаги, описанные в https://bugs.launchpad.net/ubuntu/+source/pycurl/+bug/926548, но это не сработало; команда dpkg-source не удалась, потому что pycurl_7.19.0-ubuntu3.dsc не существует.

Я попытался удалить и переустановить несколько пакетов, включая git, curl, libcurl3-gnutls и libcurl4-openssl-dev, без изменений – git clone по-прежнему завершается с этой же ошибкой.

На данный момент меня в первую очередь интересует восстановление использования git clone (и любых других функций, которые в конечном итоге также будут работать неправильно из-за основного вопроса).

У меня была такая же проблема, и мне пришлось перекомпилировать git с использованием libcurl-openssl-v4 вместо gnutls. Это может иметь какое-то отношение к маршруту к git-серверу и неловкому поведению gnutls.

На этом сайте есть предыдущий пошаговый вариант решения, как сделать именно это, но у меня есть пара моментов, которые я сделал иначе, и с которыми столкнулся.

Во-первых, я не рекомендую использовать dpkg -i в качестве метода установки пакета, используйте gdebi из пакета gdebi-core, потому что это позволяет вам установить пакет и его зависимости.

Наиболее важно, что в этом решении не упоминается о том, что будет создано несколько *.deb пакетов, поэтому стоит использовать gdebi-core.

Во-вторых и напоследок, убедитесь, что сначала установите пакет git-man, а затем установите основной пакет и его зависимости, по какой-то причине основной пакет, указанный в этом решении, не устанавливается ни с помощью dpkg, ни с помощью gdebi без предварительной установки руководства.

Ответ или решение

Ошибка gnutls_handshake() failed: A TLS packet with unexpected length was received может возникнуть по нескольким причинам, и, чтобы решить эту проблему, важно понимать как программное обеспечение взаимодействует друг с другом. Давайте рассмотрим возможные шаги для устранения этой ошибки в вашем окружении Ubuntu 12.04 с установленным Git версии 1.7.9.5.

1. Обновление системного ПО

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

sudo apt-get update && sudo apt-get upgrade

Также рекомендуется проверить наличие более новых версий Git и cURL. На момент написания рекомендации поддержка Ubuntu 12.04 уже закончилась, и вам может потребоваться обновление до более актуальной версии Ubuntu (например, 20.04 или выше).

2. Переустановка зависимостей

Поскольку проблема может быть связана с библиотеками, используемыми Git, попробуйте переустановить следующие пакеты:

sudo apt-get install --reinstall git git-man curl libcurl3-gnutls libcurl4-openssl-dev

3. Сборка Git с поддержкой OpenSSL

Ваша проблема может быть связана с GnuTLS, который вызывает сбои из-за особенностей шифрования. Рассмотрим шаги по сборке Git с OpenSSL:

  1. Установка необходимых пакетов для сборки:
sudo apt-get install build-essential libssl-dev libcurl4-openssl-dev libexpat1-dev gettext
  1. Скачивание исходного кода Git:
wget https://github.com/git/git/archive/refs/tags/v2.xx.x.tar.gz
tar -xzf v2.xx.x.tar.gz
cd git-2.xx.x

Замените 2.xx.x на последнюю стабильную версию Git.

  1. Сборка и установка Git:
make configure
./configure --with-curl --with-openssl
make all
sudo make install

4. Использование Gdebi для установки пакетов

Вы правильно упомянули использование gdebi, который помогает установить пакеты и их зависимости автоматически. Если вы собираете пакеты из .deb:

sudo apt-get install gdebi-core
sudo gdebi имя_пакета.deb

5. Проверка конфигураций

Убедитесь, что у вас нет ошибок в конфигурациях Apache, связанных с модулем Passenger. Попробуйте временно отключить этот модуль и снова выполнить команду git clone.

sudo a2dismod passenger
sudo service apache2 restart

6. Проверка сетевых настроек

Убедитесь в отсутствии проблем с сетью или фильтрацией на уровне сети, возможно, в организации или у провайдера возникает вмешательство в HTTPS трафик.

Заключение

Устранение ошибки gnutls_handshake failed требует комплексного подхода и может зависеть от множества различных факторов в вашей системе. Следуя вышеизложенным шагам, вы сможете выявить и, в конечном итоге, решить проблему, восстанавливая доступность команд Git. Если проблема продолжает возникать даже после всех вышеуказанных шагов, может потребоваться профессиональная помощь для дальнейшего анализа состояния системы и выявления глубинных причин.

Оцените материал
Добавить комментарий

Капча загружается...