Перейти к содержимому
Калькуляторы

Linux Embedded Appliance Framework aka LEAF Линуксовый "модульный" софтроутер

Итак, после довольно продолжительной разработки (с февраля - кода я понял, что мне 2.4.34 ядра не хватает, а переползать на другой дистр не хотелось ввиду большого кол-ва наработок для LEAF и привычки к дистру), таки родили сообществом бета1 версию, в которую добавили все актуальные на сегодня "хотелки" как для ISP юзания (вносились мной), так и для юзания в качестве пользовательского софтроутера на каком-то ALIX'е с Geode (или чем-то еще более медленном типа WRAP или классического первопневого тазика на антресоли).

 

Коротко: многофункциональный embedded дистр, на 2.6.35.8 ядре, для x86 архитектуры с поддержкой SMP (или без оной - для i486/geode ядер), с uClibc в качестве libc библиотеки и busybox в качестве шелла и базового окружения, для своей работы - требует минимум памяти (способен в минимальном наборе запуститься на тазике с 16МБ памяти, для браса на 500+ абонентов и шейпингом аплоада htb+hash на 2к адресов - хватает с головой 512МБ памяти); работает с рамдиска, на который при старте подгружает указанные в конфиге пакеты (формата .lrp - .tgz архивы с присутствующими служебными файлами для менеджера пакетов). Запускается с устройства с FAT/FAT32/ISO9660 ФС, пользуя syslinux/isolinux - с сд-привода (с конфигом на флопике), IDE/SATA винта или с USB флэшки.

 

Подгружает только необходимые для работы устройств модули ядра; по дефолту в дистр включены драйверы наиболее популярных сетевых карт; имеется архив со всеми ядреными модулями + механизм автоматической подгрузки требуемых железом дров из этого архива (эдакий plug'n'play, для запуска требует наличия минимум 64МБ оперативной памяти на машине). При желании можно юзать для NAS/SAN (нужные пакеты - самба, vsftpd, iscsi, а так же mdadm имеются). В близких планах - портирование астериска с зависимостями (при обновлении ядра и окружения астериск поломался, править - времени и нужды особо не было, от того - в релизе пока убран), + обновление ядра по мере выхода новых версий 2.6.35 ветки, + чистка, багфиксы и т.д.

 

Из того, что интересно для ISP, имеется:

  • iptables со скриптом инициализации, извлеченным с рэдхетовских осей и немного перепиленным под урезанный дистр (имеется загрузка-сохранение конфига/модулей и прочие плюшки)
  • accel-pptp 0.8.5
  • kernel-mode rp-pppoe
  • xl2tpd (лично мной не проверялся)
  • pppd + radcoad
  • quagga 0.9.17 в полном комплекте
  • perl 5.12.1 (я им не пользуюсь, но мало ли кому понадобится)
  • net-snmp 5.4.3
  • irqbalance 0.55 (0.56 - адекватно не заработал)
  • скрипт инициализации хеш-таблиц шейпера и модификации правил в них, исходя из IP и скорости + ip-up/ip-down/ip-mod для pppd
  • openrrcp - может кому-то будет актуально
  • at, tcpdump, iptraf, lmsensors и прочие мелочи

 

Работает у меня в продакшне долго (с февраля-марта), постепенно модифицируясь, в качестве роутеров и в качестве брасов с шейпером (pptp+pppoe), сейчас - собрали новый бордюр на нем же.

 

Скачать можно отсюда. Собссно страничка проекта - вот (пока правда еще не обновили новости, документация в стадии наполнения, но многое касательно версии 3.х применимо и для 4.0). Багрепорты предпочтительно постить в trac или в мэйллисты. Ну или здесь - хотя в мэйллистах/трэке ответ будет быстрее.

 

Для желающих что-то допилить/добавить нужный пакет - welcome, документация для девелоперов - вот.

 

P.S. Из того, что всплыло после релиза - для полноценной работы скрипта инициализации-отключения iptables необходим пакет mawk, но по дефолту в leaf.cfg он не указан.

Изменено пользователем NiTr0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Зарелизилась beta3. Из основных изменений - обновлено ядро до 2.6.35.11, добавлена поддержка esfq, правка багов в некоторых пакетах/скриптах, частичное обновление пакетов. Подробный ченжлог - здесь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

да, B-uc V4 - вешь хорошая, ram-based, со своим sdk. И очень хорошо, что не на основе debian-live ( как linux.voyage.hk). Жаль тока что что arping - из пакета iproute, а не самостийный . И никто не хочет к нему ipt_netflow прикрутить.

2NiTro: прошу прощения за дерзость , а Вы имеете какое-то отношение к этому чудесному проекту?

P.S. сам когда-то активно в нём участвовал, пока не забанили за подрыв идеологии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Собссно я 4-ю ветку и начал, сделав основную работу по апдейту ядра/модификации скриптов/апдейту компилятора и основных пакетов. Последние несколько месяцев правда мало времени проекту уделяю - т.к. вроде как все, что мне нужно, работает.

arping - был отдельным пакетом, вроде как в 3.1 и альфах присутствовал еще, но потом был исключен ввиду наличия аналога в bb. Можно вернуть.

ipt_netflow - в принципе прикрутить не проблема, если он имеется под 2.6.35 ядро, думаю попробую на неделе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Апну тему.

15 мая, через 14 месяцев после начала разработки, зарелизили 4.0 версию.

Из планов на развитие:

обновление ядра до 2.6.39 (или выше);

включение в дистр BIND, accel-ppp, freeradius, asterisk;

реорганизация тулчейна для осуществления возможности сборки дистрибутивов под другие архитектуры (x86_64, ARM и т.п.);

автоматическия подгрузка пакетов по зависимостям;

прочие мелочи, высплывающие по мере использования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Good work, sir! ;)

ipt_netflow still awaiting... :(

 

Возможно баг, (возможно нет) , но командочка ip ro get x.x.x.x/x выводит пустую строку...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ipt_netflow still awaiting... :(

Ок, закончу с bind'ом, попробую вкрутить.

 

Возможно баг, (возможно нет) , но командочка ip ro get x.x.x.x/x выводит пустую строку...

Похоже проблема бизибокса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Дошли таки руки до ipt_netflow. Вкомпилил, не проверял (не на чем).

Тарболл лежит здесь.

 

не надо.

Не надо - не пользуйте. Никто вас не заставляет его включать, все модульное ведь.

А мне к примеру - надо :) Ибо бордюры с секондари днс скрещены (т.к. оперативки дофига - ибо двухканальный режим подразумевает 2-4ГБ, проц тоже далеко не в полке). + уверен кому-то еще пригодится.

 

P.S. Также портировал BIRD, поиграться - тоже не тестил, пока в todo эксперименты с ним.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Интересный проект, но смущает что без кеширования.

Возможно, портирую как-то. Хотя и бинда хватает, тем более после перевода его на uclibc он изрядно похудал, сейчас живут 5 процессов с VSZ=80MB, большая часть памяти при этом общая (выделилась до форка). Суммарное потребление памяти на бордюре - в 200 МБ (сюда же кеши, корневая ФС + логи общей суммой на метров 40 и т.п.).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если DNS-сервер для предоставления рекурсии большому кол-ву клиентам, то рекомендую powerdns(pdns-recursor). После перевода основной рекурсивной нагрузки с бинда на powerdns, проблем с dns вообще ни разу не было. Если рекурсивная нагрузка маленькая(до 1000 запрос в секунду), то можно использовать привычный bind9 и не заморачиваться

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если DNS-сервер для предоставления рекурсии большому кол-ву клиентам, то рекомендую powerdns(pdns-recursor).

Unbound.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

30-го числа зарелизили 4.1 beta1.

Основные изменения:

-обновлено ядро до 2.6.35.13, обновлен igb

-добавлен софт (в частности bind, ipt_netflow, dibbler, sysstat)

-небольшие изменения в скриптах

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Итак, зарелизили 4.1 beta2.

Основные изменения:

-обновлено ядро до 2.6.35.14

-обновлен биибокс, увеличена длинна истории и включено ее сохранение

-пофиксен sysstat, nut

-правки шейпера (ppp-hsh)

-прочие мелочи

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

8 октября зарелизили 4.1. Основные изменения:

-добавлен скрипт для автоматической подгрузки модулей при горячем подключении устройств (mdev не имеет данного функционала)

-обновление версий софта (dhcpd, shorewall, wpa_supplicant, tor и т.д.), добавлены файлы лицензий и инфо о типе лицензии каждого пакета.

 

Из планов на будущее (5.х ветка; ориентировочно - первую бету соберем где-то весной):

-приведение тулчейна к адекватному виду и, как следствие, поддержка других архитектур (x86_64, ARM, MIPS и т.п.)

-обновление uClibc, gcc

-обновление ядра до каррент версии

-включение accel-ppp (скорее всего произойдет в 4.х)

Изменено пользователем NiTr0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробывал! Отлично. Вайата нервно курит в стороне. Прекрасная идеология. "Just pure linux"!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а реально LEAF запихнуть на флешку, если да то ткните в man

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а реально LEAF запихнуть на флешку, если да то ткните в man

Берете и пихаете, так же как и на винчестер, один в один. USB дрова на борту имеются. Ну или на крайний случай, если syslinux пугает/не получается с ним и лень разбираться/хочется виндовыми гуевыми средствами, пишете на флэш образ диска через ultraiso.

Изменено пользователем NiTr0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Зарелизили 4.2-beta1. Самые существенные изменения:


     
  • ревизия конфигов ядра (memory allocators, модули/драйверы и т.п.) - чистка лишнего и добавление нужного;
  • автодетект железа при буте пользуя hotplug подсистему (быстрее загрузка);
  • добавлены sshblack, clamav с havp, и еще кое-какие пакеты (еще в 4.1.1), обновлена часть пакетов до актуальных версий

Полный чейнджлог - здесь.

Также в процессе неспешной разработки новая ветка - переработанный тулчейн для полноценной кросс-компиляции, обновленный софт (наконец-то uClibc 0.9.32 с поддержкой nptl), accel-ppp в стадии портирования, упакованные модули ядра, в перспективе - апдейт ядра и поддержка не-x86 архитектур (фундамент заложен), разбивка initrd на несколько частей, а также пользование zram вместо tmpfs.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

С глубоким прискорбием обнаружил присутствие отсутствия всяких "parm" в модуле igb.ko, его depend-са от dca.ko, да и сам модуль отстаёт от версии на sf.net.

Уважаемый NITrO, могу я надеяться на Вашу поддержку в этом вопросе ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Параметры вроде как есть. Во всяком случае - были на промежуточных сборках, которые крутятся на брасах, и есть в сборке next ветки, которая крутится на тестовом тазике. Учитывая, что в промежутке ничего в igb не менялось - в 4.1.1 параметры тоже должны присутствовать.

# modinfo igb
filename:       igb.ko.gz
description:    Intel(R) Gigabit Ethernet Network Driver
author:         Intel Corporation, <e1000-devel@lists.sourceforge.net>
license:        GPL
vermagic:       2.6.35.14-i686 SMP mod_unload modversions PENTIUMII
parm:           debug:Debug level (0=none, ..., 16=all)
parm:           DMAC:Enable/disable on parts that support the feature
parm:           EEE:Enable/disable on parts that support the feature
parm:           QueuePairs:Enable TX/RX queue pairs for interrupt handling (0,1), default 1=on
parm:           max_vfs:Number of Virtual Functions: 0 = disable, 1-7 enable, default 0
parm:           VMDQ:Number of Virtual Machine Device Queues: 0-1 = disable, 2-8 enable, default 0
parm:           RSS:Number of Receive-Side Scaling Descriptor Queues (0-8), default 1=number of cpus
parm:           LLISize:Low Latency Interrupt on Packet Size (0-1500), default 0=off
parm:           LLIPush:Low Latency Interrupt on TCP Push flag (0,1), default 0=off
parm:           LLIPort:Low Latency Interrupt TCP Port (0-65535), default 0=off
parm:           Node:set the starting node to allocate memory on, default -1
parm:           IntMode:Change Interrupt Mode (0=Legacy, 1=MSI, 2=MSI-X), default 2
parm:           InterruptThrottleRate:Maximum interrupts per second, per vector, (max 100000), default 3=adaptive
depends:

Версию обновлю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а в kernel можно добавить поддержку dca.ko ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ок, добавил в каррент, ждите 4.2 beta2 или собирайте из гита. Хотя не думаю, что что-то сильно должно от I/OAT DMA улучшиться на реальной железке, но модуль ничему мешать не должен - так что пусть живет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас