Не надо так

Сегодня днём один мой хороший друг написал мне следующее

Мне на неттопе надо собрать ядро, чтоб оно короче скомпилилось очень быстро и чтоб поддержка железа и функционала была только нужная: сетевушка езернет и вайфай, сата контроллер, мониторинг температур, свап, процессор атом и его встроенная видяха, даже если без всяких там 3д ускорителей. Будет типа коробочного веб-сервера, память максимально поддерживаемая процем 4 гига, проц не сильно мощный и охлаждение не суперское, ни каких внешних устройств подключать не планирую. Можно ли подонать размер ядра под например ядра роутеров? А еще интересно а можно ли вкомпилить внутрь ядра например nginx и mysql сервер? Как вообще глянуть инициализацию? Мне нужно то, что выполняется до /etc/rc2.d/. Всякое там определение оборудования, подгрузка модулей. Я хочу чтоб при старте не было опроса железа на наличие, а тупо подгрузка списка модулей. Сервисы я уже повыпиливал, у меня даже kern.log не пишется, а еще sysctl подкрутил чтоб всякие там роутеровские сетевые функции поубирать и форвардинг пингов итд, еще inittab подправил, чтоб только один экземпляр консоли стартовался))) можно ваще угарнуть и кастрировать консоль локальную, чтоб при размещении сервака ни кто не пытался подключить монитор и глянуть че там.

Потому что

­

Можно ли подонать размер ядра под например ядра роутеров?A: Выключи дебаг при сборке, уже меньше будет в разы.

Кстати, ты вообще что под размером ядра понимаешь? 

  • vmlinux

  • bzImage

  • bzImage + /lib/modules

  • bzImage + initrd

  • bzImage + initrd + /lib/modules/

Я бы занялся не выпиливанием, а допиливанием всего связанного с IO и шедуллингом.

А вот выпиливанием kern.log - это очень очень очень плохо, такое делать надо только в случае если ты абсолютно уверен в том, что ядро и все его модули протестированы на всех видах железа и 100% будут работать в любой обстановке и ни за что не сломаются.

Как вообще глянуть инициализацию. Мне нужно то, что выполняется до /etc/rc2.d/. Всякое там определение оборудования, подгрузка модулей.A: смотреть скрипты вроде rc.sysinit и внутренности initrd (initramfs) указанного в grub. Определение оборудования - это man udev.

Итог

Выпиливание кусков из ядра скорее всего даст очень малый прирост в производительности. Да, оно не будет уметь делать некоторые вещи, но если оно этим итак не занимается - разница будет заметна только во времени загрузки ядра и initrd (с модулями ведь) в память.Про udev - на нём сейчас много чего завязано, безболезненно выпилить его достаточно сложно (хотя да - как многие считают, он - говно). Однако же помимо размеров есть иная ценность дистрибутивов - лёгкость поддержки. Не думаю, что удастся в течении долгого времени при необходимости закупать именно нужную модель неттопа с точно таким же железом, чтобы держать только нужные драйвера.