Предположим ситуацию, Вам нужно прошивать роутеры в больших количествах. У них должны быть определенные настройки конфигов, инвидуальный ключ OpenVPN и хостнейм.

Про стандартную сборку прошивок с помощью Image Builder можете почитать вот тут . Теперь сделаем добавление индивидуального ключа OpenVPN и хостнейм, который задаем при сборке. При этом при компиляции не нужно будет указывать все параметры, только модель роутера и его хостнейм.

Собственно скрипт на bash, я собирал и из под Ubuntu 14.04 и FreeBSD 9. Использовал Image Builder 14.07 . Использовались роутеры только с архитектурой ar71xx. Должно работать и на других UNIX системах и последующих версиях OpenWRT:

#!/bin/sh
EASY_RSA=/usr/local/share/easy-rsa
PKITOOL=/usr/local/share/easy-rsa/pkitool
ROUTERS=/root/routers

if ! [ -d $1 ]; then
 mkdir $1
else echo "Folder $1 already exists"
 exit 1
fi

if [ -d $1 ]; then
    cd $1

    if ! [ -d "key" ]; then # if keys dir not exist create it
	mkdir keys
	if ! [ -e $EASY_RSA/keys/$1.key ]; then # if keys not exist in easy-rsa keys dir create them
	    RDIR=`pwd`
	    cd $EASY_RSA
	    . ./vars_old
	    ./pkitool $1
	    cd $RDIR
	fi
	    cp $EASY_RSA/keys/$1.key keys/client.key
	    cp $EASY_RSA/keys/$1.crt keys/client.crt
	    cp $EASY_RSA/keys/ca.crt keys/ca.crt
    fi

		#copy keys to imagebuilder
		cp -fr keys/* $ROUTERS/ImageBuilder-ar71xx/files/etc/openvpn/keys/
		#write hostname a /etc/config/system $1
		sed  "s/OpenWrt/${1}/g" $ROUTERS/ImageBuilder-ar71xx/work-files/system > $ROUTERS/ImageBuilder-ar71xx/files/etc/config/system
		#make image $2 profile
		cd $ROUTERS/ImageBuilder-ar71xx/
		make image PROFILE=$2 PACKAGES="nano tcpdump openvpn-openssl openvpn-easy-rsa logrotate snmpd" FILES=files/

		#copy /bin to $1 folder
		cp -fr $ROUTERS/ImageBuilder-ar71xx/bin/* $ROUTERS/$1/

		#remove keys & config/system in /imagebuilder
		rm $ROUTERS/ImageBuilder-ar71xx/files/etc/openvpn/keys/client.key
		rm $ROUTERS/ImageBuilder-ar71xx/files/etc/openvpn/keys/client.crt
		rm $ROUTERS/ImageBuilder-ar71xx/files/etc/openvpn/keys/ca.crt
		rm $ROUTERS/ImageBuilder-ar71xx/files/etc/config/system
		rm -rf $ROUTERS/ImageBuilder-ar71xx/bin/*


find $ROUTERS/$1/ar71xx ! -name '*factory*' | xargs rm -f 2>/dev/null

cd $ROUTERS/$1/ar71xx
rename 's/-ar71xx-generic-/-/g' *
rename -v 's/squashfs-factory/'$1'/g' *
fi

Скрипт кладём в директорию где лежит ваш ImageBuilder. У меня эта директория /root/routers. Кастомные файлы лежат в  ./files.

Пройдемся по скрипту:

  • Начинается всё с создания ключа и сертификатов с именем хостнейма, переименовывания их в client* и перемещением в наш каталог с ImageBuilder
  • Записывается хостнейм, производится сборка и уже готовые файлы прошивки копируется в отдельную директорию в нашем каталоге, где лежит скрипт
  • Удалем ключи, файл system и получившуюся прошивку из каталога с ImageBuilder. Что бы не мешать последующим компиляциям
  • Конструкция_find_ удаляет лишние прошивки, которые не factory
  • Rename меняет имена прошивок, добавляет им хостнейм

Сборка запускается (с sudo или из под root) командой: ./make_router_openwrt имя_роутера модель_роутера

Скомпилированная прошивка находится в */имя_роутера/ar71xx.

Вот результат для роутера Tp-Link TL-WR842ND c хостнеймом test1:

build openwrt + openvpn

Если вам нужно собирать разные конфигурации (отличающиеся пакеты, конфиги), можно добавить аргумент скрипта и конструкцию if — else. И так же создать каталог с ImageBuilder и другим /files. Если аргумент присутствует — собираем из другого места с другими пакетами.

Мой телеграм-канал .