Table of Contents

Сборка образов с помощью Image Builder

Это предварительно скомпилированная среда, используемая для создания пользовательских образов прошивок без необходимости компиляции ядра и пакетов.

Преимущества использования:

Подготовка

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 позволяет добавлять пользовательские файлы в прошивку. Это удобно, если в прошивке необходимо преднастроить конфигурацию сети, и т.п.

Порядок действий:

  1. Создайте папку files/ в корневом каталоге
  2. Добавьте свои файлы
  3. Сделайте файлы исполняемыми chmod -R 777 files
  4. Выполните 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

Возможные проблемы

  1. При запуске команды make использование root не требуется.
  2. Проверьте вывод журнала на наличие проблем с пакетами (конфликты, неправильные имена).
  3. Убедитесь, что у вас есть поддерживаемая ОС, необходимые компоненты, файловая система и имя пути.
  4. При выходе новой версии подождите несколько дней, исходные пакеты могут находиться в несогласованном состоянии.

Вот как выглядит пример несогласованного состояния зависимостей для пакета 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
  1. При работе под 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))