Небольшой HOWTO, как быстро установить FreeBSD из-под GNU/Linux без лишних действий. Записал по ходу установки, возможно, кому-нибудь пригодится.
Входные данные в моём случае:
- Есть неиспользуемый раздел на диске, разбитом через MBR. (Большая часть места на накопителях занята LVM-ом с кучей томов.)
- Весь раздел целиком буду монтировать в корень, не используя разбивку bsdlabel. Система ставится больше для экспериментов, чем для реальной работы, так что нет смысла заморачиваться с точной разметкой.
- По той же причине в качестве файловой системы использую UFS, а не ZFS.
- Хочется весь процесс провести из-под основной ОС, не тратя время на создание загрузочной флешки.
- В роли первичного загрузчика буду использовать grub, поэтому BSD-специфичный boot loader нас не интересует.
На одном из дисков я заранее зарезервировал четыре 20-гигабайтных раздела под эксперименты с разными ОС. На один из таких разделов установлю FreeBSD:
[root@aquila ~]# fdisk -l /dev/sda
Диск /dev/sda: 698,7 GiB, 750156374016 байт, 1465149168 секторов
Disk model: Hitachi HTS54757
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 4096 байт
Размер I/O (минимальный/оптимальный): 4096 байт / 4096 байт
Тип метки диска: dos
Идентификатор диска: 0xa33b6c03
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/sda1 * 2048 6146047 6144000 3G 83 Linux
/dev/sda2 6146048 105357311 99211264 47,3G 7 HPFS/NTFS/exFAT
/dev/sda3 105357312 1465147391 1359790080 648,4G 5 Расширенный
/dev/sda5 105359360 146319359 40960000 19,5G 83 Linux
/dev/sda6 146321408 187281407 40960000 19,5G 83 Linux
/dev/sda7 187283456 228243455 40960000 19,5G 83 Linux
/dev/sda8 228245504 269205503 40960000 19,5G 83 Linux
/dev/sda9 269207552 1465147391 1195939840 570,3G 8e Linux LVM
Скачиваем установочный образ:
$ axel -a 'https://download.freebsd.org/ftp/releases/amd64/amd64/ISO-IMAGES/12.0/FreeBSD-12.0-RELEASE-amd64-disc1.iso.xz'
$ xz -d FreeBSD-12.0-RELEASE-amd64-disc1.iso.xz
Установку будем проводить из-под qemu, работающему от имени пользователя. Чтобы сможно было подключить физический диск к qemu, нужно сменить владельца /dev/sda
:
# ls -l /dev/sda
brw-rw---- 1 root disk 8, 0 апр 15 14:20 /dev/sda
# chown vadim:disk /dev/sda
# ls -l /dev/sda
brw-rw---- 1 vadim disk 8, 0 апр 15 16:12 /dev/sda
disk
, но мне как-то пофиг. После перезагрузки система забудет, что права на /dev/sda были отданы пользователю, а из группы пользователя надо удалять вручную.Запускаем виртуальную машину с установочным образом и нужным физическим диском:
$ qemu-system-x86_64 -m 2048 -hda /dev/sda -cdrom FreeBSD-12.0-RELEASE-amd64-disc1.iso -boot menu=on
Выбираем CDROM в качестве загрузочного устройства. Ждем появления Welcome Menu, выбираем <Shell>
. Инсталлятор нам не понадобится.
Посмотрим, какие разделы увидела система:
# ls /dev/ad*
И более подробно:
# gpart list | less
Виртуальная машина имеет прямой доступ к реальному /dev/sda
, так что нужно внимательно перепроверять все свои действия по поводу разделов диска.
Выяснили, как в гостевой ОС называется нужный раздел, создаем на нём файловую систему:
# newfs -U -L anjalifbsd /dev/ada0s5
- Опция
-U
указывает задействовать механизм Soft Updates. - Опция
-L
задаёт имя тома ФС.
Монтируем созданную ФС:
# mkdir /tmp/new_root
# mount /dev/ada0s5 /tmp/new_root
Теперь нужно распаковать операционную систему на новый раздел:
# cd /tmp/new_root
# tar xvf /usr/freebsd-dist/base.txz
# tar xvf /usr/freebsd-dist/kernel.txz
Система занимает меньше гигабайта:
# df -h .
Filesystem Size Used Avail Capacity Mounted on
/dev/ada0s5 19G 930M 16G 5% /tmp/new_root
Правим fstab. Честно говоря, я не знаю деталей о процессе инициализации FreeBSD и не уверен, что это обязательно:
echo '/dev/ada0s5 / ufs rw 1 1' > etc/fstab
echo 'tmpfs /tmp tmpfs rw 0 0' >> etc/fstab
Выключаем виртуальную машину:
# poweroff
На реальной машине правим конфиг grub.
У меня grub установлен на отдельном разделе таким образом, что установка любого нового слишком умного дистрибутива, перезаписывающего конфиг grub-а, не повлияет на этот загрузчик. В загрузочном меню этого отдельного grub-а указано, как грузить установленные ОС, внутри которых может работать уже собственный загрузчик дающий выбрать версию ядра и т.п. Например:
menuentry "Artix Sonata" {
configfile (lvm/aq-aq_artix)/boot/grub/grub.cfg
}
menuentry "Archlinux Aquila" {
configfile (lvm/aq-aq_archlinux)/boot/grub/grub.cfg
}
menuentry "Voidlinux Epsilon" {
multiboot (lvm/aq-aq_voidlinux)/boot/grub/i386-pc/core.img
}
Загрузчик FreeBSD я не задействовал, так что в моём случае достаточно добавить menuentry для прямой загрузки ядра FreeBSD:
menuentry "FreeBSD Anjali" {
insmod part_msdos
insmod ufs2
set root=(hd0,5)
kfreebsd /boot/kernel/kernel
kfreebsd_loadenv /boot/device.hints
set kFreeBSD.vfs.root.mountfrom=ufs:/dev/ada0s5
set kFreeBSD.vfs.root.mountfrom.options=rw
boot
}
На этом всё. Установка сводится к распаковке архива с системой и запуску ядра любым подходящим загрузчиком. Даже проще, чем установить Арч.
Первые шаги в системе:
- Имя хоста задаётся через hostname(1).
- Управление пользователями и группами осуществляется при помощи pw(8).
- Про настройку локали см. login.conf(5). В конфиге уже прописан вариант для русской локали, так что достаточно указать login class пользователя равным russian.
- wpa_supplicant настраивается стандартно через конфиг, плюс надо указать пару строчек в rc.conf.
- Пакеты ставятся при помощи pkg(8).