现在的位置: 首页 > 综合 > 正文

用cvsup同步源代码并更新系统

2013年01月02日 ⁄ 综合 ⁄ 共 15136字 ⁄ 字号 评论关闭
用cvsup同步源代码并更新系统

(以FREEBSD5_3 STABLE版为例)

  我们随时都可以用cvsup与中央cvsup服务器,或它的某个镜像同步自己FreeBSD机器上的全部源代码。cvsup允许您一次获取整个源码集合,以后就只取更改过的部分。许多人从cron运行cvsup,以保持他们的源码自动更新。源代码更新包含两个部分,一是系统源代码,二是ports树的源代码。

  对于系统源代码,CVS(并行版本控制系统)包含CURRENT版和STABLE版两个树。FreeBSD STABLE版系统源代码的cvsup配置文件是/usr/share/examples/cvsup/stable-supfile,该文件默认是升级所有的系统源代码,一般情况只需改*default host项,让cvsup到离我们最近的cvsup镜像服务器下载源代码。ports树的源代码的cvsup配置文件是/usr/share/examples/cvsup/ports-supfile,可根据自己的需要指定更新那些分支的源代码。ports树只有一个版本,不象系统源代码有CURRENT版和STABLE版之分。为了保证源码之间的依赖性最好采用src-all和ports-all方式更新所有源码。

1. 复制配置文件到/etc目录(便于管理)

# cp /usr/share/examples/cvsup/ports-supfile /etc

# cp /usr/share/examples/cvsup/stable-supfile /etc

# chmod 755 /etc/ports-supfile

# chmod 755 /etc/stable-supfile

注:chmod 数字前加0代表目录,不加0代表文件

2. 编辑配置文件

# vi /etc/stable-supfile

-------------------------------------------------

*default host=cvsup.FreeBSDchina.org

*default base=/var/db

*default prefix=/usr

*default release=cvs tag=RELENG_5_3

*default delete use-rel-suffix

*default compress

src-all

-------------------------------------------------

# vi /etc/ports-supfile

-------------------------------------------------

*default host=cvsup.FreeBSDChina.org

*default base=/var/db

*default prefix=/usr

*default release=cvs tag=.

*default delete use-rel-suffix

*default compress

ports-all

-------------------------------------------------

 

注:

①default host=

  用来指定离我们最近的cvsup镜像服务器

②prefix=告诉 cvsup

  把接收的文件放在哪里,一般在/usr/src目录里。

③*default base=/var/dbCVSup

  客户端在被叫做 “base” 的目录里维护了几个状态文件。这些文件帮助 CVSup 更有效的工作,通过跟踪您已经接收到哪些更新的方式。如果 base 目录不存在,cvsup 客户端会拒绝工作。

④tag=用来指定版本含义如下:

  tag=RELENG_3指定版本为:FreeBSD 3-STABLE

  tag=RELENG_4指定版本为:FreeBSD 4-STABLE

  tag=RELENG_5_3指定版本为:FreeBSD 5_3-STABLE

⑤*default release=cvs delete use-rel-suffix compress

  release=cvs 显示服务器应该从 FreeBSD 的主 CVS 仓库中获取信ⅰ?

  delete 给 CVSup 权限删除文件。您应该总是指定它,这样 CVSup 可以保证您的源代码树完全更新。CVSup 很小心的只删除那些不再依赖的文件。您拥有的任何额外的文件会被严格的保留。

  use-rel-suffix 是 ... 不可思议的。 如果您真的想了解它,查看 cvsup(1) 手册页。否则,就指定而不用担心这个。

  compress 启用 gzip 风格的信道压缩。

⑥CVSup 文件 collection

  CVSup 可用的文件 collection 是分级组织的。有几个大的 collection,然后它们有分成更小的子 collection。接收一个大的 collection 等同于接收它的每一个子 collection。 collection 的等级关系在下面列表中通过缩进的使用反映出来。最常用的 collection 是 src-all,和 ports-all。其它的 collection 只被有着特定目的的小部分人使用,有些站点可能不全部支持。

cvs-all release=cvs (FreeBSD 主 CVS 仓库,包含密码系统的代码)

 distrib release=cvs (FreeBSD 发行版本和镜像相关的文件)

 doc-all release=cvs (FreeBSD 使用手册和其它文档的源代码。其中不包含 FreeBSD web 站点的文件)

 ports-all release=cvs (FreeBSD Ports Collection)

  如果您不想升级全部的 ports-all(整个 ports 树),而只是使用下面列出的一个子集,请确保您总是升级了 ports-base子collection!无论何时在 ports 构建下层构造有所改变的时候都会通过 ports-base 表现出来,因此,如果您只升级了“实际的”ports 而他们使用了一些新的特性,就有极大的可能会因一些神秘的错误信息而编译失败。 这种情况下,首先要做的事情就是确保您的 ports-base 子 collection 更新到最新。

  ports-archivers release=cvs (存档工具)

  ports-astro release=cvs (天文相关的 ports)

  ports-audio release=cvs (声音支持)

  ports-base release=cvs (Ports Collection 构建下部构造)

  位于 /usr/ports 的 Mk/ 和 Tools/ 子目录的各种各样的文件。无论您更新 Ports Collection 的任何部分的时候,您都应该同时更新这个子 collection。

  ports-benchmarks release=cvs (基准)

  ports-biology release=cvs (生物学)

  ports-cad release=cvs (计算机辅助设计工具)

  ports-chinese release=cvs (中文语言支持)

  ports-comms release=cvs (通信软件)

  ports-converters release=cvs (字符编码转换)

  ports-databases release=cvs (数据库)

  ports-deskutils release=cvs (计算机发明前常出现在桌面上的东西)

  ports-devel release=cvs (开发工具)

  ports-dns release=cvs (DNS 相关软件)

  ports-editors release=cvs (编辑器)

  ports-emulators release=cvs (其它操作系统的模拟器)

  ports-finance release=cvs (货币,金融相关应用程序)

  ports-ftp release=cvs (FTP 客户端和服务器端工具)

  ports-games release=cvs (游戏)

  ports-german release=cvs (德语支持)

  ports-graphics release=cvs (图形图像工具)

  ports-hungarian release=cvs (匈牙利语言支持)

  ports-irc release=cvs (Internet 多线交谈(IRC)工具)

  ports-japanese release=cvs (日语支持)

  ports-java release=cvs (Java 工具)

  ports-korean release=cvs (韩国语言支持)

  ports-lang release=cvs (编程语言

  ports-mail release=cvs (邮件软件)

  ports-math release=cvs (数值计算软件)

  ports-mbone release=cvs (MBone 应用程序)

  ports-misc release=cvs (杂样工具)

  ports-multimedia release=cvs (多媒体软件)

  ports-net release=cvs (网络软件)

  ports-news release=cvs (USENET 新闻软件)

  ports-palm release=cvs (Palm? 系列软件支持)

  ports-polish release=cvs (波兰语支持)

  ports-portuguese release=cvs (葡萄牙语支持)

  ports-print release=cvs (打印软件)

  ports-russian release=cvs (俄语支持)

  ports-security release=cvs (安全工具)

  ports-shells release=cvs (命令行 shell)

  ports-sysutils release=cvs (系统实用工具)

  ports-textproc release=cvs (文本处理工具(不包含桌面出版)。

  ports-vietnamese release=cvs (越南语支持)

  ports-www release=cvs (万维网(WWW)相关软件)

  ports-x11 release=cvs (支持 X window 系统的 ports)

  ports-x11-clocks release=cvs (X11 时钟)

  ports-x11-fm release=cvs (X11 文件管理器)

  ports-x11-fonts release=cvs (X11 字体和字体工具)

  ports-x11-toolkits release=cvs (X11 工具包)

  ports-x11-servers (X11 服务器)

  ports-x11-wm X11 (窗口管理器)

 src-all release=cvs (FreeBSD 主代码,包含密码系统的代码)

  src-base release=cvs (/usr/src 顶层的各式各样的文件)

  src-bin release=cvs (单用户模式下可能用到的用户工具 (/usr/src/bin))

  src-contrib release=cvs (FreeBSD 项目之外的工具和库,通常在 FreeBSD 中不作修改 (/usr/src/contrib))

  src-crypto release=cvs (FreeBSD 项目之外的 密码系统工具和库,通常在 FreeBSD 中不作修改 (/usr/src/crypto))

  src-eBones release=cvs (Kerberos 和 DES (/usr/src/eBones)。 没有在当前的 FreeBSD 发行中使用)

  src-etc release=cvs (系统配置文件 (/usr/src/etc))

  src-games release=cvs (游戏 (/usr/src/games))

  src-gnu release=cvs (GNU 公共许可协议的工具 (/usr/src/gnu))

  src-include release=cvs (头文件 (/usr/src/include))

  src-kerberos5 release=cvs (Kerberos5 安全包 (/usr/src/kerberos5))

  src-kerberosIV release=cvs (KerberosIV 安全包 (/usr/src/kerberosIV))

  src-lib release=cvs (库文件 (/usr/src/lib))

  src-libexec release=cvs (通常被其它程序调用的系统程序 (/usr/src/libexec))

  src-release release=cvs (生成 FreeBSD 版本必需的文件 (/usr/src/release))

  src-sbin release=cvs (但用户模式的系统工具 (/usr/src/sbin))

  src-secure release=cvs (密码相关库和命令 (/usr/src/secure))

  src-share release=cvs (跨多个平台的共享的文件 (/usr/src/share))

  src-sys release=cvs (内核 (/usr/src/sys))

  src-sys-crypto release=cvs (内核密码系统代码 (/usr/src/sys/crypto))

  src-tools release=cvs (维护 FreeBSD 的各种各样的工具 (/usr/src/tools))

  src-usrbin release=cvs (用户工具 (/usr/src/usr.bin))

  src-usrsbin release=cvs (系统工具 (/usr/src/usr.sbin))

 www release=cvs (FreeBSD WWW 站点的源代码)

distrib release=self (CVSup 服务器的配置文件,用于 CVSup 镜像站点)

gnats release=current (GNATS bug 跟踪数据库)

mail-archive release=current (FreeBSD 邮件列表存档)

www release=current (预处理过的 FreeBSD WWW 站点文件(不是源文件),用于WWW 镜像站点。)

  如果你很清楚安装软件的依赖性,可注释掉ports-all行,不让cvsup整个ports树,并指定下载ports分支代码。如下,一个WEBSERVER的实例:

#ports-all

ports-base

#ports-arabic

ports-archivers

#ports-astro

#ports-audio

#ports-benchmarks

#ports-biology

#ports-cad

#ports-chinese

ports-comms

ports-converters

ports-databases

ports-deskutils

ports-devel

ports-dns

ports-editors

ports-emulators

#ports-finance

#ports-french

ports-ftp

#ports-games

#ports-german

#ports-graphics

#ports-hebrew

#ports-hungarian

#ports-irc

#ports-japanese

ports-java

#ports-korean

ports-lang

ports-mail

ports-math

#ports-mbone

ports-misc

#ports-multimedia

ports-net

#ports-news

#ports-palm

#ports-picobsd

#ports-polish

#ports-portuguese

ports-print

#ports-russian

#ports-science

ports-security

ports-shells

ports-sysutils

ports-textproc

#ports-ukrainian

#ports-vietnamese

ports-www

#ports-x11

#ports-x11-clocks

#ports-x11-fm

#ports-x11-fonts

#ports-x11-servers

#ports-x11-toolkits

#ports-x11-wm

3. 同步源代码

# /usr/local/bin/cvsup -g -L 2 /etc/ports-supfile

# /usr/local/bin/cvsup -g -L 2 /etc/stable-supfile

注:

-g:告诉 CVSup 不要使用 GUI。如果您没在运行 X11 这个是自动的,否则您必须指定它。

-L 2:告诉 CVSup 输出所有正在升级的文件的细节。有三个等级可以选择,从 -L 0 到 -L 2。默认是 0,意味着除了错误消息什么都不输出。

4. 更新系统

4.1 阅读 /usr/src/UPDATING

  这个文件要包含有关于您可能遇到的问题的重要信息,或指定了您可能使用到的命令的执行顺序。

4.2 检查 /etc/make.conf

  一般的通常会从 /usr/share/examples/etc/make.conf (或者 FreeBSD 4.X 中的 /etc/defaults/make.conf) 复制 CFLAGS 和 NOPROFILE 这样的设置到 /etc/make.conf 中并令它们生效。请注意在 /etc/make.conf 中的任何设置同时也会影响每次运行 make 的结果,因此设置一些适合自己系统的选项是一个好习惯:

#指定下载源码的服务器

MASTER_SITE_BACKUP?= \

ftp://202.113.12.9/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/\

ftp://ftp.freebsd.org.cn/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/\

ftp://ftp.freebsdchina.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/

MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP}

#编译器选项

CPUTYPE=athlon-xp

##本人使用AthlonXP 2500+,不同的CPU请参考man make.conf##

CFLAGS+= -mfpmath=sse -mmmx -msse -m3dnow -maccumulate-outgoing-args -minline-all-stringops

## 不建议使用O2、O3、Os的优化,因为不是全部应用程序可以稳定工作于O2、O3、Os。况且最多仅获得7%的额外性能。CFLAGS的默认为"-O1 -pipe",不需要覆盖,所以使用+=。不建议使用-f...系列优化,因为不是全部应用程序可以对此稳定工作。

##-mfpmath=sse: PentiumIII兼容的CPU可以打开-mfpmath=sse来代替传统i387的浮点运算,加快速度。参阅CPU产品手册来确定CPU是否含有SSE功能。

## -mfpmath=pni: Pentium4 Prescott兼容的CPU可以打开-mfpmath=pni来代替传统i387的浮点运算,加快速度。参阅CPU产品手册来确定CPU是否含有PNI功能。

## -mmmx: 打开mmx指令来增加代码性能。适用于PentiumMMX兼容CPU。

## -msse: 打开sse指令来增加代码性能。适用于PentiumIII兼容CPU。

## -msse2: 打开sse2指令来增加代码性能。适用于Pentium4兼容CPU。

## -mpni: 打开pni指令来增加代码性能。适用于Pentium4 Prescott兼容CPU。

## -m3dnow: 打开3DNow!指令来增加代码性能。适用于K6、Athlon兼容CPU。

## -maccumulate-outgoing-args -minline-all-stringops :通过减少某些动作来实现加速,经作者实验,比较稳定。

CXXFLAGS+= -fmemoize-lookups -fsave-memoized

## make.conf提到的C++代码优化。

#系统编译选项

KERNCONF=(FILENAME)

## 内核配置文件名,将(FILENAME)更改为自己的内核文件名。

NOINET6=true

## 尽量不使用用IPV6协议。

NOATM=true

## 尽量不使用ATM,本选项仅适用于非ADSL用户。

NO_SENDMAIL=true

## 尽量不使用SENDMAIL。

NOGAMES=true

## 不安装所有游戏

NO_I4B=true

## 尽量不使用ISDN For BSD。

NO_IPFILTER=true

## 尽量不使用IP Filter。

BATCH=yes

## 安静编译,编译时跳过所有提问。适用于某些隔夜一次性编译程序的用户。

#X-Window编译选项

XFREE86_VERSION=4

## 尽量使用4.3版本的X-Window

WITH_SETUID_LUIT=yes

## 不使用本项的话,运行xterm会出现luit错误的问题.

WITH_GTK2=yes

## 尽量使用GTK2为gtk应用程序的运行库

USE_MMX_ASM=yes

## 编译Xfree86时,尽量使用MMX代码,仅适用于PentiumMMX兼容CPU.

USE_3DNOW_ASM=yes

## 编译Xfree86时,尽量使用3DNOW代码,仅适用于K6、Athlon兼容CPU.

WITHOUT_KDE_MENUS=yes

## 使用GNOME时,不添加KDE程序在菜单上。

#多媒体编码选项

WITH_CDPARANOIA=yes

WITH_AALIB=yes

WITH_ESOUND=yes

WITH_FAAD=yes

WITH_FLAC=yes

WITH_FREETYPE=yes

WITH_GDKPIXBUF=yes

WITH_GSM=yes

WITH_HERMES=yes

WITH_JPEG=yes

WITH_LADSPA=yes

WITH_LAME=yes

WITH_LIBA52=yes

WITH_LIBAUDIOFILE=yes

WITH_LIBCACA=yes

WITH_LIBFAME=yes

WITH_LIBMIKMOD=yes

WITH_LIBMPEG2=yes

WITH_LIBMUSICBRAINZ=yes

WITH_LIBSHOUT=yes

WITH_LIBSIDPLAY=yes

WITH_LIBSNDFILE=yes

WITH_LIBTHEORA=yes

WITH_MAD=yes

WITH_NAS=yes

WITH_PANGO=yes

WITH_PNG=yes

WITH_SDL=yes

WITH_SMOOTHWAVE=yes

WITH_SPEEX=yes

WITH_SWFDEC=yes

WITH_VORBIS=yes

WITH_VORBISIDEC=yes

WITH_XINE=yes

WITH_XVID=yes

## 以上所有多媒体选项仅在应用程序支持时打开。

#应用程序编译选项

WANT_HUGE_STACK_SIZE=yes

## 为Python代码的应用程序提供巨大的Stack。

WITH_GDM=yes

## 为某些窗口管理器提供GDM链接。

WITHOUT_MAILNEWS=yes

## 取消Mozilla的邮件新闻功能,加快编译时间。

WITHOUT_COMPOSER=yes

## 取消Mozilla的网页编辑功能,加快编译时间。

WITHOUT_LDAP=yes

## 取消Mozilla的LDAP功能,加快编译时间。

WITHOUT_CHATZILLA=yes

## 取消Mozilla的IRC聊天功能,加快编译时间。

WITHOUT_XMLTERM=yes

## 取消Mozilla的XML终端功能,加快编译时间。

#WITH_RTC=yes

## 为某些应用程序提供实时时钟支持,但可能会造成某些多媒体程序不稳定。

WITH_GLX=yes

## 为某些应用程序提供GLX加速绘图支持。

WITH_TTF_BYTECODE_ENABLED=yes

## 为某些应用程序提供双字节支持。

WITH_OPTIMIZED_CFLAGS=yes

WITH_OPTIMIZED_CXXFLAGS=yes

WITH_OPTIMIZE=yes

## 尽量使用更高级编译优化

4.3 更新 /etc 里边的文件

  某些“make installworld”的安装需要特定的用户名或用户组存在。在升级时,有可能这些用户或组不存在,就会在升级过程中出错。解决办法是检查 /usr/src/etc/group 并把它的组列表与您的进行比较。如果在新文件里有而您的文件里没有的,就把它们复制过来。同样地,您把 /etc/group 里的任何这样的组进行更名---与 /usr/src/etc/group 中有相同 GID,但不同名的那些。

4.3.1备份 /etc里的文件

  将该目录备份到其他目录如/home/root,以便升级遇到问题时恢复系统配置。

4.3.2 用mergemaster 比较、合并、编辑配置文件

  mergemaster就是升级你的配置文件用的,它帮助你把新系统的配置文件与你原来的(旧的)配置文件合并,或替换,或不改变原配置文件。升级完系统后应该用mergemaster升级配置文件的,要不然可能会引发问题。当然你可以不用mergemaster,自己手工搞定这些配子文件。 在第一次使用时,如果早期的 mergemaster 版本不支持 -p 的话,就使用源码树中的新版本:

# cd /usr/src/usr.sbin/mergemaster

# ./mergemaster.sh -p

mergemaster的用法:

#mergemaster -p

#make installworld

#mergemaster -i

  -i是安装新文件而不询问。是说如果旧系统中没有该文件话的,就直接安装而不询问。跨RELEASE升级的时候非常有用。

-p检测 /etc 和 /usr/src/etc 源码树里边的配置文件的不同点。通过 -p 选项以预建 (pre-buildworld) 模式运行 mergemaster(Cool。 这样只是比较那些对于成功执行 buildworld 或installworld 起关键作用的文件。

  ?----就是全部更新。

  merge就是文件合并,将为您打开一个文本编辑器,里边是两个文件的内容。您现在就可以一边合并它们,一边在屏幕里查看,同时从两者中选取部分生成最终文件。当两个文件一起比较时,l 键会选择左边的内容, r 会选择右边的。最终的输出是由两个部分组成的一个文件,用它就可以安装了。这个选项通常用于用户修改了设置的文件。merge之后需要选左、右的内容(l, r),最后按i安装,当然如果搞错了可以按r重来,但如果i错了后果就比较悲惨了。

  操作实例:

  原来存在文件1,现在升级后有一个新版本是文件2,问你如何操作?有三个选择:安装(i),删除(d),合并(m)。

文件1的内容:

第1 行

第2 行

第3 行

文件2的内容:

第2 行

第3 行

第4 行

按i键即安装,就是不要文件1了,用新文件2覆盖文件1;

按d键即删除,是说删除新的文件2,保留旧的文件1;

按m键即合并,合并是自己整合两个文件,得到文件3。

文件3的内容:

第1 行(直接取文件一)

第2 行(由用户选取文件一或文件二中对应的行)

第3 行(由用户选取文件一或文件二中对应的行)

第4 行(直接取文件二)

4.4 在单用户模式下编译安装系统

  在单用户模式下能处理的更快,并保证编译重要的系统文件时不出错。从运行的系统里,以超级用户方式执行:

# shutdown now

这样就会转换到单用户模式。

  另外也可以,重启系统,在启动提示符处,输入 -s 标识。系统就会启动单用户。再在 shell 提示符处执行:

# fsck -p

# mount -u /

# mount -a -t ufs

# swapon -a

  这会检查文件系统,重新装载 / 为读/写,参考 /etc/fstab 装载其它所有的 UFS 文件系统,然后打开交换 (swapping) 开关。

  Note: 如果您的 CMOS 时钟是设置为本地时间,而不是 GMT (如果 date(1) 命令输出不能显示正确的时间和地区也有确有其事), 您可能也需要执行下边的命令:

# adjkerntz -i

  这样可以确定您正确的本地时区设置--不这样做,您以后可能会碰到一些问题。

4.5 删除先前 build 留下的残余(如果以前build过系统)

# chflags -R noschg /usr/obj/usr

# rm -rf /usr/obj/usr

  删除/usr/obj这个目录,可以加快“make buildworld”的过程,并且省下与依赖关系有关的许多头痛的事情。/usr/obj 下的有些文件可能设置了不可改 (immutable) 属性(查看 chflags(1) 了解更多), 您必须用这个命令: # chflags -R noschg /usr/obj/usr 把这些标志去掉。

# cd /usr/src

# make cleandir

# make cleandir

不错,make cleandir 要执行两次。

4.6 保存编译输出

  把执行 make(1) 后得到的输出存成一个文件。如果什么地方出了错,您就会有个错误信息的备份。最简单的办法是使用 script(1) 命令,同是带上参数指定存放输出的文件名。您应在重建系统之前立即这样做,然后在过程完成时输入 exit。

# script /var/tmp/mw.out

Script started, output file is /var/tmp/mw.out

# make TARGET

... compile, compile, compile ...

# exit

Script done, ...

4.7 编译基本系统

  在/usr/src目录里边

# cd /usr/src

# make -j4 buildworld

注:

-j4:有至多4个进程在同一时刻执行,加快编译速度。多CPU机器可用6到10之间的值。

buildworld:编译源码,在 /usr/obj 下边建立了一个全新的树。

4.8 编译和安装新内核

  如果您想建立一个定制内核,而且已经有了配置文件,只需象这样使用 KERNCONF=MYKERNEL:

# cd /usr/src

# make -j4 buildkernel KERNCONF=MYKERNEL

# make -j4 installkernel KERNCONF=MYKERNEL

4.9 重启动系统

#shutdown -r now

4.10 安装新系统

# make -j4 installworld

4.11 编译安装系统流程:(建议在单用户模式下进行)

# make -j4 buildworld

# make -j4 buildkernel

# make -j4 installkernel

#mergemaster -p

#make -j4 installworld

#mergemaster -i

# reboot

  启动到单用户模式可用# shutdown now命令或重新启动系统,在提示符处使用 boot -s,进入单用户模式。

  将该目录备份到其他目录如/home/root,以便升级遇到问题时恢复系统配置。

4.3.2 用mergemaster 比较、合并、编辑配置文件

  mergemaster就是升级你的配置文件用的,它帮助你把新系统的配置文件与你原来的(旧的)配置文件合并,或替换,或不改变原配置文件。升级完系统后应该用mergemaster升级配置文件的,要不然可能会引发问题。当然你可以不用mergemaster,自己手工搞定这些配子文件。 在第一次使用时,如果早期的 mergemaster 版本不支持 -p 的话,就使用源码树中的新版本:

# cd /usr/src/usr.sbin/mergemaster

# ./mergemaster.sh -p

mergemaster的用法:

#mergemaster -p

#make installworld

#mergemaster -i

  -i是安装新文件而不询问。是说如果旧系统中没有该文件话的,就直接安装而不询问。跨RELEASE升级的时候非常有用。

-p检测 /etc 和 /usr/src/etc 源码树里边的配置文件的不同点。通过 -p 选项以预建 (pre-buildworld) 模式运行 mergemaster(Cool。 这样只是比较那些对于成功执行 buildworld 或installworld 起关键作用的文件。

  ?----就是全部更新。

  merge就是文件合并,将为您打开一个文本编辑器,里边是两个文件的内容。您现在就可以一边合并它们,一边在屏幕里查看,同时从两者中选取部分生成最终文件。当两个文件一起比较时,l 键会选择左边的内容, r 会选择右边的。最终的输出是由两个部分组成的一个文件,用它就可以安装了。这个选项通常用于用户修改了设置的文件。merge之后需要选左、右的内容(l, r),最后按i安装,当然如果搞错了可以按r重来,但如果i错了后果就比较悲惨了。

  操作实例:

  原来存在文件1,现在升级后有一个新版本是文件2,问你如何操作?有三个选择:安装(i),删除(d),合并(m)。

文件1的内容:

第1 行

第2 行

第3 行

文件2的内容:

第2 行

第3 行

第4 行

按i键即安装,就是不要文件1了,用新文件2覆盖文件1;

按d键即删除,是说删除新的文件2,保留旧的文件1;

按m键即合并,合并是自己整合两个文件,得到文件3。

文件3的内容:

第1 行(直接取文件一)

第2 行(由用户选取文件一或文件二中对应的行)

第3 行(由用户选取文件一或文件二中对应的行)

第4 行(直接取文件二)

4.4 在单用户模式下编译安装系统

  在单用户模式下能处理的更快,并保证编译重要的系统文件时不出错。从运行的系统里,以超级用户方式执行:

# shutdown now

这样就会转换到单用户模式。

  另外也可以,重启系统,在启动提示符处,输入 -s 标识。系统就会启动单用户。再在 shell 提示符处执行:

# fsck -p

# mount -u /

# mount -a -t ufs

# swapon -a

  这会检查文件系统,重新装载 / 为读/写,参考 /etc/fstab 装载其它所有的 UFS 文件系统,然后打开交换 (swapping) 开关。

  Note: 如果您的 CMOS 时钟是设置为本地时间,而不是 GMT (如果 date(1) 命令输出不能显示正确的时间和地区也有确有其事), 您可能也需要执行下边的命令:

# adjkerntz -i

  这样可以确定您正确的本地时区设置--不这样做,您以后可能会碰到一些问题。

4.5 删除先前 build 留下的残余(如果以前build过系统)

# chflags -R noschg /usr/obj/usr

# rm -rf /usr/obj/usr

  删除/usr/obj这个目录,可以加快“make buildworld”的过程,并且省下与依赖关系有关的许多头痛的事情。/usr/obj 下的有些文件可能设置了不可改 (immutable) 属性(查看 chflags(1) 了解更多), 您必须用这个命令: # chflags -R noschg /usr/obj/usr 把这些标志去掉。

# cd /usr/src

# make cleandir

# make cleandir

不错,make cleandir 要执行两次。

4.6 保存编译输出

  把执行 make(1) 后得到的输出存成一个文件。如果什么地方出了错,您就会有个错误信息的备份。最简单的办法是使用 script(1) 命令,同是带上参数指定存放输出的文件名。您应在重建系统之前立即这样做,然后在过程完成时输入 exit。

# script /var/tmp/mw.out

Script started, output file is /var/tmp/mw.out

# make TARGET

... compile, compile, compile ...

# exit

Script done, ...

4.7 编译基本系统

  在/usr/src目录里边

# cd /usr/src

# make -j4 buildworld

注:

-j4:有至多4个进程在同一时刻执行,加快编译速度。多CPU机器可用6到10之间的值。

buildworld:编译源码,在 /usr/obj 下边建立了一个全新的树。

4.8 编译和安装新内核

  如果您想建立一个定制内核,而且已经有了配置文件,只需象这样使用 KERNCONF=MYKERNEL:

# cd /usr/src

# make -j4 buildkernel KERNCONF=MYKERNEL

# make -j4 installkernel KERNCONF=MYKERNEL

4.9 重启动系统

#shutdown -r now

4.10 安装新系统

# make -j4 installworld

4.11 编译安装系统流程:(建议在单用户模式下进行)

# make -j4 buildworld

# make -j4 buildkernel

# make -j4 installkernel

#mergemaster -p

#make -j4 installworld

#mergemaster -i

# reboot

  启动到单用户模式可用# shutdown now命令或重新启动系统,在提示符处使用 boot -s,进入单用户模式。

抱歉!评论已关闭.