Предположим ситуацию, Вам нужно прошивать роутеры в больших количествах. У них должны быть определенные настройки конфигов, инвидуальный ключ 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:
Если вам нужно собирать разные конфигурации (отличающиеся пакеты, конфиги), можно добавить аргумент скрипта и конструкцию if — else. И так же создать каталог с ImageBuilder и другим /files. Если аргумент присутствует — собираем из другого места с другими пакетами.
Мой телеграм-канал .