вся функциональность для Raspberry Pi - находится на ветке raspberry-sumo
т.е. основное отличие при сборке см. пункт ниже "Краткая инструкция по созданию проекта"
git clone https://github.com/berserktv/router-bs.git -b raspberry-sumo
предыдущая версия статьи: Маршрутизатор на Raspberry Pi (28.12.2016 версия v0.7.1)
Будучи проектом совместного сотрудничества (иногда такие проекты называются "зонтичными"), Yocto Project охватывает различные составляющие процесса разработки. Эти составляющие именуются проектами в рамках общего проекта Yocto Project и включают в себя инструменты для сборки, метаданные инструкций по сборке (называемые рецептами), библиотеки, утилиты и графические интерфейсы.
Poky – это эталонная система сборки в рамках проекта Yocto Project. Она включает в себя BitBake, OpenEmbedded-Core, пакет поддержки платформы (Board Support Package, BSP), а также прочие пакеты и компоненты, объединенные в единую сборку. Название Poky также относится к эталонному дистрибутиву Linux, который создается этой системой сборки и может быть чрезвычайно минималистичным (core-image-minimal) или же представлять собой полноценную систему Linux с графической оболочкой (core-image-sato)
Систему сборки Poky можно рассматривать как эталонную систему для всего проекта – рабочий пример реального процесса. При загрузке Yocto Project фактически вы получаете экземпляр этих инструментов, утилит, библиотек, вспомогательных средств и метаданных, которые можно использовать для создания системы по умолчанию, как это описывается в нашей статье. Как эталонная система, так и эталонный дистрибутив, который она создает, называются Poky. Вы можете использовать Poky как начальную точку для создания ваших собственных дистрибутивов, которые, конечно же, могут называться как угодно.
Для всех систем сборки требуется наличие инструментария toolchain, состоящего из компилятора, ассемблера, линковщика и прочих двоичных утилит, необходимых для создания исполняемых файлов для той или иной архитектуры. Poky использует набор GNU Compiler Collection (GCC), но вы можете указать и другие наборы компиляторов. В Poky используется механизм кросс-компиляции: использование набора компиляторов одной архитектуры для создания исполняемых файлов другой архитектуры (например, сборка ARM-дистрибутива, выполняемая на компьютере с x86-архитектурой). Разработчики часто используют кросс-компиляцию при разработке встраиваемых систем, поскольку их рабочие компьютеры намного мощнее, чем типичная встраиваемая система.
Набор метаданных разделен на слои, каждый из которых обладает дополнительной функциональностью по отношению к нижележащим слоям. Базовый слой называется OpenEmbedded-Core (или oe-core) и содержит общие рецепты, классы и связанные с ними функции, необходимые для любой сборки. Эти сборки впоследствии можно настраивать под собственные нужды, добавляя новые слои поверх слоя oe-core.
OpenEmbedded-Core совместно поддерживается проектами Yocto Project и OpenEmbedded. Слой, отделяющий проект Yocto Project от проекта OpenEmbedded, называется meta-yocto и содержит конфигурацию дистрибутива Poky, а также базовый набор эталонных BSP-пакетов. Сам по себе проект OpenEmbedded является отдельным Open Source-проектом, обладающим собственными схожими рецептами и задачами, но со своей отдельной командой руководителей и областью применения.
Для установки Yocto Project вы можете использовать "bash" скрипт следующего содержимого:
#!/bin/bash
# скрипт предназначен для загрузки среды сборки дистрибутива "Router-bs" для
# одноплатного компьютера "Raspberry Pi", autor "Alexander Demachev", site https://berserk.tv
# license - The MIT License (MIT)
#
# система сборки "poky" устанавливается в каталог выше
# скрипт должен запускаться под обычным пользователем,
# но в начале выполнения требует установку пакетов через команду "sudo"
#
# cоздание дистрибутива Linux "Router-bs" для встраиваемых систем осуществляется
# с помощью Yocto Project
# Poky – это эталонная система сборки в рамках проекта Yocto Project.
# Она включает в себя BitBake, OpenEmbedded-Core, пакет поддержки платформы
# Board Support Package, BSP), а также прочие пакеты и компоненты,
# объединенные в единую сборку.
SYSTEM_BUILD="poky-router"
META_ROUTER="meta-router-bs"
BBLAYERS_CONFIG="build/conf/bblayers.conf"
LOCAL_CONFIG="build/conf/local.conf"
CONFIG_MACHINE="raspberrypi2"
TYPE_PACKAGE="deb"
# версия "yocto-project" выбраная в качестве базовой, ветка sumo от 5 сентября 2018
GIT_YOCTO="git://git.yoctoproject.org/poky.git"
REV_YOCTO="51872d3f99e38f9d883ab0a8782ceecb41822fd0"
DIR_RASPBERRYPI="meta-raspberrypi"
GIT_RASPBERRYPI="http://git.yoctoproject.org/cgit/cgit.cgi/$DIR_RASPBERRYPI"
# перешел на ветку sumo от 20 июля 2018
REV_RASPBERRYPI="05f21adb99f97140e874fa2a4ed66d5e3554cd33"
get_git_project() {
local git_path="$1"
local git_rev="$2"
local project_dir="$3"
local cur_dir=`pwd`
git clone --no-checkout $git_path $project_dir
cd $project_dir
git checkout $git_rev
cd $cur_dir
}
sudo apt-get install -y --no-install-suggests --no-install-recommends \
sed wget subversion git-core coreutils \
unzip texi2html texinfo libsdl1.2-dev docbook-utils fop gawk \
python-pysqlite2 diffstat make gcc build-essential xsltproc \
g++ desktop-file-utils chrpath libgl1-mesa-dev libglu1-mesa-dev \
autoconf automake groff libtool xterm libxml-parser-perl
old_dir=`pwd`
cd ..
get_git_project "$GIT_YOCTO" "$REV_YOCTO" "$SYSTEM_BUILD"
cd $SYSTEM_BUILD
poky_dir=`pwd`
get_git_project "$GIT_RASPBERRYPI" "$REV_RASPBERRYPI" "$DIR_RASPBERRYPI"
#####################################################################
# инициализация переменных Yocto Project
#####################################################################
source oe-init-build-env ""
cd $poky_dir
# создаем символическую ссылку на слой сборки дистрибутива "Router-bs"
ln -v -s $old_dir/$META_ROUTER $META_ROUTER
# изменение настроек по умолчанию в конфигурационном файле системы сборки "Poky"
# добавление собственного слоя в список слоев BBLAYERS
# и добавление слоя сборки для "Raspberry Pi"
sed -i "s|meta-yocto-bsp.*|&\n $poky_dir/$META_ROUTER \\\|g" $BBLAYERS_CONFIG
sed -i "s|meta-yocto-bsp.*|&\n $poky_dir/$DIR_RASPBERRYPI \\\|g" $BBLAYERS_CONFIG
sed -i "s|MACHINE ??=.*|MACHINE ??= \"$CONFIG_MACHINE\"|" $LOCAL_CONFIG
# тип бинарных пакетов для установки ПО
F="PACKAGE_CLASSES ?= \"package_rpm\""
R="PACKAGE_CLASSES ?= \"package_$TYPE_PACKAGE\""
sed -i "s|$F|$R|" $LOCAL_CONFIG
После запуска установочного скрипта система сборки Poky будет располагаться каталогом выше, например если вы запустили установочный скрипт install.sh из каталога /home/user/router-bs, то система сборки Poky, будет установлена в каталог /home/user/poky-router
Примечание: название корневого каталога системы сборки задается в скрипте установки: SYSTEM_BUILD="poky-router"
Итак нашему "Малышу" router(у) на Raspberry Pi 2 исполнилось два годика,
и хотелось бы подвести некоторые итоги его работы:
После устранения некоторых детских болезней, router-bs перешел на режим
работы "Подключил и забыл"
т.е. router работает 24 часа, 7 дней в неделю, в течении более 730 дней, и за
это время роутер выключался по питанию буквально несколько раз,
и это скорее связано с перерывом в работе электросетей,
нежели с самим маршрутизатором.
К сожалению мы не смогли посмотреть время непрерывной
работы в подтвержденных цифрах, так как изначально сервис ntp на роутере не был установлен
по соображениям безопасности (;-)счастливые часов не наблюдают.
Общие недостатки Router(а)
Зато главный недостаток нашего "Шлюза" - дороговизну, мы может исправить прямо сейчас.
Итак "Встречайте" - шлюз мечты:
общая стоимость нашего шлюза теперь в 4 раза меньше и едва доходит до 1100 - 1200 рублей
(И это даже притом, что курс доллара где то по 68-69 рублей)
И у вас есть возможность изменять исходный код вашего дистрибутива, т.е. в любой момент вы можете подключить нужный вам патч в Linux Kernel, обновить DHCP, обновить NTP, обновить Shorewall, установить любой дополнительный Open Source Soft под ваши нужды.
сетевые настройки на целевом устройстве храняться в файле /etc/network/interfaces, после переподключения карты памяти "microSDHC" будут доступны два раздела: Первый раздел => fat16 будет содержать ядро, загрузчик и драйверы для поддержки Raspberry Pi (dtb образы) Второй раздел => ext3 будет содержать корневую файловую систему, rootfs вот на этом разделе и необходимо отредактировать файл etc/network/interfaces Примечание: Редактировать файлы необходимо с правами администратора см. главу: Настройка сетевого интерфейса шлюза
В большинстве вариантов для работы Роутера достаточно изменить только сетевые интерфейсы, учитывая что: eth0 - внешний сетевой интерфейс (Интернет), связанный с устройством размещенным на плате Raspberry Pi eth1 - внутренний сетевой интерфейс (локальная сеть), связанный с USB сетевой платой Правила Брандмауэра связаны с именами этих сетевых интерфейсов, и для типового использования подходят в большинстве случаев В случае если вам этого не достаточно, вам необходимо добавить свои правила см. главу: Фильтрация сетевых пакетов - функции Брандмауэра То же самое касается DHCP сервера, настройка по умолчанию вам подойдет только если вы оставите в качестве локальной сети адрес 10.0.8.1 для сетевого интерфейса eth1 см. главу: Настройка DHCP сервера на шлюзе
git clone https://github.com/berserktv/router-bs.git -b raspberry-sumo
cd router-bs chmod u+x install.sh ./install.sh
cd ../poky-router . ./oe-init-build-env bitbake router-bs-image
Время сборки образа дистрибутива достаточно длительное и может занимать от двух до N часов в зависимости от производительности компьютера, также в процессе сборки из "Интернета" должны быть загружены исходные коды всех программ входящих в дистрибутив, часто это полные git базы (т.е. время сборки также зависит от скорости подключения сети "Интернет") например на машине: Процессор - Intel(R) Core(TM) i5-3570 CPU @ 3.40GHz ОЗУ - 8 Гбайт Жесткий диск - внешний USB-3.0 1Tбайт Время сборки - 2 часа 25 минут Размер образа - 184 Мбайт ПРИМЕЧАНИЕ: размер образа можно значительно уменьшить, более чем в три раза, если перейти на сжатую файловую систему squashfs, а диски перевести в режим только чтения но это совсем другая история ... Размер каталога poky-router/build после завершения сборки (cache сборки, исходный код всех программ входящих в образ, в разных форматах, в случае с git базами они загружается целиком со всей историей, промежуточные файлы сборки, обьектные файлы, файлы пакетов и т.п.) занимает примерно 26 ГБайт Из этих 26 Гбайт, размер каталога build/downloads (git базы приложений и tar.gz архивы) занимают 4.8 Гбайт
Cобранный образ после сборки будет располагаться по пути
poky-router/build/tmp/deploy/images/raspberrypi2
На последний успешно собранный образ всегда будет указывать
символическая ссылка:
router-bs-image-raspberrypi2.rpi-sdimg
т.е. poky-router/build/tmp/deploy/images/raspberrypi2/router-bs-image-raspberrypi2.rpi-sdimg,
cам файл будет содержать достаточно длинное имя c датой создания и временем в UTC
например такое:
router-bs-image-raspberrypi2-20181220192232.rootfs.rpi-sdimg
Для записи образа дистрибутива на карту памяти используется команда dd. Запуск команды dd выполняется от имени администратора, при этом необходимо указать входной файл и устройство подключения карты памяти "microSDHC", например /dev/sdX, где X может быть a,b,c и т.д. в зависимости от предыдущих подключенных дисковых разделов
Проще всего название определить по выводу команды blkid
наберите команду sudo blkid до подключения карты памяти - "microSDHC"
и далее =>
наберите команду sudo blkid после подключения карты памяти - "microSDHC"
и тот новый раздел который появился в выводе последней команды и будет искомым
Отмонтируйте разделы карты памяти - "microSDHC" например так, если разделов несколько
umount /dev/sdX1 umount /dev/sdX2
В команде dd указывается имя диска целиком т.е. без номера раздела так как в образе также содержится и основная загрузочная запись MBR и таблица(ы) разделов
Примечание:
текущем каталогом в примере указанном ниже является каталог poky-router/build
ВНИМАНИЕ: все предыдущие данные на карте памяти "microSDHC"
после выполнения операции записи будут удалены.
sudo bash cd tmp/deploy/images/raspberrypi2 dd if=router-bs-image-raspberrypi2.rpi-sdimg of=/dev/sdX bs=1M sync
После загрузки уже собранного дистрибутива (раздел Download) вы можете воспользоваться тем же набором команд что и выше, за исключением того, что:
1) Вам необходимо распаковать zip архив с дистрибутивом в какую нибудь временную папку
2) Перейти в этот временный каталог
3) Выполнить команду dd смотри главу Запись проекта Router-bs на карту памяти
sudo bash dd if=router-bs-raspberrypi2-v0.7.2_rpi.rpi-sdimg of=/dev/sdX bs=1M
Примечание:
название файла образа (rpi-sdimg) может быть другим, в зависимости от версии
Описание дистрибутива вы можете посмотреть в статье
Вы можете загрузить следующие версии образа дистрибутива:
версия - v0.7.2 описание - Введение в Yocto Project cборка сетевого шлюза на Orange Pi aрхитектура - Orange Pi R1 Orange Pi Zero дата - от 20.09.2018 MD5 - b95ec06fb3befa9c663d42d13f5376fd (контрольная сумма MD5 zip архива) размер архива 30.6 Мбайт примечание: Дополнительно в слое meta-sunxi доступны следующие платформы: bananapi cubieboard2 cubieboard cubietruck forfun-q88db mele meleg nanopi-neo-air nanopi-neo olinuxino-a10lime olinuxino-a10s olinuxino-a13 olinuxino-a13som olinuxino-a20 olinuxino-a20lime2 olinuxino-a20lime2-emmc olinuxino-a20lime olinuxino-a20som orange-pi-one orange-pi-pc orange-pi-pc-plus orange-pi-zero-plus2 pcduino но проверялась сборка только для трех плат Orange Pi R1, Orange Pi Zero и Orange Pi PC Plus имя файла - router-bs-orange-pi-zero-v0.7.2.sunxi-sdimg.zip
версия - v0.7.2_rpi описание - cборка сетевого шлюза на Raspberry Pi архитектура - arm платы - Raspberry Pi 2 Model "B" дата - от 20.12.2018 MD5 - 7f7f4babc8dd94e105f7a77ad8315f8c (контрольная сумма MD5 zip архива) размер архива 44.3 Мбайт примечание: Дополнительно в слое meta-raspberrypi доступны следующие архитектуры: raspberrypi raspberrypi0 raspberrypi0-wifi raspberrypi2 raspberrypi3-64 raspberrypi3 raspberrypi-cm3 raspberrypi-cm но проверялась сборка только для платы Raspberry Pi 2 Model "B" имя файла - router-bs-raspberrypi2-v0.7.2_rpi.rpi-sdimg.zip
версия - ver-0.7.1 aрхитектура - Raspberry Pi «2B» (плата SoC Broadcom BCM2836, процессор Cortex-A7) флаги сборки - "arm armv7ve vfp thumb neon vfpv4 callconvention-hard cortex" дата - от 25.12.2016 MD5 - 6b8eaeebef50b185043f2acdef3bd66d (контрольная сумма MD5 zip архива) размер архива 43 Мбайт имя файла - router-bs-image-ver-0.7.1.rpi-sdimg.zip
версия - ver-0.7.1 aрхитектура - Raspberry Pi (ранние версии устройства) (процессор ARM1176JZ-F) флаги сборки - "arm armv6 vfp arm1176jzfs callconvention-hard" дата - от 27.12.2016 MD5 - 278dfeb77f389ae5229f3936cf48db12 (контрольная сумма MD5 zip архива) размер архива 43 Мбайт имя файла - router-bs-image-arm1176jzfs-ver-0.7.1.rpi-sdimg.zip