Первоначальное конфигурирование FreeBSD

Процесс загрузки

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

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

Осторожно, рекурсия!

Некоторые темы, описываемые в этой главе, ссылаются на материал последующих глав. В свою очередь, эти последующие главы требуют, чтобы вы имели полное представление о том, что описывается в этой главе. Нельзя однозначно сказать, с какого места лучше начинать изучение. Если вы вообще не понимаете, о чем говорится в той или иной части этой главы, просто бегло пролистайте ее и продолжите чтение – позднее все встанет на свои места.

Сам процесс загрузки можно разделить на три основных этапа: загрузчик, запуск однопользовательского режима и запуск многопользовательского режима.

 

 

Включение питания и загрузчик

В любом i386 компьютере имеется базовая система ввода/вывода (Basic Input/Output System, BIOS), у которой достаточно ума, чтобы отыскать операционную систему на диске. (В других платформах имеется ПЗУ с микропрограммами, которые выполняют ту же самую функцию.) Если BIOS отыскивает операционную систему на диске, она передает управление компьютером этой операционной системе. Если операционная система не будет обнаружена, BIOS сообщит об этом и остановится. В большинстве BIOS операционные системы распознаются по очень примитивным признакам. Загрузочные блоки – это секторы диска, по которым BIOS компьютера распознает наличие операционной системы. В эти блоки FreeBSD записывает маленькую программу, которая запускает главную программу запуска FreeBSD, loader(8). Программа loader выводит на экран логотип FreeBSD и меню из семи пунктов:

  1. Boot FreeBSD [default] (Загрузка FreeBSD [по умолчанию])
  2. BootFreeBSDwithACPIdisabled(ЗагрузкаFreeBSDсзапретомACPI)
  3. Boot FreeBSD in safe mode (Загрузка FreeBSD в безопасном режиме)
  4. Boot FreeBSD in single-user mode (Загрузка FreeBSD в однопользовательском режиме)
  5. Boot FreeBSD with verbose logging (Загрузка FreeBSD с подробным протоколированием)
  6. Escape to loader prompt (Перейти в командную строку загрузчика)
  7. Reboot (Перезагрузка)

Если подождать 10 секунд, загрузчик автоматически перейдет к загрузке FreeBSD по умолчанию. Некоторые другие пункты меню востребованы только для отладки или устранения проблем. Не нужно стараться запоминать весь перечень пунктов меню, достаточно, чтобы вы свободно могли использовать самые основные, когда это потребуется.

Boot FreeBSD with ACPI disabled (Загрузка FreeBSD с запретом ACPI)

ACPI – Advanced Configuration and Power Interface (усовершенствованный интерфейс управления конфигурированием и энергопотреблением), стандарт конфигурирования аппаратного обеспечения, принятый Intel/Toshiba/Microsoft. Он заместил устаревшие стандарты Microsoft – APM (Advanced Power Management – усовершенствованные средства управления питанием1), PnPBIOS, таблицу MP, таблицу $PIR и целую связку стандартов еще более туманных и непонятных. Подробнее ACPI будет рассматриваться в главе 5. Этот интерфейс настроен на современное аппаратное обеспечение, но в некоторых аппаратных средствах интерфейс ACPI реализован с ошибками. С другой стороны, самые современные многопроцессорные аппаратные платформы требуют поддержки ACPI в обязательном порядке.

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

Boot FreeBSD in safe mode (Загрузка FreeBSD в безопасном режиме)

При загрузке FreeBSD в безопасном режиме активизируются лишь самые консервативные возможности операционной системы. Для жестких дисков ATA отключается поддержка DMA (Direct Memory Access – прямой доступ к памяти) и кэширования записи, тем самым ограничивается скорость их работы, но зато увеличивается устойчивость к разного рода проблемам, связанным с аппаратной частью. Запрещается использование интерфейса ACPI и не выполняется попытка активизировать слоты EISA. На платформе i386 запрещается многопроцессорная обработка. Клавиатуры с интерфейсом USB не работают в однопользовательском режиме. Безопасный режим удобно использовать для восстановления системы или ее отладки, а также для разрешения проблем, связанных с аппаратной частью.

Boot FreeBSD in singleuser mode (Загрузка FreeBSD в однопользовательском режиме)

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

Boot FreeBSD with verbose logging (Загрузка FreeBSD с подробным протоколированием)

В процессе загрузки FreeBSD получает уйму информации о компьютере. Большая часть этой информации будет не нужна вам в повседневной жизни, но она может оказать вам существенную помощь при отладке. При загрузке в режиме подробного протоколирования FreeBSD выводит все сведения о параметрах системы и присоединенных устройствах. (Впоследствии эта информация будет доступна в файле /var/run/dmesg.boot, о котором подробнее будет рассказываться ниже в этой же главе.) Вы можете разок попробовать режим подробного протоколирования на всех ваших компьютерах, чтобы осознать сложность их устройства.

Однопользовательский режим 93 Escape to loader prompt (Перейти в командную строку загрузчика)

Загрузчик содержит в себе командный интерпретатор, с помощью которого вы сможете запускать команды настройки запуска системы под свои нужды. Подробнее об этом будет рассказываться в разделе «Командная строка загрузчика».

Reboot (Перезагрузка)

Повторить, но на этот раз с чувством! Наиболее важными из этих пунктов являются однопользовательский режим и командная строка загрузчика.

Однопользовательский режим

Минимальная начальная загрузка, так называемый однопользовательский режим, подразумевает загрузку ядра и нахождение устройств. При этом не происходит автоматического монтирования диска, подключения к сети, активизации защиты системы и запуска стандартных служб UNIX. Однопользовательский режим – это первый рубеж, на котором система способна дать вам доступ к командной строке (command prompt). Отсюда можно активизировать любые службы, которые не были запущены автоматически.

При запуске в однопользовательском режиме вы увидите привычный поток системных сообщений. Однако перед запуском каких-либо программ ядро предложит вам выбрать командную оболочку. Вы можете выбрать любую оболочку, интерпретатор которой находится в корневом разделе диска. Я обычно выбираю оболочку по умолчанию – /bin/ sh, но вы можете выбрать оболочку, исходя из своих предпочтений, например /bin/tcsh.

Диски в однопользовательском режиме

В однопользовательском режиме монтируется только корневой раздел, причем в режиме только для чтения. Остальные диски не монтируются. (Подробнее диски и файловые системы будут обсуждаться в главе 8, а пока просто читайте дальше.)

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

          # fsck p

          # mount a

 

Программа fsck(8) «почистит» файловые системы, подтвердит их внутреннюю целостность и действительное наличие файлов раздела на диске. Доступ к файловой системе открывается командой mount(8).

Ключ –a говорит о необходимости выполнить монтирование всех файловых систем, перечисленных в файле /etc/fstab (глава 8), но если какая-либо из этих файловых систем вызывает проблемы, можно смонтировать требуемые файловые системы по отдельности, указав в командной строке путь к точке монтирования (например, mount /usr). Если вы обладаете опытом настройки сетевых файловых систем (глава 8), вы увидите сообщения об ошибке монтирования этих файловых систем, поскольку в этот момент сеть еще не была запущена.

Если монтирование по имени каталога не получилось, попробуйте вместо него использовать имя устройства. Имя устройства корневого раздела, скорее всего, будет либо /dev/ad0s1a (для дисков IDE), либо /dev/ da0s1a (для дисков SCSI). При этом вам также потребуется указать имя точки монтирования этого раздела. Например, чтобы смонтировать первый раздел диска IDE как корневую файловую систему, введите команду:

          # mount /dev/ad0s1a /

 

Если на вашем сервере имеются сетевые файловые системы, а сеть еще не запущена, тогда смонтируйте все локальные файловые системы, указав тип файловой системы. Следующая команда монтирует все локальные файловые системы типа UFS, которая по умолчанию используется системой FreeBSD:

          # mount a t ufs

 

Программы, доступные в однопользовательском режиме

Круг команд, доступных в однопользовательском режиме, зависит от того, какие разделы были смонтированы. Некоторые основные команды находятся в каталогах /bin и /sbin, расположенных в корневом разделе, и доступны, даже если корневой раздел смонтировать в режиме только для чтения. Другие команды находятся в каталоге /usr и будут недоступны, пока вы не смонтируете этот раздел. (Загляните в каталоги /bin и /sbin, чтобы получить представление, чем вы сможете воспользоваться, когда что-то пойдет не так.)

Примечание: Если системные библиотеки находятся в шифруемом разделе (глава 12), ни одна из этих программ работать не будет. Для таких случаев FreeBSD предоставляет версии многих базовых утилит, связанных с библиотеками статически, в каталоге /rescue.

Сеть в однопользовательском режиме

Если в однопользовательском режиме необходимо подключиться к сети, используйте сценарий на языке командной оболочки /etc/netstart. Этот сценарий вызовет другие сценарии, необходимые для запуска сетевой подсистемы, настройки сетевых интерфейсов, а также механизмов фильтрации пакетов и маршрутизации. Если вам нужно запустить не все службы, а только некоторые из них, вам необходимо ознакомиться с текстом этого сценария и выполнить соответствующие команды вручную.

Работа в однопользовательском режиме

В однопользовательском режиме доступ к системе ограничен только вашими познаниями FreeBSD и UNIX.

Например, если вы забыли пароль root, его можно переопределить, находясь в однопользовательском режиме:

# passwd

Changing local password for root

New Password:

Retype New Password:

#

 

Примечание: Обратите внимание: система не требует ввода старого пароля пользователя root. Загрузившись в однопользовательский режим, вы автоматически становитесь пользователем root, поэтому passwd(8) не просит ввести старый пароль.

Или, если вы допустили опечатку в файле /etc/fstab, которая сбивает систему с толку и препятствует нормальной загрузке, вы можете смонтировать корневой раздел, используя имя устройства, отредактировать файл /etc/fstab и тем самым ликвидировать проблему.

Или, если вы используете программу, которая вызывает у системы панику на этапе загрузки и вам необходимо предотвратить запуск этой программы во время загрузки, вы можете либо отредактировать файл /etc/rc.conf, запретив запуск программы, либо переопределить права файла сценария, сделав его неисполняемым.

          # chmod 444 /usr/local/etc/rc.d/program.sh

 

Подробнее о программах сторонних производителей (порты и пакеты) мы поговорим в главе 11.

Примечание

Во всех этих примерах описываются ошибки, допущенные человеком. Отказы аппаратуры встречаются довольно редко, еще реже – отказы самой системы FreeBSD. Если бы человеку не было свойственно ошибаться, наши компьютеры практически всегда работали бы без перебоев. По мере расширения ваших познаний о FreeBSD будут расширяться и ваши возможности в однопользовательском режиме.

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

Командная строка загрузчика

Командная строка загрузчика – это ограниченная по своим возможностям вычислительная среда, которая позволяет вносить некоторые изменения в процесс загрузки и в переменные, которые должны быть настроены перед началом загрузки. После выхода в командную строку загрузчика (пункт 6 в меню загрузки) вы увидите такое приглашение к вводу:

OK

Это и есть командная строка загрузчика. Слово OK выглядит вполне дружественным и ободряющим, но следует заметить, что это одна из немногих дружественных вещей в среде загрузчика. Ее нельзя рассматривать как полноценную командную строку операционной системы, она служит лишь инструментом, который дает возможность настроить процесс загрузки системы и не предназначена для несведущих или слабонервных пользователей. Любые изменения, которые вы вносите в командной строке загрузчика, оказывают воздействие только на текущий процесс загрузки. Чтобы отменить изменения, необходимо выполнить перезагрузку. (Как запоминать изменения, произведенные в командной строке загрузчика, вы узнаете в следующем разделе.)

Чтобы увидеть перечень всех доступных команд, введите знак вопроса.

OK ?
Available commands:

heap         show heap usage

reboot       reboot the system

bcachestat   get disk block cache stats

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

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

OK lsdev
cd devices:

disk devices:
disk0: BIOS drive C:

disk0s1a: FFS disk0s1b: swap disk0s1d: FFS disk0s1e: FFS disk0s1f: FFS

disk1: BIOS drive D: disk1s1a: FFS disk1s1b: swap

pxe devices:

Загрузчик проверил наличие приводов компакт-дисков  и не нашел ни одного. (Загрузчик может обнаружить приводы компакт-дисков только при загрузке с компакт-диска, поэтому на этот счет не стоит беспокоиться.) Он обнаружил два жестких диска, которые в BIOS известны под именами C  и D . Далее следуют описания разделов, обнаруженных на этих жестких дисках. Как будет говориться в главе 8, имя устройства с корневым разделом обычно оканчивается символом a. Это означает, что здесь под именем disk0s1a показан корневой раздел . Если бы вам пришлось столкнуться с неполадками во время загрузки незнакомой системы, это знание оказалось бы весьма полезным.

Загрузчик использует в своей работе переменные, значения которых устанавливаются ядром или берутся из конфигурационных файлов. Увидеть переменные и их значения можно с помощью команды show.

OK show
LINES=24 acpi_load=YES autoboot_delay=NO …

Нажатие клавиши пробела приведет к появлению следующей страницы. Эти значения включают номера IRQ и адреса памяти для старых карт ISA, низкоуровневые параметры настройки ядра и информацию, извлеченную из BIOS. Частичный список переменных загрузчика мы увидим в разделе «Настройка загрузчика»; еще ряд значений будут встречаться на протяжении всей книги в соответствующих разделах.

Изменить эти значения для каждой конкретной загрузки можно с помощью команды set. Например, чтобы изменить значение console на comconsole, необходимо ввести следующую команду:

OK set console=comconsole

К тому моменту, как загрузчик предоставит в ваше распоряжение свою командную строку, ядро уже будет загружено в память. Ядро – это сердце FreeBSD и подробно будет рассматриваться в главе 5. Если ранее вам никогда не доводилось работать с ядром, просто приберегите эти лакомые кусочки до соответствующей главы. Увидеть ядро и модули ядра, загруженные в память, можно с помощью команды lsmod.

OK lsmod
0x400000: /boot/kernel/kernel (elf kernel, 0x6a978c)

modules: elink.1 io.1 splash.1 agp.1 nfsserver.1 nfslock.1 nfs.1 nfs4.1 wlan.1 if_gif.1 if_faith.1 ether.1 sysvshm.1 sysvsem.1 sysvmsg.1 cd9660.1 isa.1 pseudofs.1 procfs.1 msdosfs.1 usb.1 cdce.0 random.1 ppbus.1 pci.1 pccard.1 null.1 mpt_raid.1 mpt.1 mpt_cam.1 mpt_core.1 miibus.1 mem.1 isp.1 sbp.1 fwe.1 firewire.1 exca.1 cardbus.1 ast.1 afd.1 acd.1 ataraid.1 atapci.1 ad.1 ata.1 ahc.1 ahd.1 ahd_pci.1 ahc_pci.1 ahc_isa.1 ahc_eisa.1 scsi_low.1 cam.1

0xaaa000: /boot/kernel/snd_via8233.ko (elf module, 0x6228) modules: snd_via8233.1

0xab1000: /boot/kernel/sound.ko (elf module, 0x23898) modules: sound.1

0xad5000: à/boot/kernel/atapicam.ko (elf module, 0x4bac) modules: atapicam.1

Хотя некоторые из этих сведений имеют ценность только для разработчиков, тем не менее много интересного они могут дать и системному администратору. Наиболее интересная информация – это путь к загруженному ядру . Это всегда должен быть /boot/kernel/kernel, если загрузчик не настроен на загрузку ядра из какого-либо другого места.

Вы также получаете список модулей, подключаемых при каждой загрузке файла ядра . В данном примере приводится список модулей непосредственно из самого ядра, начиная от elink  и заканчивая cam . Загрузчик также загрузил файлы snd_via8233 , sound и atapicam à с соответствующими им модулями.

Чтобы полностью стереть из памяти загруженное ядро вместе со всеми модулями, используйте команду unload.

OK unload

Никакого подтверждения успешного выполнения этой операции вы не получите, но последующая команда lsmod продемонстрирует, что загрузчик не имеет никакой информации о файлах ядра.

Для загрузки другого ядра используется команда load.

OK load boot/kernel.good/kernel
boot/kernel.good/kernel text=0x4a6324 data=0x84020+0x9908c syms=[0x4+0x67220+0x4+0x7e178]

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

Хотя я и коснулся здесь вопроса загрузки альтернативного ядра, тем не менее, прежде чем делать это, вы должны четко понимать, зачем это необходимо и как безопаснее это сделать. Перейдите к главе 5 и прочитайте обсуждение в разделе «Загрузка альтернативного ядра».

После того как вы загрузите систему необходимым вам способом, вам может потребоваться сохранить параметры загрузки для последующего использования. Система FreeBSD позволяет сделать это с помощью файла /boot/loader.conf. Однако прежде чем вносить какие-либо изменения, вы должны понять, какие конфигурационные файлы используются системой по умолчанию.

Файлы по умолчанию

В системе FreeBSD файлы с настройками подразделяются на файлы по умолчанию и изменяемые файлы. Файлы по умолчанию содержат присваивания переменных. Эти файлы не предназначены для редактирования администратором; их роль – подмена файлами с теми же который так и называется – defaults.

Например, параметры настройки загрузчика хранятся в файле /boot/ loader.conf, а настройки загрузчика по умолчанию – в файле /boot/defaults/loader.conf. Если вам потребуется узнать полный список переменных загрузчика, загляните в файл по умолчанию.

Процесс обновления полностью заменит файлы по умолчанию, при этом ваши локальные файлы с настройками останутся нетронутыми. Такое разделение позволяет оставлять локальные изменения нетронутыми и добавлять в систему новые значения. С выходом каждой новой версии в систему FreeBSD добавляются новые возможности, и их разработчики прикладывают немалые усилия к тому, чтобы изменения этих файлов были обратно совместимы. Это означает, что вы не должны проходить по обновленной конфигурации и вручную объединять все изменения. Надо лишь проверить новый файл по умолчанию на предмет появления новых возможностей конфигурирования.

Прекрасным примером таких файлов может служить файл с настройками загрузчика. Файл /boot/defaults/loader.conf содержит десятки записей следующего вида:

verbose_loading=»NO»      # Установите YES, чтобы получать подробный отчет

 

Переменная verbose_loading по умолчанию имеет значение NO. Чтобы изменить ее, не нужно редактировать файл /boot/defaults/loader.conf – добавьте строку в файл /boot/loader.conf и измените значение там. Значения из файла /boot/loader.conf переопределяют значения параметров настройки по умолчанию, и локальные файлы с настройками могут содержать только ваши локальные изменения. Сисадмин легко сможет просмотреть, какие изменения были произведены и чем данная конфигурация системы отличается от конфигурации «из коробки».

Механизм настроек по умолчанию широко используется в системе FreeBSD, особенно в основной ее части.

Не копируйте настройки по умолчанию!

Одна из распространенных ошибок состоит в том, что некоторые администраторы копируют настройки по умолчанию в локальные файлы и затем производят в них изменения. Такое копирование вызывает определенные проблемы в некоторых частях системы. Неприятностей, возможно, удастся избежать в случае с парой каких-нибудь файлов, но рано или поздно проблемы вас догонят. Например, копирование файла /etc/defaults/rc.conf в /etc/rc.conf приведет к тому, что система не сможет загрузиться. Вам следует быть осторожными.

Настройка загрузчика

Чтобы сделать изменения в настройках загрузчика постоянными, следует сохранять их в файле /boot/loader.conf. Параметры настройки из этого файла считываются самим загрузчиком при запуске системы. (Безусловно, если вам нравится при каждой загрузке системы ковыряться в командной строке загрузчика, то вам нет смысла беспокоиться об этом!)

Если заглянуть в настройки загрузчика по умолчанию, можно увидеть множество параметров, которые напоминают переменные, перечисленные в загрузчике. Например, здесь можно определить имя устройства консоли:

console=»vidconsole»

 

По всей документации к FreeBSD разбросаны ссылки на настройки времени загрузки и настройки загрузчика. Все эти настройки находятся в файле loader.conf. В число этих настроек входят и значения systctl, которые после запуска системы доступны только для чтения. (Подробнее об этом будет рассказываться в главе 5. В приложении приводится список наиболее часто использующихся параметров sysctl ядра.) Ниже приводится пример присваивания значения 32 переменной ядра kern.maxusers.

kern.maxusers=»32″

 

Некоторые из этих переменных не имеют конкретного значения в файле loader.conf – вместо значения используются пустые кавычки. Это означает, что загрузчик предлагает сделать выбор значения ядру, но если у вас появится необходимость переопределить значение, устанавливаемое ядром, у вас будет такая возможность.

kern.nbuf=»»
Ядро знает, какое значение выбрать для kern.nbuf, но вы с помощью загрузчика, можете указать свое значение.

Тонкую настройку системы с использованием загрузчика мы будем рассматривать в соответствующем разделе – например, значения параметров настройки ядра будут обсуждаться в главе 5, где это обсуждение более уместно по смыслу. А здесь будут рассматриваться наиболее общие настройки, которые оказывают влияние на образ действий и внешний вид самого загрузчика, а также на весь процесс загрузки. С развитием FreeBSD разработчики вводили новые и изменяли функциональность старых параметров настройки, поэтому обязательно загляните в ваш файл /boot/defaults/loader.conf, чтобы увидеть полный список параметров.

      boot_verbose=»NO»

 

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

      autoboot_delay=»10″

 

Это число секунд между появлением меню и автоматическим запуском загрузки. Я часто уменьшаю это значение до 2–3 секунд, чтобы мои компьютеры загружались как можно быстрее.

      beastie_disable=»NO»

 

Этот параметр управляет внешним видом меню (первоначально меню украшает изображение «Beastie» – талисмана BSD, нарисованное символами ASCII). Если установить значение «YES», талисман выводиться не будет.

      loader_logo=»fbsdbw»

 

C помощью этого параметра можно определить, какой логотип будет выводиться справа от меню загрузки. Значению по умолчанию fbsdbw соответствует надпись «FreeBSD», художественно оформленная символами ASCII. В качестве других значений можно использовать beastiebw (оригинальный логотип), beastie (цветной логотип) и none (меню выводится вообще без логотипа).

Последовательные консоли

Любая консоль – вещь сама по себе хорошая, но как быть в случае появления проблем, когда ваша система FreeBSD находится от вас на большом удалении – на противоположном конце страны или на другом континенте? Клавиатура и монитор тоже штука хорошая, но во многих информационных центрах для них просто нет места. И как перезагрузить машину, когда она не отвечает на запросы по сети? Последовательная консоль поможет решить все эти проблемы и не только их.

Последовательная консоль просто направляет ввод с клавиатуры и вывод видео в последовательный порт, а не на клавиатуру и монитор. Последовательные консоли присутствуют во всех типах сетевого оборудования, начиная от сетевых маршрутизаторов и коммутаторов Cisco и заканчивая сетевыми мультиплексорами KVM. Многие устройства обеспечения безопасности, такие как дверные замки с клавиатурой, также имеют последовательные консоли. Соединив последовательные порты двух компьютеров стандартным нуль-модемным кабелем компьютера, вы из одной системы получите доступ к загрузочным сообщениям второй системы. Это особенно удобно, если компьютеры находятся на большом удалении друг от друга. Чтобы получить доступ к последовательной консоли, ваш компьютер должен иметь последовательный порт. С каждым годом растет выпуск систем, «неотягощенных наследством», в которых отсутствуют такие основные аппаратные элементы, как последовательные порты и порты PS/2 для подключения клавиатуры и мыши.

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

Аппаратные последовательные консоли

Настоящие аппаратные средства UNIX (такие как Sparc64) имеют аппаратные последовательные консоли. В этих системах можно подключить последовательный кабель к порту последовательной консоли и получить свободный доступ к аппаратным настройкам, загрузочным сообщениям и параметрам запуска. Большинство аппаратных средств x86 не предоставляют такой возможности – необходимо сидеть за клавиатурой и следить за монитором, чтобы зайти в BIOS или нажать пробел для прерывания загрузки. Такой функциональностью обладает лишь малая часть системных плат x86 и amd64, но все большее и большее число производителей, таких как Dell или HP предлагают порты последовательных консолей как дополнительную особенность своих компьютеров – но это специальная функция, которую не сразу найдешь. (Поддержка последовательной консоли в HP RILOE позволяет даже управлять питанием компьютера с помощью последовательной консоли, что приятно.)

Если ваш компьютер не имеет последовательной консоли, ни одна операционная система не предоставит вам доступ к PC-совместимым сообщениям BIOS через последовательный порт. Такие сообщения появляются до запуска операционной системы и обращения к жестким дискам. Для преодоления этих трудностей есть аппаратные решения. Самое лучшее из тех, что я видел, это PC Weasel (http://www.realweasel.com). Это видеоплата с последовательным портом вместо видеопорта. Подсоединив последовательный кабель к Weasel, можно манипулировать BIOS удаленно, прерывать загрузку для перехода в однопользовательский режим и выполнять любые операции в системе, как будто вы находитесь за консолью.

Аппаратные консоли не требуют обеспечения поддержки со стороны операционной системы.

Программные последовательные консоли

Если вам нужен доступ не к ранним сообщениям BIOS, а только к сообщениям загрузчика, то вполне достаточно будет программной последовательной консоли, реализованной в системе FreeBSD. При загрузке система FreeBSD решает, куда выводить сообщения и откуда принимать ввод. По умолчанию это монитор и клавиатура. Однако с помощью несложных манипуляций можно настроить консоль на последовательном порте, который должен быть в системе. Вы не сможете получить доступ к BIOS, но эта последовательная консоль даст вам возможность влиять на процесс загрузки. FreeBSD позволяет настраивать последовательную консоль в двух различных местах. Для обычных рабочих систем лучше всего поместить настройки последовательной консоли в файл /boot/config. Это обеспечит вам доступ к самым ранним стадиям процесса загрузки. У вас есть три варианта: использовать в качестве консоли стандартные клавиатуру/монитор/мышь, использовать в качестве консоли последовательный порт или использовать двойную консоль. Стандартный вариант настройки консоли используется по умолчанию, поэтому его не нужно настраивать отдельно. Чтобы принудить FreeBSD использовать последовательную консоль, введите –h в файл /boot/config.

Двойные консоли позволяют использовать как стандартные, так и последовательные консоли, в зависимости от потребностей. Однако при этом вам нужно указать, какая из этих консолей будет являться первичной. Дело в том, что существуют низкоуровневые задачи, такие как загрузка с помощью альтернативного загрузчика или вызов отладчика, которые доступны только с первичной консоли, но во всем остальном по своим возможностям консоли совершенно идентичны. Введите –D в файл /boot/config, чтобы разрешить использование консолей обоих типов и назначить первичной стандартную консоль. Введите –Dh в файл /boot/config, чтобы разрешить использование консолей обоих типов и назначить первичной последовательную консоль. Я рекомендую использовать двойную консоль.

Управлять настройками консолей можно также из файла /boot/loader.conf. Действие записей в этом файле проявляется немного позднее, на заключительной стадии загрузки и запуска ядра. Чтобы использовать только последовательную консоль, добавьте в /boot/loader.conf следующую запись:

console=»comconsole»

 

Чтобы переключиться обратно к видеоконсоли, удалите или закомментируйте эту строку. Кроме того, в /boot/loader.conf можно задать такую строку:

console=»vidconsole»

 

Вы можете указать необходимость использования обеих консолей, перечислив в значении переменной comconsole и vidconsole, поместив предпочтительную консоль первой. Ниже приводится вариант настройки с предпочтительной последовательной консолью:

console=»comconsole vidconsole»

 

В серверной комнате вам может понадобиться переключаться от стандартной консоли к последовательной и обратно. Как правило, я управляю большим количеством машин FreeBSD через последовательную консоль.

Автоматическое обнаружение клавиатуры

В некоторых описаниях FreeBSD, которые можно найти в Интернете, вам могут встретиться сведения об использовании автоматического обнаружения клавиатуры при выборе консоли. Суть идеи состоит в том, что если к компьютеру не подключена клавиатура, это означает, что вы скорее всего используете последовательную консоль. Такой подход замечательно работает, если используются клавиатуры AT или PS/2, но автоматическое обнаружение клавиатуры, подключенной к порту USB, обычно терпит неудачу. Поэтому лучше выполнить настройку двойной консоли и не полагаться на автоматическое обнаружение клавиатуры.

Физическая настройка программной последовательной консоли

Независимо от типа имеющейся у вас последовательной консоли, вам необходимо правильно подключиться к ней. Для этого вам потребуется нуль-модемный кабель (его можно приобрести в любом компьютерном магазине или в интернет-магазине). Позолоченные кабели не стоят тех денег, которые за них просят, но не стоит покупать и самую дешевую модель из имеющихся; когда в чрезвычайных обстоятельствах вам понадобится последовательная консоль, помехи в линии передачи будут совершенно некстати.

Подключите один конец нуль-модемного кабеля к порту последовательной консоли на сервере FreeBSD – по умолчанию это первый последовательный порт (COM1 или sio0, в зависимости от того, к какой операционной системе вы привыкли). Это значение можно изменить с помощью перекомпиляции ядра, но обычно проще использовать значение по умолчанию.

Другой конец нуль-модемного кабеля подключите к открытому последовательному порту другой системы. Я рекомендую либо другую систему FreeBSD (либо иную систему UNIX), либо терминальный сервер. Можно задействовать систему Windows, если это все, что у вас имеется.

Если у вас есть две удаленные машины FreeBSD и вы хотите применять на них последовательные консоли, убедитесь, что каждый из компьютеров имеет два последовательных порта. Возьмите два нуль-модемных кабеля и соедините первый последовательный порт каждого компьютера со вторым последовательным портом другого компьютера. Таким способом вы сможете использовать любой компьютер в качестве консольного клиента другого компьютера. При наличии трех машин можно объединить их в замкнутую кольцевую цепочку. Комбинируя группы по две и три машины, вы сможете разместить последовательные консоли на любом количестве систем FreeBSD. Я работал с 30–40 машинами FreeBSD в одной комнате, где установка мониторов была бы просто непрактична, а последовательные консоли приносили большую пользу. Однако, как только у вас появится стойка из двух серверов, совершенно нелишним будет вложить деньги в приобретение терминального сервера.1 Довольно недорого их можно купить на eBay.

Другой вариант заключается в использовании переходников DB9RJ45 – это позволит подключаться к вашим консолям с помощью кабеля CAT5. Если вы работаете в информационном центре, где доступ людей в машинный зал запрещен, кабели последовательных консолей могут выходить рядом с вашим рабочим столом или в другом доступном месте, на панели с разъемами Ethernet. Большинство современных информационных центров лучше оснащено сетями Ethernet, чем последовательными кабелями.

Использование последовательной консоли

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

  • Скорость 9600 бод 
  • 8бит 
  • Без контроля четности 
  • 1 стоповый бит
    Введите эти значения в любом эмуляторе терминала на клиентском компьютере, и последовательная консоль «просто начнет работать». Эмуляторы терминала можно найти, например, в Windows (HyperTerm – пожалуй, самый известный), Macintosh и в любых других операционных системах. Несколько лет тому назад я часто использовал карманный компьютер Palm с последовательным кабелем для доступа к последовательным консолям.
    FreeBSD обращается к линиям последовательной передачи данных с помощью программы tip(1), позволяющей подключаться к удаленной системе, аналогично telnet. Для запуска tip наберите следующую команду, обладая правами пользователя root:
    # tip portname
    Имя порта (portname) – это сокращение для указания номера последовательного порта и скорости, на которой он работает. Файл /etc/remote содержит список имен портов. Большинство записей в этом файле являются пережитком тех дней, когда протокол UUCP был основным
    Устройство типа KVM будет значительно дешевле терминального сервера. –
    Прим. научн. ред. 

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

 

# Finger friendly shortcuts

sio0|com1:dv=/dev/cuad0:br#9600:pa=none:

sio1|com2:dv=/dev/cuad1:br#9600:pa=none:

sio2|com3:dv=/dev/cuad2:br#9600:pa=none:

sio3|com4:dv=/dev/cuad3:br#9600:pa=none:

sio4|com5:dv=/dev/cuad4:br#9600:pa=none:

sio5|com6:dv=/dev/cuad5:br#9600:pa=none:

sio6|com7:dv=/dev/cuad6:br#9600:pa=none:

sio7|com8:dv=/dev/cuad7:br#9600:pa=none:

 

Названия sio соответствуют стандартным именам устройств в UNIX, тогда как имена com добавлены для удобства тех, кто вырос на аппаратном обеспечении x86. Предположим, что у вас есть две машины FreeBSD, подсоединенные друг к другу. С помощью нуль-модемного кабеля последовательный порт 1 одной машины соединен с последовательным портом 2 другой. Пусть вы хотите обратиться к локальному последовательному порту 2 для взаимодействия с последовательной консолью другой системы:

# tip sio1 connected

Что бы вы ни набрали, ничего другого вы не увидите.

Если вы зарегистрируетесь на другой системе и перезагрузите ее, то в окне tip вдруг появится следующее:

Shutting down daemon processes:.

Stopping cron.

Shutting down local daemons:.

Writing entropy file:.

Terminated

.

Waiting (max 60 seconds) for system process ‘vnlru’ to stop…done

Waiting (max 60 seconds) for system process ‘bufdaemon’ to stop…done

Waiting (max 60 seconds) for system process ‘syncer’ to stop…

Syncing disks, vnodes remaining…1 0 0 done

All buffers synced.

Uptime: 1m1s

Shutting down ACPI

Rebooting…

Далее при загрузке системы наступит долгая пауза. Если вы находитесь рядом с системой, то сможете увидеть пробегающие стандартные сообщения BIOS. Наконец, вы увидите примерно следующее:

/boot/kernel/kernel text=0x4a6324 data=0x84020+0x9908c

syms=[0x4+0x67220+0x4+0x7e178]

/boot/kernel/snd_via8233.ko text=0x3a14 data=0x328

syms=[0x4+0xa10+0x4+0xac5]

loading required module ‘sound’

/boot/kernel/sound.ko text=0x17974 data=0x37a8+0x10d8

syms=[0x4+0x3290+0x4+0x3d7d]

/boot/kernel/atapicam.ko text=0x2a30 data=0x1d8+0x4

syms=[0x4+0x7b0+0x4+0x7d6]

 

Это говорит о том, что загрузчик отыскал и загрузил файлы ядра, прежде чем вывести загрузочное меню. Поздравляю! Вы пользуетесь последовательной консолью. Нажмите клавишу пробела, чтобы прервать процесс загрузки. Неважно, как далеко система находится от вас, вы можете изменить загружаемое ядро, получить подробный отчет о загрузке, перейти в однопользовательский режим или вручную проверить файловые системы с помощью fsck, одним словом – сделать все, что угодно. Программная последовательная консоль может не обеспечивать доступ к BIOS, но к этому моменту BIOS уже загрузилась. Когда вы обладаете определенным опытом пользования последовательной консолью, вам совершенно неважно, где находится управляемая система – в противоположном углу комнаты или на другом краю мира, и вам скорее покажется тяжелой работой подняться со стула только для того, чтобы подойти к обычной консоли.

Если продолжить загрузку системы, то через некоторое время поток сообщений остановится и последовательная консоль прекратит свое функционирование. Это происходит потому, что последовательная консоль не предназначена для входа в систему. (Возможность входить в систему с помощью последовательной консоли иногда бывает полезной – подробнее об этом рассказывается в главе 20.)

Если удаленная система полностью заблокирована, вы можете подключить к ней свою последовательную консоль и «протянуть руки» к выключателю, управляющему электропитанием системы. Это может иметь нежелательные последствия для компьютера, но находиться в заблокированном состоянии тоже не очень хорошо. С помощью последовательной консоли можно выполнить загрузку в однопользовательском режиме и определить источник проблемы, покопавшись в файлах протоколов или где-либо еще, что может иметь отношение к неисправности. Подробнее об устранении неисправностей будет говориться в главе 21.

Выключение последовательной консоли

В качестве управляющего символа программа tip(1) использует тильду (~). Чтобы выключить последовательную консоль, можно в любой момент ввести последовательность выключения «тильда-точка»:

~.

Вы грациозно отключитесь.

Сообщения на запуске системы

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

Copyright (c) 1992-2007 The FreeBSD Project.

Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994

The Regents of the University of California. All rights reserved.

FreeBSD 7.0-CURRENT-SNAP010 #0: Tue Dec 13 11:25:44 UTC 2005

[email protected]:/usr/obj/usr/src/sys/GENERIC

 

Помимо этого выводятся номер версии загружаемой системы FreeBSD, а также дата и время ее сборки. Здесь также сообщается, кто компилировал ядро, на каком компьютере была выполнена сборка и даже имя каталога, в котором производилась сборка ядра. Если у вас имеется большое число ядер, эта информация будет для вас бесценной, поскольку она поможет идентифицировать доступные функциональные особенности системы.

WARNING: WITNESS option enabled, expect reduced performance.

(ВНИМАНИЕ: активирован параметр WITNESS, ожидается снижение производительности.)

 

В процессе начальной загрузки ядро выводит диагностические сообщения. Сообщение выше говорит о том, что в данном конкретном ядре я активировал отладочный программный код и код диагностики, что в результате может привести к снижению производительности. В данном случае меня не интересуют проблемы производительности. Причины этого вскоре станут понятны.

Timecounter «i8254» frequency 1193182 Hz quality 0

 

Это сообщение идентифицирует одно из устройств в аппаратном окружении. Таймер (timecounter), или аппаратные часы (hardware clock) – это специальное устройство; при том, что оно совершенно необходимо вашему компьютеру, оно практически недоступно конечному пользователю. Время от времени вам будут встречаться сообщения о подобных аппаратных устройствах, которые непосредственно недоступны пользователю, но имеют жизненно важное значение для системы. Например, среди сообщений можно увидеть информацию о центральном процессоре:

CPU:AMDAthlon(tm) 64 X2 Dual Core Processor 4200+ (2200.10-MHz 686-class CPU)

Features=0x178bfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,M CA,CMV,PAT,PSE36,CLFLUSH,MMX,FXSR,SSE,SSE2,HTT>

Features2=0x1<SSE3>
AMD Features=0xe2500800<SYSCALL,NX,MMX+,FFXSR,LM,3DNow+,3DNow>

AMD Features2=0x3<LAHF,CMP>

Cores per package: 2

Возможно, вы не в курсе, что простой процессор может иметь такое число характеристик? А теперь о причинах, по которым меня не волнует снижение производительности, обусловленное параметром WITNESS, о котором упоминалось выше: в этом компьютере используется двухъядерный процессор , каждое ядро обладает достаточно высокой скоростью  и обладает множеством особенностей, важных для современных микропроцессоров , а также некоторыми дополнительными особенностями, характерными для микропроцессоров компании AMD . То есть у меня имеется достаточный запас мощности1 и немалый объем памяти.

real memory = 1072693248 (1023 MB) avail memory = 1040453632 (992 MB)

Истинный объем памяти (real memory)  – это объем RAM (оперативной памяти), физически установленной в компьютере, а доступный объем памяти (avail memory)  – это объем RAM, свободной после загрузки ядра. В моем компьютере для реальной работы осталось доступно 992 Мбайта RAM , чего более чем достаточно для загрузки системы.

FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs

Ядро также выводит информацию об обнаруженных аппаратных устройствах и о том, как оно будет обслуживать эти устройства. Например, в отрывке выше ядро сообщает, что были обнаружены оба ядра микропроцессора и оно готово управлять ими.

ioapic0 <Version 0.3> irqs 0-23 on motherboard ioapic1 <Version 0.3> irqs 24-47 on motherboard

Это довольно типичная запись, которую выводит драйвер устройства. Данное устройство известно как ioapic. Ядро определило, что оно имеет номер версии 0.3, и вывело дополнительную информацию о нем . Кроме того, были обнаружены два устройства этого типа, которые получили порядковые номера 0  и 1 . (Все драйверы устройств получают порядковые номера, начиная с нуля.) Вы можете получить дополнительную информацию об устройстве, обслуживаемом данным драйвером, прочитав страницу руководства к драйверу. Не для всех, но почти для всех драйверов устройств имеются страницы руководства.

npx0: [FAST]

npx0: <math processor> on motherboard

npx0: INT 16 interface

 

Я мог бы сказать: «Завидуйте!», но к тому моменту, когда эта книга попадет на книжные полки, мой ноутбук безвозвратно устареет.

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

acpi0: <PTLTD RSDT> on motherboard
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0 pci0: <ACPI PCI bus> on pcib0

Довольно интересно, что в загрузочных сообщениях приводится информация о том, как взаимосвязаны различные компоненты вашего компьютера. Здесь мы видим, что система ACPI находится непосредственно на материнской плате , а мост (bridge) PCI  подключен к acpi0 . Здесь также видно, что шина PCI  подключена к мосту PCI , а продолжив просмотр сообщений, вам удастся определить, какие устройства подключены к этой шине. Возможно, сейчас эта информация даст вам не так много, но позднее, когда вам потребуется найти источник проблем, она станет для вас весьма ценной.

Все это хорошо, но эта информация малопригодна для использования в настоящий момент. А есть ли что-нибудь, чем можно было бы воспользоваться прямо сейчас?

firewire0: <IEEE1394(FireWire) bus> on fwohci0 fwe0: <Ethernet over FireWire> on firewire0

В этой системе имеется устройство FireWire , и FreeBSD оказалась в состоянии идентифицировать и использовать его! Вот это действительно полезная информация, по крайней мере для тех, у кого имеется оборудование FireWire. Система FreeBSD поддерживает работу Ethernet через FireWire ? Это круто1!

Даже если у вас нет FireWire, есть вероятность, что у вас имеется некоторое устройство для подключения к сети.

re0: <RealTek 8169SB Single-chip Gigabit Ethernet> port 0x1000-0x10ff mem 0xd2206800-0xd22068ff irq 19 at device 8.0 on pci0

Эта запись сообщает, что сетевая карта была связана с сетевым интерфейсом re0 , что она поддерживает скорость обмена до одного гигабита . Здесь также приводится дополнительная информация об адресах памяти, номере IRQ и шине PCI, к которой она подключена.

Драйвер системы FreeBSD по умолчанию обеспечивает работу Ethernet через FireWire методом, который поддерживается только FreeBSD, главным образом потому, что она была первой, реализовавшей такую поддержку. Чтобы использовать Ethernet через FireWire способом, совместимым с Mac OS X и Windows XP, прочитайте страницу руководства fwip(4).

 

DMESG.BOOT

Информация, которая выводится на этапе загрузки, может быть полезна, но к тому моменту, когда она вам понадобится, она, скорее всего, скроется за пределами экрана. По этой причине загрузочные сообщения сохраняются в файле /var/run/dmesg.boot. Это означает, что вы сможете увидеть сообщения ядра с информацией об аппаратном окружении даже через много месяцев после запуска системы.

Для каждого устройства в компьютере выводится одна или более записей, напоминающие те, что были показаны выше. Все вместе они довольно подробно описывают аппаратное окружение компьютера. Если выполнить загрузку в режиме подробного протоколирования, вы получите еще больше подробностей – возможно, намного больше, чем вам хотелось бы.

Одно важное обстоятельство заключается в том, что ядро отображает в загрузочных сообщениях названия устройств для каждого компонента аппаратного окружения. Эта информация важна для управления системой. У каждого аппаратного компонента имеется имя файла устройства, которое потребуется вам для его настройки. Например, ранее мы видели, что сетевой карте Ethernet было присвоено имя re0. Эта карта обслуживается драйвером re(4) и первый экземпляр этого драйвера имеет порядковый номер 0. Последующие сетевые карты аналогичного типа получат имена re1, re2 и т. д.

Большинство устройств, которые могут настраиваться и управляться, имеют соответствующие записи в каталоге /dev. Например, наша сетевая карта представлена файлом /dev/net/re0. Эти файлы называются файлами устройств и обеспечивают удобный способ обращения к различным аппаратным компонентам. К большинству файлов устройств невозможно обратиться как к обычным файлам – вы не сможете прочитать содержимое файла устройства с помощью команды cat(1) или скопировать в него содержимое другого файла. Однако имена файлов устройств можно передавать в качестве параметров командной строки специализированным программам. Например, жесткому диску, который во время загрузки был обнаружен как ad4, соответствует файл устройства /dev/ad4. Когда вам потребуется смонтировать этот жесткий диск, вы можете использовать имя файла устройства и гарантировать тем самым, что будет смонтировано именно это устройство.

Запуск в многопользовательском режиме

Помимо однопользовательского режима существует еще и многопользовательский режим. Это стандартный режим работы UNIX-подобных операционных систем. Если система выполняет реальную работу, значит она находится в многопользовательском режиме.

Как только FreeBSD завершает поиск аппаратных устройств и подключение соответствующих драйверов, она запускает сценарий командного интерпретатора /etc/rc. Этот сценарий монтирует все файловые системы, запускает сетевые интерфейсы, настраивает устройства, идентифицирует доступные разделяемые библиотеки и производит все остальные действия, необходимые для подготовки системы к работе в нормальном режиме. Различные системы на запуске предъявляют различные требования. Несмотря на то, что практически любой сервер должен смонтировать жесткий диск, тем не менее требования, которые предъявляет веб-сервер, существенно отличаются от требований, которые предъявляет сервер баз данных, даже если они работают в совершенно идентичном аппаратном окружении. Это означает, что файл /etc/rc должен быть максимально гибким. Достигается это за счет передачи некоторых полномочий другим сценариям командного интерпретатора, ответственным за отдельные аспекты системы.

Сценарий /etc/rc контролируется файлами /etc/defaults/rc.conf и /etc/ rc.conf.

/etc/rc.conf и /etc/defaults/rc.conf

Как и конфигурационный файл загрузчика, настройки, используемые сценарием /etc/rc, размещаются в двух файлах: настройки по умолчанию – в файле /etc/defaults/rc.conf и локальные настройки – в файле /etc/rc.conf. Настройки в файле /etc/rc.conf имеют более высокий приоритет перед любыми настройками в файле /etc/defaults/rc.conf точно так же, как и в случае с загрузчиком.

Файл /etc/defaults/rc.conf огромен. Он содержит довольно много переменных, часто называемых knobs (кнопки) или tunables (элементы настройки). Здесь не рассматриваются все эти переменные – не только потому, что knobs постоянно добавляются (такой список немедленно устареет), но также потому, что довольно много переменных не находит широкого применения на серверах. В стандартной системе FreeBSD переменной rc.conf может быть почти все – от раскладки клавиатуры до поведения TCP/IP. Полный перечень переменных вы найдете в своей системе, на странице руководства rc.conf(5).

В следующих разделах будут рассмотрены типичные записи из /etc/ rc.conf. Каждая запись представлена в /etc/defaults/rc.conf один раз. Редактирование той или иной записи означает ее замену в /etc/rc.conf. Для каждой переменной будет приводиться значение по умолчанию.

Параметры запуска

Следующие несколько параметров rc.conf управляют конфигурированием самой системы FreeBSD и тем, как она запускает другие про-

Запуск в многопользовательском режиме 113 граммы. Эти параметры определяют, как будут запускаться все остальные программы и службы в системе.

Если у вас обнаруживаются проблемы с запуском самого сценария /etc/rc и подчиненных ему сценариев, вам, возможно, потребуется разрешить их работу в отладочном режиме. Это позволит вам получить дополнительную информацию, способную прояснить, почему сценарий не запускается.

rc_debug=»NO»

 

Если вам не нужен полный вывод в отладочном режиме, а хотелось бы получить лишь некоторую дополнительную информацию о работе сценария /etc/rc, активируйте вывод информационных сообщений с помощью переменной rc_info:

rc_info=»NO»

 

Одна из распространенных проблем, связанных с нехваткой памяти, – недостаточный объем пространства для свопинга. Подробнее о пространстве для свопинга мы поговорим в главе 19, но вы можете настроить использование дополнительного пространства для свопинга непосредственно на этапе загрузки системы:

swapfile=»NO»

 

Параметры файловой системы

Система FreeBSD может использовать память как файловую систему, о чем подробно будет рассказываться в главе 8. Обычно эта возможность используется для создания файловой системы /tmp в памяти, так как операции с памятью выполняются существенно быстрее, чем с жестким диском. Прочитав главу 8, вы сможете реализовать это на практике. В файле rc.conf имеются переменные, которые позволят вам создать файловую систему /tmp в памяти и определить ее размер. Вы можете также указывать параметры, которые используются системой FreeBSD для работы с полноценными файловыми системами. (Наиболее нетерпеливые из вас могут озадачиться, что означает флаг –S. Этот флаг запрещает использование механизма Soft Updates. Если вы представления не имеете, о чем идет речь, тогда терпите до главы 8.) Если у вас появится необходимость реализовать файловую систему /tmp в памяти, установите параметр tmpmfs в значение YES и определите желаемый размер файловой системы /tmp с помощью параметра tmpsize.

tmpmfs=»AUTO»

tmpsize=»20m»

tmpmfs_flags=»-S»

 

Еще одна популярная возможность файловых систем FreeBSD – это собственная реализация шифруемых разделов. Система FreeBSD «из коробки» поддерживает две различных файловых системы с шифрованием: GBDE и GELI. Файловая система с шифрованием диска на низком уровне (Geom Based Disk Encryption, GBDE) была первой шифруемой файловой системой, предназначенной для использования в военном ведомстве. GELI – немного более дружественная технология, чем GBDE, и в отличие от GBDE соответствует иным стандартам. (Вам определенно стоит прочитать главу 18, прежде чем вы решитесь активировать один из этих механизмов!)

gbde_autoattach_all=»NO»

gbde_devices=»NO»

gbde_attach_attempts=»3″

gbde_lockdir=»/etc»

geli_devices=»»

geli_tries=»»

geli_default_flags=»»

geli_autodetach=»YES»

geli_swap_flags=»-a aes -l 256 -s 4096 -d»

 

После перехода в многопользовательский режим FreeBSD по умолчанию монтирует корневой раздел в режиме чтения/записи. Если вам необходимо обеспечить доступ к корневому разделу в режиме только для чтения, вы можете установить следующую переменную в значение NO. Многие считают, что так безопаснее, но это может вступать в противоречие с потребностями некоторых программных продуктов и, кроме того, это помешает вам редактировать какие-либо файлы, расположенные в корневом разделе!

root_rw_mount=»YES»

 

Когда во время загрузки FreeBSD пытается смонтировать файловые системы, она проверяет их внутреннюю целостность. Если ядро обнаруживает существенные проблемы, оно пытается автоматически исправить их с помощью fsck –y. Хотя в некоторых ситуациях это бывает совершенно необходимо, тем не менее в общем случае эта операция далеко не безопасна. (Обязательно прочтите внимательно главу 8, прежде чем активировать эту возможность!)

fsck_y_enable=»NO»

 

Ядро может также обнаруживать незначительные неполадки в файловых системах, которые могут быть устранены «на лету» посредством запуска fsck в фоновом режиме, в то время как система работает в многопользовательском режиме, о чем подробно рассказывается в главе 8. При определенных обстоятельствах эта возможность может вызывать проблемы с безопасностью. Вы можете контролировать использование утилиты fsck в фоновом режиме и определять, как долго система должна ожидать, прежде чем запустить fsck в фоне.

background_fsck=»YES»

background_fsck_delay=»60″

 

Разнообразные сетевые демоны

В состав FreeBSD входит ряд небольших программ (или демонов), которые работают в фоновом режиме и обслуживают соответствующие сервисы. Мы будем рассматривать многие из этих сервисов на протяжении всей книги, но здесь упомянем некоторые настройки, которые будут интересны опытным системным администраторам. Один из наиболее известных демонов – syslog(8). Протоколирование работы системы – это Самое Мудрое Решение. Файлы журналов занимают настолько важное место, что большая часть главы 20 посвящена теме протоколирования средствами FreeBSD и для FreeBSD.

syslogd_enable=»YES»

 

Как только вами будет принято решение о запуске демона протоколирования, вы сможете точно определить, как он должен запускаться, установив параметры командной строки. Система FreeBSD будет использовать эти параметры при запуске данного демона. Для всех программ, включенных в rc.conf, можно задать параметры командной строки в следующем формате.

syslogd_flags=»-s»

 

Другой популярный демон – inetd(8), сервер малых сетевых служб. (Демон inetd будет рассматриваться в главе 15.)

inetd_enable=»NO»

 

Одна из задач, которые обычно решаются с помощью FreeBSD, является обслуживание системы доменных имен (Domain Name System, DNS) с помощью демона named(8). DNS – это дорожная карта Интернета, которая позволяет простым людям пользоваться сетью. Поскольку прежде чем начать приносить пользу, сервер DNS должен быть сначала сконфигурирован, то по умолчанию запуск этого демона запрещен. DNS будет рассматриваться в главе 14.

named_enable=»NO»

 

Очень часто используется демон Secure Shell (SSH), обеспечивающий безопасное подключение по сети. Если вам необходимо обеспечить сетевое соединение с удаленной системой, вам определенно потребуется служба SSH.

sshd_enable=»NO»

 

Настройка демона SSH может выполняться через параметры командной строки, однако чаще всего для этих целей используются файлы в каталоге /etc/ssh. Подробности приводятся в главе 15.

sshd_flags=»»

 

Операционная система FreeBSD включает в себя самое разнообразное программное обеспечение, которое обеспечивает синхронизацию системных часов с остальным миром. Чтобы извлекать пользу из этого программного обеспечения, его необходимо настроить. Эту тему мы рассмотрим в главе 15.

ntpd_enable=»NO»

ntpd_flags=»-p /var/run/ntpd.pid -f /var/db/ntpd.drift»

 

FreeBSD включает в себя также небольшой демон SNMP, который обеспечивает работу инструментальных средств управления на базе протокола SNMP. Мы будем рассматривать настройку SNMP в главе 19.

bsnmpd_enable=»NO»

 

Сетевые параметры

Эти параметры управляют настройкой сетевых функций FreeBSD во время начальной загрузки. Каждый компьютер в Интернете должен иметь имя хоста (hostname). Имя хоста – это полное доменное имя системы, например www.absolutefreebsd.org. Многие программы не смогут нормально работать без такого имени.

hostname=»»

В состав FreeBSD входят несколько различных пакетов, предназначенных для реализации межсетевого экрана. Мы коротко рассмотрим пакетный фильтр (Packet Filter, PF) в главе 9. Активация и деактивация пакетного фильтра производится в rc.conf с помощью следующей переменной:

pf_enable=»NO»

 

TCP/IP – это довольно старый сетевой протокол1, который неоднократно подвергался изменениям и расширениям. Некоторые изменения и дополнения были объединены в «TCP Extensions» (Расширения TCP), как описывается в главе 6. Многие операционные системы могут воспользоваться преимуществами расширений TCP, но наиболее старые на это не способны. Если у вас возникают сложности при взаимодействии с достаточно древними узлами сети, запретите использование расширений TCP.

tcp_extensions=»YES»

 

Для вас может представлять интерес информация о неудачных попытках подключения сети к вашей системе. Описанная далее возможность поможет вам обнаружить попытки сканирования портов и несанкционированного вторжения, однако наряду с полезной информацией она будет накапливать в протоколах системы массу ненужного мусора. Для интереса можно включить эту функцию на короткое время, просто чтобы посмотреть, что в действительности происходит в вашей сети. (Тем не менее помните, что она действительно может вызывать изжогу у администратора.) Установите эту переменную в значение 1, чтобы система записывала в файл протокола информацию о неудачных попытках соединения.

log_in_vain=»0″

 

Маршрутизаторы используют протокол ICMP для уведомления клиентских компьютеров о наличии сетевых шлюзов для конкретных маршрутов. Хотя существуют допустимые варианты использования ICMP, этот протокол широко используется хакерами для перехвата данных. Если в сети переадресация ICMP не применяется, установка этого параметра незначительно усилит защиту системы. О том, применяется ли переадресация ICMP, можно спросить у сетевого администратора.

icmp_drop_redirect=»NO»

 

А если вы и есть сетевой администратор и не можете ответить на этот вопрос, просто включите протоколирование пакетов переадресации, получаемых вашей системой, в файл /var/log/messages.1 Обратите внимание: если ваш сервер атакуют злоумышленники, это быстро может привести к переполнению жесткого диска сообщениями в файле протокола.

icmp_log_redirect=»NO»

 

Чтобы подключиться к сети, необходимо каждому сетевому интерфейсу присвоить IP-адрес. Некоторые подробности этой процедуры приводятся в главе 6. Получить перечень имеющихся сетевых интерфейсов можно с помощью команды ifconfig(8). Добавьте названия всех сетевых интерфейсов, каждый в отдельной строке, и укажите в кавычках информацию о настройках. Например, чтобы присвоить сетевому интерфейсу em0 IP-адрес 172.18.11.3 и сетевую маску 255.255.254.0, следует ввести следующую строку:

ifconfig_em0=»inet 172.18.11.3 netmask 255.255.254.0″

 

Если в сети используется DHCP, тогда вместо IP-адреса следует указать значение dhcp.

ifconfig_em0=»dhcp»

 

Аналогичным образом производится назначение сетевому интерфейсу псевдонима (alias). Псевдоним – это не фактический IP-адрес сетевого интерфейса, но интерфейс будет откликаться на этот IP-адрес, о чем подробнее рассказывается в главе 6. Система FreeBSD в состоянии обеспечить поддержку нескольких тысяч псевдонимов для единственного сетевого интерфейса при помощи записей в rc.conf следующего вида:

ifconfig_em0_aliasnumberaddress netmask 255.255.255.255″

Если вы вообще никогда не слышали о перенаправлении ICMP, не просто идите, а бегом бегите в ближайший книжный магазин и купите книгу Чарльза М. Козиерока (Charles M. Kozierok) «The TCP/IP Guide» (No Starch Press, 2005). И сразу же принимайтесь за чтение.

Номера псевдонимов должны охватывать непрерывный ряд чисел и начинаться с 0. Если в порядковых номерах псевдонимов появится разрыв, то псевдонимы с номерами выше разрыва не будут установлены во время загрузки. (Это довольно типичная проблема, и если вы столкнетесь с ней, проверьте список псевдонимов.) Например, псевдоним адреса 192.168.3.4 должен быть определен как:

 

ifconfig_em0_alias0=»192.168.3.4 netmask 255.255.255.255″

 

Параметры сетевой маршрутизации

Реализация сетевого стека во FreeBSD включает в себя массу возможностей маршрутизации интернет-трафика. Перечень параметров маршрутизации начинается с таких простых, как определение шлюза по умолчанию. Если IP-адрес обеспечивает нормальную работу в сети, то шлюз по умолчанию обеспечивает доступ ко всем узлам, которые находятся за пределами локальной сети.

defaultrouter=»»

 

Устройства управления сетью, такие как межсетевые экраны, должны передавать пакеты между различными сетевыми интерфейсами. Эта возможность во FreeBSD по умолчанию выключена, но ее легко можно активировать. Просто сообщите системе, что она будет играть роль шлюза, и она обеспечит связь между несколькими сетями.

gateway_enable=»NO»

 

Если системе необходима поддержка протокола Routing Information Protocol (протокол маршрутной информации), используйте параметр router_enable, чтобы активировать его на запуске системы. Могу заметить, что имя этого параметра не совсем точно отражает его суть – многие маршрутизаторы используют протоколы, отличные от RIP, однако такое название параметр носит уже несколько десятков лет. Если вам в действительности не требуется поддержка протокола RIP, оставьте этот параметр в покое!

router_enable=»NO»

 

Параметры консоли

Параметры консоли управляют поведением монитора и клавиатуры. С их помощью можно изменить язык клавиатуры, размер шрифта на мониторе и многое-многое другое. Например, по умолчанию используется стандартная раскладка клавиатуры US, которая нередко называется «QWERTY». В каталоге /usr/share/syscons/keymaps есть довольно много файлов раскладок. Я предпочитаю раскладку Dvorak, которой соответствует файл us.dvorak. Если указать в параметре keymap значение us.dvorak, после загрузки в многопользовательском режиме система будет использовать раскладку клавиатуры Dvorak.

keymap=»NO»

Система FreeBSD гасит монитор спустя определенное время бездействия клавиатуры, которое указано в параметре blanktime. Если в этом параметре указать значение NO, тогда система вообще не будет гасить экран. Имейте в виду, что современные мониторы сами гасят экран через некоторое время в целях экономии электроэнергии. Если экран гаснет, даже если вы установили параметр blanktime в значение NO, проверьте настройки BIOS и посмотрите руководство монитора.

blanktime=»300″

 

Кроме всего прочего, система FreeBSD позволяет использовать в консоли различные шрифты. Шрифты, используемые по умолчанию, вполне пригодны для сервера, однако у вас может появиться желание поменять их на настольном компьютере или на ноутбуке. В моем ноутбуке используется 17-дюймовый экран с пропорциями, позволяющими просматривать видеофильмы, и на таком экране шрифты по умолчанию выглядят довольно неприглядно. У вас есть возможность выбрать любой шрифт из каталога /usr/share/syscons/fonts. Попробуйте несколько из них и посмотрите, как они будут выглядеть на вашем экране. Названия шрифтов включают в себя и их размеры, и вы можете подобрать подходящую переменную. Например, в файле swiss8×8.fnt находится шрифт Swiss, размером 8 на 8 пикселей. Чтобы использовать его, необходимо установить его имя в параметре font8x8.

font8x16=»NO»

font8x14=»NO»

font8x8=»NO»

 

Существует возможность использовать мышь в консоли, даже не имея графического интерфейса. По умолчанию FreeBSD сама пытается определить тип мыши. Если вы используете мышь PS/2 или USB, есть вероятность, что она заработает сама собой, без выполнения специальных настроек, как только вы активизируете демон управления мышью. Некоторые устаревшие или необычные типы мыши требуют ручной настройки, порядок которой описывается в странице руководства moused(8).

moused_enable=»NO»

moused_type=»AUTO»

 

Можно также изменить размеры изображения на экране монитора. Если размеры изображения не совпадают с размерами экрана, можно изменить число строк и их длину, изменить цвет текста, изменить форму курсора и его поведение и выполнить все остальные мелкие настройки. Полный список возможных вариантов можно получить в странице руководства vidcontrol(8).

allscreens_flags=»»

 

Аналогичным образом можно управлять поведением клавиатуры в довольно широких пределах. Настроить можно все, начиная от скорости автоповтора нажатой клавиши до переназначения функциональных клавиш. За дополнительной информацией обращайтесь к странице руководства kbdcontrol(8).

allscreens_kbdflags=»»

 

Прочие параметры

Заключительное попурри параметров настройки может быть, а может и не быть, полезным для любого окружения, но они используются достаточно часто, чтобы быть достойными упоминания. Например, не все системы имеют доступ к принтеру, но в тех из них, которые имеют такой доступ, будет необходимо использовать демон печати lpd(8). Мы еще вернемся к настройке принтера в главе 15.

ldp_enable=»NO»

 

Демон sendmail(8) управляет приемом и передачей электронной почты. Практически все системы должны обладать возможностью отправлять электронную почту, но значительная часть компьютеров, работающих под управлением FreeBSD, не нуждается в возможности принимать электронную почту. Параметр sendmail_enable отвечает за настройку обработки входящей электронной почты, а sendmail_outbound_enable позволяет системе отправлять почту.

sendmail_enable=»NO»

sendmail_outbound_enable=»YES»

Одна из интересных особенностей FreeBSD – способность запускать программное обеспечение, созданное для других операционных систем. Наиболее часто используется режим совместимости с программным обеспечением, созданным для Linux, но FreeBSD поддерживает возможность запуска двоичных программ для SCO UNIX и SVR4. Эта особенность будет обсуждаться в главе 12. Не активируйте эти режимы совместимости, пока не прочитаете эту главу!

linux_enable=»NO»

 

Жизненно важная часть любой UNIX-подобной операционной системы – это разделяемые библиотеки. У вас есть возможность определять перечень каталогов, где FreeBSD будет искать необходимые ей библиотеки. Обычно настройки по умолчанию вполне адекватны, но если вы обнаруживаете, что вам регулярно приходится изменять значение переменной окружения LD_LIBRARY_PATH, тогда вам следует воспользоваться этим параметром настройки. Дополнительные рекомендации будут даны в главе 12.

ldconfig_paths=»/usr/lib /usr/X11R6/lib /usr/local/lib»

 

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

kern_securelevel_enable=»NO»

kern_securelevel=»-1″

 

Теперь, когда вы получили некоторое представление о параметрах настройки, поддерживаемых системой FreeBSD «из коробки», давайте посмотрим, как можно их использовать на практике.

Система сценариев запуска rc.d

Переход от однопользовательского режима к многопользовательскому система FreeBSD производит с помощью сценария командного интерпретатора /etc/rc. Этот сценарий читает содержимое конфигурационных файлов /etc/defaults/rc.conf и /etc/rc.conf и запускает коллекцию других сценариев, основываясь на полученных параметрах настройки. Например, если был разрешен запуск демона USB, сценарий /etc/rc запустит другой сценарий, созданный специально для запуска этого демона. В состав FreeBSD входят сценарии, предназначенные для запуска служб, монтирования дисков, настройки соединения с сетью и установки параметров безопасности. Эти сценарии можно использовать для запуска и остановки служб, точно так же, как это делает сама система, за счет чего обеспечивается поддержание целостности системы и упрощается ваша жизнь. Эти сценарии находятся в каталоге /etc/rc.d.

Активировав функциональные возможности в rc.conf, вы сможете управлять ими с помощью сценариев rc.d. Например, предположим, что вам потребовалось запустить демон SSH, который раньше не использовался. Установите параметр sshd_enable в значение YES и перейдите в каталог /etc/rc.d. Здесь вы найдете сценарий с именем sshd.

Что такое rcNG?

Когда-то давно FreeBSD включала в себя пригоршню монолитных сценариев /etc/rc, которые выполняли настройку всей системы. Каждый демон или служба запускался с помощью нескольких строк, запрятанных в одном из этих сценариев. Для большинства систем такой подход вполне оправдывал себя, но он не отличался особой гибкостью. Современная система маленьких сценариев командного интерпретатора, предназначенных для запуска отдельных служб, была разработана в рамках системы NetBSD и затем быстро перекочевала во FreeBSD. В настоящее время только эта система используется во всех версиях FreeBSD, а любые упоминания об rcNG – это лишь отзвуки эпохи перехода.

 

#./sshd start Starting sshd. #

Ни один сценарий из rc.d не будет запущен, если не был активирован соответствующий ему параметр в rc.conf. Это гарантирует, что все, что работало до перезагрузки, будет запущено и после нее. Вы можете останавливать работу служб с помощью команды stop, проверять состояние с помощью команды status и перезапускать их с помощью команды restart. Если необходимо запустить программу всего один раз с помощью соответствующего ей сценария в rc.d и вам не нужно, чтобы она запускалась после перезагрузки, используйте команду forcestart.

Подробнее содержимое каталога rc.d будет рассматриваться в главе 12, когда мы будем обсуждать настройку и написание собственных сценариев rc.d.

Останов системы

Система сценариев запуска rc.d в системе FreeBSD играет двоякую роль – они не только должны производить запуск системных служб, они должны также производить их останов перед выключением питания. Одни сценарии должны демонтировать жесткие диски, другие отвечают за остановку демонов и удаление временных файлов, оставшихся после работы. Некоторые программы не переживают по поводу бесцеремонности остановки, когда система готовится к выключению на ночь – а ведь после остановки системы все клиенты, подключенные через SSH, будут отключены, и любые запрошенные веб-страницы просто не будут доставлены. Однако в случае с базами данных очень важно, как это программное обеспечение будет остановлено, поскольку бесцеремонная остановка может привести к повреждению данных. Многие другие программы, которые имеют дело с данными, также чувствительны к способу остановки: если не позволить им корректно завершить свою работу, потом можно сильно пожалеть об этом.

Когда выполняется остановка системы, с помощью команды shutdown(8) или reboot(8) FreeBSD вызывает сценарий /etc/rc.shutdown. Этот сценарий вызывает сценарии из rc.d с параметром stop, в порядке, обратном порядку их запуска на этапе загрузки, давая тем самым серверным программам удалить временные файлы и завершить свою работу нормальным образом.

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

 

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

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

Закончите арифметическое действие * Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.