- Настройка конфигурационных файлов
Редактируем файлы /etc/make.conf и /etc/src.conf. Эти файлы управляют процессом компиляции.# cp /usr/share/examples/etc/make.conf /etc/make.conf # ee /etc/make.conf
Ищем в файле строчку вида#CPUTYPE?=pentium3
Эта строка описывает процессор, который стоит в сервере. Выше в файле /etc/make.conf находится список значений, которые на данный момент распознаются операционной системой. Если в списке есть нужный процессор, то раскомментируйте эту строку и поменяйте тип процессора на свой. Узнать тип своего процессора можно командой# cat /var/log/messages | grep CPU:
или командой# sysctl -a | grep hw.model
После этого все закомментированные строки в /etc/make.conf можно удалить. Добавляем своё:# отключаем использование IPV6 NO_INET6=yes WITHOUT_INET6=yes WITHOUT_INET6_SUPPORT=yes WITHOUT_IPV6=yes # задаем директорию дерева портов PORTSDIR?=/usr/ports # настройки для portupgrade .if ${.CURDIR} == ${PORTSDIR}/ports-mgmt/portupgrade WITHOUT_X11=yes .endif
Редактируем /etc/src.conf# ee /etc/src.conf
В только что установленной операционной системе этого файла нет, так что пишем туда следующее:WITHOUT_GAME=true # никаких игрушек, у нас сервер WITHOUT_INET6=true # IPV6 пока тоже не надо WITHOUT_ATM=true # не используем этот протокол WITHOUT_IPX=true # и этот тоже #WITHOUT_MAN=true # спорный вопрос, нужны руководства или нет, себе я их оставил
- Конфигурирование ядра
Конфигурация ядра - дело не такое уж и сложное, нужно только быть внимательным. Обычно бывает достаточно изучения хендбука, благо он есть даже на русском языке:
Конфигурация ядра - http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/kernelconfig-config.html
Настройка и компиляция - http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/kernelconfig.html
Создаем свой файл конфигурации
Так как мы делаем сервер, то у него должен быть максимальный запас прочности по быстродействию, поэтому будем использовать архитектуру amd64. Есть один важный момент - не оставляйте свой конфиг ядра там, где он находится по умолчанию, вместо этого используйте ссылку на него. Это спасет вас тогда, когда вам приспичит удалить все исходники и залить их по-новой.
Создаем отдельную директорию где будет храниться конфиг нашего ядра, копируем туда конфиг GENERIC под новым именем SERVER и делаем на него ссылку:# mkdir -p /root/system/KERNEL # cd /usr/src/sys/amd64/conf # cp GENERIC /root/system/KERNEL/SERVER # ln -s /root/system/KERNEL/SERVER
Далее в файле /root/system/KERNEL/SERVER делаем следующее:
1) как написано в хендбуке, меняем строкуident GENERIC
на строкуident SERVER
отключаем ipv6, для этого необходимо закомментировать строки#options INET6 #options SCTP
2) закомментируйте все устройства (строка device), которых нет на вашем сервере, например, всяческие контроллеры SCSI, RAID-контроллеры, PCMCIA, ISA, беспроводные карты, флоппи. Это уменьшит файл ядра и, соответственно, занимаемую им память.
3) самое главное - не отключить сетевые карты, которые установлены в сервере, список можно посмотреть командой# ifconfig
Вот мой ifconfig:# ifconfig ale0: flags=8843 metric 0 mtu 1500 options=c319a ether XX:XX:XX:XX:XX:XX inet XXX.XXX.XXX.XXX netmask 0xffffff00 broadcast XXX.XXX.XXX.XXX media: Ethernet autoselect (100baseTX ) status: active rl0: flags=8802 metric 0 mtu 1500 options=3808 ether XX:XX:XX:XX:XX:XX media: Ethernet autoselect status: no carrier ipfw0: flags=8801 metric 0 mtu 65536 lo0: flags=8049 metric 0 mtu 16384 options=3 inet 127.0.0.1 netmask 0xff000000 tun0: flags=8051 metric 0 mtu 1500 options=80000 inet XXX.XXX.XXX.XXX --> 10.0.0.2 netmask 0xffffff00 Opened by PID XXXX
Как видим, в системе присутствуют две сетевухи - это ale0 и rl0. В моем конфигурационном файле ядра в разделе сетевых карт остались раскомментированы эти два устройстваdevice ale device rl
4) Добавьте options для поддержки utf-8, работы ipfw (брандмауер), nat и netgraph так как они понадобятся почти сразу. Я их добавил после строкиoptions SMP ##UTF8 options TEKEN_UTF8 ##FIREWALL options IPFIREWALL options IPFIREWALL_VERBOSE # разрешает запись информации о пакетах в syslog options IPFIREWALL_FORWARD # разрешает перенаправление пакетов, например, для прозрачного прокси options IPFIREWALL_DEFAULT_TO_ACCEPT # задает последней строкой правил "разрешить всё" options DUMMYNET # для регулирования полосы пропускания в ipfw ##NAT options IPDIVERT # для использования nat на уровне ядра options IPFIREWALL_NAT # используем NAT встроенный в ядро options LIBALIAS # обязательная опция для "ядерного" NAT ##VPN options NETGRAPH options NETGRAPH_PPP # поддержка ppp options NETGRAPH_PPTPGRE # поддержка gre-туннелирования
Добавьте устройство для получения температуры процессора (в дальнейшем оно может понадобиться для мониторинга при помощи mrtg)##CPU TEMPERATURE device coretemp
На этом настройка файла конфигурации ядра закончена.
- Компилируем и устанавливаем ядро и мир
Чистим директории:# cd /usr/obj && chflags -R noschg * # cd /usr/obj && rm -rf * # cd /usr/src && make cleandir && make cleandir && make cleandir
Компилируем мир:# cd /usr/src && make -j2 buildworld
-j2 указывает компилировать в два потока, если процессор многоядерный, то можно вместо -j2 задать -j6
Компилируем ядро:# cd /usr/src && make buildkernel KERNCONF=SERVER
Устанавливаем ядро:# cd /usr/src && make installkernel KERNCONF=SERVER
После того, как ядро скомпилировалось и установилось, нас ждет самое интересное - перезагрузка в однопользовательский режим на новом ядре.# reboot
Во время загрузки в стартовом меню не забудьте выбрать Single User Mode.
После загрузки выполняем проверку файловой системы:# fsck -p
Затем монтируем разделы и своп:# mount / # mount -a # swapon -a
Устанавливаем мир:# cd /usr/src && make installworld
Перезагружаемся в обычном режиме:# reboot
Система обновлена
- Ошибки
Новое ядро не загрузилось
В стартовом меню FreeBSD выбираем "Escape to loader prompt", после чего появится приглашение командной строки. Далее, в консоли:OK unload # выгрузка текущего ядра OK boot kernel.old # загружаем старое ядро
Делаем старое ядро текущим:# cp -Rp /boot/kernel.old /boot/kernel
После чего перезагружаем сервер
kernel requires linker ifunc support
Анамнез: ошибка может выскочить при компиляции ядра FreeBSD 12.1 на установленной FreeBSD 11.2.
Диагноз: вы забыли скомпилировать мир.
Лечение: перед компиляцией ядра вначале скомпилировать мир
dependency on /lib/libreadline.so.8 not registered
А: При обновлении FreeBSD 11 до FreeBSD 12, выскакивает во время установки/обновления Python 3.6
Д: libreadline стал частью ОС, поэтому хорошо бы удалить установленную из портов версию
Л:# cd /usr/ports/devel/readline # make deinstall
Статья опубликована: 2016-02-26 20:38:48
Последние правки: 2021-11-12 22:50:06
FreeBSD 10.2. Компилируем и ставим ядро и мир. Статья подходит и для FreeBSD 11.1, FreeBSD 12.1.
Вначале, необходимо обновить исходный код (см статью внизу странички). Отключать IPV6 или нет - дело личных предпочтений.