Як побачити оновлення пакетів після входу через SSH

Сліпе оновлення пакетів (вручну або через скрипт) може призвести до серйозних проблем.

Те, що існує нова версія пакета, ще не означає, що його слід встановлювати чи що він буде працювати коректно. Перед оновленням переконайтесь, що це безпечний крок. У більшості випадків уникайте оновлення системних пакетів.


Є два способи керування пакетами в OpenWrt: через веб-інтерфейс LuCI (System → Software) або через командний рядок (CLI). Обидва способи використовують ту саму команду opkg.

Починаючи з OpenWrt 19.07.0, у LuCI з’явилась вкладка Updates зі списком пакетів, які мають доступні оновлення. Кнопка Upgrade… виконує ту ж команду opkg upgrade, що й через CLI.

Однакові попередження стосуються оновлення пакетів як у LuCI, так і через CLI.


Загалом, використання opkg upgrade дуже не рекомендується. Його слід уникати майже в усіх випадках. Масове оновлення майже гарантовано призведе до серйозних проблем, але навіть оновлення окремих пакетів може викликати збої.

Важливо: це не те саме, що оновлення прошивки OpenWrt через sysupgrade. Команда opkg upgrade не оновлює саму систему OpenWrt — лише окремі пакети. Для оновлення OpenWrt використовуйте sysupgrade.

На відміну від «великих» дистрибутивів Linux, OpenWrt оптимізовано для пристроїв із обмеженими ресурсами. Менеджер пакетів opkg:

  • не перевіряє сумісність ABI (Application Binary Interface)
  • не враховує залежність від версії ядра

Оновлення може призвести до конфліктів, які складно діагностувати, або навіть зробити пристрій нестабільним. Крім того, процес opkg upgrade споживає flash-пам'ять, оскільки не може перезаписати ROM-версію пакета і зберігає нову версію в RW-overlay.

У більшості випадків важливі патчі безпеки оперативно включаються до стабільних релізів і оновлюються через систему sysupgrade — це рекомендований спосіб залишатися в безпеці.

Користувачі, які хочуть мати найновіше — можуть використовувати snapshot-збірки або створювати власні образи з потрібними оновленими пакетами.

Якщо ви все ж вирішили використовувати opkg upgrade, оновлюйте лише обрані окремі пакети, не робіть масових оновлень і будьте готові до того, що доведеться скинути налаштування до заводських.

Якщо ви вже стикнулися з проблемами після оновлення, зробіть резервну копію (опційно), а потім виконайте скидання до заводських налаштувань (firstboot).

Якщо ви вирішили оновлювати пакети, особливо через скрипт — ви попереджені.
Не скаржтеся потім на форумі й будьте готові самостійно усувати наслідки.

Якщо ви хочете бачити, які пакети доступні для оновлення під час входу через SSH (не впливає на вхід через LuCI), це можна реалізувати двома простими способами:

  1. Створити скрипт профілю користувача, який перевіряє список оновлюваних пакетів
  2. Налаштувати автоматичне виконання opkg update через crontab для актуальності списків пакетів

Або просто інтегрувати перевірку оновлень у той самий скрипт профілю — тоді все відбуватиметься при кожному вході.

При запуску скрипта після входу в SSH ви побачите приблизно таке:

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt 18.06.1, r7258-5eb055306f
 -----------------------------------------------------

151 packages are installed.
4 packages can be upgraded.

root@OpenWrt:~#

Після цього ви можете вручну оновити один, кілька або всі пакети однією командою.

Для створення скрипта потрібно зайти в систему через SSH під root'ом. У прикладі використовується редактор nano, але ви можете використовувати будь-який інший редактор.

nano ~/.profile

Вміст файлу:

#!/bin/sh

opkgInstalled="$(opkg list-installed 2> /dev/null | wc -l)"
opkgUpgradable="$(opkg list-upgradable 2> /dev/null | wc -l)"

echo "$opkgInstalled packages are installed."
echo "$opkgUpgradable packages can be upgraded."
echo

Щоб скрипт коректно працював, потрібно щоб список доступних пакетів був оновлений. Це можна реалізувати:

  1. за допомогою crontab
  2. при завантаженні системи
  3. при вході, у тому ж скрипті профілю

:!: На пристроях із обмеженим обсягом пам’яті (16–32 МБ) це споживає ресурси. Для таких випадків див. наступний метод.

Оновлення раз на тиждень:

  • через LuCI: додайти наступні рядки в LuCi > System > Scheduled Tasks
  • через термінал:
crontab -e

Додайте:

1 0 * * 0 /bin/opkg update # щонеділі о 00:01
# crontab має завершуватися порожнім рядком або коментарем

:!: Працює лише якщо ви часто перезавантажуєте пристрій. Також споживає RAM.

  • через LuCI: додайте наступні рядки в LuCi > System > Startup > Local Startup
  • через термінал:
nano /etc/rc.local

Додайте перед `exit 0`:

/bin/opkg update

Оновлення пакетів при вході — з перевіркою підключення до Інтернету та доступної RAM:

nano ~/.profile

Вставте:

#!/bin/sh

if wget -q --spider https://openwrt.org/; then
  echo "You are connected to the internet. Checking for updates, please wait..."
  echo

  opkg update > /dev/null 2>&1

  opkgInstalled="$(opkg list-installed 2> /dev/null | wc -l)"
  opkgUpgradable="$(opkg list-upgradable 2> /dev/null | wc -l)"

  echo "$opkgInstalled packages are installed."
  echo "$opkgUpgradable packages can be upgraded."
  echo

  memLimit=32000
  if [ "$(grep MemFree /proc/meminfo | awk '{print$2}')" -lt $memLimit ]; then
    for opkg_package_lists in /var/opkg-lists/*
    do
      if [ -f "$opkg_package_lists" ]; then
        rm -r /var/opkg-lists/*
        echo "Warning: Memory limit $memLimit bytes. Removed downloaded package lists to save memory."
        echo
      fi
    done
  fi
else
  echo "You are not connected to the internet. Unable to check for updates."
  echo
fi

За замовчуванням, файл /root/.profile не зберігається після оновлення OpenWrt.

Щоб додати його до списку файлів для резервного копіювання:

echo '/root/.profile # мій скрипт профілю' >> /etc/sysupgrade.conf

Інші змінені файли (наприклад, crontab і /etc/rc.local) вже включені до резервного списку.

Докладніше: Оновлення OpenWrt з командного рядка

Щоб оновити конкретний пакет:

opkg upgrade package_name

Щоб оновити всі: див. check_for_any_upgradable_packages

:!: Оновлення пакетів відбувається без певного порядку. Переконайтесь, що на пристрої достатньо місця.

:!: Автоматичне оновлення всіх пакетів не рекомендується, якщо ви не керуєте централізованим репозиторієм.

Якщо ви маєте кращий варіант реалізації, оновіть цю інструкцію. Можна також додати скрипт до /etc/profile, але краще залишити системні файли без змін.

Успіхів!

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2025/05/31 09:54
  • by vazaz