Команда opkg update завершается ошибкой «Failed to download» или роутер после opkg upgrade перестал загружаться — это два самых частых сценария, с которыми сталкиваются пользователи при обновлении пакетов OpenWrt. Причины обычно простые: устаревшие списки репозиториев, недостаток свободного места во внутренней флеш-памяти или попытка обновить пакеты, интегрированные в базовый образ прошивки.
OpenWrt использует пакетный менеджер opkg, который принципиально отличается от apt в Debian или yum в CentOS. Система рассчитана на устройства с ограниченными ресурсами, и многие привычные практики обновления здесь не работают или даже опасны. В этом руководстве разберём, как правильно обновлять пакеты через SSH и веб-интерфейс LuCI, какие операции безопасны, а какие могут привести к необходимости восстановления прошивки.
Как устроено обновление пакетов в OpenWrt
Пакетный менеджер opkg работает с репозиториями, адреса которых прописаны в файле /etc/opkg/distfeeds.conf. Каждый репозиторий привязан к конкретной версии прошивки и архитектуре процессора роутера. Если прошивка обновилась, а адреса репозиториев остались старыми — пакеты будут скачиваться не те или не скачиваться вовсе.
Важный нюанс: пакеты, включённые в базовый образ прошивки, хранятся в разделе только для чтения (squashfs), и обновить их через opkg нельзя. При попытке обновления новая версия записывается в перезаписываемый раздел (overlay), а старая остаётся на месте и продолжает занимать место. Именно поэтому «полное обновление всех пакетов» на OpenWrt — плохая идея, в отличие от десктопных Linux-систем.
- 📦 opkg update — только обновляет списки доступных пакетов, ничего не устанавливает
- ⬆️ opkg upgrade — обновляет указанный пакет или все пакеты сразу
- 📋 opkg list-upgradable — показывает, какие пакеты имеют новые версии
- 💾 df -h — позволяет проверить свободное место в overlay перед обновлением
Проверка перед обновлением: что нужно сделать обязательно
Прежде чем запускать обновление, подключитесь к роутеру по SSH и выполните базовую диагностику. Вам нужно знать версию прошивки, объём свободной памяти и актуальность списков пакетов.
cat /etc/openwrt_release
df -h
opkg update
Первая команда покажет версию OpenWrt и целевую архитектуру. Вторая — сколько места свободно в разделе /overlay: если свободно меньше нескольких мегабайт, устанавливать или обновлять крупные пакеты рискованно. Третья команда обновит списки пакетов из репозиториев, и именно на этом этапе чаще всего всплывают ошибки.
☑️ Подготовка к обновлению пакетов
⚠️ Внимание: перед любыми массовыми обновлениями сохраните резервную копию конфигурации. В LuCI это делается через раздел System → Backup / Flash Firmware, а из консоли — командой sysupgrade -b /tmp/backup.tar.gz с последующим копированием файла на компьютер.
Обновление пакетов через командную строку (SSH)
Стандартный порядок действий в терминале выглядит так. Сначала обновляются списки пакетов, затем просматривается перечень доступных обновлений, и только потом обновляются конкретные пакеты — выборочно, а не все скопом.
opkg update
opkg list-upgradable
opkg upgrade имя_пакета
Если нужно обновить несколько пакетов, перечислите их через пробел в одной команде. Такой подход позволяет контролировать процесс: если после обновления конкретного пакета что-то сломалось, вы точно знаете виновника. Массовая команда opkg upgrade без аргументов обновит всё подряд, включая библиотеки, от которых зависят другие компоненты системы.
Отдельная опасность — обновление пакетов, тесно связанных с ядром. Модули ядра (пакеты вида kmod-*) жёстко привязаны к точной сборке ядра. Если репозиторий обновился, а прошивка на роутере осталась прежней, новые kmod-пакеты могут оказаться несовместимыми с текущим ядром, и установка завершится ошибкой зависимостей.
Обновление через веб-интерфейс LuCI
Для тех, кто предпочитает графический интерфейс, управление пакетами доступно в разделе System → Software. Здесь есть кнопка Update lists — аналог команды opkg update. После её нажатия вкладка Updates покажет список пакетов, для которых доступны новые версии.
Напротив каждого пакета есть кнопка обновления. Интерфейс не предлагает кнопку «обновить всё» — и это осознанное решение разработчиков, подталкивающее к выборочному подходу. Прогресс операции отображается в журнале внизу страницы, где видно и возможные ошибки.
Учтите, что LuCI сам является набором пакетов. Обновление пакетов веб-интерфейса через сам веб-интерфейс обычно проходит нормально, но при сбое страница может перестать открываться до перезагрузки роутера. Если после обновления LuCI пропал — не паникуйте: SSH-доступ продолжит работать, и через консоль можно переустановить нужные пакеты.
Типичные ошибки и их решение
Самая частая проблема — ошибки загрузки списков пакетов при opkg update. Возможные причины: отсутствие интернета на самом роутере, неверные настройки DNS, несоответствие адресов репозиториев текущей версии прошивки или проблемы с SSL-сертификатами при использовании HTTPS-зеркал.
Проверьте, что роутер имеет доступ в интернет: ping -c 3 openwrt.org. Если пинг не проходит по имени, но работает по IP-адресу — проблема в DNS, проверьте настройки в /etc/config/network или в разделе Network → Interfaces. Если ошибка связана с сертификатами, возможная причина — неправильное системное время на роутере: сверьте дату командой date и при необходимости настройте NTP.
| Ошибка | Вероятная причина | Что проверить |
|---|---|---|
| Failed to download / wget returned | Нет интернета или DNS не работает | ping по IP и по имени хоста |
| Signature check failed | Повреждённый список или несовпадение ключей | Повторить opkg update, проверить distfeeds.conf |
| Only have X kb available | Недостаточно места в overlay | df -h, удалить ненужные пакеты |
| Kernel version mismatch | kmod-пакет не соответствует ядру | Обновить прошивку целиком через sysupgrade |
| Package not found | Устаревшие списки или неверный репозиторий | opkg update, сверить архитектуру в distfeeds.conf |
⚠️ Внимание: если при установке пакета opkg сообщает о нехватке места, не пытайтесь принудительно продолжать. Переполнение overlay может привести к повреждению файловой системы, и роутер перестанет загружаться. Сначала удалите ненужные пакеты или рассмотрите вариант с расширением хранилища на USB-накопитель (extroot).
Почему opkg upgrade всех пакетов — плохая идея
В десктопных Linux массовое обновление — норма. В OpenWrt ситуация иная, и разработчики прямо не рекомендуют слепое обновление всех пакетов. Причин несколько.
Во-первых, как уже упоминалось, обновление пакетов из базового образа дублирует их в overlay, расходуя драгоценную флеш-память вдвойне. На устройствах с 16 МБ флеш-памяти несколько таких обновлений способны исчерпать всё свободное место. Во-вторых, обновление разделяемых библиотек может нарушить работу других компонентов, собранных под старые версии. В-третьих, часть пакетов обновляется корректно только вместе с полным обновлением прошивки.
Правильная стратегия — обновлять только те пакеты, которые вам действительно нужны: например, если вышла новая версия adblock или wireguard с нужными исправлениями. А для системных компонентов надёжнее периодически обновлять прошивку целиком через sysupgrade с сохранением настроек.
Что такое extroot и когда он нужен
Extroot — механизм переноса перезаписываемого раздела overlay на внешний USB-накопитель. Он актуален для роутеров с маленькой флеш-памятью (8–16 МБ), где места не хватает даже для базового набора пакетов. Настройка требует форматирования накопителя, монтирования и правки конфигурации fstab. Подробная инструкция зависит от версии OpenWrt — сверяйтесь с официальной документацией проекта для вашей версии прошивки.
Обновление прошивки как альтернатива обновлению пакетов
Когда пакетов для обновления накапливается много, рациональнее обновить всю систему. Для этого служит механизм sysupgrade: скачивается свежий образ прошивки под вашу модель роутера и прошивается с опцией сохранения настроек. После перезагрузки все базовые пакеты уже актуальны, а overlay очищается от дублирующихся версий.
sysupgrade -v /tmp/openwrt-образ.bin
Образ нужно брать строго под свою модель и аппаратную ревизию роутера — они указаны на наклейке устройства и в разделе Status → Overview в LuCI. Прошивка несовместимого образа может вывести устройство из строя. Перед sysupgrade обязательно сделайте резервную копию настроек и сохраните список установленных пакетов командой opkg list-installed, чтобы быстро восстановить нужный софт после обновления.
Также существуют вспомогательные инструменты вроде Attended Sysupgrade, которые позволяют собрать образ с уже включёнными пользовательскими пакетами и обновиться с сохранением конфигурации. Доступность такого сервиса и его поддержку конкретной модели проверяйте в официальной документации OpenWrt.
Часто задаваемые вопросы
Чем отличается opkg update от opkg upgrade?
Команда opkg update лишь скачивает свежие списки пакетов из репозиториев — она ничего не устанавливает и не обновляет. Команда opkg upgrade выполняет фактическое обновление указанных пакетов (или всех, если запущена без аргументов). Перед любым upgrade сначала нужно выполнить update.
Безопасно ли обновлять все пакеты сразу?
Нет, это не рекомендуется. Массовое обновление дублирует пакеты из базового образа в overlay, расходует флеш-память и может нарушить совместимость библиотек. Обновляйте выборочно только нужные пакеты, а для системных компонентов используйте обновление прошивки через sysupgrade.
Что делать, если opkg update выдаёт ошибку загрузки?
Проверьте наличие интернета на роутере (ping по IP и по доменному имени), корректность DNS, системное время (команда date) и адреса репозиториев в файле /etc/opkg/distfeeds.conf — они должны соответствовать вашей версии прошивки и архитектуре процессора.
Можно ли откатить обновление пакета?
Штатного механизма отката в opkg нет. Если новая версия пакета работает некорректно, варианты такие: удалить пакет и установить прежнюю версию из локального файла (если он у вас сохранён), либо восстановить конфигурацию из резервной копии, либо перепрошить роутер через sysupgrade. Это ещё один аргумент в пользу резервных копий перед обновлением.
Почему после обновления прошивки пропали установленные пакеты?
При sysupgrade сохраняются только конфигурационные файлы, а дополнительно установленные пакеты удаляются вместе с overlay. Поэтому перед обновлением сохраните список пакетов командой opkg list-installed и установите их заново после перезагрузки. Альтернатива — Attended Sysupgrade, собирающий образ с вашими пакетами, если сервис поддерживает вашу модель.