|
追踪NetBSD-current
译者:祁人不开花
E-mail:yixiu0001@gmail.com
为什么要追踪NetBSD当前版本?
基于若干原因,NetBSD的开发者已经把NetBSD当前版的源代码向公众提供。总的说来,提供NetBSD-current帮助我们创建稳定,可使用的系统。
它使得人们使用开发中的NetBSD变得容易。发布当前版的开发代码使得人们看到系统的发展趋势,并且能够联系到他们所实现的特性。
它也使得用户所做的更改更容易整合。如果用户对当前开发的源码做了修改,那么几乎不需要整合就可放到主源码树。
它也允许广泛的测试所开发的软件。(开发者)鼓励NetBSD-current的用户提交当前源码的bug报告(http://www.tw.netbsd.org/support ... 发现和清除。
安装当前快照
为了快速使用当前版本,从版本引擎产生的快照开始。每个平台的当前状态都可在NetBSD自动编译(http://releng.netbsd.org/cgi-bin ... 和平台查看。
1.进到binary/sets目录,mget*.tgz文件到你最常用的管理员目录(例如$HOME/current);如果受限于磁盘空间和/或时间,只有kern-GENERIC,etc, base, and comp(如果你想要编译器)是必需的。
2.获取期望的/etc和内核
$su
$cd /root
$ tar -zxpf ~/etc.tgz
$ tar -zxpf ~/kern-GENERIC.tgz
$ ln -fh /netbsd /netbsd.old
$ mv netbsd /netbsd
$ shutdown -r now 3.获取相应的base,和别的所需的
$su
# cd /
# tar -zxpf ~/comp.tgz
# ...
# tar -zxpf ~/base.tgz 4.最后升级/etc:postinstall首先检验和确保大部分事情可以自动化,在接下来的几步里,etc升级会问如何更新。
#/usr/sbin/postinstall -s /root check
# /usr/sbin/postinstall -s /root fix
# /usr/sbin/etcupdate -s /root
# shutdown -r now 在这里,你已接近当前版并准备编译你自己的当前源码了。
下载当前源码
传统上,系统源码文件是在/usr/src,但这通常要求root权限。当前build.sh过程可完全以无特权运行,尽管安装仍然要求root权限。本文档假定在/usr/src,可以使用别的目录(例如$HOME/current)。
1.为源码树选择个目录
$cd/usr
$su
2.从离你最近的NetBSD镜像下载当前源码(http://www.tw.netbsd.org/mirrors/)
通过ftpftp://ftp.netbsd.org/pub/NetBSD/NetBSD-current/tar_files/src/,或使用sup ftp://ftp.netbsd.org/pub/NetBSD/README.sup
这些文件刷新源码树快照,对于大多数的升级文件使用anoncvs(http://www.tw.netbsd.org/docs/current/index.html#using-anoncvs)
$cd /usr/src
$ cvs -q -d $CVSROOT update -dP -d$CVSROOT只在第一次升级是时需要,为了使用你所选择的CVS镜像,记得总是使用-p标志或写入你的.cvsrc文件。
3.修改权限,如果你希望源码树可被无特权的传统wsrc组的用户管理,如下这么做(以root):
$chown -R user:wsrc/usr/src
$ chmod -R u=rwX,g=rwX,o=rX /usr/src 从源码编译发行版
对于最近的更改记得检查src/BUILDING。
通常,系统目标文件放在/usr/obj,但是这通常要求root权限。作为一种选择,把目标文件放在别的文件系统可以可观的加快编译。本文假定在/usr/src,可以使用别的目录(例如$HOME/current)。
1.为目标文件选择一个目录,它对于一个发布版本的压缩包和一个完全安装要有足够的空间。
$cd /usr/src
$ su
# mkdir ../tools
# mkdir ../obj 2.从源码树的根
$cd /usr/src
$ ./build.sh -O ../obj -T ../tools -u -U release 在这个例子里,-u选项表示在编译之前不运行makeclean操作。对于一个先前和全新的编译来说,这是很有用的。(注:
ccache起的就是这个作用,关于在NetBSD里使用ccache请参见《usingccache with build.sh》一文)
-u选项允许整个编译以非root用户进行。
当完成后,你会获得build.sh所选择的(会显示出来)你需要安装到目录里的所有东西,包括安装媒介和注意文件。
如果你想为不同架构交叉编译(http://www.tw.netbsd.org/docs/gu ... uild.sh时,包含 -a ARCH'
关于更多细节,运行./build.sh-h,或参见/usr/src/BUILDING
升级存在的系统
请记得为最近升级检查src/UPDATING。
1.从源码根目录
$cd/usr /src
2.编译工具链
$./build.sh -O ../obj -T ../tools -U -u tools
3.编译发行版
$./build.sh -O ../obj -T ../tools -U -u distribution
4.编译内核
$./build.sh -O ../obj -T ../tools -U -u kernel=GENERIC
5.安装内核
$cd ../obj/sys/arch/<ARCH>/compile/GENERIC
$ su
# mv /netbsd /netbsd.old
# cp netbsd /netbsd 6.重启进入新内核
#shutdown -r now
7.安装新应用程序
$cd /usr/src
$ su
# ./build.sh -O ../obj -T ../tools -U install=/ 8.按照输出的指令修正过时的文件爱你,例如:
#/usr/src/usr.sbin/postinstall/postinstall -s /usr/src -d // fixdefaults mtree obsolete
9.升级/etc
#/usr/sbin/etcupdate -s /usr/src
10.重启以确保所有运行的服务使用新的程序
#shutdown-r now
在这个例子中,-u选项表明升级过程,-U选项允许真个过程以非root用户进行,然后以root安装。
这个编译顺序(工具,发行版,内核)用于当出问题时优化升级时间。为了确保正确,当errors/cvs升级时,这个过程应当重做。
更多信息参见/usr/UPDATING
你需要记住的事情
当升级到很新的当前版时,你需要在安装新的库前总是编译和引导一个新的内核。通常最好的方法是在任何事情前尝试新内核,如果你遇到一些问题请参见内核FAQ(http://www.tw.netbsd.org/docs/ke ... ng_a_current_kernel)
当内核运行起来时,你应当看一下源码树里的BUILDING文件(ftp://ftp.netbsd.org/pub/NetBSD/ ... 户应用程序。
当编译一个当前内核,总是记得要包含COMPAT_<lastrelease>选项(例如,COMPAT_16)。因为当前分支来源于最新稳定版,包含了兼容代码,但是仅当这个选项存在时是允许的。作为最低需求,在引导心内核和使用build.sh完成编译之间,你需要这个兼容代码。
强烈建议使用NetBSD当前版的用户到当前用户邮件列表注册(http://www.tw.netbsd.org/mailing ... /#source-changes)
*除非你确信没有添加任何新的系统调用,随便怎么做;这是安全的。
Makefile目标变量是什么样的?
对于进一步解释使用build.sh脚本,运行./build.sh-h,并参见/usr/BUILDING。
警告:升级的工具链已经不使用makebuild,强烈建议不这么做。
当你第一次使用build.sh编译你的系统,一批用于编译的工具也会编译。任何编译请求会重用已经编译的工具,这样会减少时间。
当然,不要./build.shinstall=/ ,除非./build.sh之前已经成功完成否则很肯能最终产生一个不工作的系统。
使用anoncvs(匿名CVS)
这些指令包括未加密的anoncvs连接。如果你想使用加密协议,参见这里
1.安装devel/scmcvs。
2.设置CVSROOT环境变量来指出所用的cvs服务器
对于csh或tcsh用户
#setenv CVSROOT :pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot
对于sh和ksh或bash2用户
$CVSROOT=:pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot; export CVSROOT
3.
$cd /usr
$ cvs login (密码是anoncvs)
你对于初始化检查的目录必须有写权限;然后你可以改变源码树的所有者。其中一个可能的方法是以root作初始化检查,然后把源码树给别的用户以后使用。
通过ssh使用anoncvs
上一块所说的使用anoncvs方法可以使用ssh来确保你所获得源码的完整性。然而这增加了cvs服务器的负担。
支持ssh连接的镜像服务器显示了所需要的信息。
一般来说,在cvsroot里移除':pserver:',并设置CVS_RSH为ssh就可以了。 |
|