owut: OpenWrt Upgrade Tool

Для детального опису загального процесу оновлення OpenWrt, дивіться сторінку Attended Sysupgrade.

owut — це інструмент командного рядка для оновлення, який створює та встановлює індивідуальні збірки OpenWrt, що містять усі встановлені вами пакунки і зберігають вашу конфігурацію.

Його підкоманди та опції дозволяють:

  • перевірити статус останньої збірки;
  • перелічити всі версії OpenWrt, доступні на сервері оновлень;
  • завантажити образ без встановлення;
  • перевірити та встановити вже завантажений образ;
  • згенерувати список встановлених пакунків для використання з Firmware Selector або для побудови з початкових кодів;
  • під час створення образу ви можете:
    • додавати або видаляти пакунки зі списку збірки;
    • включити власний скрипт uci-defaults;
    • вказати нестандартний розмір кореневої файлової системи;
    • змінити тип файлової системи під час оновлення;
  • та інше.

Ці опції можна вказувати напряму в командному рядку або зберігати їх через стандартну систему конфігурації OpenWrt (config), щоб не доводилося щоразу вводити їх вручну.

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 діє так:

  1. Чи входить пакунок до списку source у package_changes?
  2. Якщо так — чи ваша ревізія ≤ ревізії зміни?
  3. Якщо так:
    1. видалити поточний пакунок;
    2. якщо target порожній — все (пакунок був вилучений або об’єднаний);
    3. інакше — додати пакунок target.

Це дозволяє безпроблемно оновлюватися при перейменуванні, злитті або видаленні пакунків.

Проблеми виникають, якщо:

  1. зміни в OpenWrt не занесені у таблицю package_changes (це баг, повідомте про нього на GitHub);
  2. вам потрібно, щоб певна заміна пакунків не відбувалася.

У другому випадку використовуйте параметр --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-

Це покаже як встановлену версію, так і ту, до якої буде виконане оновлення.

Не додавайте конфіденційну інформацію у файл 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.
  1. Файл не існує, і він не потрібен:
owut upgrade
  1. Файл існує, і його потрібно залишити без змін:
owut upgrade --init-script /rom/etc/uci-defaults/99-asu-defaults
  1. Файл існує, і його потрібно змінити:
    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
    
  1. Файл не існує, але ви хочете додати:
    vi my-new-init-script.sh
    owut upgrade --init-script my-new-init-script.sh
    
  1. Файл існує, але ви хочете не включати його:
owut upgrade  # Просто ігноруйте попередження
  1. Ви не хочете створювати файл:
owut upgrade
  1. Ви хочете створити файл:
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
...

Зміна розміру rootfs може спричинити втрату конфігурації після встановлення! Підготуйте резервну копію. Якщо буде втрачено /etc/config/network, IP-адреса пристрою може змінитися.

Параметр --rootfs-size дозволяє задати розмір кореневої файлової системи (до 1024 МБ). Це актуально для пристроїв на базі x86, RISC-V, ARM SBC тощо.

Найкраще — вказати значення у конфігурації, щоби:

  1. не вводити щоразу вручну;
  2. уникнути випадкового повернення до 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 скрипту шукайте в репозиторії 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 дозволяє зберігати скрипти у постійному місці, яке автоматично додається до образу під час оновлення.

  1. Створіть скрипт у поствйному місці:
$ mkdir /etc/owut.d/
$ echo "# My first boot script." > /etc/owut.d/custom-init.sh
    
  1. Переконайтесь, що скрипт включено до резервних копій:
$ sysupgrade -l | grep custom
/etc/owut.d/custom-init.sh
    
  1. Налаштуйте 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'
    
  1. Перевірте, чи все налаштовано правильно — скрипт повинен з’явитись у полі defaults:
$ owut blob
{
  ...
  "defaults": "# My first boot script.\n"
}
    

*З червня 2024 також можна вставити скрипт вручну у Firmware Selector, в поле Script to run on first boot (uci-defaults).

П: Чому в 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

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/29 19:16
  • by vazaz