+ -
当前位置:首页 → 问答吧 → 追踪NetBSD-current

追踪NetBSD-current

时间:2008-03-29

来源:互联网

追踪NetBSD-current
译者:祁人不开花
E-mail:[email protected]

为什么要追踪NetBSD当前版本?
基于若干原因,NetBSD的开发者已经把NetBSD当前版的源代码向公众提供。总的说来,提供NetBSD-current帮助我们创建稳定,可使用的系统。
它使得人们使用开发中的NetBSD变得容易。发布当前版的开发代码使得人们看到系统的发展趋势,并且能够联系到他们所实现的特性。
它也使得用户所做的更改更容易整合。如果用户对当前开发的源码做了修改,那么几乎不需要整合就可放到主源码树。
它也允许广泛的测试所开发的软件。(开发者)鼓励NetBSD-current的用户提交当前源码的bug报告(http://www.tw.netbsd.org/support/sen...

作者: 不开花   发布时间: 2008-03-29

使用anoncvs追踪NetBSD当前

开始

1.只获取内核源码

$ cd /usr

$ cvs checkout -P src/sys

这给你/usr/src/sys下的内核源码。这里有个如何编译内核的信息http://www.tw.netbsd.org/docs/kernel...build_a_kernel

2.获取整个源码树(包括内核)

$ cd /usr

$ cvs checkout -P src

到这里,在/usr/src下你得到了NetBSD的完整源码。

3.修改权限

# chown -R user /usr/src

升级源码

1.仅升级内核源码

$ cd /usr/src/sys

$ cvs update -dP

2.升级整个源码树

$ cd /usr/src

$ cvs update -dP

注意:运行cvs checkout -d dir src并没有作用。你会获得一个错误信息说"existing repository ... does not match ...; ignoring module _gnusrc-cmp" 等。

获取某个日期的源码

$ cvs checkout -D 20020501-UTC src

获取某个分支的源码

$ cvs checkout -rnetbsd-1-6 src

有用提示

不要使用cvs -z选项。数据流会同步混乱,导致客户端坏掉,或是导致客户端完全挂掉。额外的负载在服务器上艰难。

如果你想获取一个分支,你也许想希望不覆盖你已有的目录,而是创建新的目录:

$ cd /parent/dir/to/checkout/into

$ mkdir NewName-temp
$ cd NewName-temp
$ cvs checkout ... src
$ mv src ../NewName
$ cd ..
$ rmdir NewName-temp

你需要使用目标目录来使cvs升级正确工作。如果你得到如下的错误:

cvs [update aborted]: could not chdir to gnu/usr.bin/gdb/gdb: Not a directory

你需要做make cleandir并再试一次。确保在cvs升级运行make obj

你可以在你的主目录的.cvsrc文件加上特定的命令,这样将会自动使用它们,一个简单的例子是 .cvsrc

update -dP

checkout -P
diff -u

从源码编译NetBSD

假定在你的机器上有升级的NetBSD二进制快照,并且在/usr/src/有源码。进一步既定你的BSDOBJDIR是/usr/obj。

首先编译应用程序

# mkdir /usr/obj

# cd /usr/src
# ./build.sh -O /usr/obj -D /usr/NetBSD-new-build -T /usr/tools build
# ./build.sh -O /usr/obj -D /usr/NetBSD-new-build -T /usr/tools install=/

当你使用build.sh第一次编译你的系统,会产生一批编译所用的工具。任何编译请求会重用已经编译的工具,就减少了时间。

当然,不要./build.sh install=/ ,除非./build.sh之前已经成功完成否则很肯能最终产生一个不工作的系统。

在CVS升级之后升级应用程序

# cd /usr/src

# ./build.sh -D /usr/NetBSD-new-build -O /usr/obj -T /usr/tools -u build
# ./build.sh -D /usr/NetBSD-new-build -O /usr/obj -T /usr/tools -u install=/

这会在运行系统上安装新的程序-重启以确保它们有效。

如果你频繁的升级你的系统并想直接升级你的运行系统,你可以使用专家模式使用DESTDIR=/编译,例如

# ./build.sh -E -O /usr/obj -T /usr/tools -u build

注意这仅适于专家用户并且你很容易导致的系统不能编译任何东西。仅当你确信编译会成功完成时使用。

以下使用sup的部分没有翻译,跟前面的差不多,不必逐一翻译,可自行参见原文。

...............................................

作者: 不开花   发布时间: 2008-03-29

为什么会出错?

如果你尝试编译当前版,或是从快照或是早些的当前版,它们无法工作,别荒,试试下列步骤。

1.查阅你所编译版本的UPDATING文件

2.查阅当前用户文档http://mail-index.netbsd.org/current-users/

3.再次升级。有可能问题已经解决,而你的还处于旧的内容。

4.如果上面都失败了,给当前用户列表发封邮件。包括数据,时间,以及你获取当前版所用的方法,还有你所做的一些修改。放进包含出错信息的脚本。

使用etcupdate升级配置和初始文件

etcupdate是个帮助用户比较,升级和安装操作系统升级后新配置/dev,/etc和/root下初始文件的脚本。操作系统升级通过编译源码或是获取发行的二进制文件。

在源码里使用etcupdate

在/etc/src目录下

#etcupdate

如果你的NetBSD源码在别的目录,别担心,使用-s告诉你的源码树目录

# etcupdate -s /home/jdoe/netbsd/src

使用etcupdate升级二进制套件集合

有时候不可能获取源码但是你想升级配置和初始文件。解决办法是获取所需的发行文件并使用-b srcdir选择告诉etcupdate我们不需要源码而只需要官方发行套件。

# mkdir /tmp/temproot

# cd /tmp/temproot
# tar xpzf /some/where/etc.tgz
# etcupdate -s /tmp/temproot

特殊问题

升级到wscons后控制台死掉了

你需要从src/etc相应的etc.port目录复制当前的MAKEDEV到/dev,以单用户引导,然后键入:

# fsck -p

# mount -vt nonfs
# cd /dev
# ./MAKEDEV wscons

为什么build.sh总是重新首先重新编译nbmake?

即使在运行./build.sh tools和使用-u标识或是在etc/mk.conf里指定TOOLDIR,nbmake总是被重新编译。这是正常的。原因就在build.sh里面,在rebuildmake函数里:

# Note that we do NOT try to grovel "mk.conf" here to find out if

# TOOLDIR is set there, because it can contain make variable
# expansions and other stuff only parsable *after* we have a working
# ${toolprefix}make. So this logic can only work if the user has
# pre-set TOOLDIR in the environment or used the -T option to
# build.sh.
#

因此,如果你不想重新编译nbmake,你需要通过-T tooldir或是在环境里设置TOOLDIR变量

作者: 不开花   发布时间: 2008-03-29