Заголовок сообщения: BNT 800AP - USB - FreeBSD 8.1. Перечитав весь форум все попробовал, не что не вышло.
Компактная инсталляция Free. BSD 1. 0 для центра сертификации / Хабрахабр. Однажды возникла необходимость в подчинённом, в рамках имеющейся инфраструктуры центре сертификации для 'выездного' использования — создания временных технологических сертификатов во время различных разъездов. Необходимо было сделать его мобильным и разумно, для данных целей, защищённым. Приемлемым был признан вариант с загрузочной флешкой с каким- нибудь *nix + openssl и типовым сценарием использования — имеющийся под рукой компьютер перезагружаем, вставляем флешку, загружаемся с неё, работаем, вытаскиваем флешку, перезагружаем компьютер.
Before installing PC-BSDВ.
Секретные ключи данного ЦС, его файлы конфигурации, ключевые файлы для двухфакторной аутентификации могут быть вынесены на отдельные носители. Начался выбора дистрибутива *nix. Требования были следующие: дистрибутив должен быть поддерживаемым в актуальном состоянии, в том числе и Open. SSLналичие i. 38. Гигабайты памяти нам не понадобятся, а вот возможность запуска на нетбуке с x. Intel Atom будет полезназапуск системы из оперативной памяти, либо корректный запуск и работа с r/o разделов.
Вариант 1 - Настройка штатного менеджера загрузки. После того как FreeBSD установлена, следует войти в систему в качестве root и выполнить команду # grub-install /dev/ad0 Installation finished. FreeBSD — бесплатная UNIX-подобная операционная система, потомок AT&T Unix по линии BSD, созданной в университете Беркли. If you're running this on a disk with data you wish to save then WE 2.3.7, <<Р I prefer the multiple-write capability of USB, and this way I donв
В идеале, корректная работа с флешки при включенной защите от записи (при использовании Qumo серии Yin & Yan)возможность компактной инсталляциижелателен достаточно большой срок поддержки релиза. В результате в финал вышли два дистрибутива — Alpine Linux и Open. BSD. Всё бы хорошо, и не было бы смысла писать эту статью, как ВНЕЗАПНО уточнились требования к операционной системе — потребовалась полная поддержка русского текста в Unicode в системной консоли. На ввод и на вывод.
Ну всё, приплыли. Оба финалиста выбыли из соревнования. Alpine Linux в силу используемой в нём компактной библиотеки C, а Open. BSD. Однако это требование позволило иначе взглянуть на доступные дистрибутивы, и в фаворитах неожиданно оказалась Free.
BSD. Консольный драйвер vt (ранее известный как newcons) поддерживает Unicode «из коробки», русские шрифты идут в комплекте, вышеописанные критерии в сумме исполняются достаточно полно. Бонусом можно реализовать возможность оффлайнового бинарного обновления системы на флешке. Началось изучение возможности компактной инсталляции стандартными способами. Готовые наборы — tinybsd, nanobsd, picobsd произвели впечатление «старый, древний, ещё древнее». Одни только расчёты секторов, головок, цилиндров для разных типов флешек в picobsd.
В реальной жизни вышеуказанные возможности применяются, естественно, выборочно. Нет особого смысла один раздел монтировать в памяти, а другой, с той же флешки — вживую. И да, это будет не слишком похоже на «ядро + systemd + шелл + openssl», но не ставилась же цель уместить всё на дискету. И с fdformat. com и 8. К тому же, для обеспечения заявленной возможности обновления системы, сильно её уродовать (свернуть всё в один crunchgen бинарник и засунуть в ядро) нельзя — а то freebsd- update не признает. Забегая вперёд — размер системы в максимальной конфигурации (два ядра + два образа) у нас составит 4. Мб, а в минимальной (одно ядро + один образ) — 7.
Без установленных пакетов. Возможность выбора ядра при загрузке оказалась очень удобна для отладки — если что- то не работает, то попеременно загружаясь с разными ядрами и одним и тем же образом системы можно определить в сборке чего проблема — ядра или мира. Можно, конечно, - STABLE, но тогда не будет работать freebsd- update с бинарными обновлениями.
В процессе работы мы скомпилируем мир и ядро, установим их в отдельный каталог, настроим систему, удалим ненужные файлы, после чего сделаем . Ничего сложного. Создадим рабочее окружение. Можно в железе, но проще в виртуальной машине. Скачиваем Free. BSD- 1. RELEASE- i. 38. 6, устанавливаем, при выборе системных компонент включив установку исходных текстов. Дерево портов и игры не нужны.
Загружаемся, заходим как root. Подготовка. Всё будем делать из- под root. Для удобства установим несколько переменных окружения, они будут использоваться далее по тексту.
У пользователя root шелл по умолчанию csh, поэтому в /root/. Перезагружаемся. Создадим каталог /root/ca. BSD и рабочие подкаталоги в нём. Подкаталоги в нём: vanilla/ — тут мы настраиваем корень будущей системы, installworld, installkernelmnt/ — временная точка монтированияcustom/ — из содержимого этого каталога будем создавать . Компилируем мир и ядро.
Создаём файл конфигурации для нашего ядра. На этапе отладки используем конфигурацию, базирующуюся на GENERIC и состоящую из нескольких строчек: tools/CABSD- DEV#. CABSD- DEV. include GENERIC. CABSD- DEV. makeoptions NO. Для него берём файл GENERIC ядра, удаляем всё лишнее (периодически компилируя и проверяя — грузится . Файл конфигурации нашего рабочего ядра стал выглядеть так: tools/CABSD#.
I4. 86. Читаем man src. WITHOUT. Приходит понимание, что понадобится не один, а целых два файла настроек — один для buildworld, второй плюсом для installworld. WITHOUT. Но в нашем случае. WITHOUT. На первом же шаге немного схитрим. При компиляции мира очень много времени уходит на компиляцию компилятора, но у нас же есть готовый, в базовой системе.
К тому же только что обновлённый. Им мы и воспользуемся.
Устанавливаем переменные$ setenv CC `whereis - bq clang`. CPP `whereis - bq clang- cpp`. CXX `whereis - bq clang++`. Создаём символьную ссылку на файл конфигурации ядра CABSD в соответствующий каталог (в данном примере пропустим отладочный этап с CABSD- DEV, сразу будем делать конечный вариант ядра). Дополнительные опции вида '- j N' по желанию$ cd /usr/src. USER=IT HOSTNAME=hq. SRCCONF=$. Обратите внимание — между этапами компиляции и установки не стоит посредством freebsd- update обновлять систему или выключать параметры в файле worldbuild.
Второй файл с параметрами мы указываем через параметр . Вся система у нас находится на одном разделе, при загрузке монтирующемся в памяти — поэтому варианты с несмонтировавшемся usr практически исключены, и смысл замены может быть лишь в возможности уменьшить размер системы за счёт удаления библиотек, ставших ненужными из- за того, что использующие их программы заменены на слинкованный статически rescue. Впрочем, экономию надо просчитывать, а в нашем примере мы rescue компилировать не будем. Если будете заменять, то можно использовать скрипт (подсмотрен в mfs. BSD)tools/. Популярный mc занимает 1.
Мб, mc- light — 6 Мб, deco — 2. Mb со всеми зависимостями. Если ставить из портов, то, вероятно, можно было бы немного уменьшить размер с помощью опций компиляции, но в пакетах нашелся компактный консольный файловый менеджер clex — 0. Мб, который мы и установим. Второй момент — редактор с поддержкой Unicode. Формально, по букве задания, поддержка была обеспечена — русский текст ввести в консоли в командной строке csh можно (echo привет), вывести на экран тоже (cat /usr/bin/help), но хотелось обеспечить более комфортную работу с текстами — отредактировать какой- нибудь файл, вести записи, мало ли.
Комплектный /usr/bin/ee русский текст в Unicode файле показывает как . Причём jupp представляет собой переработанную версию редактора joe, но если оригинальный joe из пакетов тянет за собой 4. Мб зависимостей, то jupp размером с vi.
Причём все проблемы у редакторов ee и puff лишь с отображением русских букв, при вводе «вслепую» всё сохраняется корректно. В итоге проблема выбора между комплектным vi и jupp из пакетов была переложена на плечи потенциальных пользователей, которые проголосовали за jupp — понравилась подсветка синтаксиса и сравнительная дружелюбность редактора. Устанавливаем misc/clex и editors/jupp. Какие- то пользовательские пакеты можно положить в каталог $. Для возможности монтирования устройств добавляем в группу operator. В качестве шелла используем csh, опция WITHOUT. Создадим файл конфигурации для файлового менеджера clex.
EOF > ~/. config/clex/config. CLEX configuration file.
CMD. Создадим файл конфигурации для vi. EOF > ~/. nexrc. Создадим файл . logout, он потребуется позже. Данный скрипт необходимо запустить до чистки системы, пока в $. Все файлы лежат в каталоге $. Можно /tmp отдельно не монтировать, оставить в корневом разделе, но тогда при создании флешки необходимо выделить больше свободного места для него внутри образа системы.
При обновлении системы /tmp используется freebsd- update для извлечения файлов, самый большой из них в нашей конфигурации это GENERIC ядро, около 1. Мб, поэтому сильно маленьким этот раздел лучше не делать. Раздел /dev/gpt/ca предназначен для скриптов и файлов конфигурации нашего ЦС, /dev/gpt/keys. FAT раздел для обмена с внешними системами. Его мы монтируем с поддержкой длинных имён, но без поддержки их перекодировки — принято принципиальное решение об использовании лишь ASCII символов в именах файлов на этом разделе. Поэтому и систему, и ядро компилируем без поддержки iconv. Эти разделы мы автоматически при старте не монтируем (параметр noauto), так как при каких- то неполадках (трижды неправильно введённый пароль для geli, например, что не позволит создать раздел keys.
У оператора будет шок и моральная травма. Поэтому эти разделы будем монтировать в userspace пользователя 'ca', для чего при создании включим его в группу operator и настройками devfs и sysctl (ниже) предоставим необходимые полномочия. Обратите внимание — в fstab раздел с ключами для ЦС монтируется в режиме только для чтения, поэтому перед созданием ключей надо не забыть перемонтировать его для записи (mount - u - o rw /dev/gpt/keys.
Добавляем автоматическое монтирование разделов ЦС. Применимо только для флешки. CD будут выскакивать ошибки об отсутствующих разделах. Поэтому, если мы не хотим, чтобы его владельцем оказался root: ca, необходимо создать его из- под пользователя ca, хотя бы с помощью скрипта conf/ca.
Теперь мы предоставим возможность нашему пользователю 'ca' возможность монтировать сторонние флешки и разделы на нашей флешке (с настройками ЦС, ключами, разделом обмена). Первый — с автологином пользователя 'ca' (см. Интернет не предусмотрен by design, поэтому часики будем при необходимости устанавливать вручную. Благо, для данного ЦС точность плюс- минус минута абсолютно не критична.
Проверьте время ==. Берём файл etc/defaults/rc. Free. BSD: releng/1.