Сборка ядра FreeBSD

kuspehu-f-1000x715В какой-то момент работы с операционной системой FreeBSD приходит необходимость пересборки ядра. Этот момент прекрасен, но не всегда прост. Сборку ядра следует производить не только при желании добавить некоторый функционал, но и в случаях высоконагруженных систем, где ядро должно быть как можно легче.

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

Подготовка к сборке

Перед сборкой ядра необходимо убедиться, что в системе присутствует исходный код системы и ядра, при необходимости – обновить исходные коды. Располагаются они в /usr/src.

# ls /usr/src/
COPYRIGHT         ObsoleteFiles.inc contrib           include           rescue            tools
LOCKS             README            crypto            kerberos5         sbin              usr.bin
MAINTAINERS       UPDATING          etc               lib               secure            usr.sbin
Makefile          bin               games             libexec           share
Makefile.inc1     cddl              gnu               release           sys

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

Также, мы сделаем резервную копию текущего рабочего ядра, чтобы было куда возвращаться, если что-то пойдёт не так. Перед выполнением команды, следует убедиться, что в корне файловой системы / имеется 250-300 мегабайт свободного дискового пространства.

# cp -Rp /boot/kernel /boot/kernel.good

Посмотрим, что за процессор установлен в сервере.

# dmesg | grep CPU\:
CPU: Intel(R) Xeon(R) CPU E31220 @ 3.10GHz (3093.00-MHz K8-class CPU)

#1. Настройка будущего ядра

Следующим шагом мы создадим из текущего файла настроек ядра GENERIC (базовое ядро) свой файл-конфиг.

# cd /usr/src/sys/amd64/conf/
# cp GENERIC CORE-IPFW-DUMMYNET

В той же директории, где располагается и конфигурационный файл GENERIC, лежит часть настроек ядра DEFAULTS, которая подключается по-умолчанию.

# cat DEFAULTS
machine         amd64
device          isa
device          mem             # Memory and kernel memory devices
device          io              # I/O device
device          uart_ns8250
options         GEOM_PART_BSD
options         GEOM_PART_EBR
options         GEOM_PART_EBR_COMPAT
options         GEOM_PART_MBR

Посмотреть список всех доступных опций ядра можно из директории /usr/src/sys/amd64/conf/, выполнив команду make LINT.

# cd /usr/src/sys/amd64/conf/
# make LINT

После этого в текущей директории появится файл LINT, в котором перечислены все доступные опции ядра. Приступим к редактированию конфиг-файла будущего ядра.

# vi CORE-IPFW-DUMMYNET
# Указываем класс процессора, который можно узнать командой "dmesg | grep CPU\:", "HAMMER" для K8-class CPU
cpu             HAMMER
# Идентификатор ядра
ident           CORE-IPFW-DUMMYNET
# Используется для откладки ядра, в жизни пригодится врят ли. Если только
# не обнаружатся ошибки и придётся писать разработчикам.
#makeoptions    DEBUG=-g
# Далее - опции IPFW
# Встроить поддержку файрволла ipfw в ядро
options         IPFIREWALL
# Журналирование информации о событиях файрволла в логи (через syslogd)
# об отброшенных пакетах
options         IPFIREWALL_VERBOSE
# Ограничение журналирования. Будут выводиться только первые 10 сообщений,
# после достижения этого значения - журналирование прекратится. Функция ipfw
# log logamount имеет больший приоритет, чем IPFIREWALL_VERBOSE_LIMIT.
options         IPFIREWALL_VERBOSE_LIMIT=10
# Включить поддержку перенаправления (прозрачность)
options         IPFIREWALL_FORWARD
# Эта опция позволяет IP-пакеты перенаправлять дополнительно в прикладные
# программы (например для более сложной фильтрации или преобразования
# пакетов).
options         IPDIVERT
# Поддержка ограничения пропускной способности сети (управлять
# допустимой скоростью для разных хостов в сети)
options         DUMMYNET
# Загружаться по умолчанию с правилом "всем всё можно".
options         IPFIREWALL_DEFAULT_TO_ACCEPT
# Планировщик для SMP, в 6ый фряхах лучше не использовать, а начиная с
# 7ых - рекомендуют разработчики. Также хорошо работает на однопроцессорных
# системах. Создан, чтобы со временем полностью заменить "options SCHED_4BSD"
options         SCHED_ULE
# Позволяет высокоприоритетным нитям ядра вытеснять кокурентов, находящихся
# в режиме наполнения. Может повысить быстродействие системы.
options         PREEMPTION
# Поддержка работы с сетью, а именно TCP/IP (если даже машине не будет
# работать с сетью - лучше оставить, а то некоторые приложения начинают
# вести себя дурно, им нужно чтобы работал loopback - интерфейс обратной
# связи). Считаю эту опцию обязательной.
options         INET                    # InterNETworking
# Протокол IP 6-ой версии
#options        INET6
# Зависит от INET6 (IPv6), если IPv6 отключен - нужно отключать и это.
# Пока не используется, переводится как протокол передачи с управлением
# потоков. Будем работать рядом с TCP и UDP.
#options        SCTP
# Файловая система FreeBSD. Berkeley Fast Filesystem. Если в планах
# всё-таки загружаться с жёсткого диска - параметр обязателен.
options         FFS
# Тоже лучше оставлять, т.к. благодаря технологии Soft Updates скорость
# записи на диски и работа с файловой системой увеличивается.
options         SOFTUPDATES
# Списки управлением доступа файловой системы (ACL). Включена по умолчанию
# и нельзя выключать этот параметр, если ранее он был включен и работала
# файловая система, иначе последствия для безопасности непредсказуемы.
options         UFS_ACL
# Позволяет увеличить скорость работы с большими каталогами, взамен на
# использование дополнительной оперативной памяти
options         UFS_DIRHASH
# Начиная с 7.0 есть механизм ведения журналов для файловых систем.
# Ведение журнала ведётся с помощью утилиты gjournal.
#options        UFS_GJOURNAL
# Корневой файловой системой (root) является файловая система в
# памяти (для бездисковых рабочих станций)
#options        MD_ROOT
# Сетевая файловая система. Поддержка клиента
#options        NFSCLIENT
# Сетевая файловая система. Поддержка сервера
#options        NFSSERVER
# Для NFS-клиента. Поддержка восстановления состояния блокировок
# на стороне клиента после рестарта NFS-сервера, а также гарантированный
# сброс кэша перед установкой блокировки
#options        NFSLOCKD
# Корень файловой системе может находится на удалённой сетевой
# файловой системе (для бездисковых станций)
#options        NFS_ROOT
# Позволяет монтировать файловые системы MS-DOS в момент загрузки системы.
# Необязательный, т.к. когда будет смонтирован раздел DOS, необходимый
# модуль будет автоматически загружен. Есть утилита emulators/mtools,
# которая позволяет управлять DOS-дискетами без монтирования и
# размонтирования (не требует наличия MS-DOS)
#options        MSDOSFS
options         CD9660                  # ISO 9660 Filesystem
options         PROCFS                  # Process filesystem (requires PSEUDOFS)
options         PSEUDOFS                # Pseudo-filesystem framework
options         GEOM_PART_GPT           # GUID Partition Tables.
options         GEOM_LABEL              # Provides labelization
options         COMPAT_43TTY            # BSD 4.3 TTY compat (sgtty)
options         COMPAT_FREEBSD4         # Compatible with FreeBSD4
options         COMPAT_FREEBSD5         # Compatible with FreeBSD5
options         COMPAT_FREEBSD6         # Compatible with FreeBSD6
options         COMPAT_FREEBSD7         # Compatible with FreeBSD7
options         SCSI_DELAY=5000         # Delay (in ms) before probing SCSI
options         KTRACE                  # ktrace(1) support
options         STACK                   # stack(9) support
options         SYSVSHM                 # SYSV-style shared memory
options         SYSVMSG                 # SYSV-style message queues
options         SYSVSEM                 # SYSV-style semaphores
options         P1003_1B_SEMAPHORES     # POSIX-style semaphores
options         _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
options         PRINTF_BUFR_SIZE=128    # Prevent printf output being interspersed.
options         KBD_INSTALL_CDEV        # install a CDEV entry in /dev
options         HWPMC_HOOKS             # Necessary kernel hooks for hwpmc(4)
options         AUDIT                   # Security event auditing
options         MAC                     # TrustedBSD MAC Framework
options         FLOWTABLE               # per-cpu routing cache
#options        KDTRACE_HOOKS           # Kernel DTrace hooks
options         INCLUDE_CONFIG_FILE     # Include this file in kernel
# Опции для многопроцессорных систем, мне не пригодятся на древнем пне :)
# Симметричное многопроцессорное ядро
# options       SMP
# Поддержка ввода/вывода для ядер SMP
# device        apic
# Контроль и управление частотой процессора (dmesg | grep freq). Можно
# управлять частотой процессора. Необязательный параметр
#device         cpufreq
# Поддержка ACPI (см. dmesg) Advanced Configuration and Power Interface
# Интерфейс конфигурации и управления питанием.
device          acpi
# Если материнская плата поддерживает isa (dmesg | grep isa)
device          eisa
# Поддержка pci. Активируется автоопределение карт PCI
device          pci
# Флоппи-дисководы
#device         fdc
# Поддержка дисков ata и atapi
device          ata
device          atadisk         # ATA disk drives
#device         ataraid         # ATA RAID drives
device          atapicd         # ATAPI CDROM drives
#device         atapifd         # ATAPI floppy drives
#device         atapist         # ATAPI tape drives
#options        ATA_STATIC_ID   # Static device numbering
# Контролеры SCSI здесь тоже не пригодятся
#device         ahb             # EISA AHA1742 family
#device         ahc             # AHA2940 and onboard AIC7xxx devices
#options        AHC_REG_PRETTY_PRINT    # Print register bitfields in debug
# output.  Adds ~128k to driver.
#device         ahd             # AHA39320/29320 and onboard AIC79xx devices
#options        AHD_REG_PRETTY_PRINT    # Print register bitfields in debug
# output.  Adds ~215k to driver.
#device         amd             # AMD 53C974 (Tekram DC-390(T))
#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         ncr             # NCR/Symbios Logic
#device         sym             # NCR/Symbios Logic (newer chipsets + those of `ncr')
#device         trm             # Tekram DC395U/UW/F DC315U adapters
#device         adv             # Advansys SCSI adapters
#device         adw             # Advansys wide SCSI adapters
#device         aha             # Adaptec 154x SCSI adapters
#device         aic             # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
#device         bt              # Buslogic/Mylex MultiMaster SCSI adapters
#device         ncv             # NCR 53C500
#device         nsp             # Workbit Ninja SCSI-3
#device         stg             # TMC 18C30/18C50
# Периферийное оборудование SCSI здесь тоже не будет (диски, сидюки, накопители
# на магнитной ленте)
device          scbus           # SCSI bus (required for 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 SCSI access)
#device         ses             # SCSI Environmental Services (and SAF-TE)
# Также не нужны сказёвые рэйды
#device         amr             # AMI MegaRAID
#device         arcmsr          # Areca SATA II RAID
#device         asr             # DPT SmartRAID V, VI and Adaptec SCSI RAID
#device         ciss            # Compaq Smart RAID 5*
#device         dpt             # DPT Smartcache III, IV - See NOTES for options
#device         hptmv           # Highpoint RocketRAID 182x
#device         hptrr           # Highpoint RocketRAID 17xx, 22xx, 23xx, 25xx
#device         iir             # Intel Integrated RAID
#device         ips             # IBM (Adaptec) ServeRAID
#device         mly             # Mylex AcceleRAID/eXtremeRAID
#device         twa             # 3ware 9000 series PATA/SATA RAID
# RAID controllers
# RAID-контроллеры тоже использоваться здесь не будут
#device         aac             # Adaptec FSA RAID
#device         aacp            # SCSI passthrough for aac (requires CAM)
#device         ida             # Compaq Smart RAID
#device         mfi             # LSI MegaRAID SAS
#device         mlx             # Mylex DAC960 family
#device         pst             # Promise Supertrak SX6000
#device         twe             # 3ware ATA RAID
# atkbdc0 controls both the keyboard and the PS/2 mouse
device          atkbdc          # AT keyboard controller
device          atkbd           # AT keyboard
device          psm             # PS/2 mouse
device          kbdmux          # keyboard multiplexer
device          vga             # VGA video card driver
device          splash          # Splash screen and screen saver support
# syscons is the default console driver, resembling an SCO console
device          sc
device          agp             # support several AGP chipsets
# Включение Advanced Power Management. Используется в лэптопах,
# если готовится сервер - отключаем, чтобы не уснул сервачок.
#device         apm
# Устройство таймера для управления энергопотреблением, APM и ACPI
device          pmtimer
# Карты PCMCIA тоже не используются
#device         cbb             # cardbus (yenta) bridge
#device         pccard          # PC Card (16-bit) bus
#device         cardbus         # CardBus (32-bit) bus
# Поддержка COM-портов
device          uart            # Generic UART driver
# Параллельный порт (интерфейс) на шине ISA
#device         ppc
# Шина параллельного порта
#device         ppbus
# Принтер на параллельном порту
#device         lpt
# Драйвер TCP/IP через параллельный порт
#device         plip
# Ввод/вывод общего назначения
#device         ppi
# Привод Iomega Zip Drive. Требует включённых в ядро опций scbus и da
#device         vpo
# Следующая строка должна быть раскоментирована, если у компьютера имеется
# последовательная или параллельная PCI карта, для которой нужен драйвер puc
#device         puc
# PCI Ethernet NICs.
device          de              # DEC/Intel DC21x4x (``Tulip'')
device          em              # Intel PRO/1000 Gigabit Ethernet Family
device          igb             # Intel PRO/1000 PCIE Server Gigabit Family
device          ixgb            # Intel PRO/10GbE Ethernet Card
device          le              # AMD Am7900 LANCE and Am79C9xx PCnet
device          ti              # Alteon Networks Tigon I/II gigabit Ethernet
device          txp             # 3Com 3cR990 (``Typhoon'')
device          vx              # 3Com 3c590, 3c595 (``Vortex'')
# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
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          dc              # DEC/Intel 21143 and various workalikes
device          et              # Agere ET1310 10/100/Gigabit Ethernet
device          fxp             # Intel EtherExpress PRO/100B (82557, 82558)
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         nve             # nVidia nForce MCP on-board Ethernet Networking
device          pcn             # AMD Am79C97x PCI 10/100 (precedence over 'le')
device          re              # RealTek 8139C+/8169/8169S/8110S
device          rl              # RealTek 8129/8139
device          sf              # Adaptec AIC-6915 (``Starfire'')
device          sge             # Silicon Integrated Systems SiS190/191
device          sis             # Silicon Integrated Systems SiS 900/SiS 7016
device          sk              # SysKonnect SK-984x & SK-982x gigabit Ethernet
device          ste             # Sundance ST201 (D-Link DFE-550TX)
device          stge            # Sundance/Tamarack TC9021 gigabit Ethernet
device          tl              # Texas Instruments ThunderLAN
device          tx              # SMC EtherPower II (83c170 ``EPIC'')
device          vge             # VIA VT612x gigabit Ethernet
device          vr              # VIA Rhine, Rhine II
device          wb              # Winbond W89C840F
device          xl              # 3Com 3c90x (``Boomerang'', ``Cyclone'')
# ISA Ethernet NICs.  pccard NICs included.
device          cs              # Crystal Semiconductor CS89x0 NIC
# 'device ed' requires 'device miibus'
device          ed              # NE[12]000, SMC Ultra, 3c503, DS8390 cards
device          ex              # Intel EtherExpress Pro/10 and Pro/10+
device          ep              # Etherlink III based cards
device          fe              # Fujitsu MB8696x based cards
device          ie              # EtherExpress 8/16, 3C507, StarLAN 10 etc.
device          sn              # SMC's 9000 series of Ethernet chips
device          xe              # Xircom pccard Ethernet
# Поддержка wi-fi протокола
#device         wlan            # 802.11 support
# Для отладки устройств wi-fi - вывод сообщений об ошибках
#options        IEEE80211_DEBUG # enable debug msgs
#options        IEEE80211_AMPDU_AGE # age frames in AMPDU reorder q's
# Поддержка технологии MESH и протокола 802.11s
#options        IEEE80211_SUPPORT_MESH  # enable 802.11s draft support
# Поддержка шифрования данных WEP, CCMP, TKIP
#device         wlan_wep        # 802.11 WEP support
#device         wlan_ccmp       # 802.11 CCMP support
#device         wlan_tkip       # 802.11 TKIP support
#device         wlan_amrr       # AMRR transmit rate control algorithm
#device         an              # Aironet 4500/4800 802.11 wireless NICs.
#device         ath             # Atheros pci/cardbus NIC's
#device         ath_hal         # pci/cardbus chip support
#options        AH_SUPPORT_AR5416       # enable AR5416 tx/rx descriptors
#device         ath_rate_sample # SampleRate tx rate control for ath
#device         ral             # Ralink Technology RT2500 wireless NICs.
#device         wi              # WaveLAN/Intersil/Symbol 802.11 wireless NICs.
#device         wl              # Older non 802.11 Wavelan wireless NIC.
# Псевдо-устройства
# Петлевой интерфейс, устройство для обратной связи, используется TCP/IP.
# Считаю параметр обязательным.
device          loop
# Генератор случайных чисел для криптографической защиты (/dev/random)
device          random
# Если работать с сетью планируется - включить это псевдоустройство.
# Является поддержкой стандартного кода протокола Ethernet
device          ether
# Поддержка vlan ядром, полезно, если нужно создавать виртуальные
# локальные компьютерные сети
device          vlan
# Пакетный тунель. Используется программных обеспечением PPP (dialup)
device          tun
# Псевдо-консоли. Обязательно (я считаю), имитирует порт для входа для
#telnet, ssh, rlogin и других.
device          pty
# Псевдо-устройства для памяти (диски в памяти), позволяет хранить файлы
# в памяти.
device          md              # Memory "disks"
device          gif             # IPv6 and IPv4 tunneling
device          faith           # IPv6-to-IPv4 relaying (translation)
device          firmware        # firmware assist module
# Псевдо-устройство, фильтр пакетов Berkeley. Позволяет сетевым интерфейсам
# работать в неразборчивом режиме (promiscious), в котором перехватывается
# любой пакет в широковещательной сети. Эти пакеты могут быть сохранены, к
# примеру. Используется для таких вещей и утилит, как tcpdump, trafshow,
# dhclient. Если планируется использование DHCP - оставлять опцию.
device          bpf             # Berkeley packet filter
# USB support
options         USB_DEBUG       # enable debug msgs
device          uhci            # UHCI PCI->USB interface
device          ohci            # OHCI PCI->USB interface
device          ehci            # EHCI PCI->USB interface (USB 2.0)
device          usb             # USB Bus (required)
#device         udbp            # USB Double Bulk Pipe devices
device          uhid            # "Human Interface Devices"
device          ukbd            # Keyboard
device          ulpt            # Printer
device          umass           # Disks/Mass storage - Requires scbus and da
device          ums             # Mouse
device          urio            # Diamond Rio 500 MP3 player
# USB Serial devices
device          u3g             # USB-based 3G modems (Option, Huawei, Sierra)
device          uark            # Technologies ARK3116 based serial adapters
device          ubsa            # Belkin F5U103 and compatible serial adapters
device          uftdi           # For FTDI usb serial adapters
device          uipaq           # Some WinCE based devices
# Девайсы uplcom, ucom (к ним ещё нужен uart, поддержка com-портов)
# мне пригодились для подключения gsm-шлюза телефона Siemens CX65
device          uplcom
device          ucom
device          uslcom          # SI Labs CP2101/CP2102 serial adapters
device          uvisor          # Visor and Palm devices
device          uvscom          # USB serial support for DDI pocket's PHS
# USB Ethernet, requires miibus
device          aue             # ADMtek USB Ethernet
device          axe             # ASIX Electronics USB Ethernet
device          cdce            # Generic USB over Ethernet
device          cue             # CATC USB Ethernet
device          kue             # Kawasaki LSI USB Ethernet
device          rue             # RealTek RTL8150 USB Ethernet
device          udav            # Davicom DM9601E USB
# USB Wireless
#device         rum             # Ralink Technology RT2501USB wireless NICs
#device         uath            # Atheros AR5523 wireless NICs
#device         ural            # Ralink Technology RT2500USB wireless NICs
#device         zyd             # ZyDAS zb1211/zb1211b wireless NICs
# FireWire support
#device         firewire        # FireWire bus code
#device         sbp             # SCSI over FireWire (Requires scbus and da)
#device         fwe             # Ethernet over FireWire (non-standard!)
#device         fwip            # IP over FireWire (RFC 2734,3146)
#device         dcons           # Dumb console driver
#device         dcons_crom      # Configuration ROM for dcons

Ещё раз проверяем созданный конфигурационный файл ядра.

#2. Сборка нового ядра

А далее собственно сборка ядра.

# cd /usr/src/
# make buildkernel KERNCONF=CORE-IPFW-DUMMYNET && make installkernel KERNCONF=CORE-IPFW-DUMMYNET

После сборки следует удалить дамп бинарников прошлого ядра, автоматически созданный системой при инсталлировании нового ядра.

# rm -r /boot/kernel.old/

Как только ядро будет создано, можно перезагружаться. Если установка нового ядра происходит удалённо, лучше воспользоваться единожды загрузкой с нового ядра, для тестирования (утилита nextboot, смотри ниже).

Включение и исключение опций в GENERIC через дополнительный файл

Если необходимо оставить ядро GENERIC со всеми его опциями и в дополнение включить какие-либо модули (или исключить), то можно не редактировать GENERIC, а в дополнительном файле, например SMP-PAE-IPFW приинклудить опции GENERIC’а.

ident CORE-IPFW-DUMMYNET
include GENERIC

Подключать дополнительные модули и девайсы.

options SMP
device apic

Отключать модули и девайсы из GENERIC’а…

nooption SMP
nodevice apic

Такой подход хорош тем, что в зависимости от версии FreeBSD, файл GENERIC меняется (опции, девайсы) и в результате в разных версиях, даже при изменении опций GENERIC’а, такой подход будет работать.

Многопоточная сборка

Если в системе, где происходит сборка установлено несколько процессоров или в имеющемся процессоре несколько ядер – есть смысл уменьшить время сборки и использовать многопоточную сборку ядра с помощью ключа -j для make. Рекомендуется выставлять значение потоков на один больше, чем имеется в системе, т.е. если 2 ядра в процессоре – ставим j3.

# make -j3 buildkernel KERNCONF=CORE-IPFW-DUMMYNET && make installkernel KERNCONF=CORE-IPFW-DUMMYNET && date

Официально разработчиками данная опция не поддерживается, так что если компиляция вылетает с ошибкой – убрать этот ключ и снова запустить компилирование.

Удалённое тестирование собранного ядра

Бывает очень часто, что администратор собирает новое ядро удалённо, по сети. И в случае, если собранное ядро после перезагрузки не запустится (например, на главном маршрутизаторе), то кто-то может поседеть, а кто-то вдоволь наговориться с клиентами по телефону, с очередью звонков. К счастью, есть прекрасная утилита nextboot, с помощью которой можно указать с какого ядра грузиться при следующей перезагрузке единожды.

Для начала директорию собранного ядра переменуем в /boot/kernel.test, а в /boot/kernel запишем рабочее проверенное ядро (прошлое, из /boot/kernel.good).

# mv /boot/kernel /boot/kernel.test
# mkdir /boot/kernel
# cp /boot/kernel.good/* /boot/kernel/

После этого применим утилиту nextboot, указав откуда системе грузить ядро единожды при только следующей перезагрузке (путь к новому ядру указывается относительно директории /boot).

# nextboot -k kernel.test

Появится файл /boot/nextboot.conf, можно в него заглянуть и увидеть некоторые настройка. Проверим всё ещё раз и перезагружаем сервер.

# shutdown -r now

После перезагрузки логинимся на сервер и смотрим с каким ядром система запущена.

# uname -a
FreeBSD host.name.ru 8.2-RELEASE FreeBSD 8.2-RELEASE #0:
user@host.name.ru:/usr/obj/usr/src/sys/CORE-IPFW-DUMMYNET  amd64

Что нам и требовалось. Перемещаем данное ядро в /boot/kernel и можно ещё раз перезагрузить сервер и проверить загружаемость нового ядра по-умолчанию.

# rm -r /boot/kernel
# mv /boot/kernel.test /boot/kernel
# shutdown -r now

Источник


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Unlix © Все права защищены 2023

Копирование материалов с сайта Unlix.ru без указания полной ссылки на источник ЗАПРЕЩЕНО!