Руководство по уменьшению размера прошивки OpenWRT

Наверное, самый популярный вопрос за последнее время — что можно удалить из OpenWRT для уменьшения прошивки.
Статей на эту тему в блоге много, но решил скомпилировать всё в одном месте.
Итак, приступим.

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

Оглавление

Пост вышел достаточно объемным.
Чтобы было удобнее ориентироваться — милости прошу, меню.

  1. Параметры компиляции
    1. Включаем Strip
    2. Отключаем Debug
    3. Отключаем поддержку Mesh-сетей
    4. Отключаем поддержку IPv6
    5. Меняем размер блока SquashFS
    6. Удаляем информацию об установленных пакетах
  2. Какие пакеты можно удалить
    1. OPKG Package Manager
    2. Dropbear — Сервер SSH
    3. uclient-fetch
    4. WPAd — демон, отвечающий за Wi-Fi
    5. iwinfo — информация о WiFi в командной строке
    6. USB 1.x aka OHCI

Параметры компиляции

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

Включаем Strip

Strip — метод отличный функционал компилятора. Он удаляет из пакетов весь код, который не используется в вашей прошивке.
Особое внимание обращу на то, что если вы будете применять Srtrip, то доустановка пакетов может быть проблематична.

Global build settings  --->
    Binary stripping method (sstrip)  --->
        (X) sstrip
    [*] Strip unnecessary exports from the kernel image
    [*] Strip unnecessary functions from libraries

Отключаем Debug

Debug — в данном контексте не уровень вывода логов, а бинарный код, упрощающий отладку.
Вы, не разработчики и не багтестеры, скорее всего он Вам не нужен.
Первым делом непосредственно сам Debug отключим:

Global build settings  --->
    Kernel build options  --->
        [ ] Compile the kernel with debug information

Теперь немного поменяем конфиги пакетов, чтобы иметь возможность отказаться от DebugFS

Kernel modules  --->
    Wireless Drivers  --->
        -*- kmod-mac80211
            [ ]   Export mac80211 internals in DebugFS

А так же, в зависимости от аппаратной начинки:
Если у вас устройство с чипом Atheros

Kernel modules  --->
    Wireless Drivers  --->
        -*- kmod-ath
            [ ]   Enable DFS support

Теперь отключаем DebugFS непосредственно в глобальных настройках:

Global build settings  --->
    Kernel build options  --->
        [ ] Compile the kernel with debug information

Отключаем поддержку Mesh-сетей

Если ты не знаешь, что это такое, то можешь смело отключать. Описание технологии и пример реализации — тема для отдельной статьи.

Kernel modules  --->
    Wireless Drivers  --->
        -*- kmod-mac80211
            [ ]   Enable 802.11s mesh support

Отключаем поддержку IPv6

Глобально IPv6 уже достаточно широко развернулся, однако когда речь стоит об экономии места в прошивке — возможно все таки стоит его отключить:

Global build settings  --->
    [ ] Enable IPv6 support in packages

После этого у вас могут появиться редуренты в виде пакетов теперь ненужных:

Base system  --->
    <*> busybox  --->
        [*] Customize busybox options
             Networking Utilities  --->
                 [ ] Enable IPv6 support
Network  --->
    < > odhcpd
Libraries  --->
    Firewall  --->
        < > libip6tc
LuCI  --->
    5. Protocols  --->
        < > luci-proto-ipv6

Меняем размер блока SquashFS

По умолчанию образ собирается с блоком SquashFS в 256 кбайт.
Увеличение размера блока до максимальных 1024 кбайт в теории позволит ужать образ еще сильнее. На практике разница около 1%, но когда речь идет о максимально возможном утрамбовке данных — таки все средства хороши.

Target Images  --->
    [*] squashfs  --->
        (1024) Block size (in KiB)

Удаляем информацию об установленных пакетах

Когда вы собираете сборку только для себя, то на мой взгляд правильнее сразу всё в прошивку запихать, а не доустанавливать потом.

Global build settings  --->
    [*] Remove ipkg/opkg status data files in final images

Сами пакеты никуда не денутся.

Какие пакеты можно удалить

В этой мини-главе речь пойдет об пакетах, которые можно удалить почти без последствий.

OPKG Package Manager

В предыдущем пункте я уже за вас решил, что лучше постараемся запихать всё в прошивку разом, а не доустанавливать потом.
В этом пункте мы возможность доустанавливать выпилим.

Base system  --->
    < > opkg

Dropbear — Сервер SSH

Если Вы хотите оставить веб-интерфейс, то вероятнее всего без SSH обойтись сможете.
Тем паче мы сейчас с вами вернем еще полноценный telnet
Удаляем Dropbear

Base system  --->
    < > dropbear

Возвращаем на место функционал, чтобы работать с telnet полноценно:

Base system  --->
    <*> busybox
        [*]   Customize busybox options
            Login/Password Management Utilities  --->
                [*] login
                    [*] passwd

А теперь редактируем маленький, но нужный файлик, который в исходниках лежит по адресу
package/base-files/files/bin/login.sh
Приводим его содержимое к виду

#!/bin/sh
# Copyright (C) 2006-2011 OpenWrt.org

if ( ! grep -qsE '^root:[!x]?:' /etc/shadow || \
     ! grep -qsE '^root:[!x]?:' /etc/passwd ) && \
   [ -z "$FAILSAFE" ]
then
	busybox login
else
cat << EOF
 === IMPORTANT ============================
  Use 'passwd' to set your login password
 ------------------------------------------
EOF
exec /bin/ash --login
fi

uclient-fetch

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

Network  --->
    < > uclient-fetch
Libraries  --->
    < > libuclient

WPAd — демон, отвечающий за Wi-Fi

Да-да, я не ошибся и я в полном здравии.
wpad-mini — компактный демон, отвечающий за wi-fi.
Вроде бы эта версия итак оптимизирована по размеру, путем отказа от RADIUS/EAP, но на самом деле далеко не самый компактный вариант.

Network  --->
    < > wpad-mini

Дело в том, что этот пакет заменяет сразу два демона
hostapd — работа в режиме беспроводной точки доступа
wpa-supplicant — работа в режиме беспроводного клиента
Редко есть необходимость использовать сразу оба пункта, так что оставим что-то одно, основываясь на своих реалиях, тем самым сэкономив этак около 64кбайт:

Network  --->
    < > hostapd-mini
    < > wpa-supplicant

iwinfo — информация о WiFi в командной строке

Если у вас в планах нет просмотра информации о Wi-Fi через консоль, то смело удаляйте

Utilities  --->
    < > iwinfo
Libraries  --->
    < > libiwinfo

USB 1.x aka OHCI

Вероятность, что Вам понадобится подключить USB 1.x устройство с каждым днем всё большее приближается к отметке нуль.
Так что не будем тащить за собой редурент в виде модуля ядра для поддержки старых устройств.

Kernel modules  --->
    USB Support  --->
        < > kmod-usb-ohci

Вместо заключения

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

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

Подпишись в один клик:

Комментариев: 2

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

Войти с помощью: