АЛЕКСАНДР БАЙРАК
Первые шаги в NetBSD
Часть 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 , то все встанет на свои места. Нелишним будет прочтение man useradd, там вы более подробно узнаете о значениях всех опций.
Установка нужного софта
Установить новый софт можно:
- Собрав из исходников.
- Используя пакаджи.
- Используя систему портов.
Если с первыми двумя методами все более-менее понятно, то третий способ я распишу немного подробней. Замечу только, что все пакаджи берутся с 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 архитектуры более подробно. Комментарии в нем начинаются с символа #.
- include «arch/i386/conf/std.i386» – в std.i386 хранятся некоторые опции, которые необходимы для работы NetBSD на x86 платформе.
- options INCLUDE_CONFIG_FILE – вставить содержимое файла конфигурации ядра в бинарник нового ядра.
- ident «my new kernel» – указываем имя нашего будущего ядра.
- maxusers 32 – указываем примерное количество пользователей нашей системы. Но даже если вы намерены использовать ее в гордом одиночестве, рекомендую поставить значение «с запасом».
- CPU support – указываем, какой тип процессора установлен на компьютере. Например: options I686_CPU.
CPU-related options
Опции, связанные с процессором:
- options MATH_EMULATE – эмулирование математического сопроцессора.
- options VM86 – виртуальная 8086 эмуляция.
- options USER_LDT – стоит включить, если планируется использование эмулятора WINE.
- options PERFCTRS – поддержка мониторинга некоторых счетчиков.
Если NetBSD не полностью видит память, установленную в вашем компьютере, имеет смысл воспользоваться следующими опциями.
- options REALBASEMEM= – размер базовой памяти (в Кб).
- options REALEXTMEM= – размер расширенной памяти (в Кб).
Standard system options
Стандартные опции системы:
- options UCONSOLE – пользователи могут использовать TIOCCONS (нужно для xconsole).
- options INSECURE – отключить уровни безопасности ядра.
- options RTC_OFFSET=0 – установка времени по GMT.
- options NTP – запрещение цикла фазы/частоты NTP.
- options KTRACE – системные вызовы идут через ktrace.
- options SYSVMSG – очереди сообщений, как в SysV.
- options SYSVSEM – семафоры, как в SysV.
- options SYSVSHM – разделение памяти, как в SysV.
- options LKM – возможность загружать модули ядра.
Diagnostic/debugging support options
Задаются опции поддержки диагностики и отладки.
Compatibility options
Различные опции совместимости. Также тут мы указываем поддержку запуска уже скомпилированных для других ОС программ. Например:
- options COMPAT_LINUX – совместимость с приложениями, собранными для Linux.
- options COMPAT_FREEBSD – совместимость с приложениями от FreeBSD.
File systems
Указываем, поддержку каких файловых систем мы хотим иметь. Замечу, что поддержку файловых систем можно подключать также в виде модуля ядра.
File system options
Различные опции для файловых систем:
- options QUOTA – возможность установки квот на дисковое пространство.
- options SOFTDEP – поддержка «soft updates» для файловой системы FFS. Очень рекомендую включить, потому как скорость работы с данными на жестком диске значительно возрастет.
- options NFSSERVER – стоит включить, если машина будет использоваться как NFS-сервер.
Networking options
Опции для поддержки сети:
- options GATEWAY – поддержка фовардинга пакетов.
- options INET – «базовый» набор (IP + ICMP + TCP + UDP).
- options INET6 – поддержка IPv6.
- options IPSEC – поддержка IP security.
- options MROUTING – IP multicast routing.
- options NS – поддержка XNS.
- options NSIP – XNS-туннель через IP.
- options ISO,TPIP – поддержка OSI.
- options EON – OSI-туннели через IP.
- options CCITT,LLC,HDLC – поддержка x.25 сетей.
- options NETATALK – поддержка протокола AppleTalk.
- options PPP_BSDCOMP – поддержка BSD-Compress сжатия для PPP.
- options PPP_DEFLATE – поддержка Deflate-сжатия для PPP.
- options PPP_FILTER – активный фильтр для PPP. Нужен bpf.
- options IPFILTER_LOG – поддержка ведения логов firewall.
- options IPFILTER_DEFAULT_BLOCK – запрещение прохождения всех пакетов по умолчанию.
Дальше в файле конфигурации ядра идут опции для включения вывода подробных сообщений от некоторых подсистем. Добавление этих опций может существенно увеличить размер вашего ядра. Для примера включим поддержку подробных сообщений для USB-устройств: options USBVERBOSE.
wscons options
Различные опции для консоли wscons.
- options WSEMUL_xxx – в качестве xxx вписываем, какой тип эмуляции терминала мы хотим видеть на экранах, которые автоматически создаются системой. По умолчанию VT100/VT220.
- options WS_KERNEL_FG=WSCOL_color – цвет сообщений на консоли.
- options WS_KERNEL_BG=WSCOL_color – цвет фона в консоли. По умолчанию используется черный фон и зеленые сообщения (как в «Матрице»).
- compatibility to other console drivers – совместимость с другими драйверами консоли.
- options WSDISPLAY_COMPAT_xxx – задаем совместимость, с какими драйверами консоли мы хотим иметь дело.
- options WSDISPLAY_DEFAULTSCREENS=x – количество экранов, которые система создает автоматически. Рекомендую поставить 1 или 2, почему именно будет рассказано в разделе русификация.
- options PCDISPLAY_SOFTCURSOR – использование курсора, который не мигает.
- options VGA_CONSOLE_SCREENTYPE=««80x24»» – изменение стандартного разрешения в консоли.
Kernel root file system and dump configuration
Указываем, где располагается корневая файловая система с ядром.
config netbsd root on ? type ?
Device configuration
В этой части файла конфигурации ядра мы будем конфигурировать различные устройства. Еще раз напоминаю, что в целях экономии места будут описаны только основные разделы, без комментариев к каждому устройству.
- Продвинутая система управления питания.
apm0at mainbus0
Можно также задавать различные опции. Все подробно описано в man 4 apm.
- mainboard audio chips – поддержка некоторых встроенных звуковых карт. Для примера включим поддержку ESS AudioDrive.
ess* at =pnpbios? index ?
- com port – поддержка com-порта.
com* at pnpbios? index ?
- parallel port – параллельный порт.
lpt* at pnpbios? index ?
pckbc* at pnpbios? index ?
fdc* at pnpbios? Index
- PCI bus support – поддержка шины PCI.
- Configure PCI using BIOS information – различные опции, для того чтобы шина PCI использовала информацию из BIOS.
- PCI bridges – поддержка различных PCI-мостов.
- EISA bus support – поддержка шины EISA.
- ISA bus support – поддержка шины ISA.
- PCMCIA bus support – поддержка шины PCMCIA.
- MCA bus support – поддержка шины MCA.
- ISA PCMCIA controllers – включение различных ISA PCMCIA-контроллеров.
- PCI PCMCIA controllers – включение различных PCI PCMCIA-контроллеров.
- ISA Plug-and-Play bus support – поддержка ISA PnP-шины.
- ISA Plug-and-Play PCMCIA controllers – ISA PnP PCMCIA-контроллеры.
- CardBus bridge support – поддержка CardBus-мостов.
- CardBus bus support – поддержка CardBus-шины.
- Coprocessor Support – поддержка математического сопроцессора (не отключите случайно).
- Console Devices – драйвера консоли.
- Keyboard layout configuration – конфигурация клавиатуры для нескольких языков. Русского среди них, к сожалению, нет.
- pccons-specific options – специальные pccons-опции.
- options XSERVER_DDB – PF12 – переведет вас в DDB, когда будет запущен X-сервер.
- options XSERVER – поддержка X-сервера.
- Контроллер клавиатуры.
pckbc0 at isa?
pckbd* at pckbc?
pms* at pckbc?
- Serial Devices – последовательные устройства.
- PCI serial interfaces – PCI-последовательные интерфейсы.
- ISA Plug-and-Play serial interfaces – ISA PnP-последовательные интерфейсы.
- PCMCIA serial interfaces – PCMCIA-последовательные интерфейсы.
- CardBus serial interfaces – CardBus-последовательные интерфейсы.
- ISA serial interfaces – последовательные интерфейсы для ISA.
- MCA serial interfaces – последовательные интерфейсы для MCA.
- Parallel Printer Interfaces – параллельные интерфейсы для принтеров.
- PCI parallel printer interfaces – PCI-параллельный интерфейс для принтеров.
- ISA parallel printer interfaces – ISA-параллельный интерфейс для принтеров.
- Стандартный параллельный порт:
lpt0 at isa? port 0x378 irq 7
- Hardware monitors – различные системные мониторы. (Естественно, не те, на которых мы видим выводимую информацию, а те, которые занимаются мониторингом состояния чего бы то ни было).
- I2O devices – различные I2O-устройства.
- SCSI Controllers and Devices – различные SCSI-контроллеры и устройства.
- PCI SCSI controllers – PCI SCSI-контроллеры.
- EISA SCSI controllers – EISA SCSI-контроллеры.
- PCMCIA SCSI controllers – PCMCIA SCSI-контроллеры.
- ISA Plug-and-Play SCSI controllers – ISA PnP SCSI-контроллеры.
- ISA SCSI controllers – ISA SCSI-контроллеры.
- CardBus SCSI cards – SCSI CarBus-карты.
- MCA SCSI cards – SCSI MCA-карты.
- SCSI bus support – поддержка шины SCSI.
- SCSI devices – различные SCSI-устройства.
sd* at scsibus? target ? lun ?
- SCSI-ленточные устройства:
st* at scsibus? target ? lun ?
cd* at scsibus? target ? lun ?
- SCSI-«автосменщики» чего-нибудь:
ch* at scsibus? target ? lun ?
- SCSI-«автовкладыватели» чего-нибудь:
ses* at scsibus? target ? lun ?
ss* at scsibus? target ? lun ?
- Неизвестные SCSI-устройства:
uk* at scsibus? target ? lun ?
- RAID controllers and devices – различные RAID-контроллеры и устройства.
- ISA Plug-and-Play IDE controllers – ISA PnP IDE-контроллеры.
- PCMCIA IDE controllers – PCMCIA IDE-контроллеры. Также есть поддержка некоторых ISA ST506, ESDI и IDE-контроллеров.
- IDE drives – IDE-устройства.
- ATAPI bus support – поддержка ATAPI-шины.
- ATAPI devices – различные ATAPI-устройства.
cd* at atapibus? drive ? flags 0x0000
sd* at atapibus? drive ? flags 0x0000
- TAPI-ленточные устройства:
st* at atapibus? drive ? flags 0x0000
- Неизвестные устройства для шины ATAPI:
uk* at atapibus? drive ? flags 0x0000
- Miscellaneous mass storage devices – различные устройства для хранения информации.
- ISA floppy – поддержка флопов.
- Стандартный контроллер для флопа:
fdc0 at isa? port 0x3f0 irq 6 drq 2
- ISA CD-ROM devices – CD-ROM, подключенные к ISA-устройствам.
- ISA tape devices – различные ленточные устройства, подключенные к ISA-шине.
- MCA ESDI devices – различные MCA ESDI-устройства.
- Network Interfaces – различные сетевые карты.
- PCI network interfaces – PCI-сетевые карты.
- EISA network interfaces – EISA-сетевые карты.
- ISA Plug-and-Play network interfaces – ISA PnP-сетевые карты.
- PCMCIA network interfaces – PCMCIA-сетевые карты.
- ISA network interfaces – ISA-сетевые карты.
- CardBus network cards – CarBus-сетевые карты.
- MCA network cards – MCA-сетевые карты.
- MII/PHY support – поддержка различных MII/PHY-устройств.
- USB Controller and Devices – различные USB-контроллеры и устройства.
- PCI USB controllers – PCI USB-контроллеры.
- USB bus support – поддержка шины USB.
- USB Hubs – USB-хабы.
- USB HID device – USB HID-устройства.
- USB Mice – USB-мышки.
- USB Keyboards – USB-клавиатуры.
- USB Printer – USB-принтеры.
- USB Modem – USB-модемы.
- USB Mass Storage – устройства хранения информации на USB.
- USB audio – USB-звуковые карты.
- USB MIDI – USB MIDI-устройства.
- USB IrDA – USB IrDA-устройства.
- USB Ethernet adapters – USB-сетевые карты.
- Serial adapters – различные последовательные USB-адаптеры.
- USB scanners – USB-сканеры и сканеры, которые используют эмуляцию SCSI.
- USB Generic driver – USB-драйвер.
- Audio Devices – различные звуковые карты.
- PCI audio devices – PCI-звуковые карты.
- ISA Plug-and-Play audio devices – ISA PnP-звуковые карты.
- ISA audio devices – ISA-звуковые карты.
- PCMCIA audio devices – PCMCIA-звуковые карты.
- Audio support – поддержка звука для вышеперечисленных карт.
- MPU 401 UARTs – различные MPU 410 карты.
- MIDI support – поддержка MIDI.
spkr0 at pcppi?
- FM-Radio devices – различные FM-тюнеры.
- ISA radio devices – ISA FM-тюнеры.
- PCI radio devices – PCI FM-тюнеры.
- TV cards – TV-тюнеры.
- Mice – различные мышки.
- Joysticks – различные джойстики.
- ISA Plug-and-Play joysticks – ISA PnP-джойстики.
- PCI joysticks – PCI-джойстики.
- ISA joysticks – ISA-джойстики.
- Pseudo-Devices – различные псевдоустройства.
- disk/mass storage pseudo-devices – псевдоустройства для хранения информации.
- pseudo-device ccd – concatenated/striped disk devices.
- pseudo-device raid – RAIDframe disk drive.
- options RAID_AUTOCONFIG – автоконфигурирование RAID-компонентов.
- pseudo-device md – поддержка дисков в память – ramdrive.
- pseudo-device vnd – похожий на диски интерфейс для файлов.
- network pseudo-devices – сетевые псевдоустройства.
- pseudo-device bpfilter – берклинский пакетный фильтр.
- pseudo-device ipfilter – firewall + NAT.
- pseudo-device loop – интерфейс обратной петли (127.0.0.1).
- pseudo-device ppp – протокол Point-to-Point.
- pseudo-device pppoe – поддержка PPP через Ethernet.
- pseudo-device sl – Serial line IP.
- pseudo-device irframetty – IrDA frame line discipline.
- pseudo-device tun – сетевые туннели через tty.
- pseudo-device gre – L3 через IP-туннель.
- pseudo-device gif – IPv[46] через IPv[46]-туннель.
- pseudo-device faith – трансляция IPv[46] tcp релея.
- pseudo-device stf – инкапсуляции IPv6 через IPv4
- pseudo-device vlan – поддержка VLAN.
- pseudo-devic bridge – сетевой мост.
- miscellaneous pseudo-devices – другие псевдоустройства.
- pseudo-device pty – псевдотерминалы.
- pseudo-device rnd – поддержка /dev/random.
- pseudo-device clockctl – контроль часов.
- wscons pseudo-devices – псевдоустройства wcons.
- pseudo-device wsmux – мультиплексор клавиатуры и мышки.
- 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 работает фильтрация по номеру порта. Можно использовать некоторые операции над номерами портов.
- = или eq – истина, если номер порта равен передаваемому значению.
- > или gt – истина, если номер порта больше, чем передаваемое значение.
- < или lt – истина, если номер порта меньше, чем передаваемое значение.
- != или ne – истина, если номер порта не равен передаваемому значению.
- => или ge – истина, если номер порта больше или равен переданному значению.
- <= или le – истина, если номер порта меньше или равен переданному значению.
Возможно сравнение диапазонов:
- N <> N1 – истина, если порт меньше, чем N, или больше, чем N1.
- N >< N1 – истина, если порт больше, чем N, и меньше, чем N1.
Также в этом firewall есть поддержка фильтрации по TCP-флагам, возможность ответа на заблокированный пакет, keep-state-фильтрация. В общем поддерживается все, что нужно для гибкой настройки правил, и даже немного больше. Для примера напишем простенький набор правил firewall.
Разрешаем весь icmp-трафик:
pass in on proto icmp all
pass out on proto icmp all
Открываем порты для работы с SSH:
pass in proto tcp from any to port = 22
pass out proto tcp from to any port = 22
Открываем порты для работы с DNS:
pass in proto udp from any to port = 53
pass out proto udp from to any port = 53
Вместо xx указываем сетевой интерфейс, вместо IP указываем наш IP-адрес. Я умышленно привел такой простой пример, так как написание правил для firewall – дело достаточно личное, каждый их составляет так, как ему удобно.
Но, я думаю, вышеприведенного примера вполне достаточно, для того чтобы на его основе построить более сложный набор правил. Для получения более подробной информации о IPFILTER очень рекомендую почитать IPFILTER HOW-TO (http://www.unixcircle.com/ipf).
Заключение
Подошла к концу первая часть статьи. Для начала изучения, по-моему, достаточно. Если этой статьей я привлек ваше внимание к NetBSD, значит моя цель несомненно выполнена.
Во второй части статьи мы рассмотрим профилирование ядра NetBSD, протестируем бинарную совместимость с FreeBSD и Linux, научимся поддерживать систему в актуальном состоянии. Также в мои планы входит рассказать о криптографической файловой системе NetBSD, не будет обойден вниманием и вариант использования NetBSD как desktop-системы. Но обо всем этом в следующий раз. Я буду рад всем уточнениям, дополнениям и просто отзывам об этой статье. Пишите!