Как мне обновить все установленные пакеты в OpenWRT?

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

Мне просто интересно, что эквивалентно

apt-get upgrade
apt upgrade
yum update

для OpenWRT или LEDE?

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

opkg list-upgradable | cut -f 1 -d ' ' | xargs -r opkg upgrade

Существует инфобокс предупреждение в Руководстве пользователя OpenWRT для этой команды:

Массовое обновление всех пакетов категорически не рекомендуется. Вероятность того, что ваш девайс будет выведен из строя, значительна, поэтому будьте полностью готовы выполнить восстановление и сброс к заводским настройкам в безопасном режиме. Продолжайте на свой страх и риск.

Существуют и другие менее эффективные способы, где люди используют AWK и подобное.

Важно обратить внимание на частое использование LEDE / OpenWRT’s opkg

Поскольку прошивка OpenWrt хранит базовую систему в сжатом разделе только для чтения, любое обновление базовых системных пакетов будет записываться в раздел для записи и чтения, и, соответственно, занимать больше места, чем просто переписывание старой версии в сжатом разделе базовой системы. Рекомендуется проверить доступное пространство во внутренней флеш-памяти и требования к месту для обновлений базовых системных пакетов.

Насколько я могу судить, правильный ответ на этот вопрос заключается в том, что нет эквивалента apt upgrade на OpenWrt и нет набора команд, которые создадут аналогичную функциональность. Репозитории OpenWrt не содержатся с намерением поддерживать обновление пакетов конечного пользователя (вы ожидаете перехода от релиза к релизу путем прошивки) и opkg не поддерживает и даже не проверяет зависимости.

В инфобоксе предостережений для Руководства пользователя OpenWRT, который затрагивает эту тему, в частности, говорится:

Вообще говоря, использование opkg upgrade очень не рекомендуется. Следует избегать во всех обстоятельствах. В частности, массовая модернизация вероятно приведет к серьезным проблемам, но даже обновление отдельных пакетов может вызвать проблемы. Также важно подчеркнуть, что это существенно отличается от пути sysupgrade для обновления версий OpenWrt (основных версий, а также обновлений поддержки). Opkg upgrade не обновит версию OpenWrt. Это может сделать только sysupgrade. Эти две вещи не эквивалентны.

В отличие от «больших дистрибутивов» Linux, OpenWrt оптимизирован для работы на системах с ограниченными ресурсами. Это включает в себя менеджер пакетов opkg, который не имеет встроенной совместимости ABI (Application Binary Interface) и проверки зависимостей версии ядра. Хотя иногда проблем может не быть, это не гарантировано и обновление может привести к различным типам несовместимостей, которые могут варьироваться от незначительных до тяжелых, и может быть очень сложно устранить проблемы. Кроме того, процесс обновления opkg будет потреблять место во флеш-памяти. Поскольку он не может (и не делает) перезаписать оригинал (хранящийся в ПЗУ), он должен хранить обновленные пакеты в накладке для записи.

Подводится итог:

Слепое обновление пакетов (вручную или с помощью скрипта) может привести к всевозможным неприятностям.

Просто потому, что существует обновленная версия данного пакета, не означает, что ее следует устанавливать или что она будет корректно функционировать. Прежде чем выполнять обновления, убедитесь, что это безопасно.

и наконец

Существует два способа управления/установки пакетов в OpenWrt: через меню программного обеспечения веб-интерфейса LuCI (Система > Программное обеспечение) и через интерфейс командной строки (CLI). Оба метода вызывают тот же CLI исполняемый файл opkg, и с OpenWrt 19.07.0, интерфейс LuCI теперь содержит вкладку ‘Обновления’ с перечнем пакетов, для которых доступны обновления. Кнопка LuCI Обновить… выполняет ту же команду opkg upgrade, которая обсуждается в этой статье. Те же предупреждения применяются к обновлению пакетов с использованием LuCI и CLI.

Весь инфобокс стоит прочитать. Он появляется в верхней части этой секции Руководства пользователя об отображении доступных обновлений пакетов.

Оставшееся содержимое моего оригинального поста сохранено ниже

Цитаты с форумов OpenWrt:

Те из нас, кто имеет больше опыта с OpenWrt, знают, что это плохая идея использовать opkg upgrade (если только нет очень конкретной причины), поскольку вещи могут ломаться. Но многие другие пользователи не знают — они предполагают, что это то же самое, что и с любой другой установкой Linux, и что обновления должны срабатывать большую часть времени.

и

НИКОГДА НЕ ИСПОЛЬЗУЙТЕ OPKG UPGRADE!

Серьезно, не стоит. Никогда. Если вы не знаете, что делаете, у вас нет веской причины делать это, и вы не готовы столкнуться с последствиями, если испортите свой роутер, когда что-то пойдет не так. Это будет потреблять пространство флеш-памяти, но даже более важно, могут возникнуть несоответствия ядра и другие сломанные зависимости, которые могут вызвать различные проблемы для OpenWrt — некоторые из них на уровне неудобств, другие могут быть довольно серьезными, требующими перепрошивки и т. д.

и

Никогда, никогда не используйте opkg upgrade – этот метод может привести к серьезным проблемам и не обновляет версию. Некоторые люди говорят, что они успешно использовали opkg upgrade, но для каждого из этих людей найдутся многие, у кого проблемы вызваны исключительно этим процессом – некоторые незначительные, некоторые серьезные. Просто не делайте этого

В двух словах, есть причина, по которой в LUCI не включена опция GUI для выполнения этого действия. Методы, предлагаемые для использования в других ответах здесь, достигнут чего-то подобного apt/apt-get, но основные инструменты просто не работают так же, как apt или yum. Возможные проблемы выходят за рамки упомянутой возможности исчерпания места (что само по себе плохо, но можно избежать, если быть осторожным).

Ссылки:
https://forum.openwrt.org/t/okpg-upgrade-safeguards/30326
https://forum.openwrt.org/t/opkg-upgrade-vs-flashing-sysupgrade/58906
https://forum.openwrt.org/t/sysupgrade-instead-of-opkg-upgrade/32897/4

Я не эксперт в OpenWRT, я пришел на эту тему, потому что она до сих пор является одним из топовых результатов поиска в Интернете по запросу ‘обновление wrt’. После чтения этой темы я продолжил на форумы OpenWrt, включая связанные выше темы. Я просто пытаюсь помочь конечным пользователям избежать будущих проблем, передавая информацию, которую я нашел, и которая, предположительно, написана более знакомыми/знающими участниками на эту тему, чем я.

Те, кто желает продолжать отстаивать использование различных команд для поддержания актуальности пакетов в OpenWrt, пожалуйста, подумайте о том, чтобы найти время для проверки у команды OpenWrt, является ли это разумным способом использования предоставленных инструментов. Я буду рад, если окажусь неправ.

Я создал небольшой скрипт под названием opkg-upgrade для более эффективного обновления.

Он доступен на github:
https://github.com/tavinus/opkg-upgrade

Он упростит обновление до простого выполнения:
opkg-upgrade

Инструкции по установке с помощью Curl / Wget здесь!


Как указано в файле readme.md, могут быть проблемы с обновлением.

Возможные проблемы:

  • Проблема squashfs (ROM только для чтения, поэтому обновления занимают дополнительное пространство на флеш или extroot)
  • Проблема dev/trunk (бета) (бета-версии могут стать мягкой “кирпичом” при обновлении)
  • Проблема с пространством (необходимо достаточно свободного места для загрузок и установок)

Следует также упомянуть, что обновление из CRON – это очень плохая идея!
Я бы сказал, что даже на обычном дистрибутиве Linux слепые обновления – это плохая идея.
Существует много вещей, которые могут пойти не так при обновлениях, и поскольку OpenWrt обычно работает на устройствах, которые могут оказаться в состоянии “кирпича”, это делает еще менее осмысленным делать это без присмотра.

В двух словах, единственные случаи, в которых я бы КОГДА ЛИБО обновлял:

  • При использовании extroot на большом USB-накопителе
  • Если внутренняя флеш-память имеет объем 32 МБ и больше
  • Если НЕ используется dev/trunk (бета)
  • Если работает на ext4 FS с большим количеством свободного места (x86 метал, ВМ и др.)

Тем не менее, я бы никогда не обновлял из cron.
Я бы также подумал 20 раз, прежде чем обновлять внутреннюю флеш-память (даже большие), поскольку это ускоряет ее износ.

Мой скрипт имеет опцию отправки отчета по электронной почте с доступными обновлениями.
Поэтому я бы рекомендовал добавить инструмент отчетности в cron, затем люди могут обновляться вручную после получения письма. Это делает вещи безопаснее, предоставляя возможность просмотреть обновления.

Всего хорошего!
Gus

Начиная с OpenWrt 19.07, выполнение opkg upgrade [pkgname] может вызвать эту ошибку.

Collected errors:
 * pkg_hash_add_from_file: Failed to open /var/opkg-lists/openwrt_routing: Out of memory.

Обходной путь заключается в использовании opkg install, что аналогично тому, как luci-app-opkg обновляет пакеты.

opkg list-upgradable | cut -f 1 -d ' ' | xargs opkg install 

Это тоже работает:

opkg upgrade $(opkg list-upgradable|awk '{printf $1" "}')

Если вы получаете такую ошибку

попробуйте обновить каждый файл отдельно в цикле:

opkg list-upgradable | cut -f 1 -d ' ' | while IFS='$\n' read -r line; do opkg install $line ; done

На моем NanoPI R6S по умолчанию требуется обновить 496 пакетов. Я заметил, что это занимает очень много времени, и если вся команда не завершена, мне приходится начинать сначала.

Этот скрипт выполняет обновление по 50 пакетов за раз и гораздо быстрее, если возникают проблемы. Он использует части других ответов (спасибо!)

opkg update && opkg list-upgradable | cut -f 1 -d ' ' | xargs -n 50 opkg upgrade

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

Обновление всех установленных пакетов в OpenWRT может быть сложной задачей, особенно если проводить параллели с привычными командами, используемыми в других дистрибутивах Linux, таких как apt-get upgrade или yum update. OpenWRT имеет свои особенности и ограничения, которые стоит учитывать, чтобы избежать проблем с системой.

Описание проблемы

В OpenWRT нет единой команды, которая бы выполняла обновление всех пакетов, как это делается в более крупных дистрибутивах Linux. Типичный подход, который могут рекомендовать, — это использование команды:

opkg list-upgradable | cut -f 1 -d ' ' | xargs -r opkg upgrade

Однако, такой массовый подход к обновлению пакетов может быть рискованным и, как правило, не рекомендуется. Причина в том, что это может привести к так называемому "мягкому кирпичу" устройства из-за проблем с пакетной совместимостью и ограниченностью флэш-памяти.

Причины избегать массового обновления

  1. Проблема со SquashFS: Базовая система OpenWRT хранится в сжатой неизменяемой разделе, а любые обновления будут записываться в раздел с возможностью записи, занимая значительное количество места.

  2. Отсутствие проверки зависимостей: opkg не выполняет проверку интерфейсов бинарной совместимости приложений, как это делают другие пакеты.

  3. Ограниченные ресурсы системы: OpenWRT оптимизирован для работы на устройствах с ограниченными ресурсами, что делает управление пакетами более сложным процессом.

  4. Проблемы с kernel-совместимостью: Обновление пакетов может привести к несовместимости с ядром, что в свою очередь может вызвать проблемы в работе системы.

Альтернативные подходы

Лучшим методом управления версиями ПО в OpenWRT является переход от одной стабильной версии прошивки к другой. Это минимизирует риск возникновения ошибок и проблем совместимости. Если все-таки необходимо обновить отдельные пакеты, рекомендуется делать это избирательно, после тщательной проверки всех возможных последствий.

Практические советы

  • Используйте opkg upgrade только для конкретных пакетов, убедившись в их необходимости.
  • Регулярно создавайте резервные копии конфигураций перед внесением изменений.
  • Изучите документацию OpenWRT для получения более подробной информации о безопасных методах обновления системы.

Заключение

Понимание уникальных аспектов управления пакетами в OpenWRT поможет избежать проблем с устройством и поддерживать его работоспособность на должном уровне. Используйте обновления осознанно и с осторожностью, чтобы сохранить стабильно работающую сеть.

Если вам требуется автоматизация процесса или дополнительные функции, рассмотрите использование скриптов, таких как opkg-upgrade, доступных в сообществе OpenWRT. Однако даже такие инструменты требуют внимательного отношения к процессу обновления и регулярного мониторинга системы.

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

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