make cleandepend && make depend && make -j8 -B && make install && reboot
1.Для пересборки ядра должны быть установлены его исходные тексты.
Проверяем установлены ли исходники (без них не пересоберецца): /usr/home/alex/>cd /usr/src/ lsКогда исходные кодя ядра установлены, приступаем с правке файла конфигурации ядра.
/usr/src/sys/i386/conf/
make LINT выводит достурные опции для конфигурирования ядра
ee LINT
/usr/src/sys/i386/conf/>cp GENERIC MY_GENERIC # копируем ядро
ee MY_GENERIC
Если у Вашей машины конфигурация 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. Вот мой файл конфигурации ядра: #
2. Пример конфигурации ядра
machine i386 | # по умолчанию в 7 не указан- описывает архитектуру РК (amd64, i386, sparc) но можна и без него | |
# | cpu I386_CPU | # процессор компьютера |
# | cpu I486_CPU | # процессор компьютера |
# | cpu I586_CPU | # процессор компьютера |
cpu I686_CPU | # процессор компьютера | |
# про процы подробней можно посмотреть LINT | ||
ident main_kernell | # идентификатор ядра | |
maxusers 0 | # Определяет количество дескрипторов в системе (0 - значит определяет "автопилот" | |
makeoptions DEBUG=-g | #опции отладки ядра (в жизни, вероятно не пригодится, но если поймаете глюк и захотите cообщить об этом разработчикам - то пригодится) | |
options IPFIREWALL | #встраиваем поддержку файрволла в ядро | |
options IPFIREWALL_VERBOSE | # вывод информации об отброшенных пакетах | |
options PFIREWALL_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" (хз работает ли ето в 7ке) | |
options MATH_EMULATE | #эмуляция mатеметического сопроцессора сейчас он есть во всех процах, поэтому не нужно | |
options INET | # поддержка сети, конкретно протокола TCP/IP (если у Вас машина без сети - можете смело убирать :)) | |
options INET6 | # Протокол IP версии IPv6 | |
options FFS | #Berkeley Fast Filesystem файловая система FreeBSD | |
options FFS_ROOT | файловая система 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 | #файловая система процессов | |
options COMPAT_43 | # Cовместимость с BSD 4.3 (отдельные приложения начинают себя неадекватно вести, без этого пункта) | |
options SCSI_DELAY=15000 | #Задержка при загрузке для того, чтобы 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. для отладки | |
# следующие две опции нужны для многопроцессорных систем | ||
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 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) | |
#optionsSYM_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 | # B roadcom 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 | # Diamond Rio MP3 Player USB Ethernet, requires mii | |
#device urio | ||
#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
Ядро стало меньше почти втрое. Перезагружаемся командой shutdown -r now, и проверяем всё ли работает нормально.
Теперь рассмотрим вариант, что у вас что-то неполучилось. В простых случаях, например, не работает сеть - надо просто изменить конфиг и пересобрать ядро. Для этого можно и локально поработать недолго :) В более сложном варианте - фря не грузится вообще - такое вполне возможно, если Вы на горячую руку ампутировали что-то нужное - например подержку 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
После загрузки собираем новое ядро и снова пробуем.
---------------------------------------------------------------
machine i386 добавить(по умолчанию в 7 не указан) описывает архитектуру РК (amd64, i386, sparc) но можна и без него
------------------------------------------------------------------------
Всё прошло. Оказалось , что в 7.0 realese не надо комментировать в ядре IPv6 и потом в firewall некоторые опции видать уже встроены
(дос атак)
----------------------------------------------------------------------
config GENERIC - проверка на синтаксис вновь заполненого ядра
----------------------------------------------------------------------
после всех изменений, переходим в каталог /usr/src и выполняем следующую команду (если вы компилируете на многопроцессорной машине, имеет смысл выполнять make с ключом -j, где n – количество процессоров:)
#make -j4 buildkernel KERNCONF=kern1 && make installkernel KERNCONF=kern1
Параметр j4 означает собирать в 4 потока, то есть значительно быстрее. Если у вас не Pentium3, а хотя бы какой-нибудь dualcore тогда применение этого параметра будет целесообразны
Если вдруг новое ядро не загрузилось, тогда делаем так. При загрузке появляется 10 секундная пауза, выбираем пункт 6 и делаем такие действия
OK unload kernel_name
OK load /boot/kernel.old/kernel
OK boot
, где kernel_name - имя нового ядра при сборке
Возможно на некоторых системах вторая строчка может показывать сообщение, что ядро не найдено. Тогда можно попробовать сделать так.
OK unload kernel_name
boot /boot/kernel.old/kernel
======
unload
boot kernel.old
Таким образом ты загрузишь предыдущую версию системы. Исправь ошибки и повтори процесс установки нового ядра. Обычно со второго раза все получается =) Если же нет то загрузи GENERIC-ядро (вместо boot kernel.old, напиши boot kernel.GENERIC). Но ты особо не огорчайся, если оно не хочет компилится/работать/etc, мне пришлось перестраивать ядро 6 раз, чтобы добиться конфигурации "под себя" и "как мне удобно и нужно" =)