yay падает с EOF при обновлении AUR, а curl и браузер спокойно работают? Причина в приоритете IPv6. Go-резолвер yay по умолчанию пробует IPv6 первым. Когда маршрута нет, yay не может достучаться до репозитория и падает, не переключаясь на IPv4. Одна строка в /etc/gai.conf решает за минуту.
yay написан на Go. Go-резолвер, когда приоритет явно не задан, ставит IPv6 выше IPv4. Yay пытается подключиться к IPv6-адресу репозитория, получает таймаут или EOF и падает. Браузеры и curl работают иначе: они используют алгоритм Happy Eyeballs, пробуют IPv6 и IPv4 параллельно. Если IPv6 мёртв, берут IPv4. Поэтому сайты открываются, а yay ломается.
Та же история с любым HTTP-клиентом. Он тестирует оба стека и выбирает работающий. Yay так не умеет. Он идёт строго через Go-резолвер, а тот упрямится в IPv6.
Файл /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 можно убрать.
--develОбычный yay -Syu не подхватывает git-пакеты: rtl88x2bu-dkms-git, spotify-git и подобные. Для них нужна отдельная команда:
yay -Sua --devel
Опция --devel заставляет yay проверять git-пакеты по названию. Без неё они молча пропускаются.
yay -Qua: это нормальноЕсли yay -Qua выдаёт exit code 1 при актуальных пакетах, не паникуйте. Так yay сообщает: «обновлений нет». Штатное поведение, не ошибка. Подробнее про установку AUR-пакетов.
Иногда к сетевым проблемам примешиваются каракули в выводе из-за неправильной локали. Если yay или терминал показывают мусор в описаниях пакетов, проверьте locale и установите нужную.
Если yay исправлен, но пакеты не скачиваются, проблема может быть в зеркалах. Инструкция по настройке mirrorlist поможет подобрать быстрые зеркала. Если Wi-Fi работает через wpa_supplicant, убедитесь, что сеть настроена корректно.
Скорее всего, да. Если curl работает стабильно, а yay падает время от времени, проверьте приоритет адресов:
getent ahosts aur.archlinux.org | head -3
Если первой строкой идёт IPv6, причина в резолвере. Ставьте precedence в gai.conf.
Нет. Мы лишь поднимаем приоритет IPv4 через gai.conf. Сам IPv6 остаётся в системе. Когда провайдер отдаёт рабочий IPv6-маршрут, всё подхватится автоматически.
Сеть может функционировать, а IPv6-маршрут отсутствовать. Yay упирается в IPv6 и падает, браузер переключается на IPv4 и работает. Решение то же: gai.conf.
Любой 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 при актуальных пакетах означает лишь «обновлений нет».
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии