6. Старый гайд
Мой топорный мануал по сборке OpenWRT
(если ты могёшь лучше\знаешь больше - пиши в лс!)
Короче раз ты читаешь сейчас прямо вот эти слова, прямо вот это, да это именно его, то я контроллирую твой мозг Расслабился? Пошли терять нервные клетки!
Итак, предположим, ты умеешь прошивать свой любимый роутер готовыми прошивками. Но идеальных нет, и тебе хочется сделать всё по красоте, для себя, любимого. Или же твой роутер настолько древний, что в теме на 4пда только вопросы как перепаять умершую память. Если я угадал - приступим!
ПОДГОТОВКА
0.0 Сначала тебе понадобится ПК. Или даже лучше - доступ к мощному серверу или халявный Google Cloud. Требования просты: Максимум процессора, средненько ОЗУ и минимум места. Примерно 8потоков\4ГБ ОЗУ\ 20ГБ диска будет достаточно. Больше - лучше.
\\время первой компиляции прошивки (когда компилируются ещё и сами компиляторы. внезапно. да? ) - может быть от 40минут до 1,5 часа. Скажем так, компиляция окружения это 70%, компиляция прошивки - 30%.
0.1 Устанавливаем Ubuntu. На железо/виртуалку/облако/WSL (в Windows 10. GUI нет). Любой вариант который тебя устроит (консоль или гуй). Я ставлю стандартную с графикой, ибо потом удобно через браузер заливать прошивки в телеграм. (Если есть вариант попроще, например указать сетевую папку или вообще место на облаке - пишите в ЛС!)
0.2 Значит теперь ты загрузился в убунту. Для начала поставим необходимые пакеты:
sudo apt-get install subversion git g++ libncurses5-dev zlib1g-dev gawk libssl-dev unzip make
0.3 Подготавливаем место. Идём в корень
cd ~/
Создадим корневую папку. (Предлагаю назвать её версией OpenWRT). В моём примере - 18062.
mkdir 18062
Переходим в папку
cd ~/18062
(Все команды оптом, для скорострелов)
cd ~/ && mkdir 18062 && cd ~/18062
Качаем Исходники
git clone git://github.com/openwrt/openwrt.git -b v18.06.2
Переходим в скачанную папку
cd ~/18062/openwrt
Обновляем (Feeds? что это?)
./scripts/feeds update -a
Устанавливаем Feeds
./scripts/feeds install -a
Проверяем зависимости
make prereq
И дальше должно открыться меню конфигурации. (Если не появилось - пишем make menuconfig)
2. НАСТРАИВАЕМ КОНФИГ
//Тут очень много текста и вариантов, поэтому я выбрал стиль "по мере поступления". Тоесть идём по пунктам вниз, попутно выставляя и снимая галочки.
Управление: [esc][esc] - назад. space - отметить. Enter - выбор/переход.
Обозначения: < > - галочка снята. <*> - Компиляция в прошивку. < M > - Компиляция в отдельный пакет.(Кто-нибудь, обьясните как оно работает).
В мануале ниже опции обозначены в КОНЕЧНОМ варианте, тоесть если у меня перед названием опции стоит <*> , а у вас < > - значит вам нужно поставить галочку. И наоборот, если у меня < > а у вас <*> - значит сделайте как у меня.
ТОЛЬКО! повторюсь, ТОЛЬКО! если вы уже освоились в сборке и хотите собрать прошивку с другим набором чем у меня, тогда - можете выставлять как вам удобно. Заодно и пишите в ЛС какие у вас получились размеры пакетов, зачем они, какой профит и т.д.
В примере я буду собирать прошивку для старичка WR741ND v2.4 . Для роутеров на чипах MediaTek надо выбирать Ramips (также у них немножко иные меню в выборе модели роутера и типа прошивки). Надеюсь с логикой у вас всё в порядке. Также стоит сказать, что для роутеров на MediaTek можно собрать прошивку Padavan (через скрипт PROMETHEUS.
Сначала выбираем Target System (Семейство процессора).
- Atheros AR7XXX/9xxx
Дальше Subtarget (Для роутеров с 4мб флеш - Devices with small flash)
- Devices with small flash
Потом Target Profile (Конкретно модель вашего роутера, либо Multiple Devices - ниже появится пункт где можно выбрать несколько устройств, или Default Profile (all drivers) - для вообще вех из списка. Я выбираю TL-WR741nd v2 (т.к. у меня v2.4). Хотя теоретически если начинка роутеров одинаковая - можно выбрать что-то соседнее или похожее (например если вашего роутера нет в списке, либо вы намеренно хотите прошить прошивку от "соседа". Например WR840n v4 и WR841nd v13 это одно и то же. Но этим мазохизмом можно заниматься только если точно уверен что ты делаешь и зачем.
- TL-WR741nd v2
Ну всё, дальше конфиги:
=Target Images (какой формат прошивки получить на выходе. нам ничего менять не нужно, ибо только squashfs. Также можно задать размер блока, но опять же, в нашем случае стандартный 256кб отлично подходит. (Менять можно только если ты спец. но тогда ты уже знаещь этот гайд наизусть и даже больше. Кстати напишите в ЛС на что он влияет и зачем его меняют!
=Global Build Settings (Ну вроде и так понятно. Общие настройки. Сдесь немного остановимся.
<*> Remove ipkg/opkg status data files in final images | UNK | Удалять какоё-то мусор от opkg
=Kernel build options
< > Enable support for printk | UNKNOWN | (Подскажите что это). Отключаем для економии ОЗУ.
< > Crash logging | UNK | Отключаем логи
< > Support for paging of anonymous memory (swap) | UNK | Отключаем SWAP. //Своп - это ОЗУ на диске, а у нас и так памяти нет свободной. Есть ещё похожая технология - Zram. Это сжатие в ОЗУ. Полезно, но на сжатие\разжатие тратится процессорное время.
< > Compile the kernel with debug information | UNK | Какой к чёрту дебаг?, если у нас либо соберётся, либо нет
< > Compile the kernel with SysRq support | UNK | (Что это?) Точно не знаю. но тоже скорее всего логи\дебаги. Отключаем.
< > Enable process core dump support | UNK | Дамп ядра? Зачем? Отключаем.
< > Enable printk timestamps | UNK | Printk Отключили, значит и метки времени для него нам не нужны
< > Enable IPv6 multicast routing | UNK | Мы будем вырезать IPv6 полностью, чтобы освободить место. Поэтому и мультикаст IPv6 (для IPTV) нам не нужен. Есть же нормальный IPv4.
< > Enable IPv6 support in packages | UNK | Массовый отключатель IPv6. //Автоматически снимаются и некоторые галочки IPv6 в конфигах.
<*> Strip unnecessary exports from the kernel image | UNK | Очищаем ненужный мусор из ядра
<*> Strip unnecessary functions from libraries | UNK | Очищаем ненужные функции из библиотек
=Base system
<*>= busybox. Core utilities for embedded Linux (Это и пункт меню тоже)
<*> Customize busybox options (включаем настройку бизибокса)
=Busybox Library Tuning (Сдесь ничего не меняем. Но тут настраиваются минимальная длинна пароля, качество шифрования MD5 и SHA и т.д. Помогите описанием в ЛС)
=Archival Utilities (Ничего не трогаем. ПОКА кто-то не обьяснит зачем мне в роутере поддерожка .gz , распаковки архивов и т.д. Если это нужно для работы системы - тогда норм. Если оно не используется - кандидат на удаление.!)
=Coreutils (Не трогаем). Сдесь настройки команд для ssh. Не знаю много ли они места занимают, но многими из них я вообще не пользуюсь. Например вычислением хэша или сортировкой файлов. Гуру, пособите вдруг отключение этих команд поможет уменьшить итоговый размер бизибокса (200кб).
=Console Utilities (Не трогаем). Clear и Reset нам слишком нужны?
=Debian Utilities (Не трогаем). Что делает Which?
=Editors | UNK | Всё что связано с редактированием текста. (Нужен ли sed? есть ли он в скриптах OpenWRT?
<*> vi | ~12kB | Редактор из АДА
=Finding Utilities (всё что относится к выводу каких-то переменных. и сортировке\обработке строк. (оно нам надо в прошивке?)
=Linux System Utilities (dmesg, hexdump, mkswap - можно удалить?)
=Networking Utilities (Настройка программ для сети) //Что из этого списка нам вообще не нужно?
< > Enable IPv6 support | UNK | Отключаем IPv6
=Shells (настройка командной строки)
<*> Optimize for size instead of speed | UNK | Я так понял это типа скомпилить сильнее, в ущерб скорости ORIG: Compile ash for reduced size at the price of speed
=System Logging Utilities (Логгирование)
< > logger | UNK | Он нам нужен вообще?
< > opkg. opkg package manager | 58.3 kB | (Удаляем менеджер приложений) //Не нужен, ибо на 4мб флеш мы и так пихаем невпихуемое, а лишние 58,3 КБ вовсе не лишние.
= Configuration
< > Mount /tmp using zram | UNK | Не трогаем. Использовать zram сжатие для раздела /tmp (он в оперативке). Нагружает процессор, но можно больше уместить в ОЗУ
< > zram-swap. ZRAM swap scripts | UNK | По идее - включение Zram. Гуру, просветите что за опция.
= Administration (Проги для администрирования)
< > htop. Interactive processes viewer | 51.2kB | Нормальный диспетчер задач ///Требует libncurses (147kB)
=Kernel modules
= Network Support (Тут всякие l2tp, pptp и т.д.)
= Other modules (Тут что-то о zram, кнопках и поддержке внешнего оборудования)
= USB Support (Модули для поддержки USB. Но нам не влезут. Гуру - напишите описание к пунктам в ЛС)
= Wireless Drivers (Всё что касается драйверов WiFi
-*- kmod-ath. Atheros common driver part (Это пункт меню)
< > Enable DFS support | UNK | Что это? Но советуют отключать для экономии места
-*- kmod-mac80211. Linux 802.11 Wireless Networking Stack (Это тоже меню)
< > Export mac80211 internals in DebugFS | UNK | (Что Это? Все советуюь отключать)
< > Enable 802.11s mesh support | UNK | (Это либо поддержка WiFI моста, либо бесшовного вайфая, который и так никто не использует. Гуру, хелп!
=Libraries (Библиотеки(драйвера)) //Пособите, может там есть ещё полезные плюшки?
<*> libustream-mbedtls. ustream SSL Library (mbedtls) | 4.7kB | Нужно. Включаем. (А для чего нужно?)
=LuCI (Графический интерфейс)
=Collections
<*> luci. LuCI interface with Uhttpd as Webserver (default) | UNK | WEB-интерфейс.
=Modules (Модули управления для ВЕБ-морды)
<*> Minify Lua sources | UNK | Сжимаем код
= Translations (Язык интерфейса в добавок к ENG).
=Applications (Плагины)
<*> luci-app-adblock. LuCI support for Adblock | 8.3 kB | Управление AdBlock
< > luci-app-ddns. LuCI Support for Dynamic DNS Client (ddns-scripts) | 20.4kB + 16kB | Поддержка DDNS
<*> luci-app-openvpn. LuCI Support for OpenVPN | 8,4 kB | OpenVPN Клиент
<*> luci-app-udpxy. LuCI Support for udpxy | 2.1kB | ВЕБ-конфигуратор для udpxy для IPTV
< > luci-app-wol. LuCI Support for Wake-on-LAN | UNK | Включение ПК через сетевую карту. Иногда полезно.
=Themes (Темы)
<*> luci-theme-bootstrap. Bootstrap Theme (default) | 12kB | Стандартная тема. Пишите в ЛС сколько занимают другие
=Protocols (Можно обавить протоколы. Например поддержка 3G или VNC.
=Network (Настройка сетевых инструментов. Есть вообще всё, от поддержки печати, до телефонии, впн и балансировки. Также тут есть модули блокировки рекламы, pppoe, udpxy и всего того, что можно настраивать через WEB-морду LuCI. Даже больше. Короче тут включаются именно сами пакеты (а в секции LuCI - только веб-плагины для настройки).
=VPN (Настройки ВПН)
<*> openvpn-mbedtls. Open source VPN solution using mbedTLS | 154kB | Нужно для работы OpenVPN
-*- adblock... Powerful adblock script to block ad/abuse domains by using DNS | 12kB | Adblock. Отмечается автоматом при выборе Adblock в секции LuCI. Но если Гуй не ставить - то надо отмечать. Тогда настраивать придётся через SSH.
<*> ppp. PPP daemon | 99kB | Демон PPPoE и др PPPoX
-*- udpxy. Convert UDP IPTV streams into HTTP streams | 29kB | udpxy
=Utilities (Различный софт). //Советуйте ништяки!
=Editors (редакторы)
< > nano. An enhanced clone of the Pico text editor | 58.3kB | Редактор от бога (после vi так точно кажется таким)
===============================Пакеты и их размеры:
- noddos
noddos 169kb
libc, libssp, libstdcpp, libnetfilter-conntrack, libcurl, libopenssl, openssl-util, ca-bundle, ca-certificates, wget, bzip2, libtins, ipset, libpthread, libyaml-cpp
luci-app-noddos 4kb
luci-i18-rus 2kb
- OpenVPN
luci-app-openvpn 8kb
luci-i18n-openvpn-ru 4kb
openvpn-mbedtls 158kb
kmod-tun 12kb
libmbedtls 138kb
liblzo 31kb
- adblock
adblock 11kb
luci-app-adblock 8kb
luci-i18n-adblock-ru
- ddns
ddns-scripts 15kb
luci-app-ddns 26kb
luci-i18n-ddns-ru 2.4.9-3
- udpxy
luci-app-udpxy 2kb
udpxy 30kb
- DNScrypt
dnscrypt-proxy 59kb
libsodium 85kb
dnscrypt-proxy-resolvers 9kb
luci-app-dnscrypt-proxy 6kb
luci-i18n-dnscrypt-proxy-ru 4kb
hostip 37kb (not need)
- SQM (balance)
luci-app-sqm 5kb
sqm-scripts 16kb
tc 134kb
libmnl 6kb
kmod-sched-core 45kb
kmod-sched-cake 16kB
iptables-mod-ipopt 28kB
iptables-mod-conntrack-extra 10kb
sqm-scripts-extra 3kb
- wavemon (wifi Monitoring) (needs libncurses 147kb) 28kB
- mwan3 (WAN multi)
mwan3 13kb
luci-app-mwan3 12kb
luci-i18n-mwan3-ru 6kb
ip,?
iptables-mod-conntrack-extra 11kb
iptables-mod-ipopt 28kb
kmod-ipt-conntrack-extra 12kb
kmod-ipt-ipopt 7kb
- nano 59kb (need libncurses 147kb)
- WakeOnLan
luci-app-wol 3kB
etherwake 6kb
luci-i18n-wol-ru 2kB
?wakeonlan 4 kb
- opkg 59kb
- kmod-sched-cake (balance traffic for cli) 17kb (SQM analog)
- mini DLNA server
minidlna 110kb
luci-app-minidlna 4kb
luci-i18n-minidlna-ru 4kb
- luci-app-upnp
luci-app-upnp 4kb
miniupnpd 50kb
//////////// Разные коменты из сети////////////////////////////
If you're not the only one doing P2P in your house: luci-app-upnp
If your printer does't have built in WiFi: luci-app-p910nd
If your ISP changes IPv6 prefix very often: luci-app-radvd and some tricks.
If you want lag free connectivity (like everybody else): luci-app-sqm
If you want to start your PC remotely for remote access: luci-app-wol
If you want VPN: openvpn-polarssl
If you want to access your router/PC/VPN remotely but ISP has locked you behind CG-NAT: miredo-client
squashfs block size 1024 Kib
dropbear - це ssh
Обычно я удаляю LuCI и связанные пакеты для максимального уменьшения размера прошивки OpenWRT, то есть, для освобождения нескольких сотен КБ пространства на флеш-накопителе маршрутизатора. Ниже приведен список пакетов, которые я обычно удаляю:
libiwinfo-lua liblua libubus-lua libuci-lua lua luci luci-app-firewall luci-base luci-lib-ip luci-lib-nixio luci-mod-admin-full luci-proto-ipv6 luci-proto-ppp luci-theme-bootstrap uhttpd uhttpd-mod-ubus
Removed the packages, -ip6tables -odhcp6c -kmod-ipv6 -kmod-ip6tables -odhcpd-ipv6only
kmod-ppp 21kb
luci-proto-ppp 3kb