FreeBSD 换源
为了更好的帮助和服务 FreeBSD 中文社区,我们将在这里持续讨论 FreeBSD 的换源实现情况
- 换源代码在这里: https://github.com/RubyMetric/chsrc/blob/main/chsrc.c#L1255
- 镜像在这里: https://github.com/RubyMetric/chsrc/blob/main/sources.h#L550
上述地址可能随代码的更新而代码行变动,我尽量更新
2023-09-24
今天重新实现了
freebsd-pkg换源代码freebsd-ports换源代码
有几个问题:
freebsd-pkg源 有没有 http 和 https 的问题?- https://help.mirrors.cernet.edu.cn/FreeBSD-ports/ 这里提供了一种换
freebsd-ports的方式,这种并没有在你们的文档中记载,这种可行吗?选用哪一种最合适? freebsd-update源目前的状况如何?
@ykla
- 默认安装的 FreeBSD 基本系统是没有 SSL 证书的,需要先安装
security/ca_root_nss这个包然后才能把软件源里的http改为https; - Ports 源(Ports Collection)和 Port 源是两个,之前是使用 portsnap 来拉取 Ports,现在推荐使用 git 或者 gitup 来拉取 Ports,也可以直接下载压缩包解压到指定路径。Ports 是 Port 的集合,一般来说一个 Port 就是一个单独的软件。Port 文件和 Gentoo 的机制类似(Gentoo 借鉴的 BSD),里面并不包含任何源代码,只是给出了补丁、链接、校验码、作者信息等信息,Port 源是指拉取源代码包的源,例如:
MASTER_SITE_OVERRIDE?=https://mirrors.cernet.edu.cn/FreeBSD-ports/distfiles/${DIST_SUBDIR}/写入/etc/make.conf。设置了这个源后就会在指定镜像站下载源代码包而无需再去 Port 指定的作者提供的最初始的链接地址去拉取源码包。在 FreeBSD 上要使用 Ports 安装 xorg,需要:①先拉取 Ports,② 进入 Ports 路径cd /usr/ports/X11/xorg③执行make install clean自动下载源码包打补丁进行编译等。 - 目前境内无
freebsd-update源,该源价值也不大,因为目前的升级文件是由几千个到上万个不等的小文件组成的,在有境内源的时候我测试过升级一个同一个系统所需要的时间相差不大,几乎一样。
需要注意的是
-
nju 的源并不能使用 git 拉取 Ports。他没有设置 git。
-
更换境内 pkg 源时,需要设置
url: "http://mirrors.163.com/freebsd-pkg/${ABI}/quarterly",时,必须删掉自带的pkg+。 -
quarterly和latest是两个源。前者是一个季度更新一次,后者是滚动更新的。(除了 release 其他版本都只有latest) -
FreeBSD 基本系统并不自带 gmake,基本系统只自带 clang + llvm.
@ykla
Port 源是指拉取源代码包的源
- [x] 已指定
nju 的源并不能使用 git 拉取 Ports。他没有设置 git
- [x] 已解决
更换境内 pkg 源时,需要删掉自带的 pkg+
- [x] 已解决
quarterly和latest是两个源。前者是一个季度更新一次,后者是滚动更新的
- [ ] 现在
chsrc只使用了/freebsd-pkg/${ABI}/latest你看可以吗
FreeBSD 基本系统并不自带
gmake
- [ ] 请问有
make命令吗?make是alias到bmake上了吗?FreeBSD自带的那个make(非gmake)可以运行我们的Makefile吗?还是说,FreeBSD 根本没有任何make?
其他问题
/usr/ports 和 /usr/local/etc 这些路径都是用户级别(bsdcn.org文档中写的)的吗?也就是说不需要 root 权限是吗?这样的话,是否可以完全不需要 sudo,即可完成换源?
@ykla
Port 源是指拉取源代码包的源
- [x] 已指定
nju 的源并不能使用 git 拉取 Ports。他没有设置 git
- [x] 已解决
更换境内 pkg 源时,需要删掉自带的 pkg+
- [x] 已解决
quarterly和latest是两个源。前者是一个季度更新一次,后者是滚动更新的
- [ ] 现在
chsrc只使用了/freebsd-pkg/${ABI}/latest你看可以吗FreeBSD 基本系统并不自带
gmake
- [ ] 请问有
make命令吗?make是alias到bmake上了吗?FreeBSD自带的那个make(非gmake)可以运行我们的Makefile吗?还是说,FreeBSD 根本没有任何make?其他问题
/usr/ports和/usr/local/etc这些路径都是用户级别(bsdcn.org文档中写的)的吗?也就是说不需要root权限是吗?这样的话,是否可以完全不需要sudo,即可完成换源?
- FreeBSD 不自带 sudo。
- make 如下:
root@ykla:~/chsrc # ls -aL /usr/bin/make
/usr/bin/make
root@ykla:~/chsrc # ls -aL /usr/bin/bmake
/usr/bin/bmake
root@ykla:~/chsrc # make
make: "/root/chsrc/Makefile" line 12: Invalid line type
make: "/root/chsrc/Makefile" line 14: Invalid line type
make: "/root/chsrc/Makefile" line 15: Invalid line type
make: "/root/chsrc/Makefile" line 16: warning: duplicate script for target "ifeq" ignored
make: "Makefile" line 13: warning: using previous script for "ifeq" defined here
make: "/root/chsrc/Makefile" line 17: Invalid line type
make: "/root/chsrc/Makefile" line 18: Invalid line type
make: "/root/chsrc/Makefile" line 19: warning: duplicate script for target "ifeq" ignored
make: "Makefile" line 13: warning: using previous script for "ifeq" defined here
make: "/root/chsrc/Makefile" line 19: warning: duplicate script for target "(,)" ignored
make: "Makefile" line 13: warning: using previous script for "(,)" defined here
make: "/root/chsrc/Makefile" line 20: Invalid line type
make: Fatal errors encountered -- cannot continue
make: stopped in /root/chsrc
root@ykla:~/chsrc #
root@ykla:~/chsrc # ls -al /usr/ports
total 9
drwxr-xr-x 2 root wheel 2 Aug 25 07:14 .
drwxr-xr-x 15 root wheel 15 Aug 18 21:01 ..
root@ykla:~/chsrc # ls -al /usr/local/etc
total 39
drwxr-xr-x 9 root wheel 13 Sep 9 15:42 .
drwxr-xr-x 13 root wheel 13 Sep 9 14:50 ..
drwxr-xr-x 2 root wheel 4 Sep 9 15:42 bash_completion.d
drwxr-xr-x 2 root wheel 6 Sep 9 14:50 dbus-1
drwxr-xr-x 2 root wheel 4 Sep 9 15:42 git
drwxr-xr-x 2 root wheel 3 Aug 25 07:23 man.d
drwxr-xr-x 5 root wheel 5 Aug 25 07:21 periodic
-rw-r--r-- 1 root wheel 2392 Aug 26 09:31 pkg.conf
-rw-r--r-- 1 root wheel 2392 Aug 26 09:31 pkg.conf.sample
drwxr-xr-x 2 root wheel 4 Sep 9 15:42 rc.d
drwxr-xr-x 2 root wheel 4 Aug 25 07:23 ssl
-rw-r--r-- 1 root wheel 4945 Aug 26 23:01 wgetrc
-rw-r--r-- 1 root wheel 4945 Aug 26 23:01 wgetrc.sample
root@ykla:~/chsrc #
- 建议同时给出设置季度分支的命令。默认可以是 latest。
建议同时给出设置季度分支的命令。默认可以是 latest。
- [x] 已提示用户
FreeBSD 不自带 sudo。
- [x] 不再进行root权限检测
其他问题
-
假设当前目录中
abc.txt文件不存在,ee abc.txt这个命令是创建并打开一个文件,还是只创建一个文件? -
请参考 https://gitee.com/RubyMetric/chsrc#bsd 使用
chsrc,看看能否编译运行。若能运行,则接着使用chsrc set freebsd和其他你想要换源的,看看能不能工作 😶🌫️
编译没有错误。使用命令应为 ./chsrc set freebsd
- ee abc.txt
ee abc.txt 是创建并打开一个文件。
ustc: {
url: "http://mirrors.ustc.edu.cn/freebsd-pkg/${ABI}/latest",
mirror_type: "srv",
signature_type: "none",
fingerprints: "/usr/share/keys/pkg",
enabled: yes
}
部分源没有 latest 或不再更新,另请见附图:http://pkg.freebsd.org/
另外您的提示都是中文,在 tty 会乱码,FreeBSD 默认没有中文字体。FreeBSD 默认安装是没有任何 GUI 的。也不会预装 XORG。如图:
还有支持centos换源的计划么?
@willemsestan
你好,请参考 CentOS (Stream) Recipe Challenge! https://github.com/RubyMetric/chsrc/issues/48
鉴于目前大部分换源操作都是使用 sed 命令实现的,但是 BSD 上的 sed 命令与 Linux 上的有点差别。比如
- -i 选项(原地编辑):
- GNU sed:
sed -i 's/foo/bar/' file - BSD sed:必须指定备份扩展名(空字符串也要给):
sed -i '' 's/foo/bar/' file以上内容来自deepseek和 https://www.baeldung-cn.com/linux/gnu-bsd-stream-editor
- GNU sed:
因此需要评估一下现有的换源实现, 确保其在 BSD 上也是正常运行的。