====== Установка ======
* Поскольку памяти 32 МБ, при загрузке с установочного CD памяти хватает только на режим "Single User" \\ Single User mode
* Для получения справки в любое время в консоли можно набрать:
less ./README
* Обнуляем первые 16 32-килобайтных блоков (чтобы в начальной области диска не было никакого мусора, оставшегося от предыдущих установок).
* Инициализируем содержимое нулевого сектора для использования одного слайса DragonFly на весь диск.
* Инициализируем загрузочный код, хранящийся в нулевом секторе диска. \\ __**Примечание:**__ Здесь и далее предполагается, что жёсткий диск, на который будет производиться установка, в системе представлен устройством '/dev/ad0'. На моей системе это оказалось так, потому что я устанавливал DragonFlyBSD на Primary Master (т.е. главный диск первого IDE интерфейса), в вашем же случае может быть и другое имя.
dd if=/dev/zero of=/dev/ad0 bs=32k count=16
fdisk -I ad0
fdisk -B ad0
* Устанавливаем менеджер загрузки "boot0" в MBR жёсткого диска и проверяем загрузочный блок:
boot0cfg -B ad0
boot0cfg -v ad0
* Создаём начальную разметку диска
disklabel -B -w -r ad0 auto
* Для редактирования разметки, должен будет запуститься редактор 'vi', которому нужен доступ для записи в каталог '/tmp'. Поэтому создаём временную файловую систему и монтируем её в '/tmp':
mount -t tmpfs none /tmp
Редактируем разметку диска:
disklabel -e /dev/ad0s1
По умолчанию на установочном CD используется текстовый редакто 'vi', в котором, по всей вероятности, многие, как и я, работать не умеют. :-) \\ Для таких людей это краткое примечание: для того, чтобы отредактировать нужную строку, переместите курсор на неё и нажмите 'i'. Это включит режим вставки символов в строку. Добавлять символы к строке можно нажав 'a'. Таким образом добавляем в открывшийся файл разметки диска строки:
a: * 0 4.2BSD
b: 256m * 4.2BSD
FIXME
Такая разметка означает, что мы хотим создать 2 раздела: первый - для корневого каталога, второй - раздел подкачки. При этом чтобы не считать размер основного раздела, указываем '*', чтобы использовать всё доступное пространство до следующего раздел. Поместим этот раздел в начале слайса, указав '0' в поле, отвечающем за адрес первого блока раздела. Размер второго же раздела (подкачки) мы укажем точно (например, 256 МБ), а поскольку адрес первого блока его мы не знаем, то указываем '*', что означает поместить его сразу после предыдущего раздела. Таким образом раздел подкачки окажется в конце слайса (или всего диска, если на диске один слайс).
* Создаём файловую систему UFS на первом разделе:
newfs /dev/ad0s1a
* Монтируем вновь созданную файловую систему в каталог '/mnt':
mount /dev/ad0s1a /mnt
* Поскольку памяти у нас мало, подключаем раздел подкачки, созданный недавно:
swapon /dev/ad0s1b
* копируем всё содержимое установочного CD на жёсткий диск:
cpdup / /mnt
* Разрешаем запись всем пользователям в каталог временных файлов на жёстком диске:
chmod 1777 /mnt/tmp
* Удаляем каталог '/var/tmp' на жёском диске и вместо него создаём символическую ссылку на '/tmp'. Особенно это полезно, если для каталога '/var' при разметке диска был отведён отдельный раздел.
rm -rf /mnt/var/tmp
ln -s /tmp /mnt/var/tmp
* Поскольку настройки системы на установочном CD отличаются от настроек, с которыми нужно будет запускать систему с жёсткого диска, на CD имеется отдельный каталог '/etc.hdd', содержащий файлы конфигурации, предназначенные для загрузки с жёсткого диска. Предыдущая команда копирования скопировала всё дерево каталогов с CD на наш жёсткий диск, поэтому теперь необходимо удалить на нём '/etc' и заменить его каталогом '/etc.hdd'
rm -r /mnt/etc
mv /mnt/etc.hdd /mnt/etc
* Копируем файл-пример таблицы файловых систем с CD на жёсткий диск и редактируем его в соответствии с нашей конфигурацией:
cp /etc/fstab.example /mnt/etc/fstab
vi /mnt/etc/fstab
Должно получиться нечто вроде:
/dev/ad0s1a / ufs rw 1 1
/dev/ad0s1b none swap sw 0 0
proc /proc procfs rw 0 0
* Сохраняем разметку жёсткого диска в файл на нём (на всякий случай):
disklabel ad0s1 > mnt/etc/disklabel.ad0s1
* Удаляем с жёсткого диска ненужные файлы (т.е. файлы, специфичные для загрузки с CD)
rm /mnt/boot/bootloader.conf
rm /mnt/README* /mnt/autorun* /mnt/index.html /mnt/dflybsd.ico
rm -r /mnt/autorun
rm /mnt/boot.catalog
* Перезагружаем систему.
halt
* Извлекаем установочный CD и нажимаем какую-нибудь клавишу.
Если всё сделано правильно, теперь система должна успешно загружаться с жёсткого диска в режиме по умолчанию. Если это так, можно переходить к базовой конфигурации.
====== Конфигурирование ======
* Попытка запустить 'installer' после загрузки с жёсткого диска не увенчалась успехом
Starting installer. /etc/pfi.conf not found, starting interactive install.
Unsupported DFUI transport ''.
О подобном поведении уже сообщалось разными пользователями в [[http://leaf.dragonflybsd.org/mailarchive/users/2009-05/msg00058.html|списке рассылки]] и [[http://bugs.dragonflybsd.org/issues/2095|багтрекере]].
Запустить вручную попробовать можно, но тогда он пытается подмонтировать системный раздел в какую-то папку, а раздел этот уже подмонтирован в корневой каталог. Поэтому запускаем конфигуратор, загрузившись с CD.
# installer
На моей системе при этом на экране появляется сообщение об ошибке:
Starting installer. /etc/pfi.conf not found, starting interactive install.
Unsupported DFUI transport '9999'.
Поэтому прибегаем к ручному запуску установщика ([[http://cvsweb.dragonflybsd.org/cvsweb/src/nrelease/installer/usr/local/bin/installer?rev=1.5&content-type=text/x-cvsweb-markup|Взято отсюда]]):
# /usr/sbin/dfuibe_installer -r "installer" -t npipe >/dev/null &
# /usr/sbin/dfuife_curses -r "installer" -t npipe
После запуска программы установщика вносим настройки, как проиллюстрировано в [[http://www.dragonflybsd.org/docs/newhandbook/Installation/#index4h2|документации DragonFlyBSD]]
* В целях экономии оперативной памяти уменьшаем количество терминалов, открываемых по умолчанию при запуске системы. Для этого редактируем файл '/etc/ttys' следующим образом:
...
#
# name getty type status comments
#
# If console is marked "insecure", then init will ask for the root password
# when going to single-user mode.
console none unknown off secure
#
ttyv0 "/usr/libexec/getty Pc" cons25 on secure
# Virtual terminals
ttyv1 "/usr/libexec/getty Pc" cons25 off secure
ttyv2 "/usr/libexec/getty Pc" cons25 off secure
ttyv3 "/usr/libexec/getty Pc" cons25 off secure
ttyv4 "/usr/libexec/getty Pc" cons25 off secure
ttyv5 "/usr/libexec/getty Pc" cons25 off secure
ttyv6 "/usr/libexec/getty Pc" cons25 off secure
ttyv7 "/usr/libexec/getty Pc" cons25 off secure
ttyv8 "/usr/pkg/bin/xdm -nodaemon" xterm off secure
...
Обратите внимание, что терминалы с 1 по 8 отключены ('off').
Также в целях экономии памяти на время настройки можно отключить службы 'sendmail' и 'cron':
# /etc/rc.d/sendmail stop
# /etc/rc.d/cron stop
* Размещаем подключение swap-раздела повыше по приоритету
* Настраиваем логин по паролю в /etc/ssh/sshd_config
* Добавляем пользователя в группу 'wheel'
# pw user mod vasya -G wheel
* Если сетевой интерфейс не был настроен правильно ранее, настраиваем его вручную:
# ifconfig fxp0 192.168.0.7 netmask 255.255.255.0
# route add default 192.168.0.1
* Устанавливаем 'bash', 'nano' (лично я бы предпочёл Midnight Commander, но он на DragonFlyBSD почему-то [[http://leaf.dragonflybsd.org/mailarchive/users/2010-11/msg00044.html|не на любом терминале запускается]]):
# pkg_radd bash
# pkg_radd nano
* Устанавливаем дерево пакетов:
# cd /usr
# make pkgsrc-create
====== Пересборка ядра ======
Ппри таком малом объёме оперативной памяти, которым располагает рассматриваемая машина, пересобрать ядро под свою систему - первое дело.
Отредактировать файл со своей конфигурацией под мою систему оказалось очень легко, следуя описанию процесса здесь.
Однако, собираться оно не захотело, и вылетело при компиляции из-за предупреждения (!) компилятора. Оказалось, что по умолчанию включена опция компилятора "-Werror", которая не даёт собирать исходники с предупреждениями. Пришлось создать файл "///etc/make.conf//" следующего вида:
NO_WERROR=yes
чтобы сборка пошла далее. Собралось успешно, и даже загрузилось. Однако, при первом же запуске не обнаружило корневого раздела там, где нужно. Оказалось, что почему-то диск ///dev/ad0// стал теперь диском ///dev/ad1//, несмотря на то, что нового диска ///dev/ad0// не появилось. DragonFlyBSD порадовал тем, что не стал сразу паниковать, а предложил указать раздел с корневым каталогом вручную. Указываем:
ufs:ad1s1a
Сразу после загрузки активируем своп на этом же диске:
swapon /dev/ad1s1b
Затем в файле конфигурации меню загрузки отключаем загрузку модулей 'acpi', 'ehci' и 'ahci', которые по умолчанию подключаются - в целях экономии оперативной памяти.
**/boot/defaults/dloader.menu**
...
menuitem 1 "Boot DragonFly [${default_kernel}]"
menuadd cd ${base}${default_kernel}
menuadd optinclude loader.conf
menuadd optinclude loader.conf.local
menuadd set vm.dma_reserved=0
menuadd set hw.ata.dma=0
menuadd set hint.acpi.0.disabled=1
menuadd set hint.ehci.0.disabled=1
menuadd set hint.ahci.disabled=1
menuadd lunsetif acpi_load hint.acpi.0.disabled
menuadd lunsetif ehci_load hint.ehci.0.disabled
menuadd lunsetif ahci_load hint.ahci.disabled
menuadd loadall
menuadd boot
...
Перезагружаем компьютер. На моей системе после этого корневой каталог снова стал корректно монтироваться при загрузке.
FIXME
====== Установка нужных пакетов =====
Поскольку машина имеет мало оперативной памяти, и планируется использовать её в качестве сервера без монитора, многие возможности программ попросту будут не нужны, и их можно и нужно отключить. При установке из исходных кодов такие парамтры можно указать в конфигурационном файле '/usr/pkg/etc/mk.conf'
PKG_DEFAULT_OPTIONS+=-inet6 -gtk
# PKG_OPTIONS.bind98=-threads -inet6
В этом случае были отключены для всех будущих установок опции, обозначенные "inet6", "gtk" и "threads". Можно также включать/одключать поддержку некоторых опций для каждого пакета в отдельности, как это показано во второй строчке для пакета "bind98".
**Примечание:** Я пробовал перечислять включаемые/отключаемые опции в кавычках (PKG_DEFAULT_OPTIONS+="-inet6 -gtk -threads") - не заработало.
Проверить, будет ли система сборки и установки пакетов верно считывать вновь внесённые настройки, можно перейдя в каталог для установки какого-нибудь любого пакета (для "bind98" это каталог "/usr/pkgsrc/net/bind98/") и выполнить в нём команду:
bmake show-options
Если в выводе этой команды записи для "enabled by default" и "currently enabled" не совпадают
These options are enabled by default:
inet6 threads
These options are currently enabled:
threads
значит, наши настройки корректно считались и будут применены при установке.
FIXME
====== Полезные ссылки ======
[[http://www.dragonflybsd.org/docs/newhandbook/Configuration|Конфигурирование DragonFlyBSD]]
[[http://www.dragonflybsd.org/docs/howtos/HowToPkgsrc|Документация по установке пакетов]]
[[http://www.dragonflybsd.org/docs/newhandbook|Настольная книга по DragonFlyBSD]]