Ключевые слова:flash, bsd, freebsd, faq, route, install, (найти похожие документы)
From: Ilia Kuliev <toor99@hotmail.com>
Date: Mon, 28 Feb 2004 14:31:37 +0000 (UTC)
Subject: Перевод MiniBSD How-To на русский язык
Оригинал: http://www.citytel.ru/minibsd/minibsd.html
Предлагается вольный перевод "MiniBSD How-to by Manuel Kasper". Может
оказаться полезен тем, кто использует FreeBSD в качестве недорогой
замены Cisco и подобного оборудования. Может быть полезен также
тем, кому нужна урезанная инсталляция FreeBSD, а PicoBSD чем-либо не
устраивает.
1. Вводная часть.
Часто бывает так, что нужно установить маршрутизатор, сервер
доступа, принтсервер, или что-то в этом роде, на старой и слабой
машинке с маленьким диском. Или бывает так, что хочется избавиться от
жёсткого диска вовсе, как от потенциально слабого звена, и
использовать вместо него что-нибудь более надёжное. Мануэль Каспер
(Manuel Kasper) написал подробное пошаговое руководство, как
установить FreeBSD на Flash с интерфейсом IDE, за что большой ему
респект. Разумеется, это же руководство можно использовать и при
установке системы на маленький жёсткий диск. В зависимости от набора
компонентов, инсталляция занимает около 22 мегабайт, а если не
устанавливать Perl - около 12 мегабайт.
Большим преимуществом (и одновременно небольшим недостатком)
является то, что корневая файловая система монтируется в режиме
read-only, а разделы /var и /tmp размещаются в оперативной памяти.
Автором это было сделано для того, чтобы обойти ограничение на
количество перезаписей флэшки (миллион перезаписываний - это конечно
много, но недостаточно для маршрутизатора, который проработает, быть
может, не один год). Преимущество заключается, разумеется, в том, что
неожиданное отключение питания не приведёт к разрушению или
повреждению файловой системы. Недостаток же в том, что не сохраняются
данные в /var (логи и т.п.). Впрочем, если инсталляция производится не
на флэшку, а на жёсткий диск, /var и /tmp можно разместить и на диске,
смонтировав их read-write.
Авторский оригинал руководства, на английском и португальском
языках, периодически обновляемый, находится здесь (http://www.neon1.net/misc/minibsd.html)
2. Установка.
Прежде всего, вам понадобится уже установленная FreeBSD.
Достаточно минимальной инсталляции, но в неё обязательно должны быть
включены исходные тексты ядра. Это руководство основано на FreeBSD
4.8, но оно, по идее, должно быть применимо и к более ранним версиям.
К FreeBSD 5.0 она также может быть применима, но есть и некоторые
отличия, отмеченные особо. Что же касается FreeBSD 5.1, то в ней
используются rc-скрипты нового поколения, disklabel заменён на
bsdlabel, и её синтаксис слегка изменён. Словом, если вы хотите
использовать FreeBSD 5.1, с некоторыми вещами вам придётся разбираться
самостоятельно.
2.1 Chroot jail
В процессе подготовки бинарников для MiniBSD, некоторые
бинарники вашей базовой системы могут быть перезаписаны, так как для
простоты мы не будем устанавливать их прямо в рабочий каталог MiniBSD,
а вместо этого скопируем их в базовую систему и перенесём в MiniBSD
позднее. Если вы не хотите менять бинарники базовой системы, у вас
есть выбор: использовать второй жёсткий диск, или использовать jail.
Первый вариант проще, но если у вас нету под рукой ещё одного жёсткого
диска, вам придётся использовать "песочницу", chroot jail.
Создать "песочницу" достаточно просто - вам нужно всего лишь
создать каталог на разделе, имеющем достаточно свободного места
(скажем, 800 мегабайт или около того), например, /usr/jail. После
этого вставьте ваш инсталляционный диск с FreeBSD, запустите
/stand/sysinstall, начните Custom Installation, и укажите в опциях
"Install Root" на ваш свежесозданный каталог /usr/jai. После окончания
инсталляции, скажите
chroot /usr/jail
и вы увидите, что корень вашей файловой системы отныне стал /usr/jail.
Вы получили полностью изолированную от базовой системы инсталляцию, и
можете делать с ней всё, что угодно, не опасаясь повредить базовую
систему. Не забывайте, что когда вы покидаете рабочий шелл, вы
выходите из "песочницы".
Для того, чтобы нечаянно не заблудиться, рекомендуется изменить
приглашение шелла так, чтобы оно явно показывало, находитесь ли вы в
"песочнице", или в базовой системе. Для этого измените значение строки
"set prompt" в /usr/jail/root/.cshrc так:
set prompt = "MiniBSD %~ %# "
Кроме этого, вы также можете скопировать /etc/localtime в
/usr/jail/etc/localtime для того, чтобы сохранить временные метки
ваших файлов.
Все дальнейшие манипуляции описываются безотносительно, работаете ли
вы в базовой системе, или в "песочнице".
3. Создание дерева каталогов.
Мы собираемся поместить всю инсталляцию 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, они будут скопированы как два отдельных файла, что конечно
приведёт к ненужному расходованию пространства на флэшке).
Скрипт находится здесь (http://www.neon1.net/misc/minibsd/mkmini.pl).
Список файлов находится здесь (http://www.neon1.net/misc/minibsd/minibsd.files).
Если у вас FreeBSD 5.0, используйте этот список файлов
(http://www.neon1.net/misc/minibsd/minibsd5.files).
Перед исполнением скрипта убедитесь, что ваши каталоги
/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 килобайт.
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
и затем скопируйте ядро на место.
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 ещё не скопированы, так как их не было в
списке mibibsd.files. Их не было в списке потому, что набор библиотек,
подлежащий копированию, зависит от бинарников, которые вы установили.
Для определения зависимостей вы можете использовать скрипт
(http://www.neon1.net/misc/minibsd/mklibs.pl) на Перле, который обходит
ваше дерево каталогов и при помощи системной утилиты 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 для /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
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 со
всеми файлами устройств, и если не находит, то делает "find" файлов
устройств в корневом разделе и генерирует 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=[количество
секторов на флэшке]
...и подключим его как виртуальный диск, что даст нам возможность
разметить и отформатировать его:
vnconfig -s labels -c vn0 /usr/minibsd-disk.bin
(для FreeBSD 5.0 так: mdconfig -a -t vnode -u 0 -f
/usr/minibsd-disk.bin)
и далее:
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
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, и
закончили вносить свои изменения, произвести перезагрузку системы
(shutdown -r now).
Рекомендуется также произвести перегенерацию ключей 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.
Приложение 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:
# 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).