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-адаптер:
- 64-бітні образи підтримують Intel і Realtek.
- Geode підтримує відповідне Geode-обладнання.
Підтримка NVMe SSD доступна, починаючи з OpenWrt 21.02.
Корисні пакети для x86
Через обмеження вбудованих пристроїв, OpenWrt за замовчуванням використовує мінімалістичний набір драйверів. Але для x86-машин обмеження по диску зазвичай відсутнє.
Якщо ви звикли до повнофункціональних дистрибутивів, де всі драйвери доступні “з коробки”, вас може здивувати мінімалізм OpenWrt. Ймовірно, вам знадобиться додатково встановити драйвери для:
- SATA/USB контролерів
- звуку
- криптографії
- відео
Один зі способів виявити необхідні модулі — завантажити Live-дистрибутив Linux (наприклад Arch Linux) і подивитись:
lsmod lspci -vvv | grep driver
Потім знайдіть відповідні OpenWrt-пакети (kmod).
Або, якщо збираєте образ самостійно — використовуйте опцію `ALL_KMODS=y`.
Пакети, які варто розглянути:
- Мікрокод для процесорів AMD: amd64-microcode
- Мікрокод для процесорів Intel: intel-microcode
- Моніторинг дисків: smartmontools — див. smartmontools
- Аппаратний моніторинг: lm-sensors
- Watchdog: watchdog
Встановлення
Процес встановлення полягає в записі образу диску на носій, з якого буде завантажено OpenWrt.
Це може бути USB-накопичувач, SD-карта через карт-рідер, або жорсткий диск/SSD (рекомендовано).
Ви можете зробити це на іншому ПК або завантажити роутер через Live CD/USB.
Процедура залежить від ОС, яку ви використовуєте.
Запис образу зітре всі дані на вибраному диску. Перевіряйте правильність вибору носія!
Windows / macOS
1. Розпакуйте образ диска з архіву (використовуйте 7zip або Keka). 2. Запишіть його на носій за допомогою Win32 Disk Imager або Etcher.
Linux
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 на внутрішній накопичувач
Якщо ви хочете встановити 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: див. вище.
Після запису образу:
- Вимкніть пристрій.
- Вийміть знімний носій, з якого проводилась інсталяція.
- Увімкніть пристрій знову — тепер OpenWrt має завантажитись з внутрішнього накопичувача.
Розмітка розділів
Образи OpenWrt для x86 використовують таку розмітку (як видно зсередини системи):
- `/dev/sda1` — розділ /boot розміром 16МБ (ext4), містить GRUB і ядро.
- `/dev/sda2` — розділ 104МБ, містить squashfs rootfs і read-write overlay (f2fs) або ext4 rootfs — залежно від обраного типу образу.
Усі інші доступні сектори залишаються нерозміченими.
Розширення кореневого розділу та файлової системи
Див. також: Автоматичний скрипт для розширення root
Розширення root-розділу
Якщо ви встановлюєте OpenWrt у віртуальну машину, спочатку потрібно збільшити розмір віртуального диска, перш ніж змінювати розділ.
Використовуйте parted для перегляду та зміни таблиці розділів.
# Встановіть parted opkg update opkg install parted # Перевірте диск і розділи parted -l -s # Розширте root-розділ (зазвичай /dev/sda2) parted -f -s /dev/sda resizepart 2 100% # Перезавантаження reboot
Розширення root файлової системи
Перед розширенням файлової системи переконайтесь, що сам розділ вже розширений (див. попередній крок).
Розширення можна виконати у процесі роботи системи (онлайн), але безпечніше — офлайн.
Використовуйте losetup і resize2fs:
# Встановіть утиліти opkg update opkg install losetup resize2fs # Призначте loop-пристрій до root-розділу losetup /dev/loop0 /dev/sda2 2> /dev/null # Розширте файлову систему resize2fs -f /dev/loop0 # Перезавантаження reboot
Розширення кореневого розділу за допомогою fdisk
Якщо утиліта parted
вам не підходить, ви можете скористатись утилітою fdisk
для розширення root-розділу.
Найзручніше це робити на машині, завантаженій з “live CD”, наприклад Finnix.
Огляд кроків:
- Виведіть таблицю розділів за допомогою fdisk і знайдіть root-розділ (~100МБ, зазвичай
/dev/sda2
або/dev/nvme0n1p2
). - Запишіть початковий сектор root-розділу.
- Видаліть розділ 2 через fdisk, але не записуйте зміни одразу.
- Створіть новий розділ 2, вказавши той самий початковий сектор, а кінцевий залишивши за замовчуванням (весь доступний простір).
- Запишіть зміни в таблицю розділів. Якщо буде запит про підпис розділу — введіть n, щоб зберегти поточний підпис.
- Оновіть 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
На більшості вбудованих пристроїв OpenWrt оновлюється простим запуском команди sysupgrade
— це стосується й x86-платформ.
Оновлювати можна за допомогою:
Перший і обов’язковий крок перед оновленням:
Зробіть резервну копію!
- Через інтерфейс LuCI: System → Backup/Flash firmware → Generate archive
- Через CLI:
sysupgrade --create-backup /tmp/backup.tar.gz # Потім скопіюйте файл на інший пристрій, наприклад через scp
Завжди робіть резервну копію…
Витягування іміджу boot розділу
Розділ 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
Зверніть увагу: запис виконується в розділ, а не весь диск.
Оновлення розділу rootfs
Як згадувалося вище, для файлової системи 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