Часть 1
Александр Байрак
В этой статье речь пойдет об ОС NetBSD. К сожалению, документации на
русском языке по этой ОС практически нет. Как-то не прижилась NetBSD в нашей
стране, нельзя сказать, что эту систему вообще никто не использует, но все же
количество людей, имеющих с ней дело, очень невелико.
Хотя на Западе NetBSD достаточно популярна. В принципе это легко объяснить.
Главный козырь NetBSD в ее многоплатформенности, она одинаково хорошо будет
работать как на карманных компьютерах типа HP Jordana 728, так и на больших
64-разрядных Alpha. Конечно, она работает и на x86. И если за рубежом
количество машин с отличной от x86 архитектурой достаточно велико, у нас же
если где и есть SPARC или MIPS, то люди в основном предпочитают использовать на
них их родные ОС. На x86 NetBSD тоже почему-то ставят нечасто, вроде как и
«остальных» систем достаточно, а разбираться с чем-то новым у кого времени, а у
кого и желания нет. До недавнего времени в рунете была только одна статья,
посвященная NetBSD (http://www.linuxshop.ru/unix4all/?cid=28&id=325).
Не так давно Андрей Бешков написал отличную статью, посвященную этой системе
(смотри августовский номер журнала за 2003 г. или http://onix.opennet.ru/netbsd/netbsd.html).
Я вам очень советую ее почитать, в статье в простой и доступной форме расписан
процесс установки ОС. После этого интерес к системе возрос, все чаще на форумах
юниксоидов можно встретить вопросы и, что самое главное, ответы, посвященные NetBSD.
Эта система заинтересовала и меня, результат моего изучения перед вами. За
неимением компьютеров с отличной от x86 архитектурой все мои эксперименты с NetBSD
проводились на обычном PC (Cel 433 МГц/64 Мб RAM). Я предполагаю, что NetBSD в
том или ином виде уже установлена на вашем компьютере. Далее нам понадобится
только диск с исходниками системы. Взять образ этого диска можно тут: ftp://ftp.netbsd/pub/NetBSD/iso.
Далее выбираете версию системы, которая установлена у вас, и списываете файл sourcecd.iso.
Afterboot, или Что следует
сделать сразу после первой загрузки
Вполне логично сразу после загрузки сконфигурировать сеть. Делается это так:
в /etc/rc.conf (предварительно изучив /etc/defaults/rc.conf) пишем:
hostname=”you.host.name”
Задается имя вашего хоста:
defaultrouter=”x.x.x.x”
Указывается IP шлюза:
ifconfig_zz=”x.x.x.x/xx”
В качестве zz необходимо вписать имя вашего
сетевого интерфейса. (Если точно не знаете, как он будет называться в NetBSD,
его название можно посмотреть с помощью команды dmesg.) Вместо иксов
соответственно вписать ваш IP-адрес. Маску подсети можно указать как в
«дробном» виде (/xx), так и в виде netmask x.x.x.x.
IP DNS-сервера(ов) прописывается в /etc/resolv.conf,
синтаксис таков:
netmask x.x.x.x
Должен заметить, что есть альтернативный вариант
указания имени хоста и IP шлюза. Имя хоста можно поместить в файл /etc/myname.
А IP шлюза – в /etc/mygate. Делайте, как вам удобно.
В /etc/rc.conf не забудьте указать:
sshd=YES
После этого мы можем заходить удаленно на нашу NetBSD
через ssh.
Следующим шагом является заведение нового
пользователя. Не всегда же под аккаунтом root работать.
# useradd –g groupname –d /path/to/homedir
–m –p yourpassword –s /path/to/shell username
Рассмотрим, что и как мы создали. После опции –g
указывается имя группы, к которой будет принадлежать новый пользователь. Должен
заметить, что с помощью опции -g бесполезно пытаться добавить нового пользователя
в группу wheel, надо напрямую его вписать в /etc/group. Тогда он действительно
окажется в группе wheel. После опции -d указывается путь до домашнего каталога
пользователя. После -p указывается новый пароль. После опции -s указывается
путь к командному интерпретатору.
Если эту опцию не задать, будет использоваться
стандартный /bin/sh. Который, впрочем, позже можно будет сменить на что-нибудь
другое при помощи команды chsh.
Мною была замечена интересная вещь – какой бы password
ни указывался, после опции –p useradd ругается:
Password `testpassword'
is invalid: setting it to `*'
Это не беда, если его поменять с помощью команды passwd
<username>, то все встанет на свои места. Нелишним будет прочтение man useradd,
там вы более подробно узнаете о значениях всех опций.
Установка нужного софта
Установить новый софт можно:
n Собрав из исходников.
n Используя пакаджи.
n Используя систему портов.
Если с первыми двумя методами все более-менее
понятно, то третий способ я распишу немного подробней. Замечу только, что все пакаджи
берутся с ftp://ftp.netbsd.org/pub/NetBSD/packages.
Далее выбираете, для какой версии системы и
архитектуры вы ищете нужный вам пакадж.
Для удобства можно использовать вот эту ссылку: ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/README.html.
Здесь весь софт разделен на тематические разделы (как в коллекции портов). Для
меня вторая ссылка более удобная, благодаря наличию комментариев к каждому пакаджу
с указанием всех зависимостей.
Установить пакадж просто:
#pkg_add packagename.tar.gz
Замечу, что заранее пакадж можно и не списывать,
а команде pkg_add указать точный url, где лежит пакадж, который вы желаете
установить. Например:
#pkg_add
ftp://ftp.netbsd.org/pub/NetBSD/packages/1.6.1/i386/shells/bash-2.05.2.tgz
Это командой мы установим пакадж с bash для 1.6.1
версии NetBSD, работающей на x86 машине.
Важное замечание: по умолчанию исполняемые файлы пакаджей
помещаются в /usr/pkg/bin.
Система портов в NetBSD тоже называется пакаджами,
что вносит некоторую неразбериху. Получается, что есть binary-packages, которые
уже кто-то скомпилировал до нас, и которые только и остается что установить
командой pkg_add, и есть «порты-пакаджи», которые списываются из сети в виде исходников,
а компилируются уже на вашей машине. Чтобы не вносить дальнейшую путаницу,
далее по тексту «порт-пакадж» буду называть просто порт.
Для того чтобы начать работать с коллекцией
портов, берем с уже знакомого нам диска файл pkgsrc.tgz.
Самую последнюю версию этого файла можно списать
на ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-current/tar_files/pkgsrc.tar.gz.
Распакуем:
# tar zxvpf pkgsrc.tar.gz –c
/usr
После распаковки архива в /usr/pkgsrc/ появляются
каталоги, разделенные по группам (audio/www/x11), в которых соответственно
содержатся каталоги, названные по имени программ с файлами, необходимыми для
установки по сети. Установка нужной программы происходит следующим образом (для
примера установим редактор ne):
#cd /usr/pkgsrc/editors/ne
#make install
И начинается процесс установки, система списывает
из сети исходник нужной программы, если для компиляции требуется какая-либо
библиотека, то она также будет списана. После этого следует компиляция. Вот и
все. Правда, просто? После того как система установила нужный порт, для
удаления временных файлов выполняем команду.
#make clean
Все исходники, которые были списаны системой из
сети, хранятся в /usr/pkgsrc/distfiles.
Перекомпиляция ядра
Я думаю, желание собрать ядро под себя и со своими предпочтениями вполне
закономерное. Из стандартного хочется выкинуть все ненужное (а выкинуть, я
думаю, много чего можно, GENERIC-ядро весит ~ 6.3 Мб!), и соответственно
добавить нужное. Для перекомпиляции ядра нам понадобятся непосредственно исходники
ядра. Я уже упомянул о sourcecd.iso, на котором находятся исходники всей
системы. Вот сейчас из этого самого образа мы берем нужный нам syssrc.tgz.
Распакуем:
# tar zxvpf syssrc.tgz –c /
Все, теперь в /usr/src/sys есть все, что нам
нужно для дальнейшей работы.
Надо заметить, что в / есть ссылка на этот
каталог (/sys-> /usr/src/sys/). Перейдем в /usr/src/sys/arch – тут выбираем
нужную нам платформу/архитектуру. Для меня это i386, которая как-то затерялась
среди всех остальных поддерживаемых платформ. Всего их 56 штук!
После нахождения каталога с нужной нам
архитектурой переходим в его подкаталог – conf, именно тут лежат файлы
конфигурации ядра. Для i386 представлено с десяток различных готовых файлов
конфигурации, созданных для разных задач. Ради интереса их стоит посмотреть.
Файл конфигурации стандартного ядра находится в
файле GENERIC. Очень жаль, что разработчики не сделали аналога файла LINT
(такого, как в FreeBSD), в котором с подробными комментариями перечислены все
возможные параметры, допустимые в файле конфигурации ядра. Ну да ладно, и так
разберемся.
# cp GENERIC newkernel
После этого с помощью своего любимого текстового
редактора начинаем править под наши нужды файл конфигурации нового ядра.
Разберем структуру и содержимое
файла конфигурации ядра для x86 архитектуры более подробно. Комментарии в нем
начинаются с символа #.
n include «arch/i386/conf/std.i386» – в std.i386
хранятся некоторые опции, которые необходимы для работы NetBSD на x86
платформе.
n options INCLUDE_CONFIG_FILE – вставить
содержимое файла конфигурации ядра в бинарник нового ядра.
n ident «my new kernel» – указываем имя нашего
будущего ядра.
n maxusers 32 – указываем примерное количество
пользователей нашей системы. Но даже если вы намерены использовать ее в гордом
одиночестве, рекомендую поставить значение «с запасом».
n CPU support – указываем, какой тип процессора
установлен на компьютере. Например: options I686_CPU.
CPU-related options
Опции, связанные с процессором:
n options MATH_EMULATE – эмулирование
математического сопроцессора.
n options VM86 – виртуальная 8086 эмуляция.
n options USER_LDT – стоит включить, если
планируется использование эмулятора WINE.
n options PERFCTRS – поддержка мониторинга
некоторых счетчиков.
Если NetBSD не полностью видит
память, установленную в вашем компьютере, имеет смысл воспользоваться
следующими опциями.
n options REALBASEMEM= – размер базовой памяти (в
Кб).
n options REALEXTMEM= – размер расширенной памяти
(в Кб).
Standard system options
Стандартные опции системы:
n options UCONSOLE – пользователи могут
использовать TIOCCONS (нужно для xconsole).
n options INSECURE – отключить уровни
безопасности ядра.
n options RTC_OFFSET=0 – установка времени по
GMT.
n options NTP – запрещение цикла фазы/частоты
NTP.
n options KTRACE – системные вызовы идут через ktrace.
n options SYSVMSG – очереди сообщений, как в SysV.
n options SYSVSEM – семафоры, как в SysV.
n options SYSVSHM – разделение памяти, как в SysV.
n options LKM – возможность загружать модули
ядра.
Diagnostic/debugging support options
Задаются опции поддержки диагностики и отладки.
Compatibility options
Различные опции совместимости. Также тут мы указываем
поддержку запуска уже скомпилированных для других ОС программ. Например:
n options COMPAT_LINUX – совместимость с
приложениями, собранными для Linux.
n options COMPAT_FREEBSD – совместимость с
приложениями от FreeBSD.
File systems
Указываем, поддержку каких файловых систем мы хотим иметь. Замечу, что
поддержку файловых систем можно подключать также в виде модуля ядра.
File system options
Различные опции для файловых систем:
n options QUOTA – возможность установки квот на
дисковое пространство.
n options SOFTDEP – поддержка «soft updates» для
файловой системы FFS. Очень рекомендую включить, потому как скорость работы с
данными на жестком диске значительно возрастет.
n options NFSSERVER – стоит включить, если машина
будет использоваться как NFS-сервер.
Networking options
Опции для поддержки сети:
n options GATEWAY – поддержка фовардинга пакетов.
n options INET – «базовый» набор (IP + ICMP + TCP
+ UDP).
n options INET6 – поддержка IPv6.
n options IPSEC – поддержка IP security.
n options MROUTING – IP multicast routing.
n options NS – поддержка XNS.
n options NSIP – XNS-туннель через IP.
n options ISO,TPIP – поддержка OSI.
n options EON – OSI-туннели через IP.
n options CCITT,LLC,HDLC – поддержка x.25 сетей.
n options NETATALK – поддержка протокола AppleTalk.
n options PPP_BSDCOMP – поддержка BSD-Compress
сжатия для PPP.
n options PPP_DEFLATE – поддержка Deflate-сжатия
для PPP.
n options PPP_FILTER – активный фильтр для PPP.
Нужен bpf.
n options IPFILTER_LOG – поддержка ведения логов firewall.
n options IPFILTER_DEFAULT_BLOCK – запрещение
прохождения всех пакетов по умолчанию.
Дальше в файле конфигурации ядра идут опции для
включения вывода подробных сообщений от некоторых подсистем. Добавление этих
опций может существенно увеличить размер вашего ядра. Для примера включим
поддержку подробных сообщений для USB-устройств: options USBVERBOSE.
wscons options
Различные опции для консоли wscons.
n options WSEMUL_xxx – в качестве xxx вписываем,
какой тип эмуляции терминала мы хотим видеть на экранах, которые автоматически
создаются системой. По умолчанию VT100/VT220.
n options WS_KERNEL_FG=WSCOL_color – цвет
сообщений на консоли.
n options WS_KERNEL_BG=WSCOL_color – цвет фона в
консоли. По умолчанию используется черный фон и зеленые сообщения (как в
«Матрице»).
n compatibility to other console drivers –
совместимость с другими драйверами консоли.
n options WSDISPLAY_COMPAT_xxx – задаем
совместимость, с какими драйверами консоли мы хотим иметь дело.
n options WSDISPLAY_DEFAULTSCREENS=x – количество
экранов, которые система создает автоматически. Рекомендую поставить 1 или 2,
почему именно будет рассказано в разделе русификация.
n options PCDISPLAY_SOFTCURSOR – использование
курсора, который не мигает.
n options VGA_CONSOLE_SCREENTYPE=«\«80x24\»» –
изменение стандартного разрешения в консоли.
Kernel root file system and dump
configuration
Указываем, где располагается корневая файловая система с ядром.
config netbsd root on ? type
?
Device configuration
В этой части файла конфигурации ядра мы будем
конфигурировать различные устройства. Еще раз напоминаю, что в целях экономии
места будут описаны только основные разделы, без комментариев к каждому
устройству.
n Продвинутая система управления питания.
apm0at mainbus0
Можно также
задавать различные опции. Все подробно описано в man 4 apm.
n mainboard audio chips – поддержка некоторых
встроенных звуковых карт. Для примера включим поддержку ESS AudioDrive.
ess* at =pnpbios? index ?
n com port – поддержка com-порта.
com* at pnpbios? index ?
n parallel port – параллельный порт.
lpt* at pnpbios? index ?
n Клавиатуры и мышки:
pckbc* at pnpbios? index ?
n Контроллер флопа:
fdc* at pnpbios? Index
n PCI bus support – поддержка
шины PCI.
n Configure PCI using BIOS information –
различные опции, для того чтобы шина PCI использовала информацию из BIOS.
n PCI bridges – поддержка различных PCI-мостов.
n EISA bus support – поддержка шины EISA.
n ISA bus support – поддержка шины ISA.
n PCMCIA bus support – поддержка шины PCMCIA.
n MCA bus support – поддержка шины MCA.
n ISA PCMCIA controllers – включение различных
ISA PCMCIA-контроллеров.
n PCI PCMCIA controllers – включение различных
PCI PCMCIA-контроллеров.
n ISA Plug-and-Play bus support – поддержка ISA
PnP-шины.
n ISA Plug-and-Play PCMCIA controllers – ISA PnP
PCMCIA-контроллеры.
n CardBus bridge support – поддержка
CardBus-мостов.
n CardBus bus support – поддержка CardBus-шины.
n Coprocessor Support – поддержка математического
сопроцессора (не отключите случайно).
n Console Devices – драйвера консоли.
n Keyboard layout configuration – конфигурация
клавиатуры для нескольких языков. Русского среди них, к сожалению, нет.
n pccons-specific options – специальные
pccons-опции.
n options XSERVER_DDB – PF12 –
переведет вас в DDB, когда будет запущен X-сервер.
n options XSERVER – поддержка
X-сервера.
n Контроллер клавиатуры.
pckbc0 at isa?
n Клавиатура.
pckbd* at pckbc?
n PS/2 мышка для wsmouse.
pms* at pckbc?
n Serial Devices – последовательные устройства.
n PCI serial interfaces – PCI-последовательные
интерфейсы.
n ISA Plug-and-Play serial interfaces – ISA
PnP-последовательные интерфейсы.
n PCMCIA serial interfaces –
PCMCIA-последовательные интерфейсы.
n CardBus serial interfaces –
CardBus-последовательные интерфейсы.
n ISA serial interfaces – последовательные
интерфейсы для ISA.
n MCA serial interfaces – последовательные
интерфейсы для MCA.
n Parallel Printer Interfaces – параллельные
интерфейсы для принтеров.
n PCI parallel printer interfaces –
PCI-параллельный интерфейс для принтеров.
n ISA parallel printer interfaces –
ISA-параллельный интерфейс для принтеров.
n Стандартный параллельный порт:
lpt0 at isa? port
0x378 irq 7
n Hardware monitors – различные системные
мониторы. (Естественно, не те, на которых мы видим выводимую информацию, а те,
которые занимаются мониторингом состояния чего бы то ни было).
n I2O devices – различные I2O-устройства.
n SCSI Controllers and Devices – различные
SCSI-контроллеры и устройства.
n PCI SCSI controllers – PCI SCSI-контроллеры.
n EISA SCSI controllers – EISA SCSI-контроллеры.
n PCMCIA SCSI controllers – PCMCIA
SCSI-контроллеры.
n ISA Plug-and-Play SCSI controllers – ISA PnP
SCSI-контроллеры.
n ISA SCSI controllers – ISA SCSI-контроллеры.
n CardBus SCSI cards – SCSI CarBus-карты.
n MCA SCSI cards – SCSI MCA-карты.
n SCSI bus support – поддержка шины SCSI.
n SCSI devices – различные SCSI-устройства.
n SCSI-диски:
sd* at scsibus? target
? lun ?
n SCSI-ленточные устройства:
st* at scsibus? target
? lun ?
n SCSI CDROM:
cd* at scsibus? target
? lun ?
n SCSI-«автосменщики»
чего-нибудь:
ch* at scsibus? target
? lun ?
n SCSI-«автовкладыватели»
чего-нибудь:
ses* at scsibus? target
? lun ?
n SCSI-сканеры:
ss* at scsibus? target
? lun ?
n Неизвестные SCSI-устройства:
uk* at scsibus? target
? lun ?
n RAID controllers and devices – различные
RAID-контроллеры и устройства.
n ISA Plug-and-Play IDE controllers – ISA PnP
IDE-контроллеры.
n PCMCIA IDE controllers – PCMCIA
IDE-контроллеры. Также есть поддержка некоторых ISA ST506, ESDI и
IDE-контроллеров.
n IDE drives – IDE-устройства.
n ATAPI bus support – поддержка ATAPI-шины.
n ATAPI devices – различные ATAPI-устройства.
n ATAPI CDROM:
cd* at atapibus? drive
? flags 0x0000
n ATAPI HDD:
sd* at atapibus? drive
? flags 0x0000
n TAPI-ленточные устройства:
st* at atapibus? drive
? flags 0x0000
n Неизвестные устройства для
шины ATAPI:
uk* at atapibus? drive
? flags 0x0000
n Miscellaneous mass storage devices – различные
устройства для хранения информации.
n ISA floppy – поддержка флопов.
n Стандартный контроллер для
флопа:
fdc0 at isa? port
0x3f0 irq 6 drq 2
n ISA CD-ROM devices – CD-ROM, подключенные к
ISA-устройствам.
n ISA tape devices – различные ленточные
устройства, подключенные к ISA-шине.
n MCA ESDI devices – различные MCA
ESDI-устройства.
n Network Interfaces – различные сетевые карты.
n PCI network interfaces – PCI-сетевые карты.
n EISA network interfaces – EISA-сетевые карты.
n ISA Plug-and-Play network interfaces – ISA
PnP-сетевые карты.
n PCMCIA network interfaces – PCMCIA-сетевые
карты.
n ISA network interfaces – ISA-сетевые карты.
n CardBus network cards – CarBus-сетевые карты.
n MCA network cards – MCA-сетевые карты.
n MII/PHY support – поддержка различных
MII/PHY-устройств.
n USB Controller and Devices – различные
USB-контроллеры и устройства.
n PCI USB controllers – PCI USB-контроллеры.
n USB bus support – поддержка шины USB.
n USB Hubs – USB-хабы.
n USB HID device – USB HID-устройства.
n USB Mice – USB-мышки.
n USB Keyboards – USB-клавиатуры.
n USB Printer – USB-принтеры.
n USB Modem – USB-модемы.
n USB Mass Storage – устройства хранения
информации на USB.
n USB audio – USB-звуковые карты.
n USB MIDI – USB MIDI-устройства.
n USB IrDA – USB IrDA-устройства.
n USB Ethernet adapters – USB-сетевые карты.
n Serial adapters – различные последовательные
USB-адаптеры.
n USB scanners – USB-сканеры и сканеры, которые
используют эмуляцию SCSI.
n USB Generic driver – USB-драйвер.
n Audio Devices – различные звуковые карты.
n PCI audio devices – PCI-звуковые карты.
n ISA Plug-and-Play audio devices – ISA
PnP-звуковые карты.
n ISA audio devices – ISA-звуковые карты.
n PCMCIA audio devices – PCMCIA-звуковые карты.
n Audio support – поддержка звука для
вышеперечисленных карт.
n MPU 401 UARTs – различные MPU 410 карты.
n MIDI support – поддержка MIDI.
n PC-спикер:
spkr0 at pcppi?
n FM-Radio devices – различные FM-тюнеры.
n ISA radio devices – ISA FM-тюнеры.
n PCI radio devices – PCI FM-тюнеры.
n TV cards – TV-тюнеры.
n Mice – различные мышки.
n Joysticks – различные джойстики.
n ISA Plug-and-Play joysticks – ISA
PnP-джойстики.
n PCI joysticks – PCI-джойстики.
n ISA joysticks – ISA-джойстики.
n Pseudo-Devices – различные псевдоустройства.
n disk/mass storage pseudo-devices –
псевдоустройства для хранения информации.
n pseudo-device ccd – concatenated/striped
disk devices.
n pseudo-device raid – RAIDframe
disk drive.
n options RAID_AUTOCONFIG – автоконфигурирование
RAID-компонентов.
n pseudo-device md – поддержка
дисков в память – ramdrive.
n pseudo-device vnd – похожий на
диски интерфейс для файлов.
n network pseudo-devices – сетевые
псевдоустройства.
n pseudo-device bpfilter – берклинский
пакетный фильтр.
n pseudo-device ipfilter – firewall
+ NAT.
n pseudo-device loop – интерфейс
обратной петли (127.0.0.1).
n pseudo-device ppp – протокол Point-to-Point.
n pseudo-device pppoe –
поддержка PPP через Ethernet.
n pseudo-device sl – Serial line
IP.
n pseudo-device irframetty – IrDA
frame line discipline.
n pseudo-device tun – сетевые
туннели через tty.
n pseudo-device gre – L3 через
IP-туннель.
n pseudo-device gif – IPv[46]
через IPv[46]-туннель.
n pseudo-device faith –
трансляция IPv[46] tcp релея.
n pseudo-device stf –
инкапсуляции IPv6 через IPv4
n pseudo-device vlan – поддержка
VLAN.
n pseudo-devic bridge – сетевой
мост.
n miscellaneous pseudo-devices – другие псевдоустройства.
n pseudo-device pty – псевдотерминалы.
n pseudo-device rnd – поддержка
/dev/random.
n pseudo-device clockctl –
контроль часов.
n wscons pseudo-devices – псевдоустройства wcons.
n pseudo-device wsmux –
мультиплексор клавиатуры и мышки.
n pseudo-device wsfont – /dev/wsfont.
После того как закомментировано все ненужное и
добавлено нужное, приступаем к сборке нового ядра.
#config newkernel
Если никаких ошибок не выявлено, то:
#cd ../compile/newkernel/
#make depend && make
Начинается непосредственно компиляция. Процесс
компиляции проходит достаточно быстро, у меня на Cel466/64 Мб RAM она заняла
порядка 15 минут. На PIII-550/320 Мб RAM – меньше 5 минут.
Если компиляция прошла успешно, устанавливаем
новое ядро.
#cp /netbsd /netbsd.old
Делаем резервную копию старого ядра, которое
располагается в корневом разделе.
#cp netbsd /
Копируем новое ядро (которое находится в текущем
каталоге) в корень. Перезагружаемся:
#reboot
Если новое ядро не загружается по каким-либо
причинам, нам нужно загрузить старое, работоспособное ядро, недаром мы его
сохранили. В самом начале загрузки NetBSD, когда идет обратный отсчет времени,
нажимаем любую клавишу, отличную от enter, и попадаем в boot-меню. Далее
вводим:
netbsd.old –s
Вот и все, система загружается со старым ядром.
Смотрите внимательно файл конфигурации ядра и думайте, что вы не так сделали.
Да, вернемся к размерам ядра, после того как я первый раз пересобрал ядро, его
размер уменьшился до ~1.5 Мб. Потом удалось сделать рабочее ядро размером ~1.2 Мб,
что почти в 5.5 раз меньше, чем стандартное ядро.
В качестве дополнения о перекомпиляции ядра я
вкратце хотел бы рассказать о маленькой утилите, недавно обнаруженной мной в
коллекции портов – adjustkernel. Программа на основе имеющегося оборудования
сама создаст файл конфигурации ядра. Рассмотрим, как она работает.
#dmesg > dmesg.file
Поместим вывод команды dmesg в файл dmesg.file.
На основе этих данных и будет строиться наше новое ядро. Так же в текущий
каталог положите ваш файл конфигурации ядра, ну или GENERIC.
#adjustkernel –mesg dmesg.file
–outfile newkernel –file GENERIC
Я решил посмотреть, какой файл конфигурации
программа создаст на основе GENERIC-файла. В принципе файл конфигурации
получился вполне работоспособный. Но в любом случае ему требуется доводка
руками. Ведь программа не знает, нужна ли нам на этой машине поддержка IPv6 или
файловой системы CODA. А в остальном только положительные отзывы.
Настройка firewall
В качестве firewall в NetBSD используется IPFILTER. Для начала добавляем в /etc/rc.conf
строку: IPFIREWALL=YES. Удостоверимся, что ядро собрано с опцией IPFILTER_
DEFAULT_BLOCK, как видно, эта опция служит для того, чтобы по умолчанию все
пакеты отвергались. Мне кажется, такой подход при конфигурировании firewall
единственно правильный – сначала все закроем, а потом откроем только то, что
нам нужно. Правила firewall в файле /etc/ipf.conf. Давайте разберем синтаксис
написания правил для IPFILTER. Для того чтобы обозначить, пропускать пакет или
нет, используются ключевые слова – pass и block. Для обозначения направления, в
котором проходит пакет, используются ключевые слова in и out. Интерфейс
указывается ключевым словом on, за которым следует название интерфейса. Маска
сети задается как в «дробном», так и в виде xxx.xxx.xxx.xxx. Имеется поддержка
фильтрации по имени протокола. Узнать полный список протоколов можно из файла /etc/protocols.
Поддерживается блокировка фрагментированных
IP-пакетов. Для TCP/UDP работает фильтрация по номеру порта. Можно использовать
некоторые операции над номерами портов.
n = или eq – истина, если номер порта равен
передаваемому значению.
n > или gt – истина, если номер порта больше,
чем передаваемое значение.
n < или lt – истина, если номер порта меньше,
чем передаваемое значение.
n != или ne – истина, если номер порта не равен передаваемому
значению.
n => или ge – истина, если номер порта больше
или равен переданному значению.
n <= или le – истина, если номер порта меньше
или равен переданному значению.
Возможно сравнение диапазонов:
n N <> N1 – истина, если порт меньше, чем
N, или больше, чем N1.
n N >< N1 – истина, если порт больше, чем
N, и меньше, чем N1.
Также в этом firewall есть поддержка фильтрации
по TCP-флагам, возможность ответа на заблокированный пакет,
keep-state-фильтрация. В общем поддерживается все, что нужно для гибкой
настройки правил, и даже немного больше. Для примера напишем простенький набор
правил firewall.
Разрешаем весь icmp-трафик:
pass in on <xx> proto icmp
all
pass out on <xx> proto icmp
all
Открываем порты для работы с SSH:
pass in proto tcp from any to
<IP> port = 22
pass out proto tcp from
<IP> to any port = 22
Открываем порты для работы с DNS:
pass in proto udp from any to
<IP> port = 53
pass out proto udp from
<IP> to any port = 53
Вместо xx указываем сетевой интерфейс, вместо IP
указываем наш IP-адрес. Я умышленно привел такой простой пример, так как
написание правил для firewall – дело достаточно личное, каждый их составляет
так, как ему удобно.
Но, я думаю, вышеприведенного примера вполне
достаточно, для того чтобы на его основе построить более сложный набор правил.
Для получения более подробной информации о IPFILTER очень рекомендую почитать
IPFILTER HOW-TO (http://www.unixcircle.com/ipf).
Заключение
Подошла к концу первая часть статьи. Для начала изучения, по-моему,
достаточно. Если этой статьей я привлек ваше внимание к NetBSD, значит моя цель
несомненно выполнена.
Во второй части статьи мы рассмотрим
профилирование ядра NetBSD, протестируем бинарную совместимость с FreeBSD и Linux,
научимся поддерживать систему в актуальном состоянии. Также в мои планы входит
рассказать о криптографической файловой системе NetBSD, не будет обойден
вниманием и вариант использования NetBSD как desktop-системы. Но обо всем этом
в следующий раз. Я буду рад всем уточнениям, дополнениям и просто отзывам об
этой статье. Пишите!