NanoBSD: создаем собственные устройства


Настройка NanoBSD

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

Сценарии настройки

Сценарии настройки — это сценарии командного интерпретатора, вызываемые из сценария nanobsd.sh или из конфигурационного файла. Сценарии настройки служат для изменения файлов, которые наверняка будут изменяться по мере развития операционной системы FreeBSD. Например, через каждые несколько выпусков FreeBSD обновляется версия SSH, включенная в состав системы. В такой ситуации нежелательно создавать свой конфигурационный файл для sshd(8), так как он может оказаться несовместимым с новой версией OpenSSH. Предпочтительнее использовать конфигурационный сценарий, который будет вносить необходимые изменения в файл sshd_config, входящий в состав системы, независимо от ее версии. NanoBSD включает сценарий настройки именно для этой цели.

cust_allow_ssh_root () (
        sed -i "" -е '/PermitRootLogin/s/.*/PermitRootLogin yes/' \
            ${NANO_WORLDDIR}/etc/ssh/sshd_config
)

Этот простой сценарий sed(1)* изменяет единственную строку в файле /etc/ssh/sshd_config, чтобы разрешить пользователю root выполнять вход в систему NanoBSD через SSH. Этот сценарий окажется бесполезным, если параметр РеrmitRootLogin переименован или удален, но такое происходит крайне редко, если вообще происходит. Вы можете включить в сценарий настройки все, что пожелаете, даже сложнейший сценарий на языке Perl, который принимает значение NANO_NAME в качестве аргумента и создает нестандартный файл rc.conf для вашего образа.

В состав NanoBSD входят четыре сценария настройки:

cust_comconsole
Разрешает вход через последовательную консоль и через последовательные линии связи.

cust_allow_ssh_root
Разрешает пользователю root вход в систему через SSH.

cust_install_files
Копирует файлы из каталога Files в законченный образ.

cust_pkg
Устанавливает в законченный образ пакеты из каталога Pkg.

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

Добавление пакетов

Создайте каталог Pkg в каталоге NanoBSD, и сценарий настройки cust_pkg выполнит установку в образ всех пакетов, находящихся в этом каталоге. Это действительно так и есть.

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

Добавление файлов

Сценарий настройки cust_install_files копирует в образ файлы из дерева подкаталогов каталога Files. По умолчанию каталог Files содержит единственный подкаталог root. Содержимое этого подкаталога копируется в каталог /root образа диска.

Если вам регулярно приходится собирать образы NanoBSD, рекомендую изменить сценарий cust_install_files. NanoBSD включает в каталог Files несколько файлов, которые считаются системными. При обновлении дерева исходного кода csup(1) затрет любые изменения в любых файлах каталога Files. Чтобы не потерять свои изменения, скопируйте содержимое cust_install_files в свой сценарий, дайте ему подходящее имя, например cust_install_dns_files и разместите где-нибудь за пределами каталога Files.

Я собираю сервер DNS, поэтому мне нужно создать свои файлы named.conf и rndc.conf. Эти файлы должны находиться в каталоге /var/named/etc/namedb, поэтому мне нужно создать каталог /usr/src/tools/tools/nanobsd/Files/var/named/etc/namedb (ик!) и поместить туда мой нестандартный файл.

Точно так же мне потребуется файл rc.conf. Я создам файл Files/etc/rc.conf, где будет находиться моя конфигурация. Мне необходимы ключи SSH, которые я создам так же, как делал это для бездисковой станции. Похожим образом мне нужно будет создать файл syslog.conf, чтобы протоколировать события на сетевом сервере протоколов.

Наконец, надо избавиться от проблемы скорости обмена с последовательной консолью, наблюдаемой при работе с устройствами Soekris. Мы установим скорость обмена с последовательной консолью в конфигурационном файле с помощью переменной COMCONSOLE_SPEED, сообщив системе FreeBSD, что по умолчанию должна использоваться скорость 19 200. Если это не сделано, то самый простой способ ликвидировать данный недостаток — сообщить системе FreeBSD о необходимости использовать более высокую скорость обмена с консолью. Сделать это можно с помощью соответствующей записи в файле /boot/loader.conf. Просто добавьте в файл Files/boot/loader.conf следующие строки:

comconsole_speed=9200"
console="comconsole,vidconsole"

Благодаря им NanoBSD установит скорость обмена по умолчанию с последовательной консолью равной 19 200 бит/с. Однако эти настройки не будут иметь силы, пока не запустится загрузчик. Действительно, лучше собирать систему NanoBSD, задав скорость обмена с консолью равной 19 200 в переменной CONF_WORLD.

Уточнение настроек

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

Сборка образа NanoBSD требует некоторого времени, но самая продолжительная часть процесса — это сборка ядра и остального программного обеспечения. Однако можно добавлять файлы в настраиваемый образ и производить сборку образа, минуя сборку ядра и программ. Для этого достаточно вызвать сценарий nanobsd.sh с ключом -b:

# /bin/sh nanobsd.sh -b -с myconfig.txt

С этим ключом сценарий пропустит этапы buildworld и buildkernel и соберет свежий образ диска с измененными файлами.

Работа с NanoBSD

Итак, вы получили образ NanoBSD, который загружается и включает все необходимое программное обеспечение. Образ скопирован на flash-диск и работает без ошибок. Но что если требуется что-то немного изменить или установить обновления?

Не волнуйтесь. В NanoBSD имеются специальные средства как раз для подобных ситуаций.

Незначительные изменения

Для обработки незначительных изменений в NanoBSD есть специальный дисковый участок cfg. Все файлы, расположенные в /cfg, копируются в каталог /etc во время загрузки NanoBSD. Это означает, что можно изменить, например, файл /etc/rc.conf, не собирая новый образ. Чтобы понять, как использовать эту возможность, загляните в сценарий change_password в каталоге Files/root. Этот сценарий запускает команду passwd(1), чтобы позволить вам изменить пароль пользователя root, монтирует раздел /cfg в режиме «чтения/записи», копирует туда файлы с паролями и демонтирует раздел /cfg. Когда система будет загружаться в следующий раз, NanoBSD скопирует эти файлы в каталог /etc.

Если вы вносите какие-либо изменения в работающую систему NanoBSD, рекомендую тут же внести соответствующие изменения в систему сборки NanoBSD. Благодаря этому при создании нового образа в нем будут учтены все последние изменения.

Обновление образов дисков

Итак, вы собрали образ NanoBSD и запустили его на устройстве Soekris, закрепив его на вершине ветряного генератора, так что теперь можете управлять его выходной мощностью с помощью собственных сценариев SNMP. В один прекрасный день вам придется выполнить обновление. Готовы ли вы вскарабкаться по лестнице на вершину ветряка, чтобы установить новую flash-карту? Конечно нет, большинство разработчиков FreeBSD слишком малоподвижны, чтобы согласиться на подобные мучения.*

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

Удаленное обновление инсталляции NanoBSD производится через SSH с помощью сценариев updatep1 и updatep2. Если работающая система находится на первом дисковом участке, используйте сценарий updatep2. Если на втором — updatep1. Помимо доступа к командной строке, SSH предоставляет вам возможность передавать файлы и даже запускать команды на удаленной системе. В следующем примере выполнен вход в систему NanoBSD и выполняется обновление дискового участка 2 на сервере 192.168.1.5 из образа диска:

Здесь мы подключились к удаленной системе и отправили на нее вывод команды cat(1) (1), в данном случае — образ одного раздела. На удаленной системе мы запустили сценарий updatep2, который сначала путем некоторых базовых проверок убедится, что все в порядке, а затем скопирует образ диска на неиспользуемый участок. Кроме того, сценарий назначит обновленный раздел загрузочным по умолчанию. Если обновление завершилось неудачей, то есть система загружается, но приложения работают некорректно, с помощью последовательной консоли выполните загрузку с другого участка или с помощью boot0cfg(8) на работающей системе сообщите NanoBSD, что в следующий раз нужно загрузиться с другого участка.

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

Комментарии запрещены.