Оновлення прошивки OpenWrt через LuCI та CLI
Див. також:
Як працює оновлення OpenWrt
Процедура sysupgrade у OpenWrt повністю замінює поточну інсталяцію системи на нову версію. Це включає ядро Linux і розділи ОС (SquashFS/ext4/ubifs/JFFS2 та інші). Це не те саме, що перша (factory) інсталяція.
Sysupgrade через LuCI або CLI працює шляхом збереження вибраних конфігураційних файлів, очищення файлової системи, інсталяції нової версії OpenWrt та відновлення збережених конфігурацій.
УВАГА: усі частини файлової системи, які не були явно збережені, будуть втрачені.
Встановлені вручну пакети потрібно буде перевстановити після оновлення, щоби відповідали оновленому ядру та модулям.
Будь-які файли або дані, які не зберігаються в спеціальних місцях, також буде втрачено. Обов’язково зробіть резервні копії всіх змін, які ви робили.
ВАЖЛИВО: Більшість процедури можна автоматизувати через сервіс attended.sysupgrade. Він створює імідж прошивки з вашими пакетами, завантажує його та оновлює систему зі збереженням налаштувань. Доступно через `luci-app-attendedsysupgrade` або з CLI (`auc`).
Про процедуру extroot див. цей гайд.
Для Пристроїв з подвійною прошивкою перегляньте сторінку пристрою.
При створенні власного іміджу через OpenWrt buildroot або imagebuilder багато кроків можна пропустити.
Кроки оновлення
1. Підготовка
- Сконфігуруйте файл збереження налаштувань (`sysupgrade.conf`)
- Експортуйте список встановлених пакетів
- Завантажте та перевірте новий образ прошивки (і бажано збережіть поточний для відкату)
Sysupgrade з опцією “залишити налаштування” автоматично збереже налаштування (наприклад, у `/etc/config`). Деякі додаткові сервіси можуть потребувати ручної конфігурації.
2. Оновлення
- Через веб-інтерфейс LuCI: System → Backup / Flash Firmware → Flash new firmware image
- Через командний рядок: команда `sysupgrade` через ssh або консоль
3. Після оновлення
- Перевстановіть потрібні пакети
- Налаштуйте нові можливості OpenWrt
- Оновіть конфігураційні файли
Підготовка до оновлення
Чи можна зберегти налаштування?
Див. також: Сумісність оновлення
- У більшості випадків — так, навіть при переході між кількома версіями
- Корисно не встановлювати налаштування більше ніж на 12–16 місяців
- Ігнорування рекомендацій про “новий старт” може викликати складні для діагностики помилки
Чи доведеться робити відкат?
- Зробіть резервну копію налаштувань
- Завантажте образ поточної прошивки
- Майте запасний пристрій або час на відновлення
Налаштування резервного копіювання
Тільки для досвідчених користувачів!
- Це HOWTO описує оновлення існуючої прошивки OpenWrt до нової версії через SSH (командний рядок).
- Багато інформації дублює зміст загальної інструкції з оновлення OpenWrt.
- Недосвідченим користувачам наполегливо рекомендується використовувати оновлення OpenWrt через інтерфейс LuCI.
- Якщо потрібно змінити конфігурацію для першого запуску (наприклад, увімкнути Wi-Fi після прошивки), дотримуйтеся цієї інструкції.
Створення резервної копії конфігурації OpenWrt
Скористайтесь інструкцією зі створення резервної копії, або пропустіть, якщо не плануєте зберігати поточні налаштування.
Завантаження та перевірка файлу оновлення прошивки OpenWrt
Завантажуйте та використовуйте лише образи прошивки OpenWrt, що закінчуються на “-sysupgrade.bin”, для оновлення через CLI.
Для x86-систем немає окремого образу sysupgrade — просто переконайтесь, що нова прошивка використовує ту ж файлову систему, що й попередня.
Увага: файл оновлення повинен бути у каталозі `/tmp`, оскільки під час оновлення флеш-пам'ять відмонтовується. Якщо файл не у /tmp, оновлення НЕ буде виконано.
- Перевірте наявність вільної пам’яті: виконайте `free`. Продовжуйте, лише якщо доступно вдвічі більше пам’яті, ніж розмір прошивки.
- Задайте змінні з посиланнями на файл прошивки і контрольну суму SHA256 (потрібно замінити URL на актуальні):
DOWNLOAD_LINK="http://URL_ДО_FIRMWARE.BIN" SHA256SUMS="http://URL_ДО_SHA256"
- Завантажте файл та перевірте контрольну суму:
cd /tmp wget $DOWNLOAD_LINK wget $SHA256SUMS sha256sum -c sha256sums 2>/dev/null | grep OK
- У виводі шукайте рядок типу: `<ІМ’Я_ФАЙЛУ>: OK`
- Не продовжуйте, якщо контрольна сума не співпадає!
Усунення несправностей:
- Якщо не можете використовувати `wget` (наприклад, передаєте файл з ПК):
- використовуйте scp:
scp openwrt-....-sysupgrade.bin root@192.168.1.1:/tmp
- використовуйте ssh:
ssh root@192.168.1.1 "cat > /tmp/firmware.bin" < firmware.bin
- або netcat:
- На ПК: `cat firmware.bin | pv -b | nc -l -p 3333`
- На роутері: `nc 192.168.1.111 3333 > /tmp/firmware.bin`
- Якщо контрольна сума не співпадає — перевірте завантаження або зверніться на "Installing and Using OpenWrt" Forum
- Якщо мало RAM, дивіться: Low Memory Workarounds
Інструкції через командний рядок
OpenWrt має утиліту sysupgrade для оновлення прошивки.
- Перевірте контрольну суму образу прошивки
- Переконайтесь, що є достатньо RAM
- Завантажте прошивку з локального ПК
- Виконайте оновлення
# Перевірити обсяг вільної RAM free # Завантажити прошивку scp firmware_image.bin root@openwrt.lan:/tmp # Оновити прошивку sysupgrade -v /tmp/firmware_image.bin
Усунення несправностей:
- Якщо з’являється помилка:
ash: /usr/libexec/sftp-server: not found
— це через OpenSSH >= 9. Щоб обійти, використовуйте флаг `-O`:<code> scp -O firmware_image.bin root@openwrt.lan:/tmp</code>
Якщо sysupgrade недоступний
# Оновити прошивку вручну mtd -r write /tmp/firmware_image.bin firmware
- При використанні sysupgrade вивід може виглядати так:
Saving config files... etc/config/network etc/config/system ... killall: watchdog: no process killed Sending TERM to remaining processes ... Sending KILL to remaining processes ... Switching to ramdisk... Performing system upgrade... Unlocking firmware ... Writing from <stdin> to firmware ... [w] Appending jffs2 data from /tmp/sysupgrade.tgz to firmware... TRX header not found Error fixing up TRX header Upgrade completed Rebooting system...
Примітка: Повідомлення TRX header not found і Error fixing up TRX header — не є проблемою, дивіться пост розробника OpenWrt [jow](https://dev.openwrt.org/ticket/8623)
- Дочекайтеся перезавантаження
- Після автоматичного запуску конфігурація повинна зберегтись (IP-адреса, пароль SSH тощо)
- Перейдіть до розділу “Додаткова конфігурація після оновлення OpenWrt”
Усунення несправностей:
- Якщо після оновлення виникають проблеми — виконайте холодне перезавантаження (відключення живлення на декілька секунд)
- Зверніть увагу на `opkg.conf` — деталі тут.
Прошивка нової версії OpenWrt
- Файл прошивки вже знаходиться у каталозі `/tmp`, тому можна починати прошивку.
- Якщо ви виконуєте оновлення віддалено, бажано, щоб хтось був поруч з пристроєм (деякі пристрої можуть потребувати жорсткого перезавантаження після оновлення).
- Виконайте команду для прошивки:
sysupgrade -v /tmp/firmware_image.bin
- Щоб не зберігати стару конфігурацію та почати з чистої системи, додайте параметр `-n` (мережеві й системні налаштування буде втрачено).
- Під час оновлення ви побачите приблизно таке виведення:
Saving config files... etc/config/dhcp ... etc/config/wireless etc/dropbear/authorized_keys ... etc/sysupgrade.conf killall: watchdog: no process killed Sending TERM to remaining processes ... ubusd askfirst logd logread netifd odhcpd snmpd uhttpd ntpd dnsmasq Sending KILL to remaining processes ... askfirst Switching to ramdisk... Performing system upgrade... Unlocking firmware ... Writing from <stdin> to firmware ... [w] Appending jffs2 data from /tmp/sysupgrade.tgz to firmware... TRX header not found Error fixing up TRX header Upgrade completed Rebooting system...
- Повідомлення “TRX header not found” та “Error fixing up TRX header” можна ігнорувати — вони не критичні, дивіться: https://dev.openwrt.org/ticket/8623
- Дочекайтесь, поки роутер знову увімкнеться. Система повинна завантажитися з тими самими конфігураціями (IP-адреса, пароль SSH тощо).
Усунення несправностей:
- Пристрій не перезавантажується або завис: зачекайте 5 хвилин, потім зробіть жорстке перезавантаження — вимкніть живлення, зачекайте 2–3 секунди, увімкніть знову.
Увага: не робіть цього, поки пристрій ще оновлюється — це може призвести до пошкодження системи (softbrick), і для відновлення може знадобитися підключення через UART/JTAG.
- Проблеми з OPKG: якщо після оновлення виникають помилки під час встановлення пакетів, перевірте актуальність `opkg.conf`, дивіться: https://dev.openwrt.org/ticket/13309
- Якщо відсутній `sysupgrade`, замість нього використовуйте:
mtd -r write /tmp/openwrt-....-sysupgrade.bin firmware
Кроки після оновлення
- Перевірка версії ОС: Після входу по SSH банер містить інформацію про версію прошивки — це найпростіший спосіб переконатися, що оновлення пройшло успішно.
- Якщо використовувався extroot, дотримуйтесь цієї інструкції для його відновлення.
- Перевірте наявність оновлень для пакетів — після оновлення базової прошивки можуть з’явитися нові версії встановлених пакетів.
- Повторно встановіть власноруч встановлені пакети. Конфігураційні файли збережені, але самі пакети треба перевстановити. Якщо використовували скрипти для автоматичного збереження/відновлення, цей крок може бути не потрібен.
Порівняння нових конфігурацій пакунків
Дивіться також: Доповнення для opkg, Доповнення для UCI
- Після встановлення пакетів можуть з’явитися нові файли конфігурації зі стандартними значеннями.
- Якщо такі конфігурації конфліктують із вашими, вони будуть збережені як файли з суфіксом -opkg.
- Щоб зберегти нові можливості, порівняйте та об’єднайте ці конфігурації вручну за допомогою `diff`.
# Оновити пакети opkg update opkg install diffutils # Знайти нові файли конфігурації find /etc -name "*-opkg" # Порівняти, наприклад: diff /etc/config/snmpd /etc/config/snmpd-opkg # Вручну об’єднати зміни vi /etc/config/snmpd rm /etc/config/snmpd-opkg # Або повністю замінити mv /etc/config/snmpd-opkg /etc/config/snmpd # Перезапустити сервіс /etc/init.d/snmpd restart reboot
Обхід обмеження пам’яті: /tmp занадто малий для збереження файлу прошивки
Якщо файлової системи `/tmp` недостатньо для збереження образу прошивки OpenWrt, цей розділ пропонує способи тимчасово звільнити оперативну пам’ять.
Спершу перевірте використання пам’яті командами `free`, `top` або `cat /proc/meminfo`. Продовжуйте лише, якщо у вас є стільки вільної пам’яті, скільки займає файл прошивки, плюс декілька додаткових МіБ.
# free total used free shared buffers Mem: 29540 18124 **11416** 0 1248 -/+ buffers: 16876 12664 Swap: 0 0 0
У цьому прикладі є рівно 11416 КіБ вільної пам’яті. Все інше (29540 - 11416 = 18124 КіБ) зайняте. Частина цієї пам’яті може бути звільнена ядром за потреби, але ми не знаємо скільки точно. Переконайтесь, що вільної пам’яті достатньо.
Також вільний простір у `/tmp` враховується у загальній доступній пам’яті.
# free Mem: 13388 12636 752 0 1292 Swap: 0 0 0 Total: 13388 12636 752 # df Filesystem 1K-blocks Used Available Use% Mounted on /dev/root 2304 2304 0 100% /rom tmpfs 6696 60 6636 1% /tmp tmpfs 512 0 512 0% /dev /dev/mtdblock3 576 288 288 50% /overlay mini_fo:/overlay 2304 2304 0 100% /
У цьому прикладі маємо фактично 752 + 6636 = 7388 КіБ доступної пам’яті.
- Найшвидший і найпростіший спосіб звільнити RAM — видалити списки пакетів:
rm -r /tmp/opkg-lists/
- Скинути кеш:
sync && echo 3 > /proc/sys/vm/drop_caches
- Вимкнути завантаження драйверів Wi-Fi та перезавантажити:
rm /etc/modules.d/*80211* rm /etc/modules.d/*ath9k* rm /etc/modules.d/b43* reboot
Wi-Fi драйвери зазвичай займають чимало RAM і не потрібні, якщо ви підключені по Ethernet. Видалення відповідних символьних посилань у `etc/modules.d` і подальше перезавантаження допоможе вивільнити пам’ять.
Все ще недостатньо місця в /tmp?
Використовуйте netcat тільки, якщо не вдалося звільнити достатньо RAM іншими способами. Будь-які проблеми з мережею під час процесу можуть призвести до псування прошивки пристрою (brick).
Прошивка через ssh
# З ПК під Linux cat firmware_image.bin | ssh root@openwrt.lan mtd write - firmware
Прошивка через netcat
# ПК під Linux nc -q 0 192.168.1.1 1234 < openwrt-ar71xx-tl-wr1043nd-v1-squashfs-sysupgrade.bin # На OpenWrt nc -l -p 1234 | mtd write - firmware
Завантаження образу OpenWrt
Вибір правильного образу
- Платформи, які підтримують sysupgrade, мають файл `...-sysupgrade.bin`
- Образи `factory` зазвичай не підходять для оновлення через LuCI
Для x86
- Для x86 використовуйте той самий образ, що і при первинній інсталяції
- Напр., якщо це `ext4` – оновлюйте тим самим `ext4`, те саме з `squashfs`
Примітки
- Перевіряйте модель і, за потреби, країну
- Завжди читайте інструкції на сторінці пристрою
- Зберігайте завантажені образи – інтернет може бути недоступний, коли знадобиться відкат
Процедура оновлення
Через LuCI
Див. також: Оновлення OpenWrt через LuCI
- Завантажте образ прошивки на ПК
- Зайдіть у LuCI → System → Backup / Flash Firmware → Flash new firmware image
- Натисніть Choose File, виберіть файл
- Натисніть Flash image..., підтвердіть контрольну суму
- Зачекайте, поки роутер перезавантажиться
Через CLI
- Завантажте образ у `/tmp` на пристрої (це оперативна пам'ять)
cd /tmp wget http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/openwrt-15.05-ar71xx-generic-tl-wr1043nd-v1-squashfs-sysupgrade.bin
- Перевірка MD5
wget http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/md5sums md5sum -c md5sums 2> /dev/null | grep
OK
- Перевірка SHA256
wget http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/sha256sums sha256sum -c sha256sums 2> /dev/null | grep
OK
- Запуск оновлення
sysupgrade -v /tmp/openwrt-15.05-ar71xx-generic-tl-wr1043nd-v1-squashfs-sysupgrade.bin
*Див. додаткові поради для пристроїв з малим обсягом пам'яті наприкінці сторінки.*
Додатково
Перевірка нової версії ОС
- У LuCI: Status → Overview
- У SSH: версія відображається у привітальному банері
Оновлення встановлених пакетів
- Перевірте наявність оновлень після прошивки
- Перевірте вільне місце: `df -h /` — бажано >600KB
Перевстановлення вручну встановлених пакетів
- Після оновлення повторно встановіть необхідні пакети
Налаштування вручну встановлених пакетів
- Нові пакети мають нові конфігураційні файли (у `/etc/config/*-opkg`)
- Порівняйте їх з вашими старими (використовуйте `diff`) і об’єднайте зміни