如何在FreeBSD上使用svn更新/usr/src的源代码树

时间:2020-01-09 10:43:59  来源:igfitidea点击:

我为使用vnet的FreeBSD Jail编译了定制的FreeBSD内核。
如何更新我的FreeBSD/usr/src /代码树?
如何使用svn命令在FreeBSD上的/usr/src上更新源树,以再次修补和编译内核?

说明:Subversion是一个软件版本控制和版本控制系统,根据Apache许可以开源形式分发。

FreeBSD使用Subversion作为唯一的版本控制系统来存储所有FreeBSD的源代码,文档和Ports集合。
因此,使用svn命令更新/usr/src /和/usr/ports /。
在本教程中我们学习了如何使用Subversion更新/usr/src /源代码。

在/usr/src中更新源树的命令

Subversion的轻量级版本已经以svnlite的形式安装在FreeBSD上。
但是,我喜欢svn。
如果需要,可以使用svnlite而不是svn命令。
所以我要安装svn client。

安装ca_root_nss软件包

ca_root_nss软件包包括来自Mozilla NSS库以及Firefox和Thunderbird中的证书颁发机构的根证书。
这意味着您也可以使用Subversion来验证HTTPS存储库服务器的身份。
执行以下pkg命令以安装ca_root_nss:

# pkg install ca_root_nss

或者

# cd /usr/ports/security/ca_root_nss
# make install clean

在FreeBSD上安装svn命令

执行以下pkg命令以安装Subversion。

# pkg install subversion

Subversion也可以作为端口安装:

# cd /usr/ports/devel/subversion
# make install clean

如何更新在/usr/src /下安装的FreeBSD源代码树

运行以下命令以更新现有树:

# svn update /usr/src/

或者,如果您使用的是svnlight,请运行:

# svnlight update /usr/src/

如果您从未使用过/usr/src /或者在其上运行svn命令,则必须删除或者移动旧的/usr/src /:

# cd /usr/src/
# rm -rf *

现在运行svn update/usr/src /

# svn update /usr/src/

或者查找当前的FreeBSD版本

# uname -r # <--- says version 11.2 and so get 11.2 latest source code
# svn checkout https://svn.freebsd.org/base/releng/11.2 /usr/src/

等一下在编译FreeBSD内核或者进行buildworld之前,请使用cat命令或者vi命令阅读/usr/src/UPDATING

$ cat /usr/src/UPDATING | more

或者

$ vi /usr/src/UPDATING

如何从更新的/usr/src /编译内核

假设您要编译启用了VIMAGE的FreeBSD内核。
使用cp命令,如下所示复制内核配置:

$ sudo cp -v /usr/src/share/examples/jails/VIMAGE /usr/src/sys/amd64/conf/VIMAGE
$ cd /usr/src/

编译:

$ sudo make KERNCONF=VIMAGE kernel

通过传递-j选项,可以指定make一次可以运行的最大作业数。
例如:

$ sudo make -j 16 KERNCONF=VIMAGE kernel

您必须重新启动FreeBSD框:

$ sudo reboot

重新启动后验证新版本:

$ uname -mrs

如何同时进行buildworld和内核编译

命令如下:

# vim /usr/src/UPDATING
# cd /usr/src
# make -j16 buildworld
# make -j16 kernel
# reboot
# cd /usr/src
# make installworld
# mergemaster -Ui
# reboot

要验证新的FreeBSD内核,请在重新引导FreeBSD服务器/机器后运行以下命令:

$ uname -a

输出示例:

11.2-RELEASE-p12

或者使用freebsd-version命令找出FreeBSD的版本和补丁程序级别:

$ freebsd-version

例如,如何确保 Jail也开始了。
所以我执行:

jls

输出示例:

JID  IP Address      Hostname                      Path
     1                  rsnapshot                     /jails/rsnapshot
     2                  www                           /jails/www