owut: OpenWrt Upgrade Tool
Огляд
Для детального опису загального процесу оновлення OpenWrt, дивіться сторінку Attended Sysupgrade.
owut
— це інструмент командного рядка для оновлення, який створює та встановлює індивідуальні збірки OpenWrt, що містять усі встановлені вами пакунки і зберігають вашу конфігурацію.
Його підкоманди та опції дозволяють:
- перевірити статус останньої збірки;
- перелічити всі версії OpenWrt, доступні на сервері оновлень;
- завантажити образ без встановлення;
- перевірити та встановити вже завантажений образ;
- згенерувати список встановлених пакунків для використання з Firmware Selector або для побудови з початкових кодів;
- під час створення образу ви можете:
- додавати або видаляти пакунки зі списку збірки;
- включити власний скрипт
uci-defaults
; - вказати нестандартний розмір кореневої файлової системи;
- змінити тип файлової системи під час оновлення;
- та інше.
Ці опції можна вказувати напряму в командному рядку або зберігати їх через стандартну систему конфігурації OpenWrt (config
), щоб не доводилося щоразу вводити їх вручну.
Встановлення та оновлення owut
owut
є стандартним додатковим пакунком OpenWrt, доступним на всіх платформах, які підтримуються SNAPSHOT-збірками основної гілки або релізами версії 24.10 і новіше.
opkg update && opkg install owut # Для релізів 24.10. apk -U add owut # Для SNAPSHOT-збірок з main.
Якщо вам потрібна нова функція або виправлення помилки, що відсутні у вашій поточній версії owut
, ви можете оновити його так:
opkg update && opkg upgrade owut # Для релізів 24.10. apk -U upgrade owut # Для SNAPSHOT-збірок з main.
Зазвичай не потрібно окремо оновлювати owut
, оскільки після встановлення він оновлюється разом із усією системою під час повного оновлення прошивки.
Якщо у вас виникли запитання щодо встановлення чи конфігурації, [https://forum.openwrt.org/t/owut-openwrt-upgrade-tool/200035 скористайтесь темою на форумі підтримки].
Швидкий старт
Якщо ваша мета — просто оновити поточну прошивку маршрутизатора, залишаючись на тій самій версії (наприклад, 24.10 або SNAPSHOT), просто скористайтесь командою upgrade
. Якщо під час перевірки перед збіркою виникнуть проблеми або помилки, оновлення буде зупинено з відповідним повідомленням.
Ваш перший крок завжди...
Зробіть резервну копію!
- У LuCI: перейдіть до System → Backup/Flash firmware, натисніть Generate archive.
- У CLI: використайте
sysupgrade --create-backup /tmp/backup.tar.gz
і перенесіть файл у безпечне місце (наприклад, на інший комп'ютер) за допомогоюscp
чи іншого інструменту.
Завжди робіть це...
Якщо owut
виявить, що оновлення не вимагається або відбулось зниження версій, він повідомить про це і зупиниться. Ви можете повторно виконати команду з опцією --force
, яка змусить продовжити збірку та встановлення, зберігаючи конфігурацію. Якщо ви вважаєте, що вам потрібен --force
, але не впевнені — https://forum.openwrt.org/t/owut-openwrt-upgrade-tool/200035 запитайте на форумі.
Зверніть увагу: owut
наразі доступний лише в SNAPSHOT або версіях 24.x і новіше.
$ opkg update && opkg install owut # For 24.10 releases. $ apk -U add owut # For main SNAPSHOT builds. $ owut upgrade owut - OpenWrt Upgrade Tool 2024.12.10~e38844ae-r1 (/usr/bin/owut) ASU-Server https://sysupgrade.openwrt.org Upstream https://downloads.openwrt.org Target x86/64 Profile generic Package-arch x86_64 Root-FS-type ext4 Sys-type combined-efi Version-from 24.10-SNAPSHOT r28242-1eff737906 (kernel 6.6.67) Version-to 24.10-SNAPSHOT r28304-6dacba30a7 (kernel 6.6.69) Build-FS-type ext4 Build-at 2025-01-04T21:35:37Z (~66 hours ago) Image-prefix openwrt-24.10-snapshot-r28304-6dacba30a7-x86-64-generic Image-URL https://downloads.openwrt.org/releases/24.10-SNAPSHOT/targets/x86/64 Image-file openwrt-24.10-snapshot-r28304-6dacba30a7-x86-64-generic-ext4-combined-efi.img.gz Installed 284 packages Top-level 83 packages Default 43 packages User-installed 51 packages (top-level only) Package version changes: kmod-amazon-ena 6.6.67-r1 6.6.69-r1 kmod-amd-xgbe 6.6.67-r1 6.6.69-r1 ... procd-ujail 2024.12.17~fd01fb85-r1 2024.12.22~42d39376-r1 ubus 2024.10.20~252a9b0c-r1 2025.01.02~afa57cce-r1 ubusd 2024.10.20~252a9b0c-r1 2025.01.02~afa57cce-r1 92 packages are out-of-date Default package analysis: Default Provided-by dnsmasq dnsmasq-full kmod-dwmac-intel not installed libustream-mbedtls not installed nftables nftables-json There are currently package build failures for 24.10-SNAPSHOT x86_64: Feed: telephony freeswitch Mon Jan 6 05:37:57 2025 - not installed freeswitch-mod-bcg729 Mon Jan 6 05:46:38 2025 - not installed freetdm Mon Jan 6 05:46:40 2025 - not installed Failures don't affect this device, details at https://downloads.openwrt.org/releases/faillogs-24.10/x86_64/ WARNING: There are 2 missing default packages, confirm this is expected before proceeding Request: Version 24.10-SNAPSHOT r28304-6dacba30a7 (kernel 6.6.69) Request hash: fc626783b488e9a7e5a5914495a7ebbbf9fb079cff7abbf2a2165a25d02c8eb6 -- Status: queued - 0 ahead of you Progress: 0s total = 0s in queue + 0s in build -- Status: init Progress: 1s total = 0s in queue + 1s in build -- Status: container_setup Progress: 17s total = 0s in queue + 17s in build -- Status: validate_manifest Progress: 101s total = 0s in queue + 101s in build -- Status: building_image Progress: 185s total = 0s in queue + 185s in build -- Status: done Progress: 187s total = 0s in queue + 187s in build Build succeeded in 187s total = 0s in queue + 187s to build: version_number = 24.10-SNAPSHOT version_code = r28304-6dacba30a7 (requested r28304-6dacba30a7) kernel_version = 6.6.69 rootfs_size_mb = default init-script = no-init-script Image source: http://asu-dev.brain.lan:8000/store/fc626783b488e9a7e5a5914495a7ebbbf9fb079cff7abbf2a2165a25d02c8eb6/openwrt-24.10-snapshot-r28304-6dacba30a7-8e0b0deb02c0-x86-64-generic-ext4-combined-efi.img.gz Image saved : /tmp/firmware.bin Manifest : /tmp/firmware-manifest.json Verifying : /tmp/firmware.bin (32751632 bytes) against /tmp/firmware.sha256sums Saved sha256 matches Tue Jan 7 07:54:20 PST 2025 upgrade: Image metadata not present Tue Jan 7 07:54:20 PST 2025 upgrade: Reading partition table from bootdisk... Tue Jan 7 07:54:20 PST 2025 upgrade: Extract boot sector from the image Tue Jan 7 07:54:21 PST 2025 upgrade: Reading partition table from image... Checks complete, image is valid. Installing /tmp/firmware.bin and rebooting... ... system reboots ...
Використання
$ owut -h owut - OpenWrt Upgrade Tool 2025.01.06~e623a900-r1 (/usr/bin/owut) owut is an upgrade tool for OpenWrt. Usage: owut COMMAND [-V VERSION_TO] [-R REV_CODE] [-v] [-q] [-k] [--force] [-a ADD] [-r REMOVE] [--ignored-defaults IGNORED_DEFAULTS] [-I INIT_SCRIPT] [-F FSTYPE] [-S ROOTFS_SIZE] [-i IMAGE] [-f FORMAT] [-p PRE_INSTALL] [-T POLL_INTERVAL] -h/--help - Show this message and quit. --version - Show the program version and terminate. COMMAND - Sub-command to execute, must be one of: check - Collect all resources and report stats. list - Show all the packages installed by user. blob - Display the json blob for the ASU build request. download - Build, download and verify an image. verify - Verify the downloaded image. install - Install the specified local image. upgrade - Build, download, verify and install an image. versions - Show available versions. dump - Collect all resources and dump internal data structures. -V/--version-to VERSION_TO - Specify the target version, defaults to installed version. -R/--rev-code REV_CODE - Specify a 'version_code', literal 'none' allowed, defaults to latest build. -v/--verbose - Print various diagnostics. Repeat for even more output. -q/--quiet - Reduce verbosity. Repeat for total silence. -k/--keep - Save all downloaded working files. --force - Force a build even when there are downgrades or no changes. -a/--add ADD - New packages to add to build list. -r/--remove REMOVE - Installed packages to remove from build list. --ignored-defaults IGNORED_DEFAULTS - List of explicitly ignored default package names. --ignored-changes IGNORED_CHANGES - List of explicitly ignored package changes. -I/--init-script INIT_SCRIPT - Path to uci-defaults script to run on first boot ('-' use stdin). -F/--fstype FSTYPE - Desired root file system type (squashfs, ext4, ubifs, jffs2). -S/--rootfs-size ROOTFS_SIZE - DANGER: See wiki before using! Root file system size in MB (1-1024). -i/--image IMAGE - Image name for download, verify, install and upgrade. -f/--format FORMAT - Format for 'list' output (fs-user, fs-all, config). -p/--pre-install PRE_INSTALL - Script to exec just prior to launching final sysupgrade. -T/--poll-interval POLL_INTERVAL - Poll interval for build monitor, in milliseconds. Full documentation https://openwrt.org/docs/guide-user/installation/sysupgrade.owut Questions and discussion https://forum.openwrt.org/t/owut-openwrt-upgrade-tool/200035 Issues and bug reports https://github.com/efahl/owut/issues
Підкоманди
Підкоманда | Опис |
---|---|
check | Завантажує всі ресурси, збирає метадані з пристрою та ресурсів, формує звіт. Містить список доступних оновлень, зламаних збірок пакунків тощо. В кінці — чи можливе оновлення. |
list | Створює список встановлених пакунків. Підходить для Firmware Selector або збірки з джерел. Формати: fs-user , fs-all , config . |
blob | Показує json-запит до ASU. Корисно для налагодження. |
download | Створює, завантажує та перевіряє образ. Образ можна зберегти для подальшого встановлення через install . |
verify | Перевіряє завантажений образ на відповідність чексуми та sysupgrade . |
install | Встановлює зазначений локальний образ. Повторно виконує verify , потім запускає sysupgrade з перезавантаженням. |
upgrade | Збирає, завантажує, перевіряє та встановлює образ — комбінація download + install . |
versions | Показує доступні версії, відомі серверу ASU (не повний список на downloads.openwrt.org ). |
dump | Виводить усі внутрішні дані та ресурси (як blob , для налагодження). |
Параметри командного рядка
Параметр | Типово | Опис |
---|---|---|
-V/--version-to ВЕРСІЯ | остання в гілці | Цільова версія або гілка. Детальніше. |
-R/--rev-code КОД | - | Код збірки (рідко потрібно). Краще спитати на форумі. |
-v/--verbose | - | Виводити додаткову діагностику (більше разів — більше виводу). |
-q/--quiet | - | Менше виводу (повторно — повна тиша). |
-k/--keep | false | Зберігати робочі файли у /tmp/ . Увімкніть -v для прогресу. |
--force | false | Примусити download або upgrade при зниженні версій або відсутності змін. Докладніше. |
-a/--add ДОДАТИ | none | Додати нові пакунки до списку збірки. Докладніше. |
-r/--remove ВИДАЛИТИ | none | Видалити наявні пакунки зі списку збірки. Докладніше. |
--ignored-defaults ПЕРЕЛІК | none | Список стандартних пакунків для ігнорування. Докладніше. |
--ignored-changes ПЕРЕЛІК | none | Ігноровані зміни пакунків. Докладніше. |
-I/--init-script СКРИПТ | none | Шлях до uci-defaults скрипту (- = stdin). Докладніше. |
-F/--fstype ТИП | поточний | Тип файлової системи: squashfs , ext4 , ubifs , jffs2 . Докладніше. |
-S/--rootfs-size РОЗМІР | поточний | Розмір rootfs у МБ (1–1024). Докладніше. |
-i/--image ОБРАЗ | /tmp/firmware.bin | Ім’я образу для download , verify , install , upgrade . |
-f/--format ФОРМАТ | fs-user | Формат для list : fs-user , fs-all , config . Докладніше. |
-p/--pre-install СКРИПТ | none | Шлях до скрипту, який буде виконано перед sysupgrade . Докладніше. |
-T/--poll-interval ЧАС | 2000 | Інтервал опитування збірки у мс. |
Вибір версії
Якщо ви не вказуєте версію
Якщо ви явно не вказуєте значення для --version-to
, owut
самостійно шукає найновішу версію в гілці, якій відповідає встановлена версія, і встановлює її як цільову.
Для всіх прикладів припустимо, що останній реліз у гілці 21.02
— це 21.02.7
, а у гілці 23.05
— це 23.05.4
.
Встановлена версія | Цільова версія |
---|---|
21.02.2 | 21.02.7 |
23.05.0-rc1 | 23.05.4 |
23.05.3 | 23.05.4 |
23.05.4 | 23.05.4 |
Винятком є ситуація, коли встановлена версія є SNAPSHOT
(реліз або main). У такому разі цільова версія не змінюється і залишається такою ж.
Встановлена версія | Цільова версія |
---|---|
22.03-SNAPSHOT | 22.03-SNAPSHOT |
23.05-SNAPSHOT | 23.05-SNAPSHOT |
SNAPSHOT | SNAPSHOT |
Якщо ви вказуєте версію
Якщо ви вказуєте значення для --version-to
, воно має бути дійсною версією або гілкою. Якщо значення недійсне, owut
покаже всі доступні версії (або ви можете вручну це зробити за допомогою owut versions
).
При вказуванні повної версії вона перевіряється і залишається без змін:
Користувач вказує | Цільова версія |
---|---|
--version-to 23.05.3 | 23.05.3 |
--version-to 23.05.0-rc2 | 23.05.0-rc2 |
--version-to 23.05-snapshot | 23.05-SNAPSHOT |
--version-to snapshot | SNAPSHOT |
Якщо вказано лише гілку (номер версії без останнього значення після крапки), то цільова версія буде встановлена як останній реліз цієї гілки:
Користувач вказує | Цільова версія |
---|---|
--version-to 21.02 | 21.02.7 |
--version-to 23.05 | 23.05.4 |
--version-to SNAPSHOT | SNAPSHOT |
Зверніть увагу, що регістр символів у назві версії не має значення — owut
сам перетворить її у потрібний формат. Ви можете вказати snapshot
, SnapShot
чи SNAPSHOT
— програма розпізнає все коректно.
Примусова збірка
Стандартна поведінка owut
— уникати непотрібних дій: якщо не виявлено змін, збірка не запускається. Але параметр --force
дозволяє примусово виконати повторну збірку і повторне встановлення поточної системи.
Це може бути корисно, якщо ви випадково видалили пакунки або не можете відновити систему звичним способом.
Коли owut
виявляє зниження версій (downgrade) пакунків, він підсвічує нову версію червоним у секції Package version changes:
і виводить кількість таких пакунків наприкінці списку. У таких випадках owut
зупинить процес download
або upgrade
, якщо не було вказано параметр --force
.
Додавання та видалення пакунків
Параметри --add
і --remove
дозволяють додавати або видаляти пакунки зі списку збірки, який відправляється на сервер ASU. Ці параметри можуть бути використані лише один раз у командному рядку. Якщо потрібно вказати кілька пакунків, використовуйте кому або лапки.
Наприклад, якщо ви хочете оновити систему та одночасно перейти на повні версії dnsmasq
та tc
, скористайтесь наступною командою:
$ owut upgrade -r dnsmasq,tc-tiny -a "dnsmasq-full tc-full" ...
Починаючи з релізу 2025.01.06, аргументи для --add
і --remove
можна розділяти як комами, так і будь-якими пробілами (включно з переносами рядків). Це дозволяє використовувати простий текстовий файл зі списком пакунків:
$ cat additions nmap bind-dig tcpdump $ owut download --add "$(cat additions)" ...
Про ігнорування стандартних пакунків
Якщо у секції Default package analysis:
ви бачите стандартні пакунки, які ви видалили, але не хочете, щоб про це виводилося попередження, просто передайте їх до параметра --ignored-defaults
.
$ owut check ... Default package analysis: Default Provided-by dnsmasq dnsmasq-full kmod-drm-i915 not installed kmod-dwmac-intel not installed nftables nftables-json ... WARNING: There are 2 missing default packages, confirm this is expected before proceeding
Пакунки залишаються в таблиці аналізу для підтвердження вашого вибору, але попередження вже не виводиться:
$ owut check --ignored-defaults kmod-drm-i915,kmod-dwmac-intel ... Default package analysis: Default Provided-by dnsmasq dnsmasq-full kmod-drm-i915 user ignored kmod-dwmac-intel user ignored nftables nftables-json
Ви також можете додати ці пакунки у файл конфігурації, щоб не вводити їх щоразу вручну:
$ cat /etc/config/attendedsysupgrade ... config owut 'owut' option verbosity 1 option poll_interval 2000 list ignored_defaults "kmod-drm-i915" list ignored_defaults "kmod-dwmac-intel"
Це особливо корисно у випадках із такими пакунками як wpad-basic-mbedtls
та його численними альтернативами. Через складність залежностей owut
не завжди може визначити, чи був стандартний пакунок замінений або справді відсутній.
Наприклад, якщо ви замінили wpad-basic-mbedtls
на wpad-mbedtls
(повна версія), отримаєте:
Default package analysis: Default Provided-by nftables nftables-json wpad-basic-mbedtls not installed WARNING: There are 1 missing default packages, confirm this is expected before proceeding
У такому випадку спершу переконайтесь, що у вас встановлено правильну альтернативу, а потім додайте:
list ignored_defaults 'wpad-basic-mbedtls'
до секції owut
у /etc/config/attendedsysupgrade
, щоб попередження більше не з’являлось:
Default package analysis: Default Provided-by nftables nftables-json wpad-basic-mbedtls user ignored It is safe to proceed with an upgrade
Зміни пакунків
Сервер Attended Sysupgrade (ASU) надає метадані щодо змін версій, які використовують різні ASU-клієнти (включно з LuCI ASU, owut
і попередником auc
). Ці дані знаходяться у файлі overview.json, де можна побачити зміни у гілках.
Наприклад, у розділі branches.SNAPSHOT.package_changes
описано перехід з firewall
на firewall4
, який відбувся на ревізії 18611.
Ця таблиця використовується owut
для автоматичної заміни пакунків під час оновлення між релізами (але не під час зниження версії). Якщо виникнуть труднощі через це — зверніться на форум.
На прикладі firewall
: якщо у вас стара система до ревізії 18611 і ви оновлюєтесь, owut
діє так:
- Чи входить пакунок до списку
source
уpackage_changes
? - Якщо так — чи ваша ревізія ≤ ревізії зміни?
- Якщо так:
- видалити поточний пакунок;
- якщо
target
порожній — все (пакунок був вилучений або об’єднаний); - інакше — додати пакунок
target
.
Це дозволяє безпроблемно оновлюватися при перейменуванні, злитті або видаленні пакунків.
Проблеми виникають, якщо:
- зміни в OpenWrt не занесені у таблицю
package_changes
(це баг, повідомте про нього на GitHub); - вам потрібно, щоб певна заміна пакунків не відбувалася.
У другому випадку використовуйте параметр --ignored-changes
, щоб вказати пакунки, зміни яких потрібно ігнорувати:
$ owut upgrade --ignored-changes firewall owut - OpenWrt Upgrade Tool 2025.03.14~52e7d44c-r1 (/root/bin/owut) Ignoring package change firewall to firewall4 ...
Цей параметр має такий самий формат, як --add
чи --remove
: рядок з іменами пакунків, розділеними комами або пробілами.
Щоб зробити це постійним, додайте в конфігурацію:
$ uci add_list attendedsysupgrade.owut.ignored_changes='firewall' $ uci commit attendedsysupgrade $ uci show attendedsysupgrade attendedsysupgrade.owut=owut attendedsysupgrade.owut.verbosity='1' attendedsysupgrade.owut.poll_interval='2000' attendedsysupgrade.owut.ignored_changes='firewall'
Як дізнатись свою поточну ревізію
Ви можете визначити свою ревізію за допомогою:
$ ubus call system board | jsonfilter -e '$.release.revision' r28521-f3a210b742
Число між r
та -
— це ваша ревізія (тут це 28521). Якщо owut
вже встановлено, просто запустіть:
$ owut check | grep Version-
Це покаже як встановлену версію, так і ту, до якої буде виконане оновлення.
Використання скриптів uci-defaults
Не додавайте конфіденційну інформацію у файл init-script
.
Текст, який ви передаєте у параметрі --init-script
, надсилається на сервер збірки як частина конфігурації. Це може призвести до його розкриття, оскільки запит проходить через Інтернет. Після завершення збірки вміст зберігається у створеному образі, і кожен, хто знає хеш збірки, може отримати доступ до цього файлу.
Якщо ви не знайомі з uci-defaults
(також відомі як “скрипти першого запуску”), перегляньте: UCI defaults.
Механізм, на якому базуються збірки owut
, auc
, LuCI Attended Sysupgrade та Firmware Selector — це Image Builder: Image builder — Custom files.
Параметр --init-script
дозволяє вказати файл зі скриптом, який буде виконано при першому завантаженні. Сервер збірки розмістить його в /etc/uci-defaults/99-asu-defaults
(назву змінити не можна).
На незмінній файловій системі (наприклад, squashfs), файл також буде збережено у /rom/etc/uci-defaults/99-asu-defaults
.
Порівняння реалізацій:
auc
— не підтримує цю функцію (але існує патч).- Firmware Selector — працює ідентично до
owut
. - LuCI Attended Sysupgrade — шукає файл у
/rom/etc/uci-defaults/99-asu-defaults
і вбудовує його автоматично. Але змінити або видалити вже вбудований скрипт неможливо.
Визначення:
- mutable system — система з файловою системою ext4 (читання-запис):
$ mount | grep '(ro' ... немає виводу ...
- immutable system — система з squashfs (тільки читання) на розділі
/rom
:
$ mount | grep '(ro' /dev/root on /rom type squashfs (ro,relatime,errors=continue)
- asu-defaults — файл
/rom/etc/uci-defaults/99-asu-defaults
, доступний лише на незмінних системах, створених через ASU.
Випадки для незмінної системи (immutable system)
- Файл не існує, і він не потрібен:
owut upgrade
- Файл існує, і його потрібно залишити без змін:
owut upgrade --init-script /rom/etc/uci-defaults/99-asu-defaults
- Файл існує, і його потрібно змінити:
cp /rom/etc/uci-defaults/99-asu-defaults my-modified-init-script.sh vi my-modified-init-script.sh owut upgrade --init-script my-modified-init-script.sh
- Файл не існує, але ви хочете додати:
vi my-new-init-script.sh owut upgrade --init-script my-new-init-script.sh
- Файл існує, але ви хочете не включати його:
owut upgrade # Просто ігноруйте попередження
Випадки для змінної системи (mutable system)
- Ви не хочете створювати файл:
owut upgrade
- Ви хочете створити файл:
owut upgrade --init-script my-init-script.sh
⚠ Якщо ви використовуєте asu-defaults, зробіть резервну копію. Найкраща практика — зберігати скрипт окремо. Див. приклад постійного зберігання.
Зміна типу файлової системи
Іноді може виникнути потреба змінити тип файлової системи, наприклад на x86, RISC-V або ARM SBC пристроях з SSD або іншим носієм. Не використовуйте це на пристроях із флеш-пам’яттю — збірка майже завжди завершиться невдачею.
Наприклад, для переходу з squashfs на ext4:
$ owut upgrade --fstype ext4 ... Target x86/64 Profile generic Package-arch x86_64 Root-FS-type squashfs <<< Installed Version-from SNAPSHOT r26504-d4acd05218 (kernel 6.6.32) Version-to SNAPSHOT r26733-2b6772c82c (kernel 6.6.34) Build-FS-type ext4 <<< Requested ...
Збільшення розміру root файлової системи
Зміна розміру rootfs може спричинити втрату конфігурації після встановлення! Підготуйте резервну копію. Якщо буде втрачено /etc/config/network
, IP-адреса пристрою може змінитися.
Параметр --rootfs-size
дозволяє задати розмір кореневої файлової системи (до 1024 МБ). Це актуально для пристроїв на базі x86, RISC-V, ARM SBC тощо.
Найкраще — вказати значення у конфігурації, щоби:
- не вводити щоразу вручну;
- уникнути випадкового повернення до 104 МБ і втрати конфігурації.
Приклад встановлення розміру rootfs у 256 МБ:
$ uci set attendedsysupgrade.owut=owut $ uci set attendedsysupgrade.owut.rootfs_size=256 $ uci commit $ uci show attendedsysupgrade.owut attendedsysupgrade.owut=owut attendedsysupgrade.owut.rootfs_size='256'
Форматування списку
Команда owut list
використовує параметр --format
, який приймає одне з таких значень:
fs-user
— типово. Створює список лише користувацьких top-level пакунків, які ви змінили. Його слід вставити після списку за замовчуванням у полі 'Installed Packages' Firmware Selector.fs-all
— Створює список усіх top-level пакунків, який слід вставити замість усього в полі 'Installed Packages' Firmware Selector.config
— Створює фрагмент конфігурації.config
для source-збірки. Кожен рядок виглядає так:CONFIG_PACKAGE_collectd-mod-thermal=y
.
Параметри fs-*
генерують список у стилі Image Builder. Назва пакунка додає його, а префікс -
видаляє.
Наприклад, якщо ви встановили dnsmasq-full
, то базовий dnsmasq
потрібно видалити:
$ owut list
... dnsmasq-full ... -dnsmasq ...
Деякі пакунки мають “віртуальні” імена, які насправді реалізуються іншим пакунком. Наприклад, nftables
може бути реалізовано nftables-json
або nftables-nojson
. У результаті буде показано лише -nftables
:
$ opkg whatprovides nftables
nftables-json
$ owut list
... -nftables ...
Такі видалення можуть стосуватись й інших залежностей. Наприклад, використання luci-ssl-openssl
призведе до автоматичного видалення libustream-mbedtls
, щоб уникнути конфлікту:
$ owut check ... Default package analysis: Default Provided-by dnsmasq dnsmasq-full kmod-dwmac-intel not installed nftables nftables-json ...
Pre-install скрипт
Порада: найсвіжіший приклад pre-install скрипту шукайте в репозиторії GitHub.
owut
має хук між перевіркою образу та встановленням, де ви можете:
- зробити резервну копію,
- архівувати артефакти збірки,
- виконати інші команди.
Використовуйте параметр: --pre-install /шлях/до/скрипту
.
Коли скрипт перевірений, найкраща практика — додати його до конфігурації:
config owut 'owut' option pre_install '/шлях/до/скрипту'
Типовий скрипт можна знайти тут: /etc/owut.d/pre-install.sh
.
Каталог /etc/owut.d/
входить до стандартної резервної копії sysupgrade, тож файли там будуть збережені при оновленні, якщо вибрано “keep config”.
Конфігурація
Хоча ви можете зберігати будь-які параметри командного рядка у конфігураційному файлі, робіть це обережно. Наприклад, option force true
— не найкраща ідея.
Будь-який параметр можна зберегти у секції owut
файлу /etc/config/attendedsysupgrade
. Наприклад, щоб завжди використовувати rootfs розмір 256 МБ:
config server 'server' option url 'https://sysupgrade.openwrt.org' config owut 'owut' option rootfs_size 256
🔸 Назви опцій в конфігах мають підкреслення замість дефісів (rootfs_size
замість --rootfs-size
).
🔹 Виняток — параметри --verbose
і --quiet
, які відповідають verbosity
(цілочисельне значення):
* Кожен -v
— +1, кожен -q
— -1.
* Приклад: owut check -v -v -q -v
дає verbosity=3
.
Щоб перевірити значення з конфігурації:
$ owut dump | head -20 { "version": "owut/2025.01.06~e623a900-r1", "options": { "command": "dump", "version_to": null, "rev_code": null, "verbosity": 1, "keep": false, "force": false, "add": null, "remove": null, "init_script": null, "fstype": null, "rootfs_size": 256, "image": "/tmp/firmware.bin", "format": null, "pre_install": "/etc/owut.d/pre-install.sh", "poll_interval": 10000, "device": null },
Приклади конфігурації
Залишатись на певному релізі
Можна примусово задати версію через version_to
:
config owut 'owut' option version_to '24.10'
Встановлення розміру rootfs
Для пристроїв з розширюваним сховищем (x86, RISC-V, ARM SBC) можна задати розмір root файлової системи:
config owut 'owut' option rootfs_size 512
Збереження uci-defaults
Скрипти uci-defaults
видаляються з /etc/uci-defaults/
при першому завантаженні. На незмінній системі (зазвичай squashfs) їх можна переглянути в /rom/etc/uci-defaults/
, але на системах з файловою системою ext4
вони втрачаються назавжди.
owut
дозволяє зберігати скрипти у постійному місці, яке автоматично додається до образу під час оновлення.
- Створіть скрипт у поствйному місці:
$ mkdir /etc/owut.d/ $ echo "# My first boot script." > /etc/owut.d/custom-init.sh
- Переконайтесь, що скрипт включено до резервних копій:
$ sysupgrade -l | grep custom /etc/owut.d/custom-init.sh
- Налаштуйте
owut
, щоб додавати скрипт до кожного оновлення:
$ uci set attendedsysupgrade.owut=owut $ uci set attendedsysupgrade.owut.init_script=/etc/owut.d/custom-init.sh $ uci commit $ uci show attendedsysupgrade.owut attendedsysupgrade.owut=owut attendedsysupgrade.owut.init_script='/etc/owut.d/custom-init.sh'
- Перевірте, чи все налаштовано правильно — скрипт повинен з’явитись у полі
defaults
:
$ owut blob { ... "defaults": "# My first boot script.\n" }
*З червня 2024 також можна вставити скрипт вручну у Firmware Selector, в поле Script to run on first boot (uci-defaults).
FAQ
П: Чому в owut
немає опції оновлення без збереження конфігурації, як в auc -n
?
В: Таку дію навмисно ускладнено. Просто згенеруйте образ через owut
, а потім використовуйте звичайну команду sysupgrade
з прапором -n
:
$ owut download ... $ sysupgrade -n /tmp/firmware.bin
П: У мене великий miniPC з SSD. Чому я не можу вказати --rootfs-size 120000
і використати повністю диск на 128 ГБ?
В: Ліміт у 1024 МБ встановлено сервером ASU з практичних причин. При створенні великих образів витрачається надто багато оперативної пам'яті, диску та часу. Наприклад:
ROOTFS_PARTSIZE= | real | user | розмір образу |
---|---|---|---|
104 | 26s | 18s | 12M |
512 | 48s | 25s | 13M |
1024 | 74s | 33s | 13M |
10000 | 11m47s | 4m36s | 32M |
20000 | 28m15s | 13m9s | 32M |
Ці тести проводились на AMD R9 7950X 5.8GHz, 64GB RAM, PCIe4 SSD — утричі швидший за сервер ASU. На сервері час буде ще більшим.
Посилання
* owut
- github source, OpenWrt packaging
- ASU server - github source, API documentation
- LuCI Attended Sysupgrade - Сторінка wiki, github source
- Firmware Selector - github source, build site
- Docker container builds - github source
- OpenWrt buildbots - github source
- Downloads site - OpenWrt build artifacts and release archive
- Dashboards - OpenWrt buildbot dashboards
ucode
- Reference Manualucode-mod-uclient
- github source