第 4.9 节 使用 pkgbase 更新 FreeBSD
现在 FreeBSD 的系统更新是与第三方软件更新的分离的(现在使用 freebsd-update
),pkgbase 是目的就是将其合并起来统一使用 pkg
命令进行管理(学习 Linux?)。因为现在只有一级架构的 RELEASE 才有 freebsd-update
可用。pkgbase 早在 2016 年就有了,原计划在 FreeBSD 14 就进入系统替代 freebsd-update
,但是现在推迟到了 15。另外个人感觉 freebsd-update
体验非常差,非常慢(网络无关)。
pkgbase 的设计初衷是为了让 stable、current 和 release(BETA、RC 等)都能使用一种二进制工具进行更新。当下,stable、current 只能通过完全编译源代码的方式来更新。
警告
存在风险,可能会丢失所有数据!建议在操作之前做好备份。
下载 pkgbasify
脚本
pkgbasify
脚本在 Github 仓库下载 pkgbasify.lua
脚本文件。
(可选)配置软件源
FreeBSD 官方源的 pkgbase 信息如下:
分支
更新频率
URL 地址
main(15.0-CURRENT)
每天两次:08:00、20:00
main(15.0-CURRENT)
每周一次:星期日 20:00
stable/14
每天两次:08:00、20:00
stable/14
每周一次:星期日 20:00
releng/14.0(RELEASE)
每天两次:08:00、20:00
releng/14.1(RELEASE)
每天两次:08:00、20:00
releng/14.2(RELEASE)
每天两次:08:00、20:00
以上表格的时间已转换为北京时间,即东八区时间。为 FreeBSD 官方镜像站时间。
若官方源下载速度慢,可以考虑换成国内镜像。
修改 Lua 脚本中的 create_base_repo_conf
函数:
function create_base_repo_conf(path)
assert(os.execute("mkdir -p " .. path:match(".*/")))
local f <close> = assert(io.open(path, "w"))
assert(f:write(string.format([[
FreeBSD-base: {
url: "%s",
mirror_type: "srv",
signature_type: "fingerprints",
fingerprints: "/usr/share/keys/pkg",
enabled: yes
}
]], base_repo_url())))
end
将软件源信息替换为下列镜像站中的任何一个,例如:
function create_base_repo_conf(path)
assert(os.execute("mkdir -p " .. path:match(".*/")))
local f <close> = assert(io.open(path, "w"))
assert(f:write([[
FreeBSD-base: {
url: "https://mirrors.ustc.edu.cn/freebsd-pkg/${ABI}/base_latest",
enabled: yes
}
]]))
end
南京大学开源镜像站 NJU
FreeBSD-base: {
url: "https://mirrors.nju.edu.cn/freebsd-pkg/${ABI}/base_latest",
enabled: yes
}
中国科学技术大学开源镜像站 USTC
FreeBSD-base: {
url: "https://mirrors.ustc.edu.cn/freebsd-pkg/${ABI}/base_latest",
enabled: yes
}
网易开源镜像站 163
FreeBSD-base: {
url: "https://mirrors.163.com/freebsd-pkg/${ABI}/base_latest",
enabled: yes
}
运行 pkgbasify.lua
pkgbasify.lua
chmod +x pkgbasify.lua
./pkgbasify.lua
注意
我测试的是纯净系统,没有任何多余配置及第三方程序(除了 pkg),仅开了 SSH 服务。
警告
存在风险,可能会丢失所有数据!
参考文献
最后更新于