пятница, 13 апреля 2012 г.

Проект 1 Компилируем ядро с собственным конфигом



У человека мигрировавшего с Windows, может возникнуть резонный вопрос: А для чего вообще компилировать ядро? И собственно говоря не нужно ли оно только лишь для разработчиков системы? Я постараюсь дать обоснования тому, что ядро необходимо уметь компилировать всем кто мало мальски серьезно подходит к вопросу администрирования FreeBSD.
Начнем с того, что FreeBSD (как собственно говоря и Windows и Linux) ставится на совершенно разные аппаратные платформы. В числе поддерживаемых платформ есть и самая популярная x86 и amd64 и sparc64 и еще многие другие более экзотические. И само собой каждая из этих платформ содержит свой список поддерживаемого оборудования, свои опции (без которых нормальное функционирование системы невозможно). Выбор платформы осуществляет скрипт установки. Но однако, умолчательная конфигурация даже одной из таких платформ  - до предела набита опциями, которые совсем ни к чему на сервере, и даже более того, напрямую влияют на ее безопасность. К примеру, умолчательная конфигурация содержит в себе опцию поддержки ipv6 адресации, а чревато. Подобные адреса выдается системой автоматически (для этого используется имеющийся MAC адрес сетевого адаптера, но не об этом сейчас), и мало кто вспомнит об этом, когда будет настраивать брэндмауер (сетевой фильтр). В результате останется огромная брешь, которой с легкостью можно воспользоваться в злонамеренных целях. Не проще ли удалить соответствующую строку из конфига и избавить себя от потенциальных проблем в будущем?
Далее, большое универсальное ядро - имеет большие размеры, а следовательно в пустую будет расходовать большие ресурсы. С другой стороны в универсальном ядрышке могут отсутствовать опции, которые могут вам понадобиться (Например опции включающие в ядро (и как следствие увеличивающие быстродействие) пакетный фильтр pf и различные примочки к нему. Разработчики предусмотрели возможность компиляции ядра даже не знающему глубинных особенностей пользователю. И я покажу как ими воспользоваться.
Для начала следует обновить исходные коды и порты. Следующим этапом, мы подправим умолчательный конфигурационный файл так, чтобы не оставить в нем ничего лишнего, того что нам никогда не понадобится. Я установил FreeBSD на персоналку с процессором i5, а для него подойдет архитектура i386 поэтому идем в /usr/src/sys/i386/conf и копируем умолчательный конфиг, для того, чтобы изменения не коснулись его. Делается это для того, чтобы не потерять свой конфигурационный файл после обновления системы (он будет затерт и перезаписан).


#cp /usr/src/sys/i386/conf/GENERIC /usr/src/sys/i386/conf/ZKERN
(В место ZKERN — а можно вписать что нибудь эдакое)
далее редактируем вновь созданный конфиг

#vi /usr/src/sys/i386/conf/ZKERN
Vi в данном случае удобен тем, что позволяет двойным нажатием клавиши d удалять строки с неиспользуемыми опциями, а это очень экономит время.

Для начала удаляем комментарии, если у Вас компьютер выше Pentium II, удаляем все опции
cpu, кроме
cpu I686_CPU
в графе ident меняем GENERIC на тот же ZKERN (или что еще вы там придумали)
ident ZKERN

makeoptions DEBUG=-g удаляем (мы не кодеры, о дебагерах знать ничего не знаем)
Далее следует длинный список всяких опций удаляем из него поддержку INET6 (ipv6), можно убрать совместимость со старыми релизами, я оставляю только седьмую.
Далее удаляем KDB, KDB_TRACE.
Следом идут (в терминологии пользователя Windows) драйвера устройств. Я их не трогаю вплоть до RAID контролеров, их я не терплю. Далее оставляем все вплоть до PCIMCI Устройств, их то же можно удалять. Com порт можно оставить, параллельные порты не трогаем, далее идет поддержка сетевых адаптеров, их не трогаем. Адаптеры на шине ISA можно удалить, если не планируется баловаться с Wi-Fi и Wi-MAX, жертвуем и Wireless NIC-ами. Псевдоустройства не трогаем, bpf то же. Про USB, USB-3G Модемы решайте сами, надо оно вам на серваке или нет. USB Wireless можно убрать, Fireware думаю то же, да и sound support (поддержка звуковых плат) ни к чему. С удалениями и покончено, теперь осталось внедрить в ядро обалденный пакетный фильтр pf и на этом можно завершать процесс конфигурирования ядра. Добавляем в конфиг следующие строки:

device pf
device pfsync
device pflog
options ALTQ
options ALTQ_CBQ
options ALTQ_PRIQ
options ALTQ_RED
options ALTQ_RIO
options ALTQ_HFSC
options ALTQ_NOPCC

Вот и все, сохраняемся и выходим из vi
«Esc» :wq
На это процесс настройки конфигурационного файла можно считать оконечным, перейдем непосредственно к компиляции ядра.

#cd /usr/src
#make -j5 buildkernel KERNCONF=ZKERN

На процедуру компиляции можно смотреть вечно.
После ее удачного окончания (если на экране не замелкали error-ы окончание можно считать удачным). Установим свежескомпилированное ядро в систему
# make installkernel KERNCONF=ZKERN
процедура установки куда более быстротечна, следом перегружаем систему.
# shutdown -r now
После окончания перезагрузки, пред нами восстанет FreeBSD, с ядром заточенным под наши нужды.

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

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