Сборка образов прошивки: различия между версиями

Материал из Wiren Board
 
(не показано 28 промежуточных версий 5 участников)
Строка 2: Строка 2:


= Подготовка =
= Подготовка =
Актуально '''до''' ядра 4.22 включительно. Раздел в процессе правки.
 
== Установка Docker и подготовка хост-системы ==
== Установка Docker и подготовка хост-системы ==
Перый шаг — это установка [https://docs.docker.com/ Docker].
Перый шаг — это установка [https://docs.docker.com/ Docker].
Строка 13: Строка 13:
На '''хост-системе''' нужно установить также пакет <code>qemu-user-static</code>:
На '''хост-системе''' нужно установить также пакет <code>qemu-user-static</code>:
<syntaxhighlight lang="console">
<syntaxhighlight lang="console">
# sudo apt install -y qemu-user-static
$ sudo apt install -y qemu binfmt-support qemu-user-static
</syntaxhighlight>
</syntaxhighlight>


Не забудьте добавить пользователя в группу docker, чтобы не использовать sudo:
Не забудьте добавить пользователя в группу docker, чтобы не использовать sudo:
<syntaxhighlight lang="console">
<syntaxhighlight lang="console">
# sudo usermod -aG docker ${USER}
$ sudo usermod -aG docker ${USER}
</syntaxhighlight>
</syntaxhighlight>


Строка 27: Строка 27:


<syntaxhighlight lang="console">
<syntaxhighlight lang="console">
# mkdir ~/wirenboard-wbdev
$ mkdir ~/wirenboard-wbdev
# cd ~/wirenboard-wbdev
$ cd ~/wirenboard-wbdev
# git clone https://github.com/wirenboard/wirenboard
$ git clone https://github.com/wirenboard/wirenboard
# cd wirenboard
$ cd wirenboard
</syntaxhighlight>
</syntaxhighlight>


== Выкачивание образа ==
== Выкачивание образа Docker-контейнера ==
 
{{note|info|Учитывайте, что образ контейнера займет ~5.5 Гб на <code>/var</code>}}
Запускаем:
Запускаем:
<syntaxhighlight lang="console">
<syntaxhighlight lang="console">
# ./wbdev root exit
$ ./wbdev root exit
</syntaxhighlight>
</syntaxhighlight>
<blockquote>'''Важно:''' Образ займет ~5.5 Гб на <code>/var</code></blockquote>
Команда выкачает, затем запустит контейнер и завершится. Отсутствие ошибок - покажет что контейнер работает нормально.


=Cборка образа=
=Cборка образа=
Про идеологию разделов контроллера можно прочитать на странице [[WB_Firmware_Update_Details | Обновление прошивки, информация для разработчиков]].
Про идеологию разделов контроллера можно прочитать на странице [[WB_Firmware_Update_Details | Обновление прошивки, информация для разработчиков]].
==Автоматическая сборка==
==Автоматическая сборка==
Готовим файл с командами:
Готовим файл с командами. Для Wiren Board 6 версии до 6.7 задаём переменную <code>BOARD=6x</code>, от 6.7 и выше - <code>BOARD=67</code>. Для WB7 - <code>BOARD=7x</code>
 
Сразу создаем каталог <code>mkdir ./output/images/</code>
 
Релиз, на основе которого будет собран образ, задаётся в переменной <code>WB_RELEASE</code>.
 
'''Обратите внимание''': если корневая ФС была отредактирована, нужно удалить строки в скрипте, отвечающие за удаление старой и создание новой корневой ФС
(отмечены комментарием в скрипте):
 
<blockquote>'''Важно:''' кэш сохраняется по пути /home/XXX/wbdev/go/src/github.com/contactless/wirenboard/output -
эта же папка шарена между нашим хостом и докером, из неё мы и запускаем ./wbdev. Если у вас что-то сбоит на старых версиях - можно переиначить все пути на
<syntaxhighlight>/root/rootfs/ </syntaxhighlight>
но при этом будет потеряна возможность использовать кэш при сборке.
 
'''дополнительно:''' DEBIAN_RELEASE= в скрипте есть смысл ставить тот который требуется в зависимости от версии board. wb6 со скриптом ниже не заработает без изменения релиза на предыдущий.
</blockquote>
 
 
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
cat << EOFcommand > tmp.sh
$ BOARD=7x; WB_RELEASE=stable; DEBIAN_RELEASE=stretch; cat << EOFcommand > tmp.sh
#!/bin/bash
#!/bin/bash
apt-get update
apt-get update
apt-get install -y kpartx zip device-tree-compiler u-boot-tools=2016.11+dfsg1-4 libfdt1 binutils
apt-get install -y kpartx zip device-tree-compiler u-boot-tools libfdt1 binutils
mount -t devtmpfs none /dev
mount -t devtmpfs none /dev
#echo "Remove exist rootfs for re-create (if need)"
export ROOTFS=./output/rootfs_wb${BOARD}
#rm -rf /rootfs/$WBDEV_TARGET
 
#rm -rf ./output/rootfs_wb6x
# нужно удалить эти 3 строки, если rootfs уже была создана ранее и изменена,
export ROOTFS=./output/rootfs_wb6x
# иначе она будет удалена и создана заново!
echo "Create new clean rootfs"
echo "Create new clean rootfs"  
rm -rf $ROOTFS
rm -rf \$ROOTFS
/root/rootfs/create_rootfs.sh 6x
WB_RELEASE=${WB_RELEASE} DEBIAN_RELEASE=${DEBIAN_RELEASE}  rootfs/create_rootfs.sh ${BOARD}
# можно использовать /root/rootfs/create_rootfs.sh ${BOARD} но в этом случае у вас не будет использоваться кэш сокращающий время компиляции в 2 раза
 
echo "Create .fit image"
echo "Create .fit image"
./image/create_images.sh 6x
./image/create_images.sh ${BOARD}
echo "correct rights"
echo "fix permissions"
chmod a+rw -R ./output/images/
chown ${UID} -R ./output/images/
rm tmp.sh
#Uncomment next string for remove script
#rm tmp.sh
EOFcommand
EOFcommand
chmod a+x tmp.sh


</syntaxhighlight>
</syntaxhighlight>


Запускаем контейнер, при этом передаем архитектуру «цели»:
<blockquote>'''Важно:'''u-boot-tools=2016.11+dfsg1-4 - больше не требуется. Но если вам вдруг надо на старой wb поставить именно его -
<syntaxhighlight>wget https://cloudfront.debian.net/debian-archive/debian/pool/main/u/u-boot/u-boot-tools_2016.11+dfsg1-4_amd64.deb
dpkg -i u-boot-tools_2016.11+dfsg1-4_amd64.deb
rm u-boot-tools_2016.11+dfsg1-4_amd64.deb </syntaxhighlight></blockquote>
 
Запускаем скрипт в контейнере:
 
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
WBDEV_TARGET=stretch-armhf ./wbdev root ./tmp.sh
$ ./wbdev root bash ./tmp.sh
</syntaxhighlight>
</syntaxhighlight>


<blockquote>'''Важно:''' Изменения внутри контейнера не сохранятся </blockquote>
<blockquote>'''Важно:''' Изменения внутри контейнера не сохранятся </blockquote>
После завершения — «корневая» файловая система остается в каталоге <code>./output/rootfs_wb6x</code> и доступна для следующего использования. Можно изменять и дополнять в «ручном» режиме.
 
После завершения — «корневая» файловая система остается в каталоге <code>./output/rootfs_wbXX</code> (XX соответствует значению <code>BOARD</code>)и доступна для следующего использования. Можно изменять и дополнять в «ручном» режиме.
Готовый для загрузки в контроллер образ — в <code>./output/images/YYYYMMDDHHMM</code>
Готовый для загрузки в контроллер образ — в <code>./output/images/YYYYMMDDHHMM</code>


Строка 82: Строка 108:
Запускаем в том же каталоге <code>~/wirenboard-wbdev/wirenboard</code> следующую команду:
Запускаем в том же каталоге <code>~/wirenboard-wbdev/wirenboard</code> следующую команду:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
~/wirenboard-wbdev/wirenboard
~/wirenboard-wbdev/wirenboard$ ./wbdev root
WBDEV_TARGET=stretch-armhf ./wbdev root
</syntaxhighlight>
</syntaxhighlight>
и после запуска контейнера готовим среду, команды те же что и в «автоматическом» режиме:
и после запуска контейнера готовим среду, команды те же что и в «автоматическом» режиме:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="console">
apt-get update && \
# apt-get update && \
apt-get install -y kpartx zip device-tree-compiler u-boot-tools=2016.11+dfsg1-4 libfdt1 binutils && \
apt-get install -y kpartx zip device-tree-compiler u-boot-tools=2016.11+dfsg1-4 libfdt1 binutils && \
mount -t devtmpfs none /dev
mount -t devtmpfs none /dev
Строка 95: Строка 120:
Если rootfs уже создана ранее, то просто указываем ее расположение (переменная ROOTFS).
Если rootfs уже создана ранее, то просто указываем ее расположение (переменная ROOTFS).
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
export ROOTFS=./output/rootfs_wb6x
export ROOTFS=./output/rootfs_wb7x
</syntaxhighlight>
</syntaxhighlight>




Скрипт для подготовки корневой файловой системы находится в директории <code>/root/rootfs</code>.
Скрипт для подготовки корневой файловой системы находится в директории <code>wirenboard/rootfs</code>.


Синтаксис запуска скрипта <code>create_rootfs.sh</code>:
Синтаксис запуска скрипта <code>create_rootfs.sh</code>:
Строка 108: Строка 133:
Здесь:
Здесь:
* ''board_ver'' — версия контроллера, для которого готовится образ. Допустимые значения:
* ''board_ver'' — версия контроллера, для которого готовится образ. Допустимые значения:
** 7x - для Wiren Board 7
** 67 — для Wiren Board 6.7 и выше
** 6x — для Wiren Board 6-6.6
** 6x — для Wiren Board 6-6.6
** 5 — для Wiren Board 5
** 5 — для Wiren Board 5
Строка 123: Строка 150:


Зададим расположение ФС, уже существующей или вновь создаваемой:
Зададим расположение ФС, уже существующей или вновь создаваемой:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="console">
export ROOTFS=./output/rootfs_wb6x
# export ROOTFS=./output/rootfs_wb6x
</syntaxhighlight>
</syntaxhighlight>


Пример. Собираем базовую (без доп. репозиториев) корневую ФС в директории <code>rootfs/rootfs</code> для Wiren Board 5.5:
Пример. Собираем базовую (без доп. репозиториев) корневую ФС в директории <code>rootfs/rootfs</code> для Wiren Board 7x:


<pre>
<syntaxhighlight lang="console">
$ cd rootfs
# cd rootfs
$ ROOTFS=./rootfs/rootfs_55 ./create_rootfs.sh 55
# ROOTFS=./rootfs/rootfs_7x WB_RELEASE=stable DEBIAN_RELEASE=stretch ./create_rootfs.sh 7x
</pre>
</syntaxhighlight>


Если не используем уже существующую, то создаем:
Если не используем уже существующую, то создаем:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="console">
export ROOTFS=./output/rootfs_wb6x
# export ROOTFS=./output/rootfs_wb7x
/root/rootfs/create_rootfs.sh 6x
# export WB_RELEASE=stable DEBIAN_RELEASE=stretch
# wirenboard/rootfs/create_rootfs.sh 7x
</syntaxhighlight>
</syntaxhighlight>


Строка 146: Строка 174:
Добавление дополнительных репозиториев необходимо, если вы хотите добавить свои версии пакетов в собираемую корневую ФС.
Добавление дополнительных репозиториев необходимо, если вы хотите добавить свои версии пакетов в собираемую корневую ФС.


Добавляется при помощи wbrepo, общий мануал https://github.com/wirenboard/wirenboard/blob/master/README-wbrepo.md
В скрипт передаются ''только адреса'' репозиториев. Например:
В скрипт передаются ''только адреса'' репозиториев. Например:


<pre>
<syntaxhighlight lang="console">
$ ./create_rootfs.sh 55 http://server1.net/ http://server2.net:8086/
# ./create_rootfs.sh 55 http://server1.net/ http://server2.net:8086/
</pre>
</syntaxhighlight>


Формат репозиториев соответствует тому, который создаётся с помощью утилиты [[Special:MyLanguage/wbrepo|wbrepo]]. К дополнительному репозиторию предъявляются требования:
Формат репозиториев соответствует тому, который создаётся с помощью утилиты [[Special:MyLanguage/wbrepo|wbrepo]]. К дополнительному репозиторию предъявляются требования:


* В корне на сервере репозитория должен храниться публичный GPG-ключ в файле <code>/repo.gpg.key</code>. Например, если репозиторий расположен по адресу http://localhost:8086/, то ключ должен быть доступен по ссылке http://localhost:8086/repo.gpg.key
* В корне на сервере репозитория должен храниться публичный GPG-ключ в файле <code>/repo.gpg.key</code>. Например, если репозиторий расположен по адресу http://localhost:8086/, то ключ должен быть доступен по ссылке http://localhost:8086/repo.gpg.key
* Имя используемого дистрибутива — testing
* Имя используемого дистрибутива — testing (если не менялся код в )
* Используемый компонент — main
* Используемый компонент — main


При использовании wbrepo с хоста из докера можно найти их на http://172.17.0.1:8086/ - просто оставьте wbrepo serve запущенным на хосте и вызовите из докера
<syntaxhighlight lang="console">
# ./create_rootfs.sh 7x http://172.17.0.1:8086/
</syntaxhighlight>
При изменении имени дистрибутива - отредактировать в https://github.com/wirenboard/wirenboard/blob/master/wbrepo
<pre>
DISTRIBUTION=testing #меняем тут testing на нужное наименование дистрибутива
</pre>
Или смотрим под какой дистрибутив запустился сервер под wbrepo serve и меняем на нужный в ручном запуске
<pre>
./rootfs/create_rootfs.sh 7x http://172.17.0.1:8086@testing:main
</pre>
То есть, если передан адрес репозитория http://localhost:8086/, то в <code>sources.list</code> он будет представлен как
То есть, если передан адрес репозитория http://localhost:8086/, то в <code>sources.list</code> он будет представлен как


Строка 163: Строка 204:
  deb http://localhost:8086/ testing main
  deb http://localhost:8086/ testing main
</pre>
</pre>
При проблемах - посмотрите внимательно на <code>curl -v</code> вывод адреса репозитория


=== Работа внутри корневой ФС ===
=== Работа внутри корневой ФС ===
Строка 168: Строка 210:
Для того чтобы установить какие-нибудь дополнительные пакеты в корневую систему используется chroot.
Для того чтобы установить какие-нибудь дополнительные пакеты в корневую систему используется chroot.
Если уже создана ФС в каталоге <code>./output/rootfs_wb6x</code> то делаем chroot в нее:
Если уже создана ФС в каталоге <code>./output/rootfs_wb6x</code> то делаем chroot в нее:
<syntaxhighlight lang="bash">
 
./output/rootfs_wb6x/chroot_this.sh
<syntaxhighlight lang="console">
# ./output/rootfs_wb6x/chroot_this.sh
</syntaxhighlight>
</syntaxhighlight>


и можно изменить параметры и/или добавить пакеты. Добавим, например, lsof
и можно изменить параметры и/или добавить пакеты. Добавим, например, lsof
<syntaxhighlight lang="bash">
<syntaxhighlight lang="console">
apt update && apt install lsof -y
# apt update && apt install lsof -y
</syntaxhighlight>
</syntaxhighlight>
<blockquote>''Не забывайте '''выйти''' из chroot</blockquote>
<blockquote>''Не забывайте '''выйти''' из chroot</blockquote>
<syntaxhighlight lang="bash">
<syntaxhighlight lang="console">
exit
# exit
</syntaxhighlight>
</syntaxhighlight>
TODO: раздел в процессе редактирования


== Сборка образа для загрузки на контроллер ==  
== Сборка образа для загрузки на контроллер ==  
''TODO: раздел требует дополнения''


Скрипты для сборки образов находятся в директории images. Перед сборкой образа необходима '''готовая''' корневая ФС.
Скрипты для сборки образов находятся в директории images. Перед сборкой образа необходима '''готовая''' корневая ФС.
<blockquote>''Не забывайте установить путь у ФС в переменную ROOTFS</blockquote>
<blockquote>''Не забывайте установить путь у ФС в переменную ROOTFS</blockquote>


Пример: собираем образ прошивки для Wiren Board '''6x''', корневая ФС находится по пути $ROOTFS:


Пример: собираем образ прошивки для Wiren Board '''6x''', корневая ФС находится по пути $ROOTFS:
<syntaxhighlight lang="console">
<syntaxhighlight lang="bash">
# ./image/create_images.sh 6x
./image/create_images.sh 6x
chmod a+rw -R ./output/images/
</syntaxhighlight>
</syntaxhighlight>


Владельцем созданных файлов образов будет пользователь root, поэтому после создания файла может понадобиться отдельно дать доступ к нему обычным пользователям, например, так:
<syntaxhighlight lang="console">
# chown a+rw -R ./output/images/
</syntaxhighlight>


Готовый образ будет лежать по пути <code>output/image/<current_datetime>/<current_datetime>_webupd_wb6x.fit</code>.
Готовый образ будет лежать по пути <code>output/image/<current_datetime>/<current_datetime>_webupd_wb<board>.fit</code>.


== См. также ==
== См. также ==

Текущая версия на 21:57, 29 августа 2023

Для сборки образов прошивки контроллера мы подготовили специальный образ Docker. Сборку можно производить внутри этого образа в автоматическом или ручном режиме. После предварительной настройки окружения можно использовать скрипты для сборки без контейнера.

Подготовка

Установка Docker и подготовка хост-системы

Перый шаг — это установка Docker.

Инструкции по установке:

На хост-системе нужно установить также пакет qemu-user-static:

$ sudo apt install -y qemu binfmt-support qemu-user-static

Не забудьте добавить пользователя в группу docker, чтобы не использовать sudo:

$ sudo usermod -aG docker ${USER}

После добавления пользователя в группу надо выйти из системы и войти снова, чтобы изменения применились.

Скачивание инструментария для сборки образа

Создаем директорию, в которой будет лежать инструментарий и файлы образа, и скачиваем скрипты из репозитория.

$ mkdir ~/wirenboard-wbdev
$ cd ~/wirenboard-wbdev
$ git clone https://github.com/wirenboard/wirenboard
$ cd wirenboard

Выкачивание образа Docker-контейнера

Учитывайте, что образ контейнера займет ~5.5 Гб на /var Запускаем:

$ ./wbdev root exit

Команда выкачает, затем запустит контейнер и завершится. Отсутствие ошибок - покажет что контейнер работает нормально.

Cборка образа

Про идеологию разделов контроллера можно прочитать на странице Обновление прошивки, информация для разработчиков.

Автоматическая сборка

Готовим файл с командами. Для Wiren Board 6 версии до 6.7 задаём переменную BOARD=6x, от 6.7 и выше - BOARD=67. Для WB7 - BOARD=7x

Сразу создаем каталог mkdir ./output/images/

Релиз, на основе которого будет собран образ, задаётся в переменной WB_RELEASE.

Обратите внимание: если корневая ФС была отредактирована, нужно удалить строки в скрипте, отвечающие за удаление старой и создание новой корневой ФС (отмечены комментарием в скрипте):

Важно: кэш сохраняется по пути /home/XXX/wbdev/go/src/github.com/contactless/wirenboard/output -

эта же папка шарена между нашим хостом и докером, из неё мы и запускаем ./wbdev. Если у вас что-то сбоит на старых версиях - можно переиначить все пути на

/root/rootfs/

но при этом будет потеряна возможность использовать кэш при сборке.

дополнительно: DEBIAN_RELEASE= в скрипте есть смысл ставить тот который требуется в зависимости от версии board. wb6 со скриптом ниже не заработает без изменения релиза на предыдущий.


$ BOARD=7x; WB_RELEASE=stable; DEBIAN_RELEASE=stretch; cat << EOFcommand > tmp.sh
#!/bin/bash
apt-get update
apt-get install -y kpartx zip device-tree-compiler u-boot-tools libfdt1 binutils
mount -t devtmpfs none /dev
export ROOTFS=./output/rootfs_wb${BOARD}

# нужно удалить эти 3 строки, если rootfs уже была создана ранее и изменена,
# иначе она будет удалена и создана заново!
echo "Create new clean rootfs" 
rm -rf \$ROOTFS
WB_RELEASE=${WB_RELEASE} DEBIAN_RELEASE=${DEBIAN_RELEASE}  rootfs/create_rootfs.sh ${BOARD}
# можно использовать /root/rootfs/create_rootfs.sh ${BOARD} но в этом случае у вас не будет использоваться кэш сокращающий время компиляции в 2 раза

echo "Create .fit image"
./image/create_images.sh ${BOARD}
echo "fix permissions"
chown ${UID} -R ./output/images/
#Uncomment next string for remove script 
#rm tmp.sh
EOFcommand

Важно:u-boot-tools=2016.11+dfsg1-4 - больше не требуется. Но если вам вдруг надо на старой wb поставить именно его -

wget https://cloudfront.debian.net/debian-archive/debian/pool/main/u/u-boot/u-boot-tools_2016.11+dfsg1-4_amd64.deb
dpkg -i u-boot-tools_2016.11+dfsg1-4_amd64.deb
rm u-boot-tools_2016.11+dfsg1-4_amd64.deb

Запускаем скрипт в контейнере:

$ ./wbdev root bash ./tmp.sh

Важно: Изменения внутри контейнера не сохранятся

После завершения — «корневая» файловая система остается в каталоге ./output/rootfs_wbXX (XX соответствует значению BOARD)и доступна для следующего использования. Можно изменять и дополнять в «ручном» режиме. Готовый для загрузки в контроллер образ — в ./output/images/YYYYMMDDHHMM

Ручная сборка

По сути — то же самое, но команды выполняются вручную, есть возможность изменить параметры.

Запуск контейнера

Запускаем в том же каталоге ~/wirenboard-wbdev/wirenboard следующую команду:

~/wirenboard-wbdev/wirenboard$ ./wbdev root

и после запуска контейнера готовим среду, команды те же что и в «автоматическом» режиме:

# apt-get update && \
apt-get install -y kpartx zip device-tree-compiler u-boot-tools=2016.11+dfsg1-4 libfdt1 binutils && \
mount -t devtmpfs none /dev

Подготовка rootfs

Если rootfs уже создана ранее, то просто указываем ее расположение (переменная ROOTFS).

export ROOTFS=./output/rootfs_wb7x


Скрипт для подготовки корневой файловой системы находится в директории wirenboard/rootfs.

Синтаксис запуска скрипта create_rootfs.sh:

 $ ./create_rootfs.sh <board_ver> [<list of additional repos>]

Здесь:

  • board_ver — версия контроллера, для которого готовится образ. Допустимые значения:
    • 7x - для Wiren Board 7
    • 67 — для Wiren Board 6.7 и выше
    • 6x — для Wiren Board 6-6.6
    • 5 — для Wiren Board 5
    • 55 — для Wiren Board 5.5
    • 4 — для Wiren Board 4
    • 32 — для WB Smart Home (3.2)
    • 28
    • NETMON
    • MKA3
    • CQC10
    • MKA31
    • AC-E1
  • list of additional repos — адреса дополнительных репозиториев с тестовыми пакетами (см. ниже). Опциональный параметр.
  • путь к корневой ФС из переменной ROOTFS, имя директории, в которой будет создана корневая ФС. Директория будет создана автоматически.

Зададим расположение ФС, уже существующей или вновь создаваемой:

# export ROOTFS=./output/rootfs_wb6x

Пример. Собираем базовую (без доп. репозиториев) корневую ФС в директории rootfs/rootfs для Wiren Board 7x:

# cd rootfs
# ROOTFS=./rootfs/rootfs_7x WB_RELEASE=stable DEBIAN_RELEASE=stretch ./create_rootfs.sh 7x

Если не используем уже существующую, то создаем:

# export ROOTFS=./output/rootfs_wb7x
# export WB_RELEASE=stable DEBIAN_RELEASE=stretch
# wirenboard/rootfs/create_rootfs.sh 7x

Если нет ошибок — можно переходить к следующему этапу.

Дополнительные репозитории

Добавление дополнительных репозиториев необходимо, если вы хотите добавить свои версии пакетов в собираемую корневую ФС.

Добавляется при помощи wbrepo, общий мануал https://github.com/wirenboard/wirenboard/blob/master/README-wbrepo.md В скрипт передаются только адреса репозиториев. Например:

# ./create_rootfs.sh 55 http://server1.net/ http://server2.net:8086/

Формат репозиториев соответствует тому, который создаётся с помощью утилиты wbrepo. К дополнительному репозиторию предъявляются требования:

  • В корне на сервере репозитория должен храниться публичный GPG-ключ в файле /repo.gpg.key. Например, если репозиторий расположен по адресу http://localhost:8086/, то ключ должен быть доступен по ссылке http://localhost:8086/repo.gpg.key
  • Имя используемого дистрибутива — testing (если не менялся код в )
  • Используемый компонент — main

При использовании wbrepo с хоста из докера можно найти их на http://172.17.0.1:8086/ - просто оставьте wbrepo serve запущенным на хосте и вызовите из докера

# ./create_rootfs.sh 7x http://172.17.0.1:8086/

При изменении имени дистрибутива - отредактировать в https://github.com/wirenboard/wirenboard/blob/master/wbrepo

DISTRIBUTION=testing #меняем тут testing на нужное наименование дистрибутива

Или смотрим под какой дистрибутив запустился сервер под wbrepo serve и меняем на нужный в ручном запуске

./rootfs/create_rootfs.sh 7x http://172.17.0.1:8086@testing:main

То есть, если передан адрес репозитория http://localhost:8086/, то в sources.list он будет представлен как

 deb http://localhost:8086/ testing main

При проблемах - посмотрите внимательно на curl -v вывод адреса репозитория

Работа внутри корневой ФС

Для того чтобы установить какие-нибудь дополнительные пакеты в корневую систему используется chroot. Если уже создана ФС в каталоге ./output/rootfs_wb6x то делаем chroot в нее:

# ./output/rootfs_wb6x/chroot_this.sh

и можно изменить параметры и/или добавить пакеты. Добавим, например, lsof

# apt update && apt install lsof -y

Не забывайте выйти из chroot

# exit

Сборка образа для загрузки на контроллер

Скрипты для сборки образов находятся в директории images. Перед сборкой образа необходима готовая корневая ФС.

Не забывайте установить путь у ФС в переменную ROOTFS

Пример: собираем образ прошивки для Wiren Board 6x, корневая ФС находится по пути $ROOTFS:

# ./image/create_images.sh 6x

Владельцем созданных файлов образов будет пользователь root, поэтому после создания файла может понадобиться отдельно дать доступ к нему обычным пользователям, например, так:

# chown a+rw -R ./output/images/

Готовый образ будет лежать по пути output/image/<current_datetime>/<current_datetime>_webupd_wb<board>.fit.

См. также