• Дистрибутив собранный в Yocto Project

    Berserk

    Мультимедиа центр - платформой для которого является Raspberry PI базируется на версии Kodi 17.6 Версия операционной системы собрана с помощью системы сборки "Yocto Project". читать далее

    Коди в Yocto Project
  • Yocto Project

    Роутер на Raspberry PI

    Сборка маршрутизатора c "нуля" для Raspberry Pi c использованием системы сборки "Yocto Project" читать далее

    Маршрутизатор с нуля
  • Феерический хранитель экрана

    Kodi Universe

    Проект является простым плагином для Kodi. Проект показывает как можно создать очень красивый хранитель экрана целиком опираясь на работу "open source" мирового сообщества. читать далее

    Феерический Хранитель экрана
  • примеры проектов

    Raspberry Pi

    Разное → Raspberry Pi — что можно сделать на основе «малинки»?read more

    Ссылка на статью с Хабрахабра
  • Дистрибутив собранный в Yocto Project

    Berserk

    Мультимедиа центр - платформой для которого является Raspberry Pi базируется на версии Kodi 17.6 Версия операционной системы собрана с помощью системы сборки "Yocto Project". читать далее

Роутер на "Raspberry PI"
c использованием "Yocto Project"






    дата: 28.12.2016

Содержание:

	Знакомство с Yocto Project
	Установка Yocto Project в Ubuntu
	Назначение проекта "Router-bs"
	Требования к оборудованию
	Краткая инструкция по использованию
	Краткая инструкция по сборке дистрибутива
	Административный пароль по умолчанию
	Первое включение устройства
	Запись образа Router-bs на карту памяти "microSDHC"
	Запись дистрибутива Router-bs скаченного с нашего ресурса на карту памяти
	Механизм сборки дистрибутива в Yocto Project
	Пакет поддержки платформы "Raspberry PI"
	Поддержка USB сетевых плат в "Raspberry PI"
	Настройка сетевого интерфейса роутера
	Настройка DHCP сервера на роутере
	Фильтрация сетевых пакетов - функции Брандмауэра
	    Конфигурация "Зоны" нашего роутера
	    Интерфейсы и хосты
	    Политики
	    Настройка трансляции сетевых адресов NAT
	    Настройка правил фильтрации
	    Остановка Shorewall
	    Конфигурация Shorewall
	    еще примеры настройки Shorewall
	Рецепт сборки Shorewall для слоя meta-router-bs
	Рецепт сборки образа Router-bs
	Загрузка дистрибутива Router-bs
	


Знакомство с Yocto Project

Показать/Скрыть

The Yocto Project – это Open Source-проект, целью которого является упрощение разработки специальных дистрибутивов Linux для встраиваемых систем и обеспечение их переносимости между различными платформами.





Знакомство с Yocto Project


Будучи проектом совместного сотрудничества (иногда такие проекты называются "зонтичными"), Yocto Project охватывает различные составляющие процесса разработки. Эти составляющие именуются проектами в рамках общего проекта Yocto Project и включают в себя инструменты для сборки, метаданные инструкций по сборке (называемые рецептами), библиотеки, утилиты и графические интерфейсы.



Poky


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 в Ubuntu


     Для установки Yocto Project вы можете использовать "bash" скрипт следующего содержимого:

	
	#!/bin/bash
	
	# скрипт предназначен для загрузки среды сборки дистрибутива "Router-bs" для
	# одноплатного компьютера "Raspberry Pi", autor "Alexander Demachev", site berserk.tv
	#
	# система сборки "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" выбраная в качестве базовой, ветка krogoth от 11 октября 2016
	GIT_YOCTO="git://git.yoctoproject.org/poky.git"
	REV_YOCTO="40f4a6d075236265086cc79400dea3c14720383a"
	
	
	DIR_RASPBERRYPI="meta-raspberrypi"
	GIT_RASPBERRYPI="http://git.yoctoproject.org/cgit/cgit.cgi/$DIR_RASPBERRYPI"
	# перешел на ветку krogoth от 16 сентября 2016
	REV_RASPBERRYPI="a5f9b07a820d50ae5fb62e07306cd4e72d8638a9"
	
	
	
	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
	
	# разрешаем использовать коммерческую лицензию для возможности сборки
	# некоторых библиотек, например libdav"
	echo "LICENSE_FLAGS_WHITELIST = \"commercial\"" >> $LOCAL_CONFIG
	
	

После запуска установочного скрипта система сборки Poky будет располагаться каталогом выше, например если вы запустили установочный скрипт install.sh из каталога /home/user/router-bs, то система сборки Poky, будет установлена в каталог /home/user/poky-router


	Примечание: название корневого каталога системы сборки задается в скрипте установки:
	SYSTEM_BUILD="poky-router"



Назначение проекта "Router-bs"


Проект предназначен для самостоятельной сборки с "нуля" Linux дистрибутива для одноплатного компьютера "Raspberry PI" c минимальным набором программ, достаточным для использование Raspberry PI в качестве простого маршрутизатора.


Основная функция нашего "Маршрутизатора" - фильтрация внешнего (интернет) сетевого трафика приходящего на один сетевой интерфейс и передача его после фильтрации на другой сетевой интерфейс связанный с локальной сетью т.е. маршрутизатор выполняет функцию "Брандмауэра" для защиты внутренней сети. Также маршрутизатор будет обеспечивать подключение пользователей внутренней сети к ресурсам Интернет от имени своего ip адреса, т.е обеспечивать так называемую трансляцию сетевых адресов NAT (Network Address Translation).


Еще одной функцией "Маршрутизатора" будет возможность получения от него динамических ip адресов, т.е. любая новая машина (планшет, телефон, телевизор и т.д.) в локальной сети с помощью широковещательного запроса cможет получить ip адрес из выделенного диапазона адресов. Таким образом "Маршрутизатор" будет выполнять роль DHCP сервера.



Требования к оборудованию


Для создания маршрутизатора, нам понадобиться:

  • Плата Raspberry Pi «2B» (плата SoC Broadcom BCM2836, процессор Cortex-A7)
    	Примечание: данный образ дистрибутива также можно собрать и для первых версий устройства,
    	для этого нужно менять конфигурацию Poky => poky-router/build/conf/local.conf,  где
    	указать MACHINE ??= raspberrypi 
  • Корпус
  • Карта памяти - microSDHC, любого размера начиная от 8Гб (просто меньшего размера сейчас не купишь)
  • Внешняя сетевая плата с USB подключением
    Одна сетевая плата уже входит в состав одноплатного компьютера, а вторую плату можно выбрать из следующих вариантов:
    1. Readyon RD-KY88772A - сетевая карта с USB 2.0
      интерфейсом подключения к персональному компьютеру или ноутбуку.
      Данная модель обеспечивает скорость передачи данных до 100 Мб/сек. чипсет

      чипсет AX88772A, CONFIG_USB_NET_AX8817X, используется модуль ядра "asix"
      (пакет в yocto project => kernel-module-asix)

      	другие чипсеты:
      	UA2-45-02WH и TP-LINK UE300  => CONFIG_USB_RTL8152, module r8152
      	Greenconnect USB2.0 AM/Ethernet RJ-45 => CONFIG_USB_NET_AX8817X, module asix
      			

    2. cетевая карта 5bites UA2-45-02WH, USB 2.0, 10/100Mbps
    3. сетевая карта TP-LINK UE300, USB 3.0, Gigabit Ethernet
    4. Greenconnect USB2.0 AM/Ethernet RJ-45
    5. любая другая USB сетевая плата


Краткая инструкция по использованию


1) Загрузите готовый образ проекта:
2) Запишите проект на карту памяти - "microSDHC"
3) Перенастройте проект под ваше сетевое окружение:
	сетевые настройки на целевом устройстве храняться в файле
	/etc/network/interfaces, после переподключения карты памяти
	"microSDHC" будут доступны два раздела:
	
	Первый раздел => fat16 будет содержать ядро, загрузчик и драйверы
	                       для поддержки Raspberry Pi (dtb образы)
	Второй раздел => ext3  будет содержать корневую файловую систему, rootfs
	                       вот на этом разделе и необходимо отредактировать
	                       файл etc/network/interfaces
	Примечание:
	Редактировать файлы необходимо с правами администратора
	
	см. главу: Настройка сетевого интерфейса роутера
		

4) Подключите карту памяти "microSDHC" к Raspberry Pi
	В большинстве вариантов для работы Роутера
	достаточно изменить только сетевые интерфейсы, учитывая что:
	 eth0 - внешний сетевой интерфейс (Интернет), 
		связанный с устройством размещенным на плате Raspberry Pi
	 eth1 - внутренний сетевой интерфейс (локальная сеть), 
		связанный с USB сетевой платой
	
	Правила Брандмауэра связаны с именами этих сетевых интерфейсов,
	и для типового использования подходят в большинстве случаев
	
	В случае если вам этого не достаточно, вам необходимо добавить свои правила
	см. главу: Фильтрация сетевых пакетов - функции Брандмауэра
	
	
	То же самое касается DHCP сервера, настройка по умолчанию вам подойдет только если
	вы оставите в качестве локальной сети адрес 10.0.8.1 для сетевого интерфейса eth1
	
	см. главу: Настройка DHCP сервера на роутере
	  

5) Удостоверьтесь что оба сетевых кабеля подключены к Raspberry Pi и включите питание.


Краткая инструкция по сборке дистрибутива


1) Загрузите проект с github:
	git clone https://github.com/berserktv/router-bs.git -b ver-0.7.1
		

2) Установите Yocto Project (Poky):
	cd router-bs
	chmod u+x install.sh
	./install.sh
		

3) Соберите проект:
	cd ../poky-router
	. ./oe-init-build-env
	bitbake router-bs-image
		

4) Время сборки проекта:
	Время сборки образа дистрибутива достаточно длительное
	и может занимать от двух до N часов в зависимости от производительности
	компьютера, также в процессе сборки из "Интернета" должны быть
	загружены исходные коды всех программ входящих в дистрибутив,
	часто это полные git базы
	
	(т.е. время сборки также зависит от скорости подключения сети "Интернет")
	
	например на машине: Процессор     - Intel(R) Core(TM) i5-3570 CPU @ 3.40GHz
	                    ОЗУ           - 8 Гбайт
	                    Жесткий диск  - внешний USB-3.0  1Tбайт
	
	                    Время сборки  - 2 часа 25 минут
	                    Размер образа - 176 Мбайт
	
	ПРИМЕЧАНИЕ: размер образа можно значительно уменьшить,
	            более чем в три раза, если перейти на
	            сжатую файловую систему squashfs,
	            а диски перевести в режим только чтения
	            но это совсем другая история ...
	
	Размер каталога poky-router/build после завершения сборки
	(cache сборки, исходный код всех программ входящих в образ,
	в разных форматах, в случае с git базой она загружается целиком
	со всей историей, промежуточные файлы сборки, обьектные файлы,
	файлы пакетов и т.п.)
	                            занимает примерно 26 ГБайт
	
	Из этих 26 Гбайт, размер каталога build/downloads
	(git базы приложений и tar.gz архивы)
	занимают 9.4 Гбайт
			

5) Запишите проект на карту памяти - "microSDHC"


Административный пароль по умолчанию


В образе Router-bs по умолчанию включена учетная запись:
    root - пользователь
    routerbs - пароль по умолчанию


ВНИМАНИЕ: обязательно смените пароль по умолчанию на собственный


Пароль можно сменить выполнив команду passwd на самом устройстве,
или
в случае самостоятельной сборки в файле рецепта router-bs-image.bb



Первое включение устройства


В том случае если вы не выполнили пункт 3) инструкции по использованию
не перенастроили проект под ваше сетевое окружение, а сразу включили Raspberry Pi,
вы можете подключиться к роутеру
по ip адресу по умолчанию: 192.168.0.1


	  Примечание: вам необходимо подключить сетевой кабель
	  только к встроенному сетевому адаптеру (у нас eth0), второй сетевой кабель подключать
	  не нужно (внешняя сетевая плата USB=>Ethernet) и тогда вы сможете подключиться
	  к вашему устройству по сети выполнив команду:
	      ssh root@192.168.0.1
	
	  (это связано с тем, что у нас по умолчанию запрещено подключаться по протоколу ssh
	  через первый сетевой интерфейс - eth0, а при отсутствии корректного подключения
	  второго сетевого интерфейса правила брандмауэра не будут загружены, и это можно
	  будет сделать)
	  


Запись образа Router-bs на карту памяти
"microSDHC"



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-20161214115809.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
		


Запись дистрибутива Router-bs
скаченного с нашего ресурса на карту памяти


После загрузки уже собранного дистрибутива (раздел Download) вы можете воспользоваться тем же набором команд что и выше, за исключением того, что:


1) Вам необходимо распаковать zip архив с дистрибутивом в какую нибудь временную папку

2) Перейти в этот временный каталог

3) Выполнить команду dd смотри главу Запись образа Router-bs на карту памяти


		sudo bash
		dd if=router-bs-image-ver-0.7.1.rpi-sdimg of=/dev/sdX bs=1M
		

Примечание:
название файла образа (rpi-sdimg) может быть другим, в зависимости от версии




Механизм сборки дистрибутива в Yocto Project


В Yocto Project каждая программная единица описывается с помощью рецепта сборки. Язык описания рецепта напоминает "bash" c возможностью вставок частей кода на языке "python".

Основную информацию по синтаксису вы можете почерпнуть из руководства Yocto Project


Набор рецептов сборки в зависимости от назначения можно объединять в отдельные слои сборки. В нашем случае все дополнительные рецепты которые расширяют функциональность базового дистрибутива Yocto, c минимальным количеством пакетов - "core-image-minimal" и привносят в него нужную нам функциональность "Роутера" будут храниться в слое "meta-router-bs".


Слой "meta-router-bs" прописывается в конфигурационном файле poky-router/build/conf/local.conf в момент установки Poky (система сборки в рамках Yocto Project), см. главу Установка Yocto Project этого документа (bash скрипт установки).



Пакет поддержки платформы "Raspberry PI"


Для того, чтобы собрать дистрибутив для Raspberry PI в Yocto Project существует отдельный слой - meta-raspberrypi

Слой "meta-raspberrypi" хорошо работает прямо из коробки, это значит что нам пока без надобности знать особенности аппаратной работы и тонкости конфигурации Raspberry PI (все настройки можно оставить по умолчанию), т.е. нам достаточно подключить этот "BSP" слой в "Poky", и после сборки образа аппаратная поддержка raspberry pi будет включена в наш дистрибутив "router-bs".


Слой "meta-raspberrypi" прописывается при установке, см. главу Установка Yocto Project




Поддержка USB сетевых плат в "Raspberry PI"



В качестве дополнительного оборудования в нашем роутере используется только внешняя USB => Ethernet сетевая плата


Для корректной работы сетевой платы в Linux: нам потребуется две вещи:
1) Поддержка Linux ядром определенной сетевой платы
2) Наличие в системе модуля ядра для определенной сетевой платы


Возьмем к примеру дешевую сетевую плату Readyon RD-KY88772A, скорости подключения до 100 Мб/сек нам достаточно. Найдем чипсет на котором плата работает - это AX88772A разработка фирмы "ASIX".


Теперь найдем название параметра в конфигурации ядра отвечающую за драйвер чипсета AX88772A, лучше всего поискать сочетание слов "AX88772A cateee.net"

     где "cateee.net" - удобный сайт с описанием конфигураций модулей ядра Linux

Сразу находим название конфигурации ядра - CONFIG_USB_NET_AX8817X
и название нужного нам модуля ядра asix


Далее нам необходимо удостовериться, что в той версии ядра linux которое мы будем собирать в рамках Yocto Project, нужная нам конфигурация поддерживается, для этого мы можем в начале собрать ядро командой
"bitbake linux-raspberrypi"
см. инструкция по сборке дистрибутива


A затем посмотреть сгенерированный файл с текущей конфигурацией ядра:

poky-router/build/tmp/work/raspberrypi2-poky-linux-gnueabi/linux-raspberrypi/имя_версии/defconfig

где имя_версии - достаточно длинное имя с номером версии и номером из git базы
пример имени: "1_4.1.21+gitAUTOINC+ff45bc0e89-r0"

в нашем случае поддержка сетевой платы присутствует
CONFIG_USB_NET_AX8817X=m

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


Для включения в образ поддерживаемых модулей ядра указанных в defconfig, в файле рецепта образа router-bs-image.bb
мы указали пакет "kernel-modules", что добавляет все модули в наш образ, конечно это увеличит размер образа ~ на 46 Mбайт, но позволит избавиться от части проблем с оборудованием.


Альтернативным вариантом является явное указание названия модуля, у нас это "kernel-module-asix"

	Примечание: можно сразу указать название нужного вам модуля в рецепте сборки образа
	router-bs-image.bb, даже не заглядывая в файл defconfig и тогда в случае его отсутствия
	вы сразу получите сообщение об ошибке на этапе сборки (команда: bitbake router-bs-image)
	  



Настройка сетевого интерфейса роутера


Настройки сети нашего роутера на конечном устройстве будет храниться в файле "/etc/network/interfaces" поэтому для замены исходного файла с настройками, необходимо включить в наш слой так называемое дополнение для рецепта, файл с расширением "bbappend", файл должен располагаться в нашем слое по такому же пути как и файл основного слоя


т.е. в Pokу рецепт храниться по пути:
poky-router/meta/recipes-core/init-ifupdown/init-ifupdown_1.0.bb

у нас файл с дополнением будет располагаться:
poky-router/meta-router-bs/recipes-core/init-ifupdown/init-ifupdown_1.0.bbappend

Показать/Скрыть содержимое файл bbappend
		
	FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
	
	SRC_URI += "file://interfaces-router"
	
	do_configure_append() {
	    # заменяю скрипт /etc/network/interfaces
	    install -m 0644 ${WORKDIR}/interfaces-router ${WORKDIR}/interfaces
	}
		
		


В нашем расширении рецепта init-ifupdown_1.0.bb мы указываем, что в секцию "do_configure", а именно в конец секции (на это указывает строка "_append") мы добавляем команду копирования нашего файла с конфигурацией роутера "interfaces-router" поверх существующего штатного файла "interfaces"


указание SRC_URI += "file://interfaces-router"
говорит рецепту о том что файл с указанным именем располагается по пути
    FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
(в начало списка FILESEXTRAPATHS добавляется путь с каталогом "files" текущего каталога)


Содержимого файла с конфигураций "files/interfaces-router"

Показать/Скрыть содержимое файл
		
	# This file describes the network interfaces available on your system
	# and how to activate them. For more information, see interfaces(5).
	
	# The loopback network interface
	auto lo
	iface lo inet loopback
	
	# The primary network interface
	auto eth0
	iface eth0 inet static
	    address 192.168.0.1
	    netmask 255.255.255.0
	    network 192.168.0.0
	    broadcast 192.168.0.255
	    # gateway xxx.xxx.xxx.xxx
	    # dns-* options are implemented by the resolvconf package, if installed
	    # ip address DNS servers - OpenDNS Family Shield
	    dns-nameservers 208.67.222.123 208.67.220.123
	
	
	auto eth1
	iface eth1 inet static
	    address 10.0.8.1
	    netmask 255.255.255.0
	    network 10.0.8.0
	    broadcast 10.0.8.255
	    # dns-* options are implemented by the resolvconf package, if installed
	    dns-nameservers 208.67.222.123 208.67.220.123
		
		


Настройка IP-адреса, шлюза по умолчанию, маски подсети

Отредактируйте файл конфигурации files/interfaces-router, например так:


Для статического IP:
auto eth1
iface eth1 inet static
address 10.0.8.1
netmask 255.255.255.0
gateway xxx.xxx.xxx.xxx
dns-nameservers 208.67.222.123 208.67.220.123


     Где:


iface eth1 inet static - указывает, что интерфейс находится в диапазоне адресов IPv4 (inet) со статическим ip (static);
address 10.0.8.1 - указывает что IP адрес нашей сетевой карты 10.0.8.1;
netmask 255.255.255.0 - указывает что наша маска подсети имеет значение 255.255.255.0;
gateway xxx.xxx.xxx.xxx- адрес шлюза по умолчанию;
dns-nameservers 208.67.222.123 208.67.220.123 - адреса DNS серверов
auto eth1 - указывает системе что интерфейс eth1 необходимо включать автоматически при загрузке системы


В указанном выше примере используются немаршрутизируемые адреса для локальной сети, и данный сетевой интерфейс eth1 будет считаться внутренним (закрытым из вне), для него адрес шлюза указывать не обязательно, так как априори для внутренней сети шлюзом будет сам наш роутер.


В качестве адресов DNS у нас указаны бесплатные общедоступные серверы OpenDNS, с фильтрацией "взрослого содержимого" т.е. по умолчанию у нас получается маршрутизатор для "Малышей"



Для работы устройства в качестве маршрутизатора, вам необходимо похожим образом настроить первый сетевой интерфейс eth0, который будет считаться внешним (открытым из Интернета)


Все параметры конфигурации в этом случае вы должны взять у своего "Интернет Провайдера" т.е. компании поставщика услуг на доступ в Интернет



Настройка DHCP сервера на роутере


Наш "Маршрутизатор" будет выполнять роль DHCP сервера (протокол динамической конфигурации узла)


Настройки DHCP сервера на конечном устройстве будет храниться в файле "/etc/dhcp/dhcpd.conf" поэтому для замены исходного файла с настройками, нам также необходимо включить в наш слой meta-router-bs дополнение для рецепта (bbappend)


в Pokу рецепт храниться по пути:
poky-router/meta/recipes-connectivity/dhcp/dhcp_4.3.3.bb

у нас файл с дополнением будет располагаться:
poky-router/meta-router-bs/recipes-connectivity/dhcp/dhcp_4.3.3.bbappend

Показать/Скрыть содержимое dhcp_4.3.3.bbappend
		
	# подменяю конфигурационные файлы и стартовые скрипты см. каталог files
	# конфигурационный файл dhcpd.conf
	# и файл с описанием сетевого интерфейса, на котором dhcp работает, файл default-server
	FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
		
		



Расширение рецепта сборки dhcp сервера будет минимальным и состоять из одной строчки. В каталоге с рецептом bbappend будет располагаться каталог "files", в который мы добавим два файла:

dhcpd.conf - собственная конфигурация DHCP сервера
default-server - файл конфигурации, который содержит имена сетевых интерфейсов
на которых DHCP сервер будет работать,в нашем случае это будет имя внутреннего сетевого интерфейса Роутера
INTERFACES="eth1"


Содержимое файла с конфигураций "dhcpd.conf"

Показать/Скрыть содержимое файл
		
	#############################
	# секция конфигурации
	#############################
	ddns-update-style interim;
	default-lease-time 36000;
	max-lease-time 72000;
	
	subnet 10.0.8.0 netmask 255.255.255.0 {
	    range  10.0.8.14 10.0.8.100;
	    # ip address OpenDNS Family Shield
	    option domain-name-servers 208.67.222.123, 208.67.220.123;
	    option subnet-mask 255.255.255.0;
	    option routers 10.0.8.1;
	}
		
		


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


ddns-update-style - схема обновления DNS, возможны варианты: режим непосредственного обновления DNS (ad-hoc) и предварительный режим взаимодействия DHCP-DNS (interim).


в настоящий момент более стандартным механизмом является указание interim


default-lease-time - время по умолчанию в секундах на которое сервер выделяет ip адрес клиенту, пока действует lease-time сервер не может отдать данный ip-адрес другой машине.

Пока ip-адресов больше чем компьютеров в сети, допустим офисная сеть, где все машины стационарны то lease-time можно ставить побольше, тот же месяц. Тогда и вероятность, что машина получит при включении другой адрес будет минимальна.

А если адресов не так много, а компьютеры меняются часто, допустим кафе и wi-fi доступ, то lease-time нужно поменьше, например 1 час.


у нас в примере время lease-time равно 36000 сек. (10 часов)


max-lease-time максимальное время на которое выделяется ip адрес клиенту


у нас в примере время max-lease-time равно 72000 сек. (20 часов)



далее в блоке subnet указываем адрес нашей сети, сетевую маску, диапазон ip адресов которые будут использоваться, адрес(а) DNS серверов, которые по буквенному имени домена возвращают ip адрес (обычно назначается вашим провайдером), маска подсети и адрес шлюза.


Шлюз это компьютер, который подключен как минимум к двум разным подсетям, и который умеет передавать пакеты из одной под сети в другую.


В нашем случае шлюзом обязательно будет наш роутер, так как для этого мы его и устанавливаем


Итак мы указали основной минимальный набор параметров, которые необходимы для работы DNS сервера на нашем "Маршрутизаторе"



Фильтрация сетевых пакетов - функции Брандмауэра



В linux фильтрация пакетов происходит на уровне ядра операционной системы в модуле "netfilter" и управляется утилитой iptables



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



Для настройки будет использована программа скрипт, программа Shorewall


Shorewall использует правила описания каждого из аспектов фильтрации в отдельном файле, и при запуске использует Perl для разбора файлов и генерации правил уже в формате "iptables"



Конфигурация "Зоны" нашего роутера


Правила хождения пакетов в Shorewall используют абстракцию зон — все сети, которые вы хотите обрабатывать, надо как-то обозвать. Для начала следует определиться с названиями зон. В нашем случае их будет 3:
     fw - необходимая зона, содержащая сам файрволл,
     net - провайдерская сеть,
     loc - домашняя сетка с DHCP


Конфигурация получается примерно такой: файл zones,
    путь на целевом устройстве /etc/shorewall/zones
    путь в Poky poky-router/meta-router-bs/recipes-connectivity/shorewall/files/zones


	    ...
	    fw      firewall
	    net     ipv4
	    loc     ipv4
	  


Интерфейсы и хосты


После описание зон, необходимо распределить их между сетевыми интерфейсами, файл interfaces:

    путь на целевом устройстве /etc/shorewall/interfaces
    путь в Poky poky-router/meta-router-bs/recipes-connectivity/shorewall/files/interfaces


		...
	  #ZONE INTERFACE BROADCAST OPTIONS
	  net     eth0    detect    tcpflags,nosmurfs,routefilter,logmartians
	  loc     eth1    detect    dhcp,tcpflags,nosmurfs,routefilter,logmartians
	  

параметр "detect" говорит shorewall автоматически определить широковещательный адрес, его можно прописать и вручную, например так: 10.0.8.255 для внутреннего сетевого интерфейса с ip адресом 10.0.8.1, см. выше


Опция tcpflags - пакеты, поступающие на этот интерфейс проверяются на наличие определенных незаконных комбинаций TCP флагов.


Опция routeback - заставляет весь трафик, пришедший через интерфейс X, возвращаться к отправителю через него же (без этого практически не обойтись в ситуации, когда провайдеров несколько).


Опции nosmurfs,logmartians - разные по своему действию, но близкие по духу параметры, заставляющие Shorewall обращать внимание на пакеты, которых "точно не должно быть на этом интерфейсе". Так, пакеты с широковещательным адресом отправителя отклоняются (nosmurfs), "марсиане" (пакеты с некорректным исходным адресом) протоколируются (logmartians).


Опция routefilter предписывает включить в ядре фильтрацию по маршруту, но пользоваться им следует с осторожностью: в схеме с несколькими исходящими каналами возможны трудно диагностируемые неполадки.


Опция dhcp - сообщает, что на интерфейсе выполняется DHCP-клиент или сервер;


Политики


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


необходимо определить политики для всех возможных направлений пробегания трафика. Лучше всего в конец дописать дефолтную политику, а чуть выше — исключения:


переменная FW является служебной и содержит имя зоны брандмауэра


    путь на целевом устройстве /etc/shorewall/policy
    путь в Poky poky-router/meta-router-bs/recipes-connectivity/shorewall/files/policy


	...
	#SOURCE   DEST    POLICY   LOG LEVEL LIMIT:BURST
	# разрешение трафика из зоны локальной сети во внешнюю
	loc       net     ACCEPT
	
	# запрещение трафика инициированное внешней сетью
	net       all     DROP     info
	
	# отвергать все другие запросы на соединение
	# (Shorewall требует наличия такой политики,
	# применимой для всех остальных запросов).
	# строка обязательно должна быть последней в файле policy
	all       all     REJECT   info
	


Настройка трансляции сетевых адресов NAT


Для того, чтобы все компьютеры из локальной сети могли обращаться в интернет и получать ответ, нам необходимо настроить "Маскарадинг", это когда все запросы в интернет отправляются от имени нашего маршрутизатора, а когда приходит ответ, маршрутизатор автоматически понимает для какого компьютера в локальной сети он предназначается.


    путь на целевом устройстве /etc/shorewall/masq
    путь в Poky poky-router/meta-router-bs/recipes-connectivity/shorewall/files/masq


	...
	#INTERFACE		SOURCE		ADDRESS		PROTO	PORT(S)	IPSEC	MARK
	eth0          eth1
	

В колонке INTERFACE указывается интерфейс назначения т.е. внешний интерфейс подключенный к интернету, в нашем случае это eth0. В поле SOURCE перечисляются адреса (исходящие адреса), для которых нужно применить SNAT-преобразование: здесь, как и во многих реальных случаях, это просто eth1, то есть вся локальная сеть целиком. При желании, имя интерфейса можно заменить явным указанием "серых" адресов (скажем, 192.168.0.0/24). Запретить SNAT для избранных узлов сети можно при помощи следующего синтаксиса:
    eth1:!192.168.0.1,192.168.0.3
кстати, он действует и во многих других конфигурационных файлах Shorewall.



Настройка правил фильтрации


Для правильной настройки Shorewall используются определенные правила фильтрации, правила обычно описывают для каких протоколов и портов необходимо разрешить входящий (а иногда исходящий) трафик


    путь на целевом устройстве /etc/shorewall/rules
    путь в Poky poky-router/meta-router-bs/recipes-connectivity/shorewall/files/rules


	...
	#ACTION  SOURCE DEST  PROTO DEST SOURCE ORIGINAL RATE USER/ MARK
	SECTION NEW
	
	# запрещать некорректные пакеты из внешней сети
	Invalid(DROP)	net		all
	
	# Разрешать соединения по протоколу DNS от роутера во внешнюю сеть
	# иначе вы не сможете определить ip адрес узла по имени сайта
	DNS(ACCEPT)	$FW		net
	
	# Разрешать соединение с роутером по протоколу SSH
	# из локальной сети для администрирования
	SSH(ACCEPT)	loc		$FW
	
	# Разрешить работу утилиты ping
	# из локальной сети до роутера
	Ping(ACCEPT)	loc		$FW
	
	# Запретить возможность ping(ования) из внешней сети
	Ping(DROP)	net		$FW
	
	# разрешить передачу пакетов icmp от роутера
	# и в локальную и во внешнюю сеть
	ACCEPT		$FW		loc		icmp
	ACCEPT		$FW		net		icmp
	

В начале указывается действие (РАЗРЕШЕНИЕ/ЗАПРЕЩЕНИЕ), далее исходящий интерфейс, далее сетевой интерфейс назначения, далее протокол и после этого возможно явно указать номер(а) портов, для которых предназначено данное действие


Так же по причине безопасности роутера, не рекомендуем вам оставлять возможность удаленного администрирования роутера из Интернета, пример правила:
    "SSH(ACCEPT) net $FW"
в этом случае как минимум необходимо подобрать сложный пароль администратора (root), а также не использовать порт 22 по умолчанию, так как в любой открытой сети всегда приходят пакеты по протоколу ssh с попыткой автоматического подбора пароля.


Такой перебор выполняется специальными программами сканерами в автоматическом режиме, и в 95% случаев достаточно изменить номер стандартного порта, что бы случайным образом не оказаться взломанным


Настоятельно не рекомендуем заниматься перенастройкой Shorewall подключившись извне, как как при задании неверных правил и последующей перезагрузкой Shorewall, можно добиться блокирования собственного доступа


Остановка Shorewall


Когда файервол останавливается, маршрутизация разрешается на те хосты, которые указаны в файле routestopped
    путь на целевом устройстве /etc/shorewall/routestopped
    путь в Poky poky-router/meta-router-bs/recipes-connectivity/shorewall/files/routestopped

	...
	#INTERFACE	HOST(S)                  OPTIONS
	eth1		-
	

В данном случае мы указываем что после остановки Shorewall разрешена маршрутизация на любые адреса ("-" значит "0.0.0.0/0") c внутреннего сетевого интерфейса


примечание: если вы хотите полностью очистить правила внесенные Shorewall в "netfilter", вы должны выполнить команду «shorewall clear»


Конфигурация Shorewall


Основной конфигурационный файл расположен:


    путь на целевом устройстве /etc/shorewall/shorewall.conf
    путь в Poky poky-router/meta-router-bs/recipes-connectivity/shorewall/files/shorewall.conf


В этом файле лежит конфигурация парсера, некоторые особенности поведения.
Обращаем внимание на следующие параметры:
	STARTUP_ENABLED=Yes — пусть запускается
	VERBOSITY=1 — многословность в консоли
	LOG_LEVEL — когда все заработает как надо, поставьте в none, чтобы не засоряло dmesg
	LOG_MARTIANS — так же
	IP_FORWARDING=On — используется для маскарадинга
	CLAMPMSS=Yes — лучше включить, если у аплинка MTU меньше,
	чем у какой-нибудь из машин в домашней сетке.
	

На самом деле файл содержит много конфигурационных параметров и его необходимо взять из примера конфигурации входящей в пакет Shorewall и подкорректировать

пример конфигурационного файла на целевом устройстве /usr/share/shorewall/configfiles/shorewall.conf



еще примеры настройки Shorewall



в пакет поставки Shorewall входят хорошие, достаточно универсальные примеры для настройки его конфигурации:

	однопортовой      /usr/share/doc/shorewall/examples/one-interface
	двухпортовой      /usr/share/doc/shorewall/examples/two-interfaces
	трехпортовой      /usr/share/doc/shorewall/examples/three-interfaces
	и универсальной   /usr/share/doc/shorewall/examples/Universal
	

Примечание: путь к конфигурациям указан на целевом устройстве



Рецепт сборки Shorewall для слоя meta-router-bs



Для того, чтобы собрать пакет Shorewall в нашем дистрибутиве, мы возьмем его рецепт сборки из проекта "OpenEmbedded"



OpenEmbedded — инфраструктура для сборки пакетов для встраиваемого Linux. OpenEmbedded предлагает решение в классе сред для кросс-компиляции. Он позволяет разработчикам создавать целостные дистрибутивы Linux для встраиваемых систем.


исходный рецепт можно взять вот отсюда,
    http://git.openembedded.org/openembedded/plain/recipes/shorewall/shorewall_4.4.14.bb

И в дальнейшем модифицируем его, обновив до последней стабильной ревизии в версии 4.4, у нас это 4.4.27


добавим рецепт shorewall_4.4.27.bb в наш слой сборки "meta-router-bs"
предварительно немного модифицировав его, дописав в секцию установки (do_install_append) замену конфигурационных файлов по умолчанию, файлами, описанными выше:
        zones, interfaces, policy, masq, rules, routestopped и shorewall.conf


poky-router/meta-router-bs/recipes-connectivity/shorewall/shorewall_4.4.27.bb Показать/Скрыть
		
	LICENSE = "GPL"
	LIC_F = "file://${COREBASE}/meta/files/common-licenses/GPL-1.0"
	SUM_F = "md5=e9e36a9de734199567a4d769498f743d"
	LIC_FILES_CHKSUM = "${LIC_F};${SUM_F}"
	
	SUB_PR = ".3"
	require shorewall.inc
	# this version (4.4) requires some deps (perl)
	require shorewall-deps.inc
	
	
	# запуск стартового скрипта /etc/init.d/shorewall на определенном уровне исполнения
	# последовательность запуска, перед сервисом ssh и dhcp
	inherit update-rc.d
	INITSCRIPT_NAME = "shorewall"
	INITSCRIPT_PARAMS = "start 08 2 3 4 5 . stop 92 0 6 1 ."
	
	
	PR = "${INC_PR}.0"
	SRC_URI = "\
	    http://www.shorewall.net/pub/shorewall/4.4/shorewall-${PV}/${PN}-${PV}${SUB_PR}.tar.bz2 \
	    file://zones \
	    file://interfaces \
	    file://policy \
	    file://masq \
	    file://rules \
	    file://shorewall.conf \
	    "
	
	# отключаю секцию do_compile, так как /sbin/shorewall является исполняемым скриптом
	# и не требует компиляции
	do_compile[noexec] = "1"
	
	SRC_URI[md5sum] = "9f0ef6b547526aa33e34941a211ca602"
	SRC_URI[sha256sum] = "1f95a04af2cbdd3449aa6fb26ea1b001e7cccd1ad4ed6d7ed8648247ae5d09bb"
	
	
	do_install_append () {
	    install -m 0644 ${WORKDIR}/zones ${D}${sysconfdir}/shorewall/zones
	    install -m 0644 ${WORKDIR}/interfaces ${D}${sysconfdir}/shorewall/interfaces
	    install -m 0644 ${WORKDIR}/policy ${D}${sysconfdir}/shorewall/policy
	    install -m 0644 ${WORKDIR}/masq ${D}${sysconfdir}/shorewall/masq
	    install -m 0644 ${WORKDIR}/rules ${D}${sysconfdir}/shorewall/rules
	    install -m 0644 ${WORKDIR}/shorewall.conf ${D}${sysconfdir}/shorewall/shorewall.conf
	}
		
		

poky-router/meta-router-bs/recipes-connectivity/shorewall/shorewall.inc Показать/Скрыть
		
	DESCRIPTION = "Shorewall is a high-level tool for configuring Netfilter."
	HOMEPAGE = "http://www.shorewall.net/"
	LICENSE = "GPLv2"
	SECTION = "network"
	PRIORITY = "optional"
	
	INC_PR = "r0"
	
	S = "${WORKDIR}/${PN}-${PV}"
	
	RDEPENDS_${PN} += "iptables"
	RRECOMMENDS_${PN} = "kernel-module-ip-tables \
	                     kernel-module-ip-conntrack \
	                     kernel-module-ipt-conntrack \
	                     kernel-module-ipt-multiport \
	                     kernel-module-ipt-log \
	                     kernel-module-ipt-mac \
	                     kernel-module-ipt-mark \
	                     kernel-module-ipt-masquerade \
	                     kernel-module-ipt-pkttype \
	                     kernel-module-ipt-reject \
	                     kernel-module-ipt-state \
	                     kernel-module-ipt-tos \
	                     kernel-module-iptable-filter \
	                     kernel-module-iptable-mangle \
	                     kernel-module-iptable-nat \
	                     "
	
	do_install() {
		export PREFIX=${D}
		${WORKDIR}/${PN}-${PV}${SUB_PR}/install.sh
	}
	
	FILES_${PN} += "/usr/share/shorewall/*"
		
		

poky-router/meta-router-bs/recipes-connectivity/shorewall/shorewall-deps.inc Показать/Скрыть
		
	
	# version 4.4.x requires perl + some perl modules
	RDEPENDS_${PN} += "\
	    perl \
	    perl-module-lib \
	    perl-module-autouse \
	    perl-module-cwd \
	    perl-module-file-basename \
	    perl-module-file-temp \
	    perl-module-getopt-long \
	    perl-module-carp \
	    perl-module-findbin \
	    perl-module-file-spec-unix \
	    perl-module-scalar-util \
	    perl-module-io \
	    perl-module-io-handle \
	    perl-module-exporter-heavy \
	    perl-module-list-util \
	    perl-module-socket \
	    perl-module-overloading \
	"
		
		



Рецепт сборки образа Router-bs



Для того, чтобы в Yocto Project собрать минималистический дистрибутив "router-bs" нам необходимо добавить файл рецепта router-bs-image.bb в слой "meta-router-bs"

poky-router/meta-router-bs/recipes-router-bs/images/router-bs-image.bb

Файл следующего содержимого:

Показать/Скрыть
		
	# Минималистический дистрибутив Linux, выполняющий функции "Маршрутизатора"
	# для платформы Raspberry PI собранный в "Yocto Project",
	# autor Alexander Demachev, site berserk.tv
	DESCRIPTION = "The Router BS -  is a simple image to Raspberry PI platform"
	LICENSE = "MIT"
	MD5_LIC = "md5=4d92cd373abda3937c2bc47fbc49d690"
	MD5_MIT = "md5=3da9cfbcb788c80a0384361b4de20420"
	
	LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;${MD5_LIC} \
	                    file://${COREBASE}/meta/COPYING.MIT;${MD5_MIT}"
	
	# добавление нескольких стандартных пакетов в базовый образ
	IMAGE_FEATURES += "ssh-server-openssh splash"
	
	# Образ базируется на рецепте сборки содержащем минимальный набор пакетов
	# Base this image on core-image-minimal
	include recipes-core/images/core-image-minimal.bb
	
	# Установка пароля по умолчанию для пользователя "root"
	# - основная административная учетная запись в системе
	# Set default password for 'root' user
	inherit extrausers
	ROOTUSERNAME = "root"
	ROOTPASSWORD = "routerbs"
	EXTRA_USERS_PARAMS = "usermod -P ${ROOTPASSWORD} ${ROOTUSERNAME};"
	
	# стартовая заставка, которая выводиться во время загрузки,
	# в случае подключения кабеля HDMI к монитору или к телевизору
	SPLASH = "psplash-raspberrypi"
	
	# увеличиваю количество виртуальных консолей до 3
	SYSVINIT_ENABLED_GETTYS = "1 2 3"
	
	
	###########################################################################
	# набор установочных пакетов входящих в образ, разбитый на категории
	###########################################################################
	
	# отладочные пакеты
	# ROUTER_DEBUG_TOOLS = "ldd strace ltrace"
	
	# пакеты библиотеки libc входящие в образ, локализация,
	# символьные таблицы для различных языков и т.п.
	ROUTER_GLIBC = " \
	            glibc-thread-db \
	            glibc-gconv-utf-16 \
	            glibc-gconv-utf-32 \
	            glibc-gconv-koi8-r \
	            glibc-gconv-cp1251 \
	            glibc-gconv-ibm866 \
	            glibc-binary-localedata-en-us \
	            glibc-binary-localedata-ru-ru \
	            glibc-binary-localedata-ru-ru.koi8-r \
	            glibc-charmap-cp1251 \
	            glibc-charmap-koi8-r \
	            glibc-charmap-utf-8 \
	            "
	
	# базовые пакеты
	ROUTER_BASE = " \
	           kernel-modules \
	           lsb \
	           pciutils \
	           "
	
	# сетевые пакеты и модули ядра
	ROUTER_NET = "kernel-module-asix \
	             "
	
	# приложения входящие в образ
	ROUTER_SOFT = " \
	        mc \
	        resolvconf \
	        dhcp-server \
	        init-ifupdown \
	        shorewall \
	        shorewall-doc \
	        "
	
	
	# указание всех дополнительных пакетов дистрибутива "Router-bs"
	# Include modules in rootfs
	IMAGE_INSTALL += " \
	    ${ROUTER_BASE} \
	    ${ROUTER_GLIBC} \
	    ${ROUTER_NET} \
	    ${ROUTER_SOFT} \
	    "
	
	
	
	#    ${ROUTER_DEBUG_TOOLS} \
	#
		
		



Загрузка дистрибутива Router-bs


Вы можете загрузить следующие версии образа дистрибутива:

	версия       - ver-0.7.1
	архитектура  - Arm 
	плата        - 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рхитектура  - Arm
    плата        - 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