Найти в Дзене
птица говорун

FreeBSD сборка ядра

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

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

для начала магических действий нужно знать, что исходный код системы хранится в git. установите соответствующий пакет.

далее вот что. надо знать как обзываются ветки в git. релизы в названии имеют 2-3 цифры и так и называются например releng/12.2 . это выпуск системы версии 12.2 . кроме того существуют ветки с стайбл например stable/14 она одна на все выпуски 14.X или 14.X.X . в стейбл обычно вливаются хорошо проверенные изменения, так что минимум неожиданностей я предпочитаю пользоваться соответствующей веткой стайбл. есть еще ветка current - это основная разрабатываемая ветка. именно из этой ветки обкатаные решения переносятся в stable.

кстати на моём домашнем компьютере нет оптического диска лет 20. как я выкручиваюсь? довольно просто. я качаю установочный образ для флешки. записываю на флешку и загружаюсь с неё. таким же образом ставлю систему на сервера - очень удобно. но мы договорились больший акцент делать на десктоп.

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

> git clone -b stable/14 --depth 1 https://git.freebsd.org/src.git /usr/src

прикол в -b stable/14 --depth 1 ключ b задаёт конкретную ветку. --depth 1 ограничивает историю последним изменением. т.е. мы просто качаем значительно меньше.

после того как вы клонировали репозиторий долить в него последние изменения можно командой:stable

> cd /usr/src/ && git pull

теперь вам надо знать на какой аппаратной архитектуре вы работаете, что в общем-то уже должно быть известно - какой установочный образ вы скачали, а они разные для каждой архитектуры сейчас наиболее распространённая amd64 (ia64). видно в

FreeBSD uh1 14.2-STABLE FreeBSD 14.2-STABLE stable/14-859e098fd187 MY amd64

далее идем в директорию с конфигурационным файлом ядра и копируем конфиг стандартного яра в любое приятное вам название:

открываем конфиг в удобном вами текстовом редакторе.

приведите в порядок идентификатор ядра:

....
cpu             HAMMER
ident           MY
....

ну что вам может понадобится на десктопе? я обычно добавляю файрвол, с не давних пор нужен диверт: добавьте так что бы это выглядело логично и легко было найти, кроме того пригодится файловая система в адресном пространстве пользователя и символьные устройства там же:

......
options         FUSEFS                  # File system in user space
......
# Make an SMP-capable kernel by default
options         SMP                     # Symmetric MultiProcessor Kernel
......
# Firewall
options IPFIREWALL
options IPDIVERT
......
# Pseudo devices.
......
device          cuse                    # Userland Character Device
......

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

....
# Floppy drives
#device         fdc

# ATA controllers
device          ahci                    # AHCI-compatible SATA controllers
device          ata                     # Legacy ATA/SATA controllers
#device         mvs                     # Marvell 88SX50XX/88SX60XX/88SX70XX/SoC SATA
#device         siis                    # SiliconImage SiI3124/SiI3132/SiI3531 SATA

# SCSI Controllers
#device         ahc                     # AHA2940 and onboard AIC7xxx devices
#device         ahd                     # AHA39320/29320 and onboard AIC79xx devices
#device         hptiop                  # Highpoint RocketRaid 3xxx series
#device         isp                     # Qlogic family
#device         ispfw                   # Firmware for QLogic HBAs- normally a module
#device         mpt                     # LSI-Logic MPT-Fusion
#device         mps                     # LSI-Logic MPT-Fusion 2
#device         mpr                     # LSI-Logic MPT-Fusion 3
#device         sym                     # NCR/Symbios Logic
#device         isci                    # Intel C600 SAS controller
#device         ocs_fc                  # Emulex FC adapters
#device         pvscsi                  # VMware PVSCSI

# ATA/SCSI peripherals
device          scbus                   # SCSI bus (required for ATA/SCSI)
#device         ch                      # SCSI media changers
device          da                      # Direct Access (disks)
#device         sa                      # Sequential Access (tape etc)
#device         cd                      # CD
device          pass                    # Passthrough device (direct ATA/SCSI access)
#device         ses                     # Enclosure Services (SES and SAF-TE)
#device         ctl                     # CAM Target Layer

# RAID controllers interfaced to the SCSI subsystem
#device         arcmsr                  # Areca SATA II RAID
#device         ciss                    # Compaq Smart RAID 5*
#device         ips                     # IBM (Adaptec) ServeRAID
#device         smartpqi                # Microsemi smartpqi driver
#device         tws                     # LSI 3ware 9750 SATA+SAS 6Gb/s RAID controller
.....


так же поступаем со всеми неиспользуемыми устройствами. тут главное не закоментировать что-то лишнего: например без mii бесполезно оставлять драйвер re:

.....
device          miibus                  # MII bus support
#device         ae                      # Attansic/Atheros L2 FastEthernet
#device         age                     # Attansic/Atheros L1 Gigabit Ethernet
#device         alc                     # Atheros AR8131/AR8132 Ethernet
#device         ale                     # Atheros AR8121/AR8113/AR8114 Ethernet
#device         bce                     # Broadcom BCM5706/BCM5708 Gigabit Ethernet
#device         bfe                     # Broadcom BCM440x 10/100 Ethernet
#device         bge                     # Broadcom BCM570xx Gigabit Ethernet
#device         cas                     # Sun Cassini/Cassini+ and NS DP83065 Saturn
#device         dc                      # DEC/Intel 21143 and various workalikes
#device         et                      # Agere ET1310 10/100/Gigabit Ethernet
#device         fxp                     # Intel EtherExpress PRO/100B (82557, 82558)
#device         gem                     # Sun GEM/Sun ERI/Apple GMAC
#device         jme                     # JMicron JMC250 Gigabit/JMC260 Fast Ethernet
#device         lge                     # Level 1 LXT1001 gigabit Ethernet
#device         msk                     # Marvell/SysKonnect Yukon II Gigabit Ethernet
#device         nfe                     # nVidia nForce MCP on-board Ethernet
#device         nge                     # NatSemi DP83820 gigabit Ethernet
device          re                      # RealTek 8139C+/8169/8169S/8110S
#device         rl                      # RealTek 8129/8139
....

впрочем страшного ничего не случится. просто сборка остановится и система матюкнется на неизвестное определение.

кроме того возможно вам стоит избавиться от всей виртуализаци: имхо только тормозит. запускать другие ОС, используя вашу систему как хост, и наоборот ваша система как гость - функционал сомнительной востребованности.

запускаем сборку ядра

> cd /usr/src
> make -j5 buildkernel KERNCONF=MY

-j5 определяется количеством ядер CPU обычно n+1 и влияет только на скорость сборки - какое количество задач можно пускать одновременно. как ядро собралось, установите ядро командой (я предполагаю что вы еще в /usr/src)

> make installkernel KERNCONF=MY

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

если нужно загрузить старое ядро перейдите в командный режим загрузчика и загрузите старое ядро из директории /boot/kernel.old/ чтение команд загрузчика оставлю на самостоятельное изучение/

конфиг моего ядра можно взять от сюда, но я не рекомендую его бездумно использовать.

вообще говоря если вы производите обновление системы то полезно собрать мир и использовать ещё etcupdate, смотрите документацию.