|
Сборка ядра и возможные проблемы при сборке.
Автор:
lissyara.
А зачем вообще нужно собирать собственное ядро? Со
стандартным ядром - GENERIC работает
большинство железяк, все программы. Но - в
GENERIC нет поддержки файрволла, оно неоптимизированно для
Ваших нужд... Да и железок лишних там слишком много, зачем вам
секция касающаяся SCSI контроллеров если у Вас их нет? А почти два
десятка моделей сетевых плат, когда у на серваке стоят всего
две-три, да ещё и одной модели? Куча разных процессоров - от i386 до
P-IV и AMD K7 - реально-то стоит только один проц. Ещё ядро надо
пересобирать при обнаружении новых уязвимостей. Происходит это не
так часто, но ошибаются все. В том числе и те, кто делают FreeBSD.
Да, конечно, не исключена возможность, что сгорит мама и придётся
хард переставлять на другую машину - тогда будут проблемы - если
старая машина была P-III и из ядра были выкинуты все другие
процессоры, то на другой маме - например под K7 фря может даже не
загрузиться, не говоря уже о нормальной работе. Да и если возникнет
необходимость заменить, например сетевуху, на другую модель -
придётся пересобирать ядро. Но - ядро на современных машинах
пересобирается минут 5, максимум 7. Да и прибавка к быстродействию
машины стоит того, чтобы один раз заморочиться и оптимизировать
ядро.
Итак. Для пересборки ядра у Вас должны быть установлены его
исходные тексты. Проверяем:
/usr/home/lissyara/>cd /usr/src/
/usr/src/>ls
COPYRIGHT etc sbin
Makefile games secure
Makefile.inc1 gnu share
Makefile.upgrade include sys
README kerberos5 tools
UPDATING kerberosIV usr.bin
bin lib usr.sbin
contrib libexec
crypto release
/usr/src/>
|
Если наблюдаем такую картину, то всё есть. Если
в папке /usr/src ничего нет - надо их
доставить с установочного диска. Делаем это таким образом:
/usr/src/>mount /cdrom
/cdrom/>df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 126M 36M 80M 31% /
/dev/ad0s1e 252M 10.0K 232M 0% /tmp
/dev/ad0s1f 3.0G 844M 1.9G 30% /usr
/dev/ad0s1g 378M 254K 347M 0% /var
procfs 4.0K 4.0K 0B 100% /proc
/dev/acd0c 234M 234M 0B 100% /cdrom
/usr/src/>cd /cdrom
/cdrom/>ls
ERRATA.HTM README.TXT compat1x dict kernel
ERRATA.TXT RELNOTES.HTM compat20 doc manpages
HARDWARE.HTM RELNOTES.TXT compat21 docbook.css ports
HARDWARE.TXT bin compat22 filename.txt proflibs
INSTALL.HTM boot compat3x floppies src
INSTALL.TXT catpages compat4x games tools
README.HTM cdrom.inf crypto info
/cdrom/>cd src/
/cdrom/src/>./install.sh
You must specify which components of src to extract
possible subcomponents are:
base bin contrib etc games gnu include lib libexec
release sbin share sys tools ubin usbin
You may also specify all to extract all subcomponents.
/cdrom/src/>./install.sh all
Extracting sources into /usr/src...
Extracting source component: base
Extracting source component: bin
Extracting source component: contrib
Extracting source component: etc
Extracting source component: games
Extracting source component: gnu
Extracting source component: include
Extracting source component: lib
Extracting source component: libexec
Extracting source component: release
Extracting source component: sbin
Extracting source component: share
Extracting source component: sys
Extracting source component: tools
Extracting source component: ubin
Extracting source component: usbin
Done extracting sources.
/cdrom/src/>cd /usr/src/
/usr/src/>umount /cdrom
/usr/src/>
|
Теперь, когда исходные кодя ядра установлены,
приступаем с правке файла конфигурации ядра.
/usr/src/>cd sys/i386/conf/
/usr/src/sys/i386/conf/>ls
GENERIC LINT
/usr/src/sys/i386/conf/>cp GENERIC main_kernell.`date +'%Y-%d-%m'`
/usr/src/sys/i386/conf/>ls
GENERIC LINT main_kernell.2005-26-11
/usr/src/sys/i386/conf/>
|
Если у Вашей машины конфигурация i386 - а это
80386, 80486, 80586 (первые пни), P-II, P-III, P-IV, AMD K5, AMD K6, AMD
K6-II, AMD K6-III, AMD K7 (Duron, Athlon, Sempron) то делаете то же что
и я. Если архитектура отличается - тогда в директории
/usr/src/sys/ ищете архитектуру, которая у
Вас и делаете там похожие действия :) Архитектуру можно посмотреть,
после загрузки таким макаром:
/usr/src/sys/i386/conf/>dmesg | grep CP
CPU: Intel Pentium III (792.22-MHz 686-class CPU)
|
Подробней про архитектуры можно узнать на
www.freebsd.org или в файле
/etc/defaults/make.conf. К нему, кстати, мы ещё вернёмся.
Наверное, возник вопрос, зачем я так извращённо копировал файл
GENERIC - чтобы не забыть дату когда я его
делал. Вот мой файл конфигурации ядра:
# Мой файл конфига ядра
machine i386 # Тип компьютера
#cpu I386_CPU # процессор компьютера
#cpu I486_CPU # процессор компьютера
#cpu I586_CPU # процессор компьютера
cpu I686_CPU # процессор компьютера
# про процы подробней можно
# посмотреть LINT
ident main_kernell # идентификатор ядра
maxusers 0 # Определяет количество дескрипторов
# в системе (0 - значит определяет
# "автопилот" :)))
#makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols
# опции отладки ядра (в жизни,
# вероятно не пригодится, но
# если поймаете глюк
# и захотите сообщить об этом
# разработчикам - то пригодится)
options IPFIREWALL # встраиваем поддержку файрволла в ядро
options IPFIREWALL_VERBOSE # вывод информации об отброшенных пакетах
options IPFIREWALL_VERBOSE_LIMIT=100 # ограничение, чтоб весь /var
# логами не засрали
options IPFIREWALL_FORWARD # включаем поддержку перенаправления
# чтобы можно было сделать
# позрачный прокси-сервер
# TCP пакетов ядром
options IPDIVERT # поддержка IP-маскарадинга
options DUMMYNET # поддержка DUMMYNET (искуственное
# ограничение пропускной способности
# сети, может быть нужно если есть
# необходимость урезать канал одним
# и разжать другим компьютерам)
options TCP_DROP_SYNFIN # Это нужно, чтобы сетевые сканеры
# не могли определять версию OS на
# сервере. Также нужно добавить в
# /etc/rc.conf строчку
# tcp_drop_synfin="YES"
#options MATH_EMULATE #Support for x87 emulation
# эмуляция матеметического
# сопроцессора сейчас он есть
# во всех процах, поэтому
# не нужно
options INET #InterNETworking
# поддержка сети, конкретно -
# протокола TCP/IP (если у Вас
# машина без сети - можете
# смело убирать :))
#options INET6 #IPv6 communications protocols
# Протокол IP версии 6
options FFS #Berkeley Fast Filesystem
# файловая система FreeBSD
options FFS_ROOT #FFS usable as root device [keep this!]
# Файловая система FFS является
# фаловой системой ядра
options SOFTUPDATES #Enable FFS soft updates support
# SoftUpdates - повышает скорость
# работы с файловой системой
options UFS_DIRHASH #Improve performance on big directories
# если у Вас будут директории с
# миллионами файлов - то этот
# пункт нужен. Но на самом деле
# никто не знает будут, или нет...
#options MFS #Memory Filesystem
# файловая система памяти
#options MD_ROOT #MD is a potential root device
# корневой файловой системой может
# быть файловая система в памяти
# (нужно для бездисковых рабочих
# станций )
#options NFS #Network Filesystem
# Сетевая файловая система - если
# будете строить сеть между
# фряхами - оно нужно
#options NFS_ROOT #NFS usable as root device, NFS required
# корневым разделом может быть ФС
# находящаяся на другом компе. Нужно,
# опять-таки только бездисковым
# рабочим станциям
#options MSDOSFS #MSDOS Filesystem
# файловая система FAT12, FAT16 и
# FAT32. Если будете что-то таскать
# дискетками на виндовые машины и
# обратно - нужно. если будете
# монтировать форточные ФС -
# тоже нужно.
options CD9660 #ISO 9660 Filesystem
# файловая система CD-ROM дисков
#options CD9660_ROOT #CD-ROM usable as root, CD9660 required
# Корневым разделом может быть
# файловая система CD-ROM - опять
# таки для бездисковых рабочих
# станций
options PROCFS #Process filesystem
# файловая система процессов
options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!]
# совместимость с BSD 4.3 (отдельные
# приложения начинают себя
# неадекватно вести, без этого
# пункта)
#options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI
# Задержка при загрузке для того,
# чтобы SCSI-контроллер успел
# обнаружить все подключенные к
# нему устройства. для современных
# винтов и контроллеров - 5 секунд,
# хватает за глаза. Если у Вас есть
# другие устройства на SCSI-шине -
# то курите маны, что шли с ними.
#options UCONSOLE #Allow users to grab the console
# если иксов на машиен нету -
# то этот пункт и не нужен
#options USERCONFIG #boot -c editor
#options VISUAL_USERCONFIG #visual boot -c editor
#options KTRACE #ktrace(1) support
options SYSVSHM #SYSV-style shared memory
# чё-то там про разделяемую память
# как я понял, это нужно в первую
# очередь графическим программам,
# но на всякий случай оставляю
options SYSVMSG #SYSV-style message queues
options SYSVSEM #SYSV-style semaphores
options P1003_1B #Posix P1003_1B real-time extensions
# Насчёт этого пункта нигде ничё
# нарыть не удалось, самая подробная
# инфа в LINT - это какие-то
# расширения для работы в режиме
# реального времени....
options _KPOSIX_PRIORITY_SCHEDULING
# ну и шедулер, для этого самого
# Real Time - только вот не
# вполне понятно, какой нафиг
# шедулер для реального времени
# вообще может быть...
options ICMP_BANDLIM #Rate limit bad replies
# ограничение неверных ответов
# по ICMP
#options KBD_INSTALL_CDEV # install a CDEV entry in /dev
# для всяких клав USB-овых
#options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
# output. Adds ~128k to driver.
# для отладки
#options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
# output. Adds ~215k to driver.
# для отладки
# To make an SMP kernel, the next two are needed
# следующие две опции нужны для многопроцессорных систем
#options SMP # Symmetric MultiProcessor Kernel
#options APIC_IO # Symmetric (APIC) I/O
device isa # поддержка шины ISA - советую
# не удалять этот пункт, даже на самых
# современных компах, т.к. даже в них
# есть ситемный таймер, клава и прочие
# вещи, которые с рождения ИСОвые
# и такими навсегда и останутся :)
#device eisa # Шина EISA - я её видел то пару раз,
# на 486 компах...
device pci # поддержка шины PCI
# Floppy drives
# флоппики
device fdc0 at isa? port IO_FD1 irq 6 drq 2 # контроллер флопов
device fd0 at fdc0 drive 0 # первый флоп
#device fd1 at fdc0 drive 1 # второй флоп
#
# If you have a Toshiba Libretto with its Y-E Data PCMCIA floppy,
# don't use the above line for fdc0 but the following one:
# какой-то тошибовский флопповод, подрубающийся по PCMSIA (для буков?)
#device fdc0
# ATA and ATAPI devices
# Контролеры IDE хардов
device ata0 at isa? port IO_WD1 irq 14 # первый канал
device ata1 at isa? port IO_WD2 irq 15 # второй канал
device ata # ????????
device atadisk # ATA disk drives
# собственно поддержка ATA-хардов
device atapicd # ATAPI CDROM drives
# CDROM`ы подключаемые к ATA
#device atapifd # ATAPI floppy drives
# флопповоды подключаемые к ATA
# контроллеру (первый раз о таких
# узнал именно из конфига ядра)
#device atapist # ATAPI tape drives
# Стриммеры подключаемые по ATA
#options ATA_STATIC_ID #Static device numbering
# статическая нумерация устройств
# (я вот думал, что она всегда
# статическая)
# SCSI Controllers
# SCSI-контроллеры - без комментариев
#device ahb # EISA AHA1742 family
#device ahc # AHA2940 and onboard AIC7xxx devices
#device ahd # AHA39320/29320 and onboard AIC79xx devices
#device amd # AMD 53C974 (Tekram DC-390(T))
#device isp # Qlogic family
#device mpt # LSI-Logic MPT/Fusion
#device ncr # NCR/Symbios Logic
#device sym # NCR/Symbios Logic (newer chipsets)
#options SYM_SETUP_LP_PROBE_MAP=0x40
# Allow ncr to attach legacy NCR devices when
# both sym and ncr are configured
#device adv0 at isa?
#device adw
#device bt0 at isa?
#device aha0 at isa?
#device aic0 at isa?
#device ncv # NCR 53C500
#device nsp # Workbit Ninja SCSI-3
#device stg # TMC 18C30/18C50
# SCSI peripherals
# периферийное сказёвое оборудование (собственно диски, накопители на
# магнитной ленте, CD-ROM`ы)
#device scbus # SCSI bus (required)
#device da # Direct Access (disks)
#device sa # Sequential Access (tape etc)
#device cd # CD
#device pass # Passthrough device (direct SCSI access)
# RAID controllers interfaced to the SCSI subsystem
# сказёвые рэйды
#device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID
#device dpt # DPT Smartcache - See LINT for options!
#device iir # Intel Integrated RAID
#device mly # Mylex AcceleRAID/eXtremeRAID
#device ciss # Compaq SmartRAID 5* series
#device twa # 3ware 9000 series PATA/SATA RAID
# RAID controllers
# рэйд-контроллеры
#device aac # Adaptec FSA RAID, Dell PERC2/PERC3
#device aacp # SCSI passthrough for aac (requires CAM)
#device ida # Compaq Smart RAID
#device ips # IBM/Adaptec ServeRAID
#device amr # AMI MegaRAID
#device mlx # Mylex DAC960 family
#device pst # Promise Supertrak SX6000
#device twe # 3ware Escalade
# atkbdc0 controls both the keyboard and the PS/2 mouse
device atkbdc0 at isa? port IO_KBD # контроллер клавы
device atkbd0 at atkbdc? irq 1 flags 0x1 # клава
#device psm0 at atkbdc? irq 12 # PS/2 мышь
device vga0 at isa? # Ну, это, куда моник прикручивать :)
# splash screen/screen saver
#pseudo-device splash
# syscons is the default console driver, resembling an SCO console
device sc0 at isa? flags 0x100 # системная консоль -
# без этого пункта всё
# работает, но на
# локальном мониторе
# ничего не показывает :))
# Когда я первый раз на
# это напролся, то думал,
# что убил сервак :))
# Enable this and PCVT_FREEBSD for pcvt vt220 compatible console driver
# это для всяких иксов нужно
#device vt0 at isa?
#options XSERVER # support for X server on a vt console
#options FAT_CURSOR # start with block cursor
# If you have a ThinkPAD, uncomment this along with the rest of the PCVT lines
#options PCVT_SCANSET=2 # IBM keyboards are non-std
#device agp # support several AGP chipsets
# Поддержка шины AGP
# Floating point support - do not disable.
# какой-то драйвер расширений для математического сопроцессора
device npx0 at nexus? port IO_NPX irq 13
# Power management support (see LINT for more options)
# управление питанием (ну, вот, зачем серверу засыпать?)
#device apm0 at nexus? disable flags 0x20 # Advanced Power Management
# PCCARD (PCMCIA) support
#device card
#device pcic0 at isa? irq 0 port 0x3e0 iomem 0xd0000
#device pcic1 at isa? irq 0 port 0x3e2 iomem 0xd4000 disable
# Serial (COM) ports
device sio0 at isa? port IO_COM1 flags 0x10 irq 4
device sio1 at isa? port IO_COM2 irq 3
#device sio2 at isa? disable port IO_COM3 irq 5
#device sio3 at isa? disable port IO_COM4 irq 9
# Parallel port
#device ppc0 at isa? irq 7
#device ppbus # Parallel port bus (required)
#device lpt # Printer
#device plip # TCP/IP over parallel
#device ppi # Parallel port interface device
#device vpo # Requires scbus and da
# PCI Ethernet NICs.
#device de # DEC/Intel DC21x4x (``Tulip'')
#device em # Intel PRO/1000 adapter Gigabit Ethernet Card
# (``Wiseman'')
#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
# Вообще, MII bus нужен для всех современных
# сетевух, поэтому его комментировать не надо.
# у меня сетевухи исовые, потому закомментил.
#device dc # DEC/Intel 21143 and various workalikes
#device fxp # Intel EtherExpress PRO/100B (82557, 82558)
#device pcn # AMD Am79C97x PCI 10/100 NICs
#device rl # RealTek 8129/8139
#device sf # Adaptec AIC-6915 (``Starfire'')
#device sis # Silicon Integrated Systems SiS 900/SiS 7016
#device ste # Sundance ST201 (D-Link DFE-550TX)
#device tl # Texas Instruments ThunderLAN
#device tx # SMC EtherPower II (83c170 ``EPIC'')
#device vr # VIA Rhine, Rhine II
#device wb # Winbond W89C840F
#device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
#device bge # Broadcom BCM570x (``Tigon III'')
# ISA Ethernet NICs.
# 'device ed' requires 'device miibus'
#device ed0 at isa? disable port 0x280 irq 10 iomem 0xd8000
#device ex
#device ep
#device fe0 at isa? disable port 0x300
# Xircom Ethernet
#device xe
# PRISM I IEEE 802.11b wireless NIC.
#device awi
# WaveLAN/IEEE 802.11 wireless NICs. Note: the WaveLAN/IEEE really
# exists only as a PCMCIA device, so there is no ISA attachment needed
# and resources will always be dynamically assigned by the pccard code.
#device wi
# Aironet 4500/4800 802.11 wireless NICs. Note: the declaration below will
# work for PCMCIA and PCI cards, as well as ISA cards set to ISA PnP
# mode (the factory default). If you set the switches on your ISA
# card for a manually chosen I/O address and IRQ, you must specify
# those parameters here.
device an
# The probe order of these is presently determined by i386/isa/isa_compat.c.
#device ie0 at isa? disable port 0x300 irq 10 iomem 0xd0000
#device le0 at isa? disable port 0x300 irq 5 iomem 0xd0000
device lnc0 at isa? disable port 0x280 irq 10 drq 0
#device cs0 at isa? disable port 0x300
#device sn0 at isa? disable port 0x300 irq 10
# Pseudo devices - the number indicates how many units to allocate.
pseudo-device loop # Network loopback
# сетевая петля
pseudo-device ether # Ethernet support
# поддержка Ethernet
#pseudo-device sl 1 # Kernel SLIP
#pseudo-device ppp 1 # Kernel PPP
#pseudo-device tun # Packet tunnel.
pseudo-device pty # Pseudo-ttys (telnet etc)
# псевдо консоли (ssh, telnet)
#pseudo-device md # Memory "disks"
#pseudo-device gif # IPv6 and IPv4 tunneling
#pseudo-device faith 1 # IPv6-to-IPv4 relaying (translation)
# The `bpf' pseudo-device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
pseudo-device bpf #Berkeley packet filter
# псевдо-устройство, используется
# программами подсчёта траффика,
# сетевыми сканерами...
# USB support
#device uhci # UHCI PCI->USB interface
#device ohci # OHCI PCI->USB interface
#device usb # USB Bus (required)
#device ugen # Generic
#device uhid # "Human Interface Devices"
#device ukbd # Keyboard
#device ulpt # Printer
#device umass # Disks/Mass storage - Requires scbus and da
#device ums # Mouse
#device uscanner # Scanners
#device urio # Diamond Rio MP3 Player
# USB Ethernet, requires mii
#device aue # ADMtek USB ethernet
#device axe # ASIX Electronics USB ethernet
#device cue # CATC USB ethernet
#device kue # Kawasaki LSI USB ethernet
# FireWire support
#device firewire # FireWire bus code
#device sbp # SCSI over FireWire (Requires scbus and da)
#device fwe # Ethernet over FireWire (non-standard!)
|
Я его специально выложил в таком непотребном
виде, просто закомментировав ненужные строки - чтобы было наглядно
видно, что я убрал, а что оставил. Также были добавлены несколько строк
непосредственно мною - для поддержки IPFW и ipforward.
/usr/src/sys/i386/conf/>cd ../../../
/usr/src/>make buildkernel KERNCONF=main_kernell.2005-26-11 && \
make installkernel KERNCONF=main_kernell.2005-26-11
|
По окончании инсталляции заглянем в
/
/usr/src/>cd /
//>ls -l | grep kern
-r-xr-xr-x 1 root wheel 1677713 Nov 26 20:54 kernel
-r-xr-xr-x 1 root wheel 4388756 Jan 21 2005 kernel.GENERIC
-r-xr-xr-x 1 root wheel 4388756 Jan 21 2005 kernel.old
//>
|
Ядро стало меньше почти втрое. Перезагружаемся
командой shutdown -r now, и проверяем всё ли
работает нормально. У меня всё прекрасно подцепилось не считая ругани
отдельных приложений на пропавший протокол IPv6 - на эту тему надо
копать их конфиги, или просто забить (но это неверный метод!).
Теперь рассмотрим вариант, что у вас что-то неполучилось. В простых
случаях, например, не работает сеть - надо просто изменить конфиг и
пересобрать ядро. Для этого можно и локально поработать недолго :) В
более сложном варианте - фря не грузится вообще - такое вполне возможно,
если Вы на горячую руку ампутировали что-то нужное - например подержку
SCSI-контроллера на котором висят винты, или вообще ампутировали
файловую систему из ядра :) Бывает и такое. Тоже не надо терять голову,
проблема решается сравнительно просто - надо загрузиться со старым ядром
и заново пересобрать новое. На моменте загрузки, когда идёт 10-секундный
обратный отсчёт времени (у меня, кстати, 2-х секундный :)) надо сделать
то, что он просит - нажать любую клавищу, кроме [Enter], я, например,
жму 'Esc':
Hit [Enter] to boot immediately, or any other kay for command prompt.
Booting [kernel] in 8 seconds...
Type '?' for a list of commands, 'help' for more detailed help.
ok _
|
Как итог мы получаем приглашение загрузчика.
Советую ознакомится со списком команд - их совсем мало, и времени это
немного займёт. Теперь, выгружаем новое ядро из памяти, загружаем туда
GENERIC (или Ваше старое ядро, если на машине
какой-то нестандартный набор железа), и загружаем ОС:
ok unload
ok load kernel.GENERIC
/kernel.GENERIC text=0x3418b5 data=0x4c0e0+0x34af4 syms=[0x4+0x474b0+0x4+0x5037c]
ok boot
|
После загрузки собираем новое ядро и снова
пробуем.
размещено:
2005-11-30,
последнее обновление: 2006-02-21,
автор:
lissyara
|
|
|