В статье описано как компилировать ядро FreeBSD. При правильной конфигурации размер ядра может намного уменьшиться.
Для того, чтобы скомпилировать свое ядро необходимо установить исходники ядра (src- Source for everything but encryption). Если они уже установлены то заходим в каталог /usr/src/sys (FreeBSD kernel).Если же у вас не установлены исходники ядра, установить их можно через sysinstall. Считаем, что исходники ядра вы установили.
Под пользователем root идем в папку /usr/src/sys/i386/conf.
# cd /usr/src/sys/i386/conf
Копируем файл GENERIC, например в mykernel. Полученный файл и будем править.
Если у вас машина Pentium4, то советую сразу закоментировать строки:
Цитата |
cpu I386_CPU cpu I486_CPU cpu I586_CPU |
пусть наша машина будет настроена на определенный процессор и не распыляется на всякую фигню;)
Можно отключить не используемые устройства, что уменьшит размер ядра и соответсвенно нагрузку на процессор. Посмотреть какие у вас устройства можно коамандой dmesg, после загрузки компьютера.
Так же можно добавить устройства, которые по умолчанию не поддерживаются в ядре. Более подробно устройства описаны в файл LINT для FreeBSD ветки 4.х, и в файле NOTES для FreeBSD ветки 5.х.
После того как мы отредактировали наш файл, можно приступить к его компиляции.
Нам надо будет выполнить следующие команды:
Если все прошло удачно, то все что нам надо это перезагрузиться.
P.S. Советую перед эксперементами сохранить нормальное ядро, например под именем kernel.good и тогда если не загрузилось наше новое ядро, мы вместо kernel.old указажем boot kernel.good. Это предлагаю сделать, потмоу что при новом собирании ядра наш kernel.old перезапишется например не рабочим ядром и мы вообще не сможем загрузиться.
P.P.S. Сохранение хорошего рабочего ядра:
Для FreeBSD 4.x - команда cp /kernel /kernel.good
Для FreeBSD 5.x - команда cp -R /boot/kernel /boot/kernel.good
Второй способ обновления ядра:
Перейдите в каталог /usr/src.
Соберите ядро.
# make buildkernel KERNCONF=MYKERNEL
Установите новое ядро.
# make installkernel KERNCONF=MYKERNEL
Замечание: Этот способ построения требует наличия всех исходных файлов систем. Если вы только установили исходные файлы ядра, то используйте традиционный способ, как описано выше.
MYKERNEL - конфигурационный файл вашего ядра, который для i386 находится в папке /usr/src/sys/i386/conf. Если не указывать параметр KERNCONF, то соберется ядро GENERIC.
дМС УВПТЛЙ СДТБ ОЕПВИПДЙНП ОБМЙЮЙЕ ЧУЕИ ЙУИПДОЩИ ЖБКМПЧ FreeBSD.
чП-РЕТЧЩИ, ДБЧБКФЕ УДЕМБЕН ЛТБФЛЙК ПВЪПТ ЛБФБМПЗБ, Ч ЛПФПТПН ВХДЕФ РТПЙУИПДЙФШ УВПТЛБ СДТБ. чУЕ ЛБФБМПЗЙ, ЛПФПТЩЕ ВХДХФ ХРПНЙОБФШУС, ВХДХФ ПФОПУЙФЕМШОЩНЙ РП ПФОПЫЕОЙА Л ПУОПЧОПНХ ЛБФБМПЗХ /usr/src/sys , ЛПФПТЩК ФБЛЦЕ ДПУФХРЕО ЛБЛ ЛБФБМПЗ /sys . ьФПФ ЛБФБМПЗ УПДЕТЦЙФ НОПЦЕУФЧП РПДЛБФБМПЗПЧ, РТЕДУФБЧМСАЭЙИ УПВПК ТБЪМЙЮОЩЕ ЮБУФЙ СДТБ, ОП ОБЙВПМЕЕ ЧБЦОЩН ДМС ОБУ ВХДЕФ ЛБФБМПЗ arch /conf , Ч ЛПФПТПН ЧЩ ВХДЕФЕ ТЕДБЛФЙТПЧБФШ ЛПОЖЙЗХТБГЙПООЩК ЖБКМ СДТБ Й Ч ЛПФПТПН ОБИПДЙФУС ЛБФБМПЗ compile , ЗДЕ ВХДЕФ УПВЙТБФШУС ЧБЫЕ СДТП. arch НПЦЕФ ВЩФШ i386 , amd64 , ia64 , powerpc , sparc64 ЙМЙ pc98 (БМШФЕТОБФЙЧОБС ЧЕФЧШ БРРБТБФОПЗП ПВЕУРЕЮЕОЙС, РПРХМСТОБС Ч сРПОЙЙ). чУЕ, ЮФП ОБИПДЙФУС ЧОХФТЙ ЛБФБМПЗБ ПРТЕДЕМЕООПК БТИЙФЕЛФХТЩ, ПФОПУЙФУС ФПМШЛП Л ЬФПК БТИЙФЕЛФХТЕ; ПУФБМШОПК ЛПД СЧМСЕФУС НБЫЙООП ОЕЪБЧЙУЙНЩН Й ПВЭЙН ДМС ЧУЕИ РМБФЖПТН, ОБ ЛПФПТЩЕ FreeBSD НПЦЕФ ВЩФШ РПФЕОГЙБМШОП РПТФЙТПЧБОБ. пВТБФЙФЕ ЧОЙНБОЙЕ ОБ МПЗЙЮЕУЛХА УФТХЛФХТХ ЛБФБМПЗПЧ, Ч ЛПФПТПК ЛБЦДПЕ РПДДЕТЦЙЧБЕНПЕ ХУФТПКУФЧП, ЛБЦДБС ЖБКМПЧБС УЙУФЕНБ Й ЛБЦДБС ПРГЙС ТБЪНЕЭБЕФУС Ч УЧПЈН УПВУФЧЕООПН ЛБФБМПЗЕ.
ч РТЙНЕТБИ ЬФПК ЗМБЧЩ РПДТБЪХНЕЧБЕФУС, ЮФП ЧЩ ЙУРПМШЪХЕФЕ БТИЙФЕЛФХТХ i386. еУМЙ БТИЙФЕЛФХТБ ЧБЫЕК УЙУФЕНЩ ПФМЙЮБЕФУС ПФ ЙУРПМШЪХЕНПК Ч РТЙНЕТБИ, ФП ЧБН ОЕПВИПДЙНП ВХДЕФ УППФЧЕФУФЧЕООП ЙЪНЕОЙФШ ЙНЕОБ ЛБФБМПЗПЧ.
рТЙНЕЮБОЙЕ:
еУМЙ ЛБФБМПЗ /usr/src/ ПФУХФУФЧХЕФ Ч ЧБЫЕК УЙУФЕНЕ (ЙМЙ ЬФПФ ЛБФБМПЗ РХУФ), ФП ЬФП ЪОБЮЙФ, ЮФП ЙУИПДОЩЕ ФЕЛУФЩ ОЕ ВЩМЙ ХУФБОПЧМЕОЩ. оБЙВПМЕЕ РТПУФПК УРПУПВ ХУФБОПЧЙФШ ЙИ - ЧПУРПМШЪПЧБФШУС , ЛБЛ ПРЙУБОП Ч тБЪДЕМљ21.5, > . дБМЕЕ, УПЪДБКФЕ УЙНЧПМЙЮЕУЛХА УУЩМЛХ ОБ /usr/src/sys/ :
# ln -s /usr/src/sys /sysъБФЕН, РЕТЕКДЙФЕ Ч ЛБФБМПЗ arch /conf Й УЛПРЙТХКФЕ ЖБКМ ЛПОЖЙЗХТБГЙЙ GENERIC Ч ЖБКМ У ЧЩВТБООЩН ЧБНЙ ЙНЕОЕН. оБРТЙНЕТ:
# cd /usr/src/sys/ i386 /conf # cp GENERIC MYKERNELрП ФТБДЙГЙЙ ЙНС УПУФПЙФ ЙЪ ВХЛЧ Ч ЧЕТИОЕН ТЕЗЙУФТЕ, Й ЕУМЙ ЧЩ РПДДЕТЦЙЧБЕФЕ ОЕУЛПМШЛП ЛПНРШАФЕТПЧ FreeBSD ОБ ТБЪМЙЮОПН ПВПТХДПЧБОЙЙ, ИПТПЫБС ЙДЕС ДПВБЧМСФШ ЬФП ЙНС Л ЙНЕОЙ ИПУФБ. нЩ ОБЪЧБМЙ СДТП MYKERNEL Ч ЬФПН РТЙНЕТЕ.
рПДУЛБЪЛБ:
рПНЕЭЕОЙЕ ЖБКМБ ЛПОЖЙЗХТБГЙЙ СДТБ Ч /usr/src НПЦЕФ ВЩФШ РМПИПК ЙДЕЕК. еУМЙ ЧЩ ЙУРЩФЩЧБЕФЕ РТПВМЕНЩ, ЙИ НПЦОП ТЕЫЙФШ ХДБМЙЧ /usr/src Й ОБЮБЧ ЧУЕ У ОБЮБМБ. рПУМЕ ЬФПЗП ПВЩЮОП ФТЕВХЕФУС ОЕУЛПМШЛП УЕЛХОД, ЮФПВЩ РПОСФШ, ЮФП ЧЩ ХДБМЙМЙ УПВУФЧЕООЩК ЖБКМ ОБУФТПКЛЙ СДТБ. оЕ ТЕДБЛФЙТХКФЕ ОЕРПУТЕДУФЧЕООП GENERIC , ПО НПЦЕФ ВЩФШ ФБЛЦЕ РЕТЕЪБРЙУБО Й РТЙ УМЕДХАЭЕН ПВОПЧМЕОЙЙ ДЕТЕЧБ ЙУИПДОЩИ ФЕЛУФПЧ , Й ЙЪНЕОЕОЙС СДТБ ВХДХФ РПФЕТСОЩ.
чЩ НПЦЕФЕ УПИТБОЙФШ ЖБКМ ЛПОЖЙЗХТБГЙЙ СДТБ Ч ДТХЗПН НЕУФЕ, Б ЪБФЕН УПЪДБФШ УЙНЧПМЙЮЕУЛХА УУЩМЛХ ОБ ЬФПФ ЖБКМ Ч ЛБФБМПЗЕ i386 .
оБРТЙНЕТ:
# cd /usr/src/sys/ i386 /conf # mkdir /root/kernels # cp GENERIC /root/kernels/ MYKERNEL # ln -s /root/kernels/ MYKERNELфЕРЕТШ ПФТЕДБЛФЙТХКФЕ ЖБКМ MYKERNEL Ч УЧПЈН МАВЙНПН ФЕЛУФПЧПН ТЕДБЛФПТЕ. еУМЙ ЧЩ ФПМШЛП ОБЮЙОБЕФЕ, ЕДЙОУФЧЕООЩН ДПУФХРОЩН ТЕДБЛФПТПН УЛПТЕЕ ЧУЕЗП ВХДЕФ vi , ЛПФПТЩК УМЙЫЛПН УМПЦЕО ДМС ФПЗП, ЮФПВЩ ПРЙУБФШ ЕЗП ЪДЕУШ, ОП Ч ВЙВМЙПЗТБЖЙЙ РЕТЕЮЙУМЕОП НОПЦЕУФЧП ЛОЙЗ, Ч ЛПФПТЩИ ЕЗП ЙУРПМШЪПЧБОЙЕ ИПТПЫП ПУЧЕЭЕОП. пДОБЛП FreeBSD РТЕДПУФБЧМСЕФ ВПМЕЕ РТПУФПК ТЕДБЛФПТ ee , ЛПФПТЩК, ЕУМЙ ЧЩ - ОПЧЙЮПЛ, РПДПКДЈФ ЧБН ВПМШЫЕ ЧУЕЗП. оЕ УФЕУОСКФЕУШ ЙЪНЕОСФШ УФТПЛЙ ЛПННЕОФБТЙЕЧ Ч ОБЮБМЕ ЖБКМБ, У ФЕН, ЮФПВЩ ПФПВТБЪЙФШ ЧБЫХ ЛПОЖЙЗХТБГЙА ЙМЙ ЙЪНЕОЕОЙС, ЛПФПТЩЕ ЧЩ УДЕМБМЙ РП УТБЧОЕОЙА У GENERIC .
еУМЙ ЧБН РТЙИПДЙМПУШ УПВЙТБФШ СДТП ДМС SunOS TM ЙМЙ ЛБЛПК-МЙВП ДТХЗПК ПРЕТБГЙПООПК УЙУФЕНЩ ФЙРБ BSD, НОПЗПЕ ЙЪ ФПЗП, ЮФП УПДЕТЦЙФУС Ч ЬФПН ЖБКМЕ ВХДЕФ ПЮЕОШ ЪОБЛПНП ЧБН. еУМЙ ЦЕ ЧЩ, ОБРТПФЙЧ, ЙУРПМШЪПЧБМЙ ДТХЗХА ПРЕТБГЙПООХА УЙУФЕНХ, ФБЛХА ЛБЛ DOS, ЖБКМ ЛПОЖЙЗХТБГЙЙ GENERIC НПЦЕФ РПЛБЪБФШУС ЧБН ЛТБКОЕ УМПЦОЩН, РПЬФПНХ УМЕДХКФЕ ЙОУФТХЛГЙСН Ч ТБЪДЕМЕ лПОЖЙЗХТБГЙПООЩК ЖБКМ НЕДМЕООП Й ЧОЙНБФЕМШОП.
оПЧПЕ СДТП ВХДЕФ УЛПРЙТПЧБОП Ч ЛБФБМПЗ /boot/kernel ЛБЛ /boot/kernel/kernel , Б УФБТПЕ СДТП ВХДЕФ РЕТЕНЕЭЕОП Ч /boot/kernel.old/kernel . фЕРЕТШ РЕТЕЪБЗТХЪЙФЕ УЙУФЕНХ ДМС ФПЗП, ЮФПВЩ ЙУРПМШЪПЧБФШ ОПЧПЕ СДТП. еУМЙ ЮФП-ФП РПКДЈФ ОЕ ФБЛ, ЧЩ НПЦЕФЕ ПВТБФЙФШУС Л ТБЪДЕМХ тЕЫЕОЙЕ РТПВМЕН Ч ЛПОГЕ ЬФПК ЗМБЧЩ, ЛПФПТЩК НПЦЕФ ПЛБЪБФШУС РПМЕЪЕО. оЕ ЪБВХДШФЕ РТПЮЙФБФШ ТБЪДЕМ, ЛПФПТЩК ПВЯСУОСЕФ ЛБЛ ЙУРТБЧЙФШ УЙФХБГЙА, ЛПЗДБ СДТП ОЕ ЪБЗТХЦБЕФУС .
рТЙНЕЮБОЙЕ:
дТХЗЙЕ ЖБКМЩ, ПФОПУСЭЙЕУС Л РТПГЕУУХ ЪБЗТХЪЛЙ, ФБЛЙЕ ЛБЛ ЪБЗТХЪЮЙЛ () Й ЕЗП ЛПОЖЙЗХТБГЙПООЩЕ ЖБКМЩ, ТБЪНЕЭБАФУС Ч /boot . нПДХМЙ УФПТПООЙИ РТПЙЪЧПДЙФЕМЕК НПЗХФ ВЩФШ РПНЕЭЕОЩ Ч /boot/kernel , ИПФС РПМШЪПЧБФЕМЙ ДПМЦОЩ ЪОБФШ, ЮФП ПЮЕОШ ЧБЦОП, ЮФПВЩ НПДХМЙ ВЩМЙ УЙОИТПОЙЪЙТПЧБОЩ У УПВТБООЩН СДТПН. нПДХМЙ, ОЕ ТБУУЮЙФБООЩЕ ОБ ТБВПФХ У УПВТБООЩН СДТПН, НПЗХФ ЧЩЪЧБФШ ОЕУФБВЙМШОПУФШ Й ОЕЛПТТЕЛФОПУФШ ТБВПФЩ.
В статье описано как компилировать ядро FreeBSD. При правильной конфигурации размер ядра может намного уменьшиться.
Для того, чтобы вы могли скомпилировать свое ядро вам надо было с диска установить
src — Source for everything but encryption
и потом выбрать
sys — /usr/src/sys (FreeBSD kernel)
.
Доставить можно через /stand/sysinstall.
Считаем, что исходники ядра вы установили.
Под пользователем root идем в папку /usr/src/sys/i386/conf.
Копируем файл GENERIC, например в mykernel. Полученный файл и будем править.
Если у вас машина Pentium4, то советую сразу закоментировать строки:
cpu I386_CPU
cpu I486_CPU
cpu I586_CPU
пусть наша машина будет настроена на определенный процессор и не распыляется на всякую фигню 😉
Можно отключить не используемы устройства, что уменьшит размер ядра и соответсвенно нагрузку на процессор. Посмотреть какие у вас устройства можно коамандой dmesg, после загрузки компьютера.
Так же можно добавить устройства, которые по умолчанию не поддерживаются в ядре. Более подробно устройства описаны в файл LINT для FreeBSD ветки 4.х, и в файле NOTES для FreeBSD ветки 5.х.
После того как мы отредактировали наш файл, можно приступить к его компиляции.
Нам надо будет выполнить следующие команды:
config mykernel - конфигурим ядро
cd ../../compile/mykernel
make depend
make
make install - устанавливаем ядро
Если все прошло удачно, то все что нам надо это перезагрузиться.
P.S. Советую перед эксперементами сохранить нормальное ядро, например под именем kernel.good и тогда если не загрузилось наше новое ядро, мы вместо kernel.old указажем boot kernel.good. Это предлагаю сделать, потмоу что при новом собирании ядра наш kernel.old перезапишется например не рабочим ядром и мы вообще не сможем загрузиться.
P.P.S. Сохранение хорошего рабочего ядра:
Для FreeBSD 4.x — команда cp /kernel /kernel.good
Для FreeBSD 5.x — команда cp -R /boot/kernel /boot/kernel.good
Второй способ обновления ядра:
Перейдите в каталог /usr/src.
# cd /usr/src
Соберите ядро.
# make buildkernel KERNCONF=MYKERNEL
Установите новое ядро.
# make installkernel KERNCONF=MYKERNEL
Замечание: Этот способ построения требует наличия всех исходных файлов систем. Если вы только установили исходные файлы ядра, то используйте традиционный способ, как описано выше.
MYKERNEL — конфигурационный файл вашего ядра, который для i386 находится в папке /usr/src/sys/i386/conf. Если не указывать параметр KERNCONF, то соберется ядро GENERIC.
Решил прояснить для себя вопрос с обновлением системы. В freebsd есть определенная неоднозначность в этом процессе. Один раз я попал в неприятную ситуацию при обновлении и потратил много времени, пока не понял, в чем же было дело. Сейчас постараюсь рассказать обо всех нюансах обновления freebsd. В качестве подопытной машины у меня выступает версия 10.1
Использование утилиты freebsd-update
Установить все обновления безопасности на сервер freebsd можно легко и быстро с помощью утилиты freebsd-update . Итак, у нас имеется:
# uname -a FreeBSD websrv.local 10.1-RELEASE FreeBSD 10.1-RELEASE #0 r274401: Tue Nov 11 21:02:49 UTC 2014 [email protected]:/usr/obj/usr/src/sys/GENERIC amd64
Запускаем freebsd-update , проверяем наличие обновлений и скачиваем необходимые:
# freebsd-update fetch Looking up update.FreeBSD.org mirrors... none found. Fetching public key from update.FreeBSD.org... done. Fetching metadata signature for 10.1-RELEASE from update.FreeBSD.org... done. Fetching metadata index... done. Fetching 2 metadata files... done. Inspecting system... done. Preparing to download files... done. Fetching 19 patches.....10.... done. Applying patches... done. The following files will be updated as part of updating to 10.1-RELEASE-p1:
Устанавливаем обновления:
# freebsd-update install Installing updates... done.
Если после этого мы снова проверим версию системы с помощью uname, то окажется, что ничего не изменилось. Будет показана та же версия. Что же произошло после этого обновления? Произошло бинарное обновление системы до актуальных значений. При этом, если у вас собрано и установлено свое ядро, отличное от GENERIC, то после перезагрузки у вас будет загружено ядро GENERIC. Про это обязательно нужно помнить. Я так долго разбирался, почему вдруг перестала работать команда forward в ipfw. Перепроверил все, что только мог, опустились руки. А все потому, что процесс обновления и перезагрузки сервера были сильно разделены по времени, а заметил я то, что не работает перенаправление еще позже, поэтому не сопоставил эти два события. О том, что у меня не то ядро загружено я и представить не мог. Я же знаю и помню, что ядро собирал и не трогал с тех пор. Вот такой нюанс, о котором нужно не забывать.
Чтобы отразить изменения в версии системы, пересоберем и установим ядро GENERIC. Исходные тексты системы, нужные для сборки, находятся в папке /usr/src. Если у вас там пусто, то их необходимо установить.
Установка и обновление исходных текстов системы Freebsd
Для установки исходных текстов системы есть много способов. Я предлагаю воспользоваться, как мне кажется, самым простым — с помощью программы subversion . Устанавливаем ее из портов:
# cd /usr/ports/devel/subversion # make install clean # rehash
И качаем исходники для версии 10.1:
# svn checkout https://svn0.ru.freebsd.org/base/release/10.1.0 /usr/src
Или для версии 10.2:
# svn checkout https://svn0.ru.freebsd.org/base/release/10.2.0 /usr/src
# svn checkout https://svn0.ru.freebsd.org/base/release/10.3.0 /usr/src
После того, как скачали исходники, снова запускаем обновление системы. Она найдет исправления, которые нужно внести в тексты:
# freebsd-update fetch # freebsd-update install
После этого собираем и устанавливаем ядро GENERIC:
# cd /usr/src # make buildkernel # make installkernel # shutdown -r now
Проверяем версию:
# uname -a FreeBSD websrv.local 10.1-RELEASE-p1 FreeBSD 10.1-RELEASE-p1 #0 r275828M: Tue Dec 16 16:55:19 MSK 2014 [email protected]:/usr/obj/usr/src/sys/GENERIC amd64
Все изменения вступили в силу и отображены.
Теперь для того, чтобы иметь всегда актуальную версию критических обновлений безопасности системы, создадим задание cron на ежедневную проверку обновлений:
# echo "20 3 * * * root freebsd-update cron" >> /etc/crontab
По этому заданию каждый день в 3.20 будет проверяться наличие новых критических обновлений безопасности системы freebsd 10. В случае, если таковые найдутся, они будут закачаны и пользователю root отправлено оповещение. Устанавливать их необходимо вручную.