Установка FreeBSD


В случае отсутствия swap установить значение 0

Разметка диска

gpart create -s GPT ada0
gpart add -s 128 -t freebsd-boot -l boot0 ada0
gpart add -s 200M -t efi -l boot0 ada0
gpart add -s {{ swap }}G -t freebsd-swap -l swap0 ada0
gpart add -t freebsd-zfs -l disk0 ada0
gpart add -t freebsd-ufs -l disk0 ada0
gpart create -s GPT ada1
gpart add -s 128 -t freebsd-boot -l boot1 ada1
gpart add -s 4G -t freebsd-swap -l swap1 ada1
gpart add -t freebsd-zfs -l disk1 ada1

# Создаем пул с именем zfspool на разделе disk и подключаем к точке монтирования /tmp/mnt, которую создадим

mkdir /tmp/mnt



zpool set bootfs=zfspool zfspool
zfs set checksum=fletcher4 zfspool
zfs set atime=off zfspool
zfs set mountpoint=/tmp/mnt zfspool
zpool export zfspool
zpool import -o cachefile=/tmp/zpool.cache zfspool
zfs create zfspool/var
zfs create zfspool/var/db
zfs create -o exec=off -o setuid=off zfspool/var/empty
zfs set readonly=on zfspool/var/empty
zfs create zfspool/var/tmp
zfs create -o compression=gzip-9 zfspool/var/crash
zfs create zfspool/tmp
zfs create zfspool/usr
zfs create -o compression=gzip-9 -o mountpoint=/tmp/mnt/usr/src zfspool/src
zfs create -o compression=gzip-9 -o mountpoint=/tmp/mnt/usr/ports zfspool/ports
zfs create -o mountpoint=/tmp/mnt/usr/ports/distfiles zfspool/distfiles
zfs create -o mountpoint=/tmp/mnt/usr/home zfspool/home
zfs create -o mountpoint=/tmp/mnt/usr/local zfspool/local
zfs create -o mountpoint=/tmp/mnt/usr/obj zfspool/obj
zfs create zfspool/data
chmod 1777 /tmp/mnt/tmp /tmp/mnt/var/tmp
cat /usr/freebsd-dist/base.txz | tar --unlink -xpJf - -C /tmp/mnt
cat /usr/freebsd-dist/kernel.txz | tar --unlink -xpJf - -C /tmp/mnt
gpart bootcode -b /tmp/mnt/boot/pmbr -p /tmp/mnt/boot/gptzfsboot -i 1 ada0

# Вносим изменения в файл loader.conf

cat << EOF > /tmp/mnt/boot/loader.conf
zfs_load="YES"
vfs.root.mountfrom="zfs:'zfspool'"
vm.kmem_size="1024M"
vm.kmem_size_max="1024M"
vfs.zfs.arc="512M"
vfs.zfs.arc_max="512M"
vfs.zfs.vdev.cache.size="10M"
vfs.zfs.prefetch_disable=1
EOF

# Вносим изменения в файл rc.conf

# cat << EOF > /tmp/mnt/etc/rc.conf
# ZFS
zfs_enable="YES"
EOF

# На этом этапе необходимо узнать у провайдера сетевые настройки.
# В этом примере я использовал стандартные настройки, которые не являются
# правильными, исключительно в целях примера.
# IP 10.0.0.2
# MASK 255.255.0.0
# DNS 10.0.0.1
# Gateway 10.0.0.1

echo '# Network' >> /tmp/mnt/etc/rc.conf
echo 'ifconfig_em0="inet 192.168.0.1 netmask 255.255.255.0"' >> /tmp/mnt/etc/rc.conf
echo 'ifconfig_em1="inet 10.0.0.2 netmask 255.255.0.0"' >> /tmp/mnt/etc/rc.conf
echo 'defaultrouter="10.0.0.1"' >> /tmp/mnt/etc/rc.conf
echo 'gateway_enable="YES"' >> /tmp/mnt/etc/rc.conf
echo '' >> /tmp/mnt/etc/rc.conf
echo '# Firewall' >> /tmp/mnt/etc/rc.conf
echo 'firewall_enable="YES"' >> /tmp/mnt/etc/rc.conf
echo 'firewall_type="OPEN"' >> /tmp/mnt/etc/rc.conf
echo 'firewall_simple_iif="em0"' >> /tmp/mnt/etc/rc.conf
echo 'firewall_simple_inet="192.168.0.0/24"' >> /tmp/mnt/etc/rc.conf
echo 'firewall_simple_oif="em1"' >> /tmp/mnt/etc/rc.conf
echo 'firewall_simple_onet="10.0.0.0/16"' >> /tmp/mnt/etc/rc.conf
echo '' >> /tmp/mnt/etc/rc.conf
echo '# SSH' >> /tmp/mnt/etc/rc.conf
echo 'sshd_enable="YES"' >> /tmp/mnt/etc/rc.conf

# Вносим изменения в файл fstab

cat << EOF >> /tmp/mnt/etc/fstab
# Device	Mountpoint	FStype	Options	Dump	Pass#
/dev/gpt/swap0	none		swap	sw	0	0
/dev/gpt/swap1	none		swap	sw	0	0
proc		/proc		procfs	rw	0	0
devfs		/dev		devfs	rw	0	0
fdescfs		/dev/fd		fdescfs	rw	0	0
EOF

# Вносим изменения в файл login.conf

cat << EOF >> /tmp/mnt/etc/login.conf
# Russian UTF8
russian_utf8|Russian UTF-8 accounts:\
 :charset=UTF-8:\
 :lang=ru_RU.UTF-8:\
 :LC_ALL=ru_RU.UTF-8:\
 :tc=default:
EOF

# Вносим изменения в файл profile

echo 'LANG="ru_RU.UTF-8"; export LANG' >> /tmp/mnt/etc/profile
echo 'LC_CTYPE="ru_RU.UTF-8"; export LC_CTYPE' >> /tmp/mnt/etc/profile
echo 'LC_COLLATE="POSIX"; export LC_COLLATE' >> /tmp/mnt/etc/profile
echo 'LC_ALL="ru_RU.UTF-8"; export LC_ALL' >> /tmp/mnt/etc/profile

# Вносим изменения в файл csh.cshrc

echo 'setenv LANG ru_RU.UTF-8' >> /mnt/etc/csh.cshrc
echo 'setenv LC_CTYPE ru_RU.UTF-8' >> /mnt/etc/csh.cshrc
echo 'setenv LC_COLLATE POSIX' >> /mnt/etc/csh.cshrc
echo 'setenv LC_ALL ru_RU.UTF-8' >> /mnt/etc/csh.cshrc
zfs unmount -a
zfs set mountpoint=legacy zfspool
zfs set mountpoint=/usr zfspool/usr
zfs set mountpoint=/usr/home zfspool/home
zfs set mountpoint=/usr/local zfspool/local
zfs set mountpoint=/usr/obj zfspool/obj
zfs set mountpoint=/usr/ports/distfiles zfspool/distfiles
zfs set mountpoint=/usr/ports zfspool/ports
zfs set mountpoint=/usr/src zfspool/src
zfs set mountpoint=/var zfspool/var
zfs set mountpoint=/tmp zfspool/tmp
zfs set readonly=on zfspool/var/empty
zfs set mountpoint=data zfspool/data
shutdown -p now

# После того, как компьютер выключился извлекаем флешку и запускаем нашу систему.

# Для входа используем логин root и пустой пароль. Проверяем доступность интернет ресурсов:

ping ya.ru
# Если сеть настроена правильно и доступна, то продолжаем.

# Добавляем дополнительные настройки для нашего шлюза:

echo 'natd_enable="YES"' >> /etc/rc.conf
echo 'natd_interface="em1"' >> /etc/rc.conf
echo 'ipfw_load="YES"' >> /boot/loader.conf
echo 'ipdivert_load="YES"' >> /boot/loader.conf
echo 'firewall_type="SIMPLE"' >> /etc/rc.conf