FreeBSD, 优秀的一体机

@vrqq  April 30, 2022

Prerequestion

新加一个磁盘,下载img镜像,并写入刚添加的盘

dd if=./FreeBSD-13.0-xxxxx.img of=/dev/vdc

通过Linux grub2安装FreeBSD 13

以Fedora为例,先把grub等待时间调长一点

vi /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg

然后在Grub2界面敲c键,依次敲如下命令
于是便通过chainloader引导至FreeBSD的启动器中

set root=(hd2)
chainloader (hd2)+1
boot

从FreeBSD boot2启动 (legacy)

例如 我当前镜像dd到了第2个盘上(从0开始),则把default中的0换成2敲进去,如下:

FreeBSD/x86 boot
Default: 0:ad(0,a)/boot/loader
boot: 2:ad(0,a)/boot/loader

含义详见 https://www.freebsd.org/cgi/man.cgi?boot(8)

Install Guide

如需全盘加密
在安装过程中到Parititioning时,一定要选Shell,然后用gparted自己打分区。(不确定阿里云是否支持GPT引导,)
他图形界面智障,点错了只能重新开始,按这个视频做 把盘符换成自己的即可
https://www.freebsdnews.com/2020/01/23/how-to-freebsd-ufs-encryption-by-robonuggie/
(备 https://www.youtube.com/channel/UCxwcmRAmBRzZMNS37dCgmHA
大意是:先用gparted 分区,再用geli加密 最后在loader中开启geli support

下文以第三块盘 在freebsd中位置是/dev/vtbd0(相当于linux下/dev/vda
即使在阿里云不支持EFI启动的情况下,磁盘也可以使用GPT格式,freebsd将在boot2阶段使用gptboot来支持GPT

## 0. clear current partition scheme
gpart destroy -F vtbd0

## 1. create an scheme on 'vtbd0' and add partitions description
## Note: if using BSD partition table, '-l' argument would not supported.
## in my machine: vtbd0p1 : dd from /boot/gptboot
##                vtbd0p2 : 1G partition
##                vtbd0p3 : '-l root0' partition
gpart create -s GPT vtbd0
gpart add -s 512k -a 4k -t freebsd-boot vtbd0
gpart add -s 1G -a 4k -t freebsd-ufs -l boot0 vtbd0
gpart add -a 4k -t freebsd-ufs -l root0 vtbd0

## 2. write bootcode and bootcode
## see BOOTSTRAPPING in https://www.freebsd.org/cgi/man.cgi?query=gpart 
## (IF MBR it may be: gpart bootcode -b /boot/boot0 -p /boot/boot -i 1 vtbd0)
## /boot/pmbr: 512 bytes;  /boot/gptboot: 64682 bytes
gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 vtbd0

## format 1G-boot partition
newfs -L bootfs0 /dev/vtbd0p2

## 3. GELI init and load on /dev/vtbd0p3
## https://www.freebsd.org/cgi/man.cgi?geli(8)
geli init -b -B none -e AES-XTS -l 256 -s 4096 /dev/gpt/root0
geli attach /dev/gpt/root0

## 4. create file-system and link '1G-boot-partition' to 'vtbd0d/bootfs' manually
## Warning: Add '-t' for enable TRIM if using SSD.
newfs -U -L rootfs0 /dev/gpt/root0.eli
mount /dev/gpt/root0.eli /mnt
mkdir -p /mnt/bootfs
mount /dev/vtbd0p2 /mnt/bootfs
mkdir -p /mnt/bootfs/boot
cd /mnt
ln -s bootfs/boot

## 5. return
exit    

然后在bootloader中打开geli支持
在安装完成提示是否重启时 选否进console
这里可以用echo写入文件(>> for append) 也可以用edit 或者vi

echo 'geom_eli_load="YES"' >> /boot/loader.conf
echo 'vfs.root.mountfrom="ufs:/dev/vtbd0p3.eli"' >> /boot/loader.conf

然后创建fstab
因为我们刚用的手动分区 还需要mount: vi /etc/fstab

/dev/vtbd0p3.eli  /        ufs  rw  1  1
/dev/vtbd0p2      /bootfs  ufs  rw  0  0

补充:如何后续补救性开启geli

先进loader的OK prompt,因为geom_eli.ko要在kernel之前load 故执行如下代码

set geom_eli_load="YES"
load /boot/kernel/kernel
load /boot/kernel/geom_eli.ko  # just confirm loaded
set vfs.root.mountfrom="ufs:/dev/vtbd0p3.eli"
boot

后记

FreeBSD有种所见即所得的感觉,文档简短清晰,可是用的人少,遇到问题想走捷径复制粘贴不容易,还需仔细阅读。
安装一些常用软件

pkg install sudo vim

添加新评论