Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

yay выдаёт EOF при обновлении AUR: дело в IPv6 (gai.conf)

yay падает с EOF при обновлении AUR, а curl и браузер спокойно работают? Причина в приоритете IPv6. Go-резолвер yay по умолчанию пробует IPv6 первым. Когда маршрута нет, yay не может достучаться до репозитория и падает, не переключаясь на IPv4. Одна строка в /etc/gai.conf решает за минуту.

Почему yay падает, а браузер работает

yay написан на Go. Go-резолвер, когда приоритет явно не задан, ставит IPv6 выше IPv4. Yay пытается подключиться к IPv6-адресу репозитория, получает таймаут или EOF и падает. Браузеры и curl работают иначе: они используют алгоритм Happy Eyeballs, пробуют IPv6 и IPv4 параллельно. Если IPv6 мёртв, берут IPv4. Поэтому сайты открываются, а yay ломается.

Та же история с любым HTTP-клиентом. Он тестирует оба стека и выбирает работающий. Yay так не умеет. Он идёт строго через Go-резолвер, а тот упрямится в IPv6.

Как исправить приоритет IPv4 через gai.conf

Файл /etc/gai.conf управляет приоритетом адресов при вызове getaddrinfo(). Там уже есть закомментированная строка-пример. Достаточно добавить одну запись:

echo 'precedence ::ffff:0:0/96  100' | sudo tee -a /etc/gai.conf

Запись precedence ::ffff:0:0/96 100 говорит системе: IPv4-адреса получают приоритет 100, выше дефолтного приоритета чистого IPv6. Теперь при резолвинге первой строкой идёт IPv4.

Как проверить

getent ahosts aur.archlinux.org | head -3

Первой строкой должен появиться IPv4-адрес, например 209.126.35.78, а не IPv6. После этого yay обновляется штатно:

yay -Syu

Когда рабочий IPv6 появится, строку из gai.conf можно убрать.

Что ещё проверить при проблемах с yay

Git-пакеты требуют --devel

Обычный yay -Syu не подхватывает git-пакеты: rtl88x2bu-dkms-git, spotify-git и подобные. Для них нужна отдельная команда:

yay -Sua --devel

Опция --devel заставляет yay проверять git-пакеты по названию. Без неё они молча пропускаются.

Exit code 1 у yay -Qua: это нормально

Если yay -Qua выдаёт exit code 1 при актуальных пакетах, не паникуйте. Так yay сообщает: «обновлений нет». Штатное поведение, не ошибка. Подробнее про установку AUR-пакетов.

Локаль и отображение

Иногда к сетевым проблемам примешиваются каракули в выводе из-за неправильной локали. Если yay или терминал показывают мусор в описаниях пакетов, проверьте locale и установите нужную.

Зеркала не отвечают

Если yay исправлен, но пакеты не скачиваются, проблема может быть в зеркалах. Инструкция по настройке mirrorlist поможет подобрать быстрые зеркала. Если Wi-Fi работает через wpa_supplicant, убедитесь, что сеть настроена корректно.

Частые вопросы

Yay выдаёт EOF только иногда. Это точно IPv6?

Скорее всего, да. Если curl работает стабильно, а yay падает время от времени, проверьте приоритет адресов:

getent ahosts aur.archlinux.org | head -3

Если первой строкой идёт IPv6, причина в резолвере. Ставьте precedence в gai.conf.

Стоит ли отключать IPv6 полностью?

Нет. Мы лишь поднимаем приоритет IPv4 через gai.conf. Сам IPv6 остаётся в системе. Когда провайдер отдаёт рабочий IPv6-маршрут, всё подхватится автоматически.

Wi-Fi работает, но yay падает. Почему?

Сеть может функционировать, а IPv6-маршрут отсутствовать. Yay упирается в IPv6 и падает, браузер переключается на IPv4 и работает. Решение то же: gai.conf.

Какие ещё Go-программы могут столкнуться с проблемой?

Любой Go-бинарник, резолвящий DNS через стандартную библиотеку Go: lazygit, gopls, компоненты Docker без systemd-resolved. Проблема с EOF возможна и у них. Фикс через gai.conf тот же.

Заключение

EOF от yay при обновлении AUR вызван приоритетом IPv6 в Go-резолвере. Система не может достучаться до IPv6-адреса, yay не фоллбэчит на IPv4 и падает. Одна строка precedence ::ffff:0:0/96 100 в /etc/gai.conf возвращает приоритет IPv4. Не забудьте: git-пакеты обновляются через yay -Sua --devel, а exit code 1 у yay -Qua при актуальных пакетах означает лишь «обновлений нет».

Полезные ресурсы

  • AUR helpers — ArchWiki: обзор AUR-хелперов
  • getaddrinfo — ArchWiki: настройка резолвера


Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Читайте также

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max