从源代码编译构建FreeBSD
我在 FreeBSD 15 Alphas更新和升级 遇到当前Alpha 2尚未发布更新,需要从源代码编译升级
获取源代码
参考 26.6.3. Updating the Source 根据
uname -r获取当前安装的RELEASE,例如14.3-RELEASE,则下载对应的源代码分支:
获取 freebsd 源代码
# 这步mv重命名会提示没有权限
mv /usr/src /usr/src.bak
git clone --branch releng/14.3 https://git.FreeBSD.org/src.git /usr/src
如果是获取STABLE分支:
获取
STABLE 分支 freebsd 源代码sudo git clone -b stable/14 https://git.freebsd.org/src.git /usr/src
如果是获取CURRENT分支:
获取
CURRENT 分支 freebsd 源代码git clone https://git.freebsd.org/src.git /usr/src
获取 STABLE/15
方法一
git clone出源代码,然后checkout出
stable/15分支:
获取
stable/15 分支 freebsd 源代码git clone https://git.freebsd.org/src.git /usr/src
# 使用 git branch -a 可以看到远程有 stable/15 分支
git checkout stable/15
方法二
使用 shallow Git clone 可以下载更少的数据也更快(不包含整个仓库的历史记录): 只需要特定构建的源代码,并且不打算跟踪分支的长期变化
使用 shallow clone 获取
stable/15 分支最新版本git clone --depth 1 -b stable/15 https://git.freebsd.org/src.git /usr/src
编译安装
在下载源代码之后,就可以执行编译内核或userland(world):
编译和安装
# 步骤1: 清除旧objects并构建 "world" (userland)
sudo make -j$(sysctl -n kern.smp.cpus) buildworld
# 步骤2: 构建内核
sudo make -j$(sysctl -n kern.smp.cpus) buildkernel
# 步骤3: 安装新内核
sudo make installkernel
# 步骤4: 重启到新内核,然后在安装新的 "world"
sudo shutdown -r now
# 步骤5: 在installworld之前更新和合并配置
etcupdate -p
# 重启以后,登陆系统并继续完成安装world
sudo make installworld
# 更新和合并 etc 配置
etcupdate -B
# 再次重启
sudo shutdown -r now
更新配置
etcupdate工具能够确保/etc目录下配置文件更新为符合新的upserspace:
更新
/etc 目录下配置etcupdate
然后检查新版本不需要的文件并删除
清理就文件和库
cd /usr/src
make check-old
make delete-old
make check-old-libs
make delete-old-libs
最后更新EFI boot系统(这步似乎不需要,我没有看到系统中有
/boot/efi/EFI/FREEBSD/LOADER.EFI):cp /boot/loader.efi /boot/efi/EFI/FREEBSD/LOADER.EFI
从源代码构建FreeBSD release介质
上述构建和安装系统是从源代码编译完成,但是只能在本机完成,而且是源代码编译,非常花费时间。
FreeBSD还提供了一个构建 .iso 和 .img 文件功能,适合后续批量安装系统:
制作release镜像
cd /usr/src/release
make clean
make -j$(sysctl -n kern.smp.cpus) release
完成后,在 /usr/obj/usr/src/amd64.amd64/release/ 目录下(根据硬件架构)会生成iso文件以及 base.txz 等文件。
为方便查找,可以使用 make install 将镜像文件复制到统一的目录:
将构建的镜像复制到指定目录
/usr/obj/releasemake install DESTDIR=/usr/obj/release
此时镜像安装都会集中到 /usr/obj/release 目录下,方便下载和刻录:
iso安装镜像
# ls -lah /usr/obj/release/
total 2.2 GB
drwxr-xr-x 3 root wheel 9B Sep 15 15:03 .
drwxr-xr-x 4 root wheel 4B Sep 15 15:03 ..
-rw-r--r-- 1 root wheel 462B Sep 15 15:04 CHECKSUM.SHA256
-rw-r--r-- 1 root wheel 718B Sep 15 15:03 CHECKSUM.SHA512
-rw-r--r-- 1 root wheel 528M Sep 15 14:34 FreeBSD-15.0-ALPHA2-amd64-bootonly.iso
-rw-r--r-- 1 root wheel 1.1G Sep 15 14:35 FreeBSD-15.0-ALPHA2-amd64-disc1.iso
-rw-r--r-- 1 root wheel 1.3G Sep 15 14:35 FreeBSD-15.0-ALPHA2-amd64-memstick.img
-rw-r--r-- 1 root wheel 654M Sep 15 14:34 FreeBSD-15.0-ALPHA2-amd64-mini-memstick.img
drwxr-xr-x 2 root wheel 12B Sep 15 14:33 ftp
# ls -lah /usr/obj/release/ftp/
total 790 MB
drwxr-xr-x 2 root wheel 12B Sep 15 14:33 .
drwxr-xr-x 3 root wheel 9B Sep 15 15:03 ..
-rw-r--r-- 1 root wheel 1.0K Sep 15 14:33 MANIFEST
-rw-r--r-- 1 root wheel 146M Sep 15 14:33 base-dbg.txz
-rw-r--r-- 1 root wheel 156M Sep 15 14:33 base.txz
-rw-r--r-- 1 root wheel 107M Sep 15 14:33 kernel-dbg.txz
-rw-r--r-- 1 root wheel 42M Sep 15 14:33 kernel.txz
-rw-r--r-- 1 root wheel 22M Sep 15 14:33 lib32-dbg.txz
-rw-r--r-- 1 root wheel 60M Sep 15 14:33 lib32.txz
-rw-r--r-- 1 root wheel 148B Sep 15 14:33 ports.txz
-rw-r--r-- 1 root wheel 238M Sep 15 14:33 src.txz
-rw-r--r-- 1 root wheel 17M Sep 15 14:33 tests.txz