zoukankan      html  css  js  c++  java
  • 用cvsup同步源代码并更新系统

    用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,进入单用户模式。
  • 相关阅读:
    收集起来先
    asp .net 页面回车触发button 按钮事件
    关于SQL 数据库表中的聚集索引和非聚集索引等
    WinForm换肤操作(用IrisSkin2.dll)
    生成Word文档的相关操作
    API自动化测试测试数据集
    API文档实践
    使用eolinker对API测试的响应结果进行断言
    API自动化定时测试
    接口测试之对数据进行RSA加解密
  • 原文地址:https://www.cnblogs.com/wenus/p/104988.html
Copyright © 2011-2022 走看看