====== Ручная установка FreeBSD на ZFS mirror с использованием mfsbsd ======
----
====== Введение ======
Установка FreeBSD это довольно таки простая задача, и ее можно выполнить разными способами. В данной статье мы рассмотрим возможность удаленной установки при помощи ssh. Этот вариант я предпочитаю потому что, при установки системы на ZFS обычно приходится вводить очень много длинный команд и это гораздо проще сделать при помощи copy/paste.
Устанавливать будем на ZFS mirror. За основу взята статья [[https://wiki.freebsd.org/RootOnZFS/GPTZFSBoot|Installing FreeBSD Root on ZFS using GPT]].
Так же потребуется загрузочная флешка с [[https://mfsbsd.vx.sk|mfsbsd]]
====== Установка ======
Загружаемся с mfsbsd, настраиваем сетевое подключение и логинемся по ssh
===== Разметка диска =====
Создаем схему GPT на обоих дисках:
gpart create -s gpt ada0
gpart create -s gpt ada1
Теперь необходимо сделать диски загрузочными:
* UEFI boot:
gpart add -a 4k -s 800K -t efi ada0
gpart add -a 4k -s 800K -t efi ada1
gpart bootcode -p /boot/boot1.efifat -i 1 ada0
gpart bootcode -p /boot/boot1.efifat -i 1 ada1
* Legacy boot:
gpart add -b 40 -s 512k -t freebsd-boot ada0
gpart add -b 40 -s 512k -t freebsd-boot ada1
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
Создаем два раздела на каждом из дисков. Первый раздел размером в 4Gb под swap, а все оставшееся место отдаем под ZFS.
gpart add -a 1m -s 4G -t freebsd-swap -l swap0 ada0
gpart add -a 1m -t freebsd-zfs -l disk0 ada0
gpart add -a 1m -s 4G -t freebsd-swap -l swap1 ada1
gpart add -a 1m -t freebsd-zfs -l disk1 ada1
Если на свервере установлено мало оперативной памяти, то можно подключить один из только что созданых swap разделов.
swapon /dev/gpt/swap0
===== Создание ZFS пула =====
Создаем пул из двух дисков
zpool create -o cachefile=/boot/zfs/zpool.cache -o altroot=/mnt zroot /dev/gpt/disk0 /dev/gpt/disk1
При желании можно включить lz4 компрессию пула:
zfs set compress=on zroot
Руутовую фс ограничиваем в 1Gb, помечаем ее как загрузочную и монтируем в /mnt:
zfs create -o mountpoint=none zroot/ROOT
zfs create -o mountpoint=/ -o canmount=noauto -o quota=1G zroot/ROOT/default
mount -t zfs zroot/ROOT/default /mnt
zpool set bootfs=zroot/ROOT/default zroot
zfs set checksum=fletcher4 zroot
ФС для временных файлов размером в 5Gb:
zfs create -o compression=on -o exec=on -o setuid=off -o mountpoint=/tmp -o quota=5G zroot/tmp
**/usr** ограничиваем 30Gb, но фс для домашних директорий создаем без ограничений по размеру:
zfs create -o mountpoint=/usr -o quota=30G zroot/usr
zfs create -o mountpoint=/usr/home zroot/home
zfs create -o compression=lzjb -o setuid=off zroot/usr/ports
zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/distfiles
zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/packages
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/usr/src
**/var**
zfs create -o mountpoint=/var -o quota=10G zroot/var
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/crash
zfs create -o exec=off -o setuid=off zroot/var/db
zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/db/pkg
zfs create -o exec=off -o setuid=off zroot/var/empty
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/log
zfs create -o compression=gzip -o exec=off -o setuid=off zroot/var/mail
zfs create -o exec=off -o setuid=off zroot/var/run
zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/tmp
Настройка разрешений для директорий с временными файлами и cсылка на домашнюю директорию пользователей.
ln -s /usr/home /mnt/home
chmod 1777 /mnt/tmp
chmod 1777 /mnt/var/tmp
===== Установка системы =====
Для установки нам необходимо скачать два файла **base.txz** и **kernel.txz**
cd /tmp/
fetch http://ftp.ru.freebsd.org/pub/FreeBSD/releases/amd64/12.1-RELEASE/base.txz
fetch http://ftp.ru.freebsd.org/pub/FreeBSD/releases/amd64/12.1-RELEASE/kernel.txz
Разархивируем содержимое файлов в руутовую фс:
cd /mnt
tar xvJf /tmp/base.txz
tar xvJf /tmp/kernel.txz
rm /tmp/*.txz
===== Заключительная настройка =====
Включаем поддержку ZFS:
echo 'zfs_load="YES" \
vfs.root.mountfrom="zfs:zroot/ROOT/default"' >> boot/loader.conf
echo 'zfs_enable="YES"' >> etc/rc.conf
Настройка сети и включение ssh:
echo 'hostname="test"\
ifconfig_em0="DHCP"\
sshd_enable="YES"' >> etc/rc.conf
Подключаем разделы для swap:
cat > etc/fstab <
Задаем пароль для **root**-а и создаем дополнительного пользователя:
chroot /mnt
passwd
pw useradd -n admin -g wheel -d /usr/home/admin -m -s /bin/sh
passwd admin
exit
Последний штрих:
cp /boot/zfs/zpool.cache boot/zfs/
cd ~
zpool export zroot
Теперь система готова к загрузке:
reboot