OpenWrt на x86 (ПК / VM / сервер)

Див. також: OpenWrt на UEFI-сумісних x86-системах

OpenWrt може працювати на звичайному ПК, віртуальній машині або серверному обладнанні, використовуючи всі переваги потужнішого обладнання архітектури x86 (Intel/AMD).

Перейдіть за посиланням: сюди, оберіть потрібну версію релізу, натисніть target, а потім x86.

Ви побачите різні цільові платформи:

  • 64 — для сучасного ПК (починаючи приблизно з 2007 року). Підтримує 64-бітні процесори та сучасні функції CPU. Обирайте цей варіант, якщо немає особливих причин вибрати інший.
  • Generic — для лише 32-бітного обладнання (старі системи або деякі процесори Atom). Працює на базі архітектури Linux i686. Використовуйте лише якщо ваш пристрій не підтримує 64-бітну версію.
  • Legacy — для дуже старого ПК (Pentium MMX, архітектура i586). Відсутня підтримка багатьох сучасних функцій (мультипроцесорність, >4ГБ RAM), але може запускатись на дуже старому обладнанні.
  • Geode — спеціалізований варіант Legacy, оптимізований під SoC Geode, які ще використовуються в мережевих пристроях, зокрема на старих платах Alix від PCEngines.

Після вибору платформи, ви побачите кілька варіантів іміджів (образів) дисків:

  • ext4-combined-efi.img.gz — образ з однією RW ext4-роздільною файловою системою без squashfs. Підтримує розширення розділу на весь диск. Відсутні функції Factory Reset і Failsafe Mode. Образ містить boot, root розділи та MBR з GRUB2.
  • ext4-combined.img.gz — аналогічно попередньому, але для завантаження через BIOS (не EFI).
  • ext4-rootfs.img.gz — лише root-розділ. Може бути використаний без перезапису boot-розділу або MBR.
  • kernel.bin — ядро окремо.
  • squashfs-combined-efi.img.gz — класичне розділення: squashfs (RO) + RW overlay. Простору для додаткових пакетів <100МБ. Extroot не працює. Підтримує EFI.
  • squashfs-combined.img.gz — те саме, але для BIOS.
  • squashfs-rootfs.img.gz — лише rootfs squashfs.
  • rootfs.tar.gz — архів усіх файлів root-розділу. Може бути розпакований у наявну файлову систему. Перед розпакуванням рекомендується видалити старі файли.

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

Деякі образи підтримують клавіатуру для початкової конфігурації.

Для з'єднання через COM-порт вам знадобиться “нуль-модемний” або “перехресний” кабель.

Щоб підключитися до пристрою, образ має підтримувати Ethernet-адаптер:

Підтримка NVMe SSD доступна, починаючи з OpenWrt 21.02.

Через обмеження вбудованих пристроїв, OpenWrt за замовчуванням використовує мінімалістичний набір драйверів. Але для x86-машин обмеження по диску зазвичай відсутнє.

Якщо ви звикли до повнофункціональних дистрибутивів, де всі драйвери доступні “з коробки”, вас може здивувати мінімалізм OpenWrt. Ймовірно, вам знадобиться додатково встановити драйвери для:

  • SATA/USB контролерів
  • звуку
  • криптографії
  • відео

Один зі способів виявити необхідні модулі — завантажити Live-дистрибутив Linux (наприклад Arch Linux) і подивитись:

lsmod  
lspci -vvv | grep driver

Потім знайдіть відповідні OpenWrt-пакети (kmod).

Або, якщо збираєте образ самостійно — використовуйте опцію `ALL_KMODS=y`.

Пакети, які варто розглянути:

Процес встановлення полягає в записі образу диску на носій, з якого буде завантажено OpenWrt.

Це може бути USB-накопичувач, SD-карта через карт-рідер, або жорсткий диск/SSD (рекомендовано).

Ви можете зробити це на іншому ПК або завантажити роутер через Live CD/USB.

Процедура залежить від ОС, яку ви використовуєте.

Запис образу зітре всі дані на вибраному диску. Перевіряйте правильність вибору носія!

1. Розпакуйте образ диска з архіву (використовуйте 7zip або Keka). 2. Запишіть його на носій за допомогою Win32 Disk Imager або Etcher.

1. Розпакуйте образ:

gunzip openwrt-*.img.gz

2. Визначте назву вашого носія (наприклад, `sda`, `sdb`):

lsblk

3. Запишіть образ на пристрій:

sudo dd if=openwrt-21.02.0-x86-64-generic-ext4-combined.img bs=1M of=/dev/sdX
⚠️ Замість `sdX` вставте правильну назву носія (не розділу!).

Якщо ви хочете встановити OpenWrt на SATA, IDE диски, CF-карти або SD-карти, їх можна просто витягнути з пристрою і прошити сирим образом з ПК.

У деяких пристроях eMMC також можна зняти або перевести в режим “usb write mode”.

Але якщо ви не можете фізично витягнути накопичувач (або не маєте адаптера для підключення до ПК), ви можете записати OpenWrt на USB-накопичувач (або інший знімний носій), вставити його в USB-порт пристрою та завантажитися з нього.

Після завантаження потрібно визначити назву внутрішнього накопичувача командою `lsblk` або через `dmesg`:

opkg update
opkg install lsblk
lsblk
dmesg | grep -e sd

Зверніть увагу: ви також побачите USB-накопичувач, з якого було завантажено OpenWrt.

Приклад виводу з 4ГБ USB-накопичувача з двома розділами (/dev/sda):

[    2.807590] sd 4:0:0:0: [sda] 7839744 512-byte logical blocks: (4.01 GB/3.74 GiB)
[    2.808703] sd 4:0:0:0: [sda] Write Protect is off
[    2.808754] sd 4:0:0:0: [sda] Mode Sense: 23 00 00 00
[    2.809827] sd 4:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[    2.814991]  sda: sda1 sda2
[    2.818338] sd 4:0:0:0: [sda] Attached SCSI removable disk

Коли ви визначили внутрішній накопичувач, слідуйте інструкціям для встановлення в Linux: див. вище.

Після запису образу:

  1. Вимкніть пристрій.
  2. Вийміть знімний носій, з якого проводилась інсталяція.
  3. Увімкніть пристрій знову — тепер OpenWrt має завантажитись з внутрішнього накопичувача.

Образи OpenWrt для x86 використовують таку розмітку (як видно зсередини системи):

  1. `/dev/sda1` — розділ /boot розміром 16МБ (ext4), містить GRUB і ядро.
  2. `/dev/sda2` — розділ 104МБ, містить squashfs rootfs і read-write overlay (f2fs) або ext4 rootfs — залежно від обраного типу образу.

Усі інші доступні сектори залишаються нерозміченими.

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

Використовуйте parted для перегляду та зміни таблиці розділів.

# Встановіть parted
opkg update
opkg install parted
 
# Перевірте диск і розділи
parted -l -s
 
# Розширте root-розділ (зазвичай /dev/sda2)
parted -f -s /dev/sda resizepart 2 100%
 
# Перезавантаження
reboot

Перед розширенням файлової системи переконайтесь, що сам розділ вже розширений (див. попередній крок).

Розширення можна виконати у процесі роботи системи (онлайн), але безпечніше — офлайн.

Використовуйте losetup і resize2fs:

# Встановіть утиліти
opkg update
opkg install losetup resize2fs
 
# Призначте loop-пристрій до root-розділу
losetup /dev/loop0 /dev/sda2 2> /dev/null
 
# Розширте файлову систему
resize2fs -f /dev/loop0
 
# Перезавантаження
reboot

Якщо утиліта parted вам не підходить, ви можете скористатись утилітою fdisk для розширення root-розділу.

Найзручніше це робити на машині, завантаженій з “live CD”, наприклад Finnix.

Огляд кроків:

  1. Виведіть таблицю розділів за допомогою fdisk і знайдіть root-розділ (~100МБ, зазвичай /dev/sda2 або /dev/nvme0n1p2).
  2. Запишіть початковий сектор root-розділу.
  3. Видаліть розділ 2 через fdisk, але не записуйте зміни одразу.
  4. Створіть новий розділ 2, вказавши той самий початковий сектор, а кінцевий залишивши за замовчуванням (весь доступний простір).
  5. Запишіть зміни в таблицю розділів. Якщо буде запит про підпис розділу — введіть n, щоб зберегти поточний підпис.
  6. Оновіть UUID у конфігурації GRUB у файлі /boot/grub/grub.cfg.

Приклад виводу:

Welcome to fdisk (util-linux 2.32).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): p
Disk /dev/sda: 7.2 GiB, 7751073792 bytes, 15138816 sectors
...
Device     Boot Start    End Sectors  Size Id Type
/dev/sda1  *      512  33279   32768   16M 83 Linux
/dev/sda2       33792 246783  212992  104M 83 Linux

Command (m for help): d
Partition number (1,2, default 2): 

Partition 2 has been deleted.

Command (m for help): n
...
First sector (33280-15138815, default 34816): 33792
Last sector, ... (33792-15138815, default 15138815): 

Created a new partition 2 of type 'Linux' and of size 7.2 GiB.
Partition #2 contains a ext4 signature.

Do you want to remove the signature? [Y]es/[N]o: n

Command (m for help): w

The partition table has been altered.
Syncing disks.

Видалення та повторне створення розділу може змінити його UUID. Не забудьте оновити UUID у файлі /boot/grub/grub.cfg, інакше система не завантажиться.

# Оновлення GRUB
ROOT_BLK="$(readlink -f /sys/dev/block/"$(awk -e '$9=="/dev/root"{print $3}' /proc/self/mountinfo)")"
ROOT_DISK="/dev/$(basename "${ROOT_BLK%/*}")"
ROOT_DEV="/dev/${ROOT_BLK##*/}"
ROOT_UUID="$(partx -g -o UUID "${ROOT_DEV}" "${ROOT_DISK}")"
sed -i -r -e "s|(PARTUUID=)\S+|\1${ROOT_UUID}|g" /boot/grub/grub.cfg

При встановленні OpenWrt за допомогою generic-ext4-combined.img.gz, таблиця розділів диска перезаписується — всі існуючі розділи буде видалено.

Невикористаний простір диска залишиться нерозміченим, і буде створено звичайну MBR таблицю розділів.

Ви можете створити додаткові розділи на цьому просторі за допомогою будь-якого інструмента, що підтримує MBR і ext4, наприклад:

Увага! Якщо ви створите додаткові розділи, більше не можна буде використовувати образи типу -combined.img.gz для оновлення, бо вони повністю перезаписують таблицю розділів. Це призведе до втрати додаткових розділів і поверне boot/rootfs до початкового стану.

На більшості вбудованих пристроїв OpenWrt оновлюється простим запуском команди sysupgrade — це стосується й x86-платформ.

Оновлювати можна за допомогою:

Перший і обов’язковий крок перед оновленням:

Зробіть резервну копію!

  • Через інтерфейс LuCI: System → Backup/Flash firmware → Generate archive
  • Через CLI:
sysupgrade --create-backup /tmp/backup.tar.gz
# Потім скопіюйте файл на інший пристрій, наприклад через scp

Завжди робіть резервну копію…

Розділ boot містить частину завантажувача GRUB2, ядро Linux та файл конфігурації grub.cfg із параметрами завантаження. Розділ rootfs містить файли OpenWrt, пакети та конфігурації.

На даний момент окремий образ для розділу boot не створюється (на відміну від rootfs). Щоб оновити boot без перезапису всього диска, потрібно витягнути його з ext4-combined.img.gz. Для цього потрібен порожній диск або віртуальна машина.

Кроки:

  • Розпакувати комбінований образ:
    gzip -d openwrt-19.07.8-x86-64-generic-ext4-combined.img.gz
    
  • Записати його на порожній диск:
    dd if=openwrt-19.07.8-x86-64-generic-ext4-combined.img of=/dev/sdd
    
  • Витягнути розділ boot:
    dd if=/dev/sdd1 of=openwrt-19.07.8-x86-64-generic-ext4-boot.img
    

У результаті отримаємо файл openwrt-19.07.8-x86-64-generic-ext4-boot.img.

На машині з OpenWrt (наприклад, якщо диск — `/dev/sdd` і GRUB2 boot — `/dev/sdd1`) можна оновити розділ так:

dd if=openwrt-19.07.8-x86-64-generic-ext4-boot.img of=/dev/sdd1

Зверніть увагу: запис виконується в розділ, а не весь диск.

Як згадувалося вище, для файлової системи ext4 є два способи оновлення rootfs:

  • запис образу ext4-rootfs.img.gz
  • розпакування rootfs.tar.gz в існуючий розділ

Запис через dd з образу ext4-rootfs.img.gz зітре всі файли у розділі, але не змінить розмір розділу (зберігає поточний розмір):

gzip -d openwrt-19.07.8-x86-64-generic-ext4-rootfs.img.gz  
dd if=openwrt-19.07.8-x86-64-generic-ext4-rootfs.img of=/dev/sdd2

Якщо ж використовуємо rootfs.tar.gz, потрібно:

  • змонтувати розділ
  • видалити всі файли
  • розпакувати нові

Хоча може здаватися доцільним залишити конфігураційні файли, це ризиковано — можливі конфлікти. Набагато безпечніше — зробити резервну копію, а після оновлення повернути налаштування. Ще краще — використовувати Subversion (SVN) на іншій машині для зберігання конфігів та їх відстеження, і синхронізувати з маршрутизатором через rsync.

# Монтування rootfs
mkdir /mnt/rootfs
mount -v /dev/sdd2 /mnt/rootfs
cd /mnt/rootfs
 
# Видалення всіх файлів
rm -Rf *
 
# Копіювання rootfs.tar.gz і розпакування
tar -xvzf openwrt-19.07.8-x86-64-generic-rootfs.tar.gz
 
# Видалення архіву після розпакування
rm openwrt-19.07.8-x86-64-generic-rootfs.tar.gz

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

Замість компіляції, набагато простіше створити власний образ через Image Builder.

Image Builder не компілює програмне забезпечення, а завантажує потрібні пакети з того самого репозиторію, що й OpenWrt, та створює образи, як і ті, що використовуються для встановлення або оновлення.

Переваги:

  • Можна одразу вбудувати потрібні пакети.
  • Не потрібно перевстановлювати їх після оновлення.
  • Можна одразу включити конфігураційні файли.
  • Не потрібно вручну повертати налаштування (особливо важливо, якщо мережеві конфіги за замовчуванням не підходять до вашого обладнання).

Також корисно, якщо розмір rootfs за замовчуванням замалий для всіх потрібних пакетів.

Але якщо ви вже встановили систему, розширили розділ і оновлюєте rootfs вручну (через .img або .tar.gz), не потрібно створювати образ із повним кінцевим розміром.
Інакше отримаєте надто великий файл і потрібно буде мати достатньо оперативної пам’яті для його обробки.

Рекомендовано задавати мінімальний необхідний розмір, який містить усі пакети + трохи вільного місця.

Щоб почати, дотримуйтесь інструкції Image Builder для створення середовища під x86/64.

Після підготовки, команда для створення образу:

make image

Готові образи будуть збережені в:

  • `bin/targets/x86/64/` (всередині робочої директорії)

Оскільки апаратне забезпечення x86 не має профілів, параметр `PROFILE` не потрібен. Для додавання/вилучення пакетів використовуйте `PACKAGES`. Щоб додати конфігураційні файли — параметр `FILES`, що вказує на папку з такою самою структурою, як у кореня OpenWrt.

Щоб змінити розмір розділів, використовуйте:

  • `CONFIG_TARGET_KERNEL_PARTSIZE`
  • `CONFIG_TARGET_ROOTFS_PARTSIZE`

Ці параметри можна або додати у файл `.config`, або передати прямо:

make image CONFIG_TARGET_KERNEL_PARTSIZE=128 CONFIG_TARGET_ROOTFS_PARTSIZE=512
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/30 07:06
  • by vazaz