Сборка образов с помощью Image Builder
Это предварительно скомпилированная среда, используемая для создания пользовательских образов прошивок без необходимости компиляции ядра и пакетов.
Преимущества использования:
- Возможность загрузки модулей расширения ядра из репозитория LEDE и OpenWrt
- Встраивание пакетов непосредственно в файловую систему SquashFS для экономии места во флэш-памяти устроиства
- Пользовательская конфигурация, добавление и удаление пакетов и файлов конфигурации непосредственно в файловой системе SquashFS
- Быстрая сборка по сравнению с методом компиляции Buildroot
Подготовка
Image Builder работает только в 64-битном Linux. Тем не менее вы можете использовать 64-битный Linux развернутый на виртуальной машине которая установлена на 32-битной операционной системе. Так же можно использовать “Подсистему Windows для Linux” в Windows 10 (сборка 19041 или выше).
Требуемые пакеты в наиболее распространенных дистрибутивах:
Debian/Ubuntu
sudo apt-get update sudo apt-get install build-essential libncurses5-dev libncursesw5-dev zlib1g-dev gawk git gettext libssl-dev xsltproc wget unzip python
CentOS/RHEL
yum install subversion git gawk gettext ncurses-devel zlib-devel openssl-devel libxslt wget yum group install "Development Tools"
Fedora 27+
dnf install @c-development @development-tools @development-libs zlib-static which
Загрузка Image Builder
Загрузите и распакуйте архив, содержащий Image Builder, который находится на той же странице, где и прошивка для вашего устройства.
В виде примера приведена страница, для устройства с архитектурой ar71xx/generic:
wget https://downloads.openwrt.org/releases/18.06.8/targets/ar71xx/generic/openwrt-imagebuilder-18.06.8-ar71xx-generic.Linux-x86_64.tar.xz tar -xf openwrt-imagebuilder-18.06.8-ar71xx-generic.Linux-x86_64.tar.xz
OpenWrt 18.06.8
https://downloads.openwrt.org/releases/18.06.8/targets/ar71xx/generic/
На странице вы найдете архив openwrt-imagebuilder-18.06.8-ar71xx-generic.Linux-x86_64.tar.xz
LEDE 17.01.7
https://downloads.openwrt.org/releases/17.01.7/targets/ar71xx/generic/
На странице вы найдете архив lede-imagebuilder-17.01.7-ar71xx-generic.Linux-x86_64.tar.xz
OpenWrt Chaos Calmer 15.05.1
http://archive.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/
На странице вы найдете архив OpenWrt-ImageBuilder-15.05.1-ar71xx-generic.Linux-x86_64.tar.bz2
OpenWrt Attitude Adjustment 12.09
http://archive.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/
На странице вы найдете архив OpenWrt-ImageBuilder-ar71xx_generic-for-linux-i486.tar.bz2
Настройка репозиториев пакетов
Image Builder, который вы загружаете уже настроен для загрузки любых пакетов из официальных репозиториев. Источники пакетов настраиваются в файле repositories.conf
в корневом каталоге. Источники указаны в исходном конфигурационном формате opkg . Это могут быть либо официальные репозитории пакетов, либо созданные пользователем репозитории.
Пример содержимого repositories.conf
из openwrt-imagebuilder-18.06.0-rc1-ar71xx-generic.Linux-x86_64.tar.xz:
## Place your custom repositories here, they must match the architecture and version. # src/gz %n http://downloads.openwrt.org/releases/18.06.0-rc1 # src custom file:///usr/src/openwrt/bin/ar71xx/packages ## Remote package repositories src/gz openwrt_core http://downloads.openwrt.org/releases/18.06.0-rc1/targets/ar71xx/generic/packages src/gz openwrt_base http://downloads.openwrt.org/releases/18.06.0-rc1/packages/mips_24kc/base src/gz openwrt_luci http://downloads.openwrt.org/releases/18.06.0-rc1/packages/mips_24kc/luci src/gz openwrt_packages http://downloads.openwrt.org/releases/18.06.0-rc1/packages/mips_24kc/packages src/gz openwrt_routing http://downloads.openwrt.org/releases/18.06.0-rc1/packages/mips_24kc/routing src/gz openwrt_telephony http://downloads.openwrt.org/releases/18.06.0-rc1/packages/mips_24kc/telephony ## This is the local package repository, do not remove! src imagebuilder file:packages
Если вы хотите добавить пользовательский локальный репозиторий, скопируйте:
src custom file:///usr/src/lede/bin/ramips/packages
Если у вас есть пользовательские репозитории в Интернете, скопируйте и измените:
src/gz reboot http://downloads.lede-project.org/snapshots
Использование
Распакуйте архив с Image Builder и перейдите в его директорию.
make image команда создаст образ для устройства по умолчанию со стандартными (необходимыми) пакетами. В большинстве случаев созданный образ не подойдет для вашего устроиства!
Чтобы настроить создаваемый образ, воспользуйтесь переменными по вашему усмотрению, передаваемых в качестве аргументов:
PROFILE
- определяет целевой профиль для сборкиPACKAGES
- список пакетов, добавляемых (исключаемых) в образFILES
- каталог с пользовательскими файлами для добавленияBIN_DIR
- Пользовательская директория для создаваемого образаEXTRA_IMAGE_NAME
- Пользовательское имя для создаваемого образаDISABLED_SERVICES
- Какие службы в /etc/init.d/ будут отключены по умолчанию
Пример использования:
make image PROFILE=XXX PACKAGES="pkg1 pkg2 -pkg3 -pkg4" FILES=files/
Готовые образы сохраняются в каталоге bin/architecture...
make help команда осуществляет вывод справки:
Available Commands: help: This help text info: Show a list of available target profiles clean: Remove images and temporary build files image: Build an image (see below for more information). Building images: By default 'make image' will create an image with the default target profile and package set. You can use the following parameters to change that: make image PROFILE="<profilename>" # override the default target profile make image PACKAGES="<pkg1> [<pkg2> [<pkg3> ...]]" # include extra packages make image FILES="<path>" # include extra files from <path> make image BIN_DIR="<path>" # alternative output directory for the images make image EXTRA_IMAGE_NAME="<string>" # Add this to the output image filename (sanitized)
Выбор профиля
Переменная PROFILE
определяет целевой профиль для создаваемого образа. Пустая переменная PROFILE
использует профиль по умолчанию DEFAULT
.
make info команда отобразит список целевых профилей.
Пример вывода команды make info
для архитектуры ar71xx приведен ниже:
Available Profiles: Default: Default Profile Packages: kmod-usb-core kmod-usb2 kmod-usb-ohci kmod-usb-ledtrig-usbport ai-br100: Aigale Ai-BR100 Packages: kmod-usb2 kmod-usb-ohci rp-n53: Asus RP-N53 Packages: rt-n14u: Asus RT-N14u Packages: whr-1166d: Buffalo WHR-1166D Packages: whr-300hp2: Buffalo WHR-300HP2 Packages: -and many many more-
После того как вы найдете соответствующий профиль, перейдите к команде make image
Пример использования: для TLMR3020 (архитектура Atheros ar71xx).
make image PROFILE=TLMR3020
Это создаст образ прошивки для устроиства TLMR3020 с минимумом необходимых для работы пакетов, поскольку переменная PACKAGES не была определена.
Добавление/удаление пакетов из образа
Переменная PACKAGES
определяет список пакетов, включаемых и/или исключаемых из образа прошивки. Пустая переменная PACKAGES создает минимальный образ с ядром и драйверами для устройств, uci, ssh, switch, firewall, ppp и ipv6.
Пример использования:
make image PROFILE=XXX PACKAGES="pkg1 pkg2 -pkg3 -pkg4"
В этом примере в образ будут добавлены пакеты pkg1, pkg2, и исключены - pkg3, pkg4.
Вам не нужно перечислять все зависимости устанавливаемых пакетов, необходимые пакеты добавятся в образ атоматический.
Пример использования: Необходимо удалить пакеты отвечающие за поддержку IPv6:
make image PROFILE=XXX PACKAGES="-ip6tables -kmod-ip6tables -kmod-nf-conntrack6 -kmod-nf-ipt6 -odhcp6c -odhcpd -kmod-ipv6"
Добавление файлов в образ
Переменная FILES
позволяет добавлять пользовательские файлы в прошивку. Это удобно, если в прошивке необходимо преднастроить конфигурацию сети, и т.п.
Порядок действий:
- Создайте папку files/ в корневом каталоге
- Добавьте свои файлы
- Сделайте файлы исполняемыми
chmod -R 777 files
- Выполните
make image
с выбранными переменными
Примерное содержание папки files/
etc/config/dhcp etc/banner lib/wifi/mac80211.sh
Пример использования:
make image PROFILE=XXX PACKAGES="pkg1 pkg2 -pkg3 -pkg4" FILES=files/
Очистка
Для удаления всех временных файлов сборки и сгенерированных образов воспользуйтесь командой:
make clean
Возможные проблемы
- При запуске команды make использование root не требуется.
- Проверьте вывод журнала на наличие проблем с пакетами (конфликты, неправильные имена).
- Убедитесь, что у вас есть поддерживаемая ОС, необходимые компоненты, файловая система и имя пути.
- При выходе новой версии подождите несколько дней, исходные пакеты могут находиться в несогласованном состоянии.
Вот как выглядит пример несогласованного состояния зависимостей для пакета libubus20191227:
Collected errors: * satisfy_dependencies_for: Cannot satisfy the following dependencies for luci: * libubus20191227 * opkg_install_cmd: Cannot install package luci. Makefile:154: recipe for target 'package_install' failed make[2]: *** [package_install] Error 255 Makefile:112: recipe for target '_call_image' failed make[1]: *** [_call_image] Error 2 Makefile:207: recipe for target 'image' failed make: *** [image] Error 2
- При работе под Windows 10 WSL в новых версиях OpenWRT 21.02 появилась проблема с путями которые содержат пробелы.
Решение:
sudo vi /etc/wsl.conf [interop] appendWindowsPath = false (для сохранения и выхода нажмите клавишу ESC введите :wq и нажмите ENTER) exit Перезагрузите свой компьютер и проверьте результат следующей командой: echo $PATH
Удаление файлов из образа
Это не стандартная функция Image Builder. Обратите внимание, что этот метод требует редактирования файла Makefile
1. Создайте файл 'files_remove' в корневом каталоге и внесите в него список файлов с соблюдением путей как в исходной прошивке:
/lib/modules/3.10.49/ts_bm.ko /lib/modules/3.10.49/nf_nat_ftp.ko /lib/modules/3.10.49/nf_nat_irc.ko /lib/modules/3.10.49/nf_nat_tftp.ko
2. Отредактируйте файл Makefile находящийся в корневом каталоге:
ifneq ($(USER_FILES),) $(MAKE) copy_files endif + +ifneq ($(FILES_REMOVE),) + @echo + @echo Remove useless files + + while read filename; do \ + rm -rfv "$(TARGET_DIR)$$filename"; \ + done < $(FILES_REMOVE); +endif + $(MAKE) package_postinst $(MAKE) build_image
3. Пересоберите образ с добавлением переменной FILES_REMOVE=“files_remove”
make image PROFILE=XXX PACKAGES="pkg1 pkg2 -pkg3 -pkg4" FILES_REMOVE="files_remove"
Добавление пользовательских профилей
Image Builder привязан к именам профилей. Если вы добавите новый профиль, не добавив соответствующий макрос в файл Makefile, при использовании настраиваемого профиля файл прошивки не будет создан.
Обязательно удалите каталог /tmp, чтобы получить правильный выбор пакетов из нового профиля.
Для примера расположение профилей архитектуры ar71xx находится в директории target /linux/ar71xx/generic/profiles/
Примечательно, что все, что нужно сделать для добавления нового профиля, - это добавить новый файл в каталог профилей . Хотя это, возможно, имело место в предыдущих выпусках, на 17.01, но похоже, также требуется ручное редактирование файла .targetinfo.
Вот как выглядит файл профиля profiles/100-Broadcom-b43.mk:
define Profile/Broadcom-b43 NAME:=Broadcom BCM43xx WiFi (default) PACKAGES:=kmod-b43 kmod-b43legacy endef define Profile/Broadcom-b43/Description Package set compatible with hardware using Broadcom BCM43xx cards endef $(eval $(call Profile,Broadcom-b43))
- Last modified: 2022/11/05 16:30
- by alexandrlastfm