Если нас чем-то не устраивают доступные готовые образы прошивки OpenWRT, то можно собрать свою прошивку, которая будет удовлетворять нашим потребностям. Например, после установки релиза Chaos Calmer на TP-Link TL-MR3020, на нём не хватает места даже для установки минимума пакетов, необходимых для подключения флешки и переноса корня на неё (extroot)… Такой вот замкнутый круг. Поэтому тут напрашивается: собрать минимальную прошивку (без web-интерфейса и т.п., но с необходимыми пакетами для настройки extroot), на ней настроить extroot, а уж потом, на внешний накопитель устанавливать всё остальное…
Собственную сборку можно получить двумя способами: собрать из исходников, либо использовать Image Builder (так же называемый Image Generator) — прекомпилированную среду для сборки пользовательских образов OpenWRT без необходимости компиляции. Последний вариант и будет рассмотрен в этой статье.
Image Generator позволяет:
- Встраивать необходимые пакеты непосредственно в прошивку (в SquashFS) для экономии места во флэш-памяти устройства.
- Встраивать в прошивку пользовательские конфигурационные файлы.
- Собрать собственную прошивку всего за несколько минут.
Рассматриваемый Image Generator (для прошивки Chaos Calmer) не будет работать на 32-битных платформах, таких как i686. Для него требуется 64-битная linux-система, например amd64, даже если она работает на виртуальной машине, запущенной в 32-битной Windows.
В данном случае я использую Debian, запущенный в Virtualbox.
Получение Image Builder
Качаем архив с Image Generator из репозитория OpenWRT и распаковываем в нужную директорию:
cd ~
mkdir openwrt && cd openwrt
wget https://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/OpenWrt-ImageBuilder-15.05-ar71xx-generic.Linux-x86_64.tar.bz2
tar -xvjf OpenWrt-ImageBuilder-15.05-ar71xx-generic.Linux-x86_64.tar.bz2
cd OpenWrt-ImageBuilder-15.05-ar71xx-generic.Linux-x86_64
Настройка репозиториев пакетов
Image Builder должен быть настроен для загрузки отсутствующих пакетов из официальных или пользовательских репозиториев. В противном случае сборка образа может закончиться с ошибкой из-за отсутствия нужных пакетов. Источники загрузки пакетов настраиваются в файле repositories.conf в корневом каталоге Image Builder. Источники указаны в родном формате конфигурации opkg.
Для использования всех официальных репозиториев для платформы ar71xx — repositories.conf должен выглядеть так:
## Place your custom repositories here, they must match the architecture and version.
# src/gz chaos_calmer http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/packages
# src custom file:///usr/src/openwrt/bin/ar71xx/packages
src/gz chaos_calmer_base http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/packages/base
src/gz chaos_calmer_luci http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/packages/luci
src/gz chaos_calmer_management http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/packages/management
src/gz chaos_calmer_packages http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/packages/packages
src/gz chaos_calmer_routing http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/packages/routing
src/gz chaos_calmer_telephony http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/packages/telephony
## This is the local package repository, do not remove!
src imagebuilder file:packages
Использование Image Builder
Команда make image создаст минимальный образ прошивки, с минимумом необходимых для работы пакетов. Настроить собираемый образ можно с помощью трёх переменных, передаваемых в качестве аргументов:
- PROFILE — определяет целевой профиль для сборки
- PACKAGES — список пакетов, добавляемых к образу
- FILES — директория с пользовательскими файлами для добавления
Установим зависимости для «make»:
sudo apt-get install subversion build-essential libncurses5-dev zlib1g-dev gawk git ccache gettext libssl-dev xsltproc
Выбор профиля
Синтаксис:
make image PROFILE=NAMEOFPROFILE
где NAMEOFPROFILE — название целевого профиля для нашего устройства. Посмотреть список предустановленных профилей можно командой:
make info
Так, например, для TP-Link TL-MR3020 профиль называется TLMR3020.
Добавление пакетов
Переменная PACKAGES определяет список пакетов, включаемых (и/или исключаемых) в образ прошивки:
$ make image PROFILE=XXX PACKAGES="pkg1 pkg2 pkg3 -pkg4 -pkg5 -pkg6"
В этом примере будут добавлены в прошивку пакеты pkg1, pkg2, pkg3, и исключены — pkg4, pkg5, pkg6.
Добавление пользовательских файлов
Переменная FILES позволяет добавлять пользовательские файлы в прошивку. Это удобно, если мы, например, захотим преднастроить в прошивке конфигурацию сети, и т.п.
Синтаксис:
$ make image PROFILE=XXX PACKAGES="XXX" FILES=files/
В следующем примере мы:
- Создаём директорию для пользовательских файлов
- С помощью SCP копируем с роутера (192.168.1.1) конфигурационные файлы, сохраняя структуру поддиректорий
- Собираем образ прошивки для TP-Link TL-MR3020 без веб-интерфейса и поддержки ppp, подготовленный к подключению внешнего USB-накопителя и настройки extroot, и добавляем в него наши настройки для сети и фаервола:
mkdir -p files/etc/config
scp root@192.168.1.1:/etc/config/network files/etc/config/
scp root@192.168.1.1:/etc/config/wireless files/etc/config/
scp root@192.168.1.1:/etc/config/firewall files/etc/config/
make image PROFILE=TLMR3020 PACKAGES="kmod-usb-storage kmod-fs-ext4 e2fsprogs block-mount -luci -ppp -ppp-mod-pppoe" FILES=files/
Сгенерированные образы помещаются в директорию bin/.
Очистка
Для удаления временных файлов сборки и сгенерированных образов служит команда:
make clean
Готовый образ, как обычно, копируем на роутер в /tmp и прошиваем с помощью mtd.
Сразу после перезагрузки можем убедиться, что добавленные пакеты действительно присутствуют в прошивке:
opkg list-installed
При этом на флэш-памяти еще осталось достаточно много места:
df -h
Filesystem Size Used Available Use% Mounted on
rootfs 512.0K 212.0K 300.0K 41% /
/dev/root 2.3M 2.3M 0 100% /rom
tmpfs 14.0M 64.0K 14.0M 0% /tmp
tmpfs 14.0M 32.0K 14.0M 0% /tmp/root
tmpfs 512.0K 0 512.0K 0% /dev
/dev/mtdblock3 512.0K 212.0K 300.0K 41% /overlay
overlayfs:/overlay 512.0K 212.0K 300.0K 41% /