miniBSD - reducing FreeBSD


Часто бывает нужно установить маршрутизатор, сервер доступа, принтсервер, или что-то в этом роде, на старой и слабой машине с маленьким диском. Или бывает так, что хочется избавиться от жёсткого диска вовсе, как от потенциально слабого звена, и использовать вместо него что-нибудь более надёжное. Мануэль Каспер (Manuel Kasper) написал подробное пошаговое руководство, как установить FreeBSD на Flash с интерфейсом IDE. Разумеется, это же руководство можно использовать и при установке системы на маленький жёсткий диск. В зависимости от набора компонентов, инсталляция занимает около 22 мегабайт, а если не устанавливать Perl - около 12 мегабайт.

________________________________________

Оглавление

1. Установка FreeBSD

1. Chroot jail

2. Создание дерева каталогов

3. Бинарники - статика или динамика?

4. Копирование бинарников

5. Пересборка ядра системы

6. Копирование библиотек

7. Каталог /etc

8. Каталог /dev

9. Паковка

10. Генерация образа для флэшки

11. Копирование данных на флэшку

12. Загрузка системы

" Приложение A. Установка портов.

" Приложение B. Установка Perl.

" Приложение C. Сохранение данных между перезагрузками.

________________________________________

1. Установка FreeBSD

Прежде всего, вам понадобится уже установленная FreeBSD. Достаточно минимальной инсталляции, но в неё обязательно должны быть включены исходные тексты ядра. Это руководство основано на FreeBSD 4.8, но оно, по идее, должно быть применимо и к более ранним версиям. К FreeBSD 5.0 она также может быть применима, но есть и некоторые отличия, отмеченные особо. Что же касается FreeBSD 5.1, то в ней используются rc-скрипты нового поколения, disklabel заменён на bsdlabel, и её синтаксис слегка изменён. Словом, если вы хотите использовать FreeBSD 5.1, с некоторыми вещами вам придётся разбираться самостоятельно.

1.1 chroot jail

В процессе подготовки бинарников для MiniBSD, некоторые бинарники вашей базовой системы могут быть перезаписаны, так как для простоты мы не будем устанавливать их прямо в рабочий каталог MiniBSD, а вместо этого скопируем их в базовую систему и перенесём в MiniBSD позднее. Если вы не хотите менять бинарники базовой системы, у вас есть выбор: использовать второй жёсткий диск, или использовать jail. Первый вариант проще, но если у вас нету под рукой ещё одного жёсткого диска, вам придётся использовать "песочницу", chroot jail.

Создать "песочницу" достаточно просто - вам нужно всего лишь создать каталог на разделе, имеющем достаточно свободного места (скажем, 800 мегабайт или около того), например, /usr/jail. После этого вставьте ваш инсталляционный диск с FreeBSD, запустите /stand/sysinstall, начните Custom Installation, и укажите в опциях "Install Root" на ваш свежесозданный каталог /usr/jail. После окончания инсталляции, скажите

chroot /usr/jail

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

Дополнено by Murray Taylor: Для того, чтобы нечаянно не заблудиться, рекомендуется изменить приглашение шелла так, чтобы оно явно показывало, находитесь ли вы в "песочнице", или в базовой системе. Для этого измените значение строки "set prompt" в /usr/jail/root/.cshrc так:

set prompt = "MiniBSD %~ %# "

Кроме этого, вы также можете скопировать /etc/localtime в /usr/jail/etc/localtime для того, чтобы сохранить временные метки ваших файлов.

Все дальнейшие манипуляции описываются безотносительно, работаете ли вы в базовой системе, или в "песочнице".

________________________________________

2. Создание дерева каталогов.

Мы собираемся поместить всю инсталляцию MiniBSD в один каталог, так, чтобы в дальнейшем можно было просто скопировать содержимое каталога на флэшку. Условимся, что это каталог /usr/minibsd, единственное требование - около 100 мегабайт свободного места на разделе, в котором создаётся каталог. После этого необходимо создать в этом каталоге стандартные подкаталоги (/bin, /sbin и т.п.). Можно использовать утилиту mtree, или сделать это вручную, как вам удобнее. Структура подкаталогов должна быть такой:

.

|-- bin

|-- boot

| `-- defaults

|-- dev

|-- etc

| |-- defaults

| |-- mtree

| |-- namedb

| |-- ppp

| |-- ssh

| `-- ssl

|-- mnt

|-- modules

|-- proc

|-- root

|-- sbin

|-- tmp -> /var/tmp

|-- usr

| |-- bin

| |-- lib

| `-- aout

| |-- libexec

| |-- local

| |-- sbin

| `-- share

| `-- misc

`-- var

Права доступа должны быть 0755 (root.wheel) для всех каталогов, кроме /proc (у него должны быть 0555). Можно также поставить 0700 на /root , но это дело вкуса.

Не забудьте поставить симлинк /tmp на /var/tmp - это важно, так как корневая файловая система будет монтироваться в режиме read-only, а /var будет размещён в памяти (memory file system).

________________________________________

3. Бинарники - статика или динамика?

В обычной инсталляции FreeBSD бинарники в /bin и /sbin слинкованы статически. Это сделано специально, ввиду их особой важности для системы, чтобы они не зависели от системных библиотек. Если слинковать их динамически, можно сэкономить 6-7 мегабайт пространства на флэшке. Поскольку мы собираемся держать всю инсталляцию на одном разделе, то все эти бинарники будут нормально работать даже в однопользовательском режиме. Единственным недостатком является то, что если библиотеки каким-то образом окажутся повреждены, восстановить работоспособность системы будет непросто. Решайте сами, что важнее - надёжность, или свободное место на флэшке. Если вы решили пересобрать бинарники и слинковать их динамически, добавьте в /etc/make.conf строку:

NOSHARED=no

Затем перейдите в каталог /usr/src/bin и наберите make clean && make && make install. Повторите это же в /usr/src/sbin. И не забудьте - для этого у вас в "песочнице" или на дополнительном диске должны быть установлены исходные тексты системы.

ПРЕДУПРЕЖДЕНИЕ: Если вы решили не использовать ни "песочницу", ни отдельный диск, а вместо этого работаете с базовой системой, убедитесь, что ваш /usr находится на корневом, а не на отдельном разделе. Если /usr находится на отдельном разделе, не пытайтесь пересобрать бинарники динамически, в противном случае, после перезагрузки вы получите полностью неработоспособную систему. Это произойдёт потому, что вы перезапишете /bin и /sbin вашей базовой системы динамически слинкованными бинарниками, и в результате, в начале загрузки не сможет запуститься динамически слинкованный /sbin/init (так как нужные ему библиотеки находятся на другом разделе, который в момент загрузки ещё не смонтирован). В принципе, можно перед пересборкой сохранить где-нибудь копию /sbin/init, и после пересборки скопировать старый бинарник обратно. Но лучше, всё-таки, не экспериментировать.

Если вы хотите сэкономить ещё ~400 килобайт, вы можете точно так же пересобрать /usr/src/usr.bin, так как некоторые тамошние бинарники (например, gzip, tar и bzip2) также по умолчанию слинкованы статически.

________________________________________

4. Копирование бинарников.

Теперь самое интересное. Нужно скопировать содержимое /bin, /sbin, /usr/bin, /usr/sbin, /usr/libexec в соответствующие каталоги в /usr/minibsd. Для избавления от ручной работы, автором был написан скрипт на Перле, который копирует файлы в соответствии со списком. Кроме этого, он отслеживает хардлинки (например, /bin/ln и /bin/link - один и тот же файл, но если вы будете копировать их с помощью команды cp, они будут скопированы как два отдельных файла, что конечно приведёт к ненужному расходованию пространства на флэшке).

Скрипт для копирования находится здесь, а список файлов для копирования - здесь. Если у вас FreeBSD 5.0, используйте этот список файлов.

Перед исполнением скрипта убедитесь, что ваши каталоги /usr/minibsd/bin, /usr/minibsd/usr/bin и т.п. пусты, иначе скрипт не сможет создать линки. Скрипт запускается так:

perl mkmini.pl minibsd.files / /usr/minibsd

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

Если хотите, можно сэкономить ещё примерно 200 килобайт, скопировав урезанный термкап от PicoBSD взамен стандартного

/usr/minibsd/usr/share/misc/termcap. Вы можете найти его здесь: /usr/src/release/picobsd/mfs_tree/etc/termcap. В стандартном термкапе описано великое множество терминалов, большинство из которых вы едва ли когда-нибудь будете использовать. Также, взамен файла /usr/minibsd/etc/services можно взять его сокращённый вариант: /usr/src/release/picobsd/mfs_tree/etc/services, и сэкономить ещё примерно 70 килобайт.(подсказано by Stuart Henderson)

________________________________________

5. Пересборка ядра системы.

С целью экономии пространства на флэшке и добавления отсутствующих опций (IPSec, поддержка оборудования и т.п.), следует пересобрать ядро системы. Пересборка делается как обычно: перейдите в /sys/i386/conf, создайте копию файла GENERIC (например, MYKERNEL) и отредактируйте её, включив нужные вам опции и удалив ненужные. В частности, имеет смысл поставить опцию NO_SWAPPING, поскольку у нас не будет раздела для своппинга. Обязательно нужно поставить опцию MFS (Memory File System). Затем:

config MYKERNEL

cd /sys/compile/MYKERNEL

(для FreeBSD 5.0 перейдите в /sys/i386/compile/MYKERNEL)

make depend && make

После окончания компиляции вы можете также сжать получившееся ядро, чтобы сэкономить пространство на флэшке:

gzip -9 kernel

Для FreeBSD 4.x:

cp kernel.gz /usr/minibsd

Для FreeBSD 5.0:

mkdir -p /usr/minibsd/boot/kernel

cp kernel.gz /usr/minibsd/boot/kernel

Загрузчик сам найдёт запакованный образ ядра, и автоматически распакует его прежде, чем загружать в память. В принципе, можно использовать kgzip вместо gzip, что даст дополнительные ~300 килобайт экономии, но при этом из ядра будут выброшены символы, в результате чего перестанут нормально работать такие утилиты как top и ps.

Если вым нужны ядерные модули, например модули netgraph, вы можете просто скопировать их в /usr/minibsd/modules (для FreeBSD 5.0 - /usr/minibsd/boot/modules) из /sys/compile/MYKERNEL/modules/usr/src/sys/modules. Не забывайте о зависимостях между модулями - к примеру, для поддержки PPPoE вам понадобится не один, а четыре модуля: netgraph.ko, ng_ether.ko, ng_pppoe.ko и ng_socket.ko.

________________________________________

6. Копирование библиотек.

Библиотеки из /usr/lib ещё не скопированы, так как их не было в списке minibsd.files. Их не было в списке потому, что набор библиотек, подлежащий копированию, зависит от бинарников, которые вы установили. Для определения зависимостей вы можете использовать скрипт на Перле, который обходит ваше дерево каталогов и при помощи системной утилиты ldd генерирует список файлов с соответствующими библиотеками.

Скрипт находится здесь. Запускать его следует так:

perl mklibs.pl /usr/minibsd > minibsd.libs

Рекомендуется просмотреть получившийся список, и если он выглядит правдоподобно, используйте его для копирования библиотек посредством скрипта mkmini.pl:

perl mkmini.pl minibsd.libs / /usr/minibsd

Cкрипт скопирует все нужные библиотеки, но не скопирует модули PAM. Их вам придётся скопировать вручную:

cp -p /usr/lib/pam* /usr/minibsd/usr/lib

Если вам не нужны все PAM-модули, и у вас FreeBSD 4.x, скопируйте по крайней мере эти модули: pam_deny, pam_permit, pam_unix, pam_login_access и pam_nologin. Для FreeBSD 5.x может потребоваться больше модулей, поэтому на всякий случай лучше скопируйте их все.

И в завершение, чтобы избежать предупреждающих сообщений, создайте каталог /usr/minibsd/usr/lib/aout

________________________________________

7. Каталог /etc

Разумеется, вам нужно скопировать также конфигурационные файлы для вашей MiniBSD. Самое простое - скопировать /etc из вашей базовой системы и удалить всё ненужное. В качестве примера см. дерево файлов и подкаталогов ниже (файлы, которые вам, вероятно, придётся редактировать, помечены красным цветом):

/usr/minibsd/etc

|-- auth.conf

|-- crontab

|-- defaults

| |-- make.conf

| `-- rc.conf

|-- dhclient.conf

|-- disktab

|-- fbtab

|-- fstab

|-- ftpusers

|-- gettytab

|-- group

|-- host.conf

|-- hosts

|-- hosts.allow

|-- hosts.equiv

|-- hosts.lpd

|-- inetd.conf

|-- localtime

|-- login.access

|-- login.conf

|-- master.passwd

|-- motd

|-- mtree

| |-- BSD.include.dist

| |-- BSD.local.dist

| |-- BSD.root.dist

| |-- BSD.sendmail.dist

| |-- BSD.usr.dist

| |-- BSD.var.dist

| |-- BSD.x11-4.dist

| `-- BSD.x11.dist

|-- namedb

| |-- PROTO.localhost.rev

| |-- make-localhost

| |-- named.conf

| `-- named.root

|-- networks

|-- newsyslog.conf

|-- objformat

|-- pam.conf

|-- passwd

|-- ppp

| `-- ppp.conf

|-- profile

|-- protocols

|-- pwd.db

|-- rc

|-- rc.conf

|-- rc.diskless1

|-- rc.diskless2

|-- rc.firewall

|-- rc.i386

|-- rc.local

|-- rc.network

|-- rc.serial

|-- rc.shutdown

|-- rc.sysctl

|-- resolv.conf

|-- security

|-- services

|-- shells

|-- skeykeys

|-- spwd.db

|-- ssh

| |-- primes

| |-- ssh_config

| |-- ssh_host_dsa_key

| |-- ssh_host_dsa_key.pub

| |-- ssh_host_key

| |-- ssh_host_key.pub

| `-- sshd_config

|-- ssl

| `-- openssl.cnf

|-- sysctl.conf

|-- syslog.conf

|-- termcap -> /usr/share/misc/termcap

|-- ttys

`-- wall_cmos_clock

Здесь нету /etc/periodic, поэтому нужно отредактировать также /etc/crontab и удалить из него вызов скриптов из /etc/periodic. После этого отредактируйте /etc/fstab, и удалите из него точки монтирования, которых у вас не будет. В результате должно получиться нечто вроде:

/dev/ad0a / ufs ro 1 1

proc /proc procfs rw 0 0

Обратите внимание, что корневая файловая система монтируется в режиме read-only (ro)! Это необходимо, поскольку флэшки имеют ограниченное количество циклов записи на них.

Далее отредактируйте /etc/rc.conf. Например, мой rc.conf выглядит так:

hostname="fb.neon1.net"

ifconfig_sis0="192.168.0.200 netmask 255.255.255.0"

kern_securelevel_enable="NO"

nfs_reserved_port_only="YES"

sendmail_enable="NONE"

sshd_enable="YES"

usbd_enable="NO"

inetd_enable="NO"

portmap_enable="NO"

diskless_mount="/etc/rc.diskless2"

update_motd="NO"

varsize=8192

"diskless_mount" указывает загрузочному скрипту /etc/rc, что нужно запустить скрипт rc.diskless2, который служит, в частности, для монтирования Memory File System (MFS) для /var и /dev. Переменная varsize указывает, что объём этой системы - 4 мегабайта (8192 блока), вы можете изменить это значение в ту или другую сторону.

Для FreeBSD 5.0 надо также добавить rc_ng="NO", чтобы система использовала старый формат конфигурационных скриптов rc взамен новомодного /etc/rc.d. Особо надо отметить, что для FreeBSD 5.1 это не работает. Вам в этом случае нужно добавить в MiniBSD файл /sbin/rcorder и отредактировать /etc/rc.d/diskless, удалив оттуда проверки смонтированных по NFS разделов.

Не забудьте отредактировать /etc/newsyslog.conf, настроив его на более частую ротацию логов и отказ от их архивирования. Возможно, вам вообще не понадобится ведение большинства логов, так как их содержимое всё равно будет теряться после каждой перезагрузки.

В случае, если вы планируете получать IP-адрес от сервера DHCP (посредством dhcpclient), не забывайте, что dhcpclient пытается записать информацию о DNS, полученную от сервера, в файл /etc/resolv.conf. Разумеется, ему это не удастся, так как корневая файловая система монтируется в режиме read-only. Решением может быть использование симлинка с /etc/resolv.conf на /tmp/resolv.conf.

Не забудьте, что если вы делали какие-либо модификации файла master.passwd, вам нужно перегенерировать базу данных:

pwd_mkdb -p -d /usr/minibsd/etc /usr/minibsd/etc/master.passwd

Если вы собираетесь использовать MiniBSD на компьютере с малым объёмом оперативной памяти (напр. 8 мегабайт), есть смысл уменьшить объём MFS, отводимой для /dev. Для этого отредактируйте файл /etc/rc.diskless2. Найдите в нём строчку

mount_md 4096 /dev 3 512

и замените её на

mount_md 1024 /dev 3 512

Это даёт системе указание резервировать 512 килобайт под /dev. Данное значение возможно уменьшить ещё (посмотрите, что показывает df и исходите из этого)

Для того, чтобы убрать дефолтовую 10-секундную задержку при загрузке, отредактируйте /usr/minibsd/boot/loader.rc и добавьте туда строчку

autoboot 0

На всякий случай рекомендуется настроить консоль RS-232 (если конечно на компьютере есть последовательный порт). Для этого отредактируйте /usr/minibsd/etc/ttys изменив строчку

ttyd0 "/usr/libexec/getty std.9600" dialup off secure

на

ttyd0 "/usr/libexec/getty std.9600" vt100 on secure

Измените скорость соединения с 9600 на другое значение, если необходимо.

________________________________________

8. Каталог /dev

Если у вас FreeBSD 5.0, эту часть можете не читать (благодаря devfs).

Для загрузки и работы FreeBSD нужны специальные файлы в каталоге /dev. Файловая система, на которой находится этот каталог, должна быть смонтирована в режиме read-write, иначе кое-что перестанет работать (например, getty). Поэтому rc.diskless2 монтирует для нее файловую систему в памяти (MFS). Ядро ожидает, что /dev находится на корневой партиции, поэтому внутри нашей minibsd мы должны построить полный набор файлов в /dev. Для этого:

cp /dev/MAKEDEV /usr/minibsd/dev

cd /usr/minibsd/dev

sh MAKEDEV all

Обязательно убедитесь в том, что у вас в /dev есть файл для устройства, с которого будет производиться загрузка MiniBSD. Используйте для этого команду sh MAKEDEV [name]. Чтобы сэкономить немного места в оперативной памяти, вы можете удалить файлы устройств, которых не будет в вашей системе (например, SCSI-устройства, и т.п.), после чего можете подкорректировать rc.diskless2, как было показано выше.

rc.diskless2 в процессе работы ищет файл /conf/dev.cpio.gz со всеми файлами устройств, и если не находит, то просматривает в поиске файлов устройств в корневом разделе (/dev) и генерирует cpio-файл в /tmp. Это может занять много времени, поэтому мы создадим такой файл заранее и положим его в нужное место:

cd /usr/minibsd

mkdir conf

find -x dev | cpio --create -H newc | gzip > conf/dev.cpio.gz

Готово. Теперь у нас есть две копии наших файлов устройств - одна в /dev, и вторая в dev.cpio.gz. В процессе загрузки системы, ядро найдет файлы устройств в /dev, затем rc.diskless2 смонтирует MFS и распакует туда файлы устройств из dev.cpio.gz, таким образом получая /dev доступное и для записи и для чтения.

________________________________________

9. Паковка.

Поскольку, как уже было сказано, cp не умеет корректно обходиться с хардлинками, мы запакуем нашу инсталляцию MiniBSD в .tar:

cd /usr/minibsd

tar cfvz /usr/minibsd-46-1.tgz *

(название файла, разумеется, может быть любым). Теперь в /usr/minibsd-46-1.tgz у нас лежит вся наша инсталляция, готовая к размещению на загрузочном устройстве (флэшке, например).

________________________________________

10. Генерация образа для флэшки

В принципе, можно было бы просто представить себе флэшку в виде обычного IDE-диска, разметить ее с помощью disklabel, отформатировать с помощью newfs, и развернуть на неё наш .tar-архив. Но мне представляется более быстрым и удобным создать образ диска и перелить его на флэшку при помощи dd. Кроме того, это продлит срок жизни флэшки, так как каждый сектор при этом записывается только один раз.

Для получения виртуального диска который мы могли бы разметить, будем использовать vnconfig (в ядре вашей базовой системы должно присутствовать псевдоустройство vn). Необходимо знать объём вашей флэшки в 512-байтовых секторах, для чего вам нужно подключить флэшку и использовать команду:

disklabel -rwn ad[n] auto | grep sectors/unit

[n] необходимо, разумеется, заменить на номер файла устройства, соответствующего флэшке.

Подсказка: если disklabel сообщает нечто вроде "No space left on device", попробуйте очистить флэшку:

dd if=/dev/zero of=/dev/rad[n] bs=1k count=20

Это сотрёт любую информацию, находящуюся на флэшке

Теперь создадим образ диска такого же объёма, заполнив его нулями:

dd if=/dev/zero of=/usr/minibsd-disk.bin bs=512 count=[количество секторов на флэшке]

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

FreeBSD 4.7:

vnconfig -s labels -c vn0 /usr/minibsd-disk.bin

FreeBSD 5.0:

mdconfig -a -t vnode -u 0 -f /usr/minibsd-disk.bin

(в последующем, если у вас FreeBSD 5.0, используйте имя устройства md0 вместо vn0)

и далее:

disklabel -Brw vn0 auto

disklabel -e vn0

В результате выполнения последней команды, вы попадаете в редактор, установленный по умолчанию. Найдите в редактируемом файле строчку, начинающуюся с "c:" и сдублируйте её, изменив "c" на "a", и поставив в поле "fstype" значение 4.2BSD. Это будет ваш корневой раздел, занимающий полный слайс. Если вам нужен ещё один раздел (ну например, для конфигурационных файлов), уменьшите размер раздела "a" на значение размера второго раздела, и введите вторую строчку, начинающуюся с "e" и нужным значением в поле размера. После окончания редактирования, не забудьте сохранить изменения.

Теперь отформатируем и подмонтируем наш новый раздел:

newfs -b 8192 -f 1024 -U /dev/vn0a

mount /dev/vn0a /mnt

(Если у вас есть второй раздел, не забудьте отформатировать и его). Теперь наш виртуальный диск смонтирован на /mnt, и мы можем перенести на него содержимое нашего инсталляционного каталога:

cd /mnt

tar xfvzP /usr/minibsd-46-1.tgz

...и размонтируем виртуальный диск:

cd /

umount /mnt

FreeBSD 4.7:

vnconfig -u vn0

FreeBSD 5.0:

mdconfig -d -u 0

________________________________________

11. Копирование данных на флэшку.

Поскольку наша флэшка для системы представляется как IDE-диск, ей соответствует в системе файл устройства /dev/ad[n] . Если его нет, нужно создать его, перейдя в каталог /dev и набрав команду sh MAKEDEV ad[n] .

Теперь мы можем перенести нашу MiniBSD на флэшку:

dd if=/usr/minibsd-disk.bin of=/dev/rad[n] bs=8k

Обратите особое внимание на то, что вы правильно указали значение [n], иначе вы можете стереть информацию с вашего жёсткого диска!

Если хотите увидеть, как движется копирование, нажмите Ctrl-T.

________________________________________

12. Загрузка системы.

Остановите вашу базовую систему, отключите питание, извлеките флэшку и подключите её к системе, которую вы собираетесь использовать с ней. Если вы всё сделали правильно, после включения питания система загрузится, и вы сможете закончить её конфигурирование (присвоение сетевых адресов, настройку файрволла, и т.п.). Если система не загружается, посмотрите на сообщения об ошибках. Скорее всего, вы просто пропустили или неправильно выполнили какой-то из предыдущих шагов.

Если в процессе загрузки вы видите предупреждающие сообщения вроде :

Warning: Block size restricts cylinders per group to xx.

можете спокойно игнорировать их.

В процессе окончательной настройки вам придётся временно перемонтировать файловую систему в режиме read-write. Вы можете сделать это командой:

mount -uw -o noatime /

После окончания работы, не забудьте заново смонтировать систему read-only

mount -ur /

Опция "noatime" означает, что система не должна обновлять значение атрибута "Last access time" при обращении к файлам. Это не полезно для флэшки, а сам данный атрибут используется крайне редко.

ПРЕДУПРЕЖДЕНИЕ: Существует мнение, будто бы перемонтирование системы с read-write на read-only опасно, и с течением времени может привести к разрушению данных на диске. Я не знаю, правда это или нет, но не исключаю, что это может быть правдой. Поэтому рекомендуется после того, как вы перемонтировали файловую систему в режим read-write, и закончили вносить свои изменения, произвести перезагрузку системы.

Рекомендуется также произвести перегенерацию ключей SSH, иначе на вашей MiniBSD останется тот же набор ключей, что и на базовой системе. А это нехорошо.

ssh-keygen -t rsa1 -N "" -f /etc/ssh/ssh_host_key

ssh-keygen -t rsa -N "" -f /etc/ssh/ssh_host_rsa_key

ssh-keygen -t dsa -N "" -f /etc/ssh/ssh_host_dsa_key

________________________________________

Приложение A. Установка портов.

Вполне возможно, что вы захотите поставить в вашу MiniBSD что-нибудь из портов. Это очень просто сделать в базовой системе, указав префикс PREFIX=/usr/minibsd/usr/local в процессе инсталляции. Если же вы хотите проделать это с особой тщательностью, установите порт в базовую систему, а затем определите, какие именно бинарники/библиотеки/стартовые скрипты и т.п. нужны вам для данного порта, и перенесите их в соответствующее место в /usr/minibsd.

Дополнение by Tom Thompson: вы можете использовать pkg_info -qxl [package name] для определения, какие именно файлы установлены для соответствующего порта.

________________________________________

Приложение B. Установка Perl.

Перл займёт дополнительно около 10 мегабайт на вашей флэшке. Для установки Перла, добавьте строчку

usr/bin/perl:usr/bin/perl5:usr/bin/perl5.00503

в ваш список файлов minibsd.files. Скопируйте также /usr/libdata/perl (каталог /usr/libdata/perl/pod можно не копировать). И наконец. убедитесь, что права и разрешения на скопированные файлы не изменились (а ещё проще копировать их с помощью tar -P, при этом права и разрешения сохраняются неизменными).

________________________________________

Приложение C. Сохранение данных между перезагрузками.

Вам может это понадобиться, например, если на вашей MiniBSD работает сервер DHCP (dhcpd), и вам необходимо сохранить данные о выданных IP-адресах между перезагрузками. Для этого можно, например, выделить небольшой раздел на флэшке, и сохранять на нём содержимое /var/db перед шатдауном. Добавьте эти строчки в ваш скрипт rc.shutdown (там, где написано "Insert other shutdown procedures here"):

# Save databases

echo -n 'Saving databases in /var:'

mount -u -o rw /conf

rm -Rf /conf/varsave/db

cp -Rp /var/db /conf/varsave

mount -u -o ro /conf

echo '.'

В этом примере предполагается, что ваш дополнительный раздел смонтирован на /conf, и на нём есть каталог /conf/varsave.Для восстановления базы данных после перезагрузки, добавьте в скрипт rc.local следующее:

# Load saved databases

cp -Rp /conf/varsave/db /var

Не забудьте, что rc.shutdown вызывается только если для выключения машины использовался shutdown(8), а не reboot(8). Используйте shutdown -h now.

________________________________________

? 2002 by Manuel Kasper <mk@neon1.net>. All rights reserved.

Translated by Ilia Kuliev <toor99@hotmail.com>.

________________________________________

Автор: Ilia Kuliev

Обновлено: 12.03.2015