- # less /usr/src/UPDATING
- 在本文档最下面 COMMON ITEMS 清楚的写明了各种方法! (本文最后便是节选)
2: Build the World (下面均在 Single User Mode 进行操作!)
- # shutdown now (进入 single user mode 或:init 1)
- # cd /usr/src
- # make buildworld (The buildworld places its output under /usr/obj)
3: Build, Install, and Test a Kernel (下面均在 Single User Mode 进行操作!)
- # cd /usr/src
- # make buildkernel KERNCONF=MYKERNEL
- # make installkernel KERNCONF=MYKERNEL
- or
- # make KERNCONF=MYKERNEL kernel
- # reboot
4: Prepare to Install the New World (下面均在 Single User Mode 进行操作!)
- 新内核测试过后,进入 single user mode:
- # shutdown now (进入 single user mode 或:init 1)
- # adjkerntz -i (确保时间的正确性)
- # fsck -p
- # mount -u /
- # mount -a -t ufs
- # swapon -a
- # mergemaster -p (比对配置文件)
- ...
- ...
5: Installing the World (下面均在 Single User Mode 进行操作!)
- # cd /usr/src
- # make installworld
- Some programs and files are no longer in the base system. To see what’s
- obsoleted, run make check-old.
- # make check-old
- >>> Checking for old libraries
- /lib/libcrypto.so.4
- /usr/lib/libssl.so.4
- /usr/lib/libroken.so.8
- /lib/libatm.so.3
- /lib/libc.so.6
- ...
- If you’re not specifically using any of the old programs or directories,
- delete them with make delete-old.
- # make delete-old
- You can also store old
- libraries in /usr/lib/compat, so that your programs will continue to run but
- the old libraries will be safely out of the way.
6: 搞定后 需要处理的
- # chflags -R noschg /usr/obj/ (build过程中 文件被设置为:immutable,改回来)
- # rm -rf /usr/obj/
- # cd /usr/src
- # make cleandir (传说一定要清理 2 次)
- # make cleandir (传说一定要清理 2 次)
- <如果没有成功创造新世界,也请清理一下;便于继续创造世界!>
- # shutdown -r now (或:reboot 或:init 6)
7: Recording What Happened
- # script ~/buildworld.out
- Script started, output file is ~/buildworld.out
- # make TARGET
- ... compile, compile, compile ...
- # exit (或者:Ctrl-D)
- Script done, ...
-
(
- script(1) is one of those rarely mentioned but quite useful tools every
- sysadmin should know. It logs everything you type and everything that
- appears on the screen.
- )
- # less ~/buildworld.out
mergemaster 原理很简单, 它只比较 文件那一行 $ FreeBSD $ 如下
# $FreeBSD: stable/9/etc/apmd.conf 124003 2003-12-30 17:40:28Z njl $
若果当中的号码不同, 便知道有版本分別, 使用者只要看日子便知道新旧之分別, 两者有分別时, 便可以选择
d 删除新版本, 保留旧版本
i 更新新版本, 覆盖留版本
m 用 diff 比较新版旧版文, 引导使用者合并相异之处
v 再用 diff 看看两者分別之处
使用者可以不选以上四个选项, 直接按 Enter 即表示什么也不做
有些文件, 一定是选 i 例如 /etc/default/* , /etc/rc.d/*
有些文件, 你知道一定不能由 mergemaster 更改, 要选 d 例如 /etc/master.passwd, /etc/group
有些文件, 你可能更动一, 两个项选, 你要选 m 来合并之, 例如 /etc/login.conf
用 m 来合并的时候, 我喜欢运用 ed 编辑器来处理, 流程如下:
1. 当 mergemaster 发现有不同之处时
2. 选 m 来合并
3. 选 m 之后, mergemaster 便会跳到第一个相异位, 等候你指示
4. 此时你可以使用任何文字编辑器处理, 我推介用 ed
5. 输入 ed 命令
6. 进入了 ed 画面, 萤幕先列印旧版本, 然后新版本 的内容
7. 在 ed 画面按你的意愿删除某个版本内容, 即按 dd (注 ed 即是 vi 的简化版)
8. 修改完成, 输入 :wq 命令 ( 又是另一个 vi 命令 )
9. 回到 mergemaster 画面后, 有三个选择: i 是安装你刚修改合并版, r 是重做一次合并程序, v 是预览你刚修改的合并版内容
10. 如果选 v 后满意合并版内容, 便可以选 i 安装合并版, 覆盖旧版本了
# $FreeBSD: stable/9/etc/apmd.conf 124003 2003-12-30 17:40:28Z njl $
若果当中的号码不同, 便知道有版本分別, 使用者只要看日子便知道新旧之分別, 两者有分別时, 便可以选择
d 删除新版本, 保留旧版本
i 更新新版本, 覆盖留版本
m 用 diff 比较新版旧版文, 引导使用者合并相异之处
v 再用 diff 看看两者分別之处
使用者可以不选以上四个选项, 直接按 Enter 即表示什么也不做
有些文件, 一定是选 i 例如 /etc/default/* , /etc/rc.d/*
有些文件, 你知道一定不能由 mergemaster 更改, 要选 d 例如 /etc/master.passwd, /etc/group
有些文件, 你可能更动一, 两个项选, 你要选 m 来合并之, 例如 /etc/login.conf
用 m 来合并的时候, 我喜欢运用 ed 编辑器来处理, 流程如下:
1. 当 mergemaster 发现有不同之处时
2. 选 m 来合并
3. 选 m 之后, mergemaster 便会跳到第一个相异位, 等候你指示
4. 此时你可以使用任何文字编辑器处理, 我推介用 ed
5. 输入 ed 命令
6. 进入了 ed 画面, 萤幕先列印旧版本, 然后新版本 的内容
7. 在 ed 画面按你的意愿删除某个版本内容, 即按 dd (注 ed 即是 vi 的简化版)
8. 修改完成, 输入 :wq 命令 ( 又是另一个 vi 命令 )
9. 回到 mergemaster 画面后, 有三个选择: i 是安装你刚修改合并版, r 是重做一次合并程序, v 是预览你刚修改的合并版内容
10. 如果选 v 后满意合并版内容, 便可以选 i 安装合并版, 覆盖旧版本了
FROM:
- COMMON ITEMS:
- General Notes
- -------------
- Avoid using make -j when upgrading. From time to time in the
- past there have been problems using -j with buildworld and/or
- installworld. This is especially true when upgrading between
- "distant" versions (eg one that cross a major release boundary
- or several minor releases, or when several months have passed
- on the -current branch).
- To build a kernel
- -----------------
- If you are updating from a prior version of FreeBSD (even one just
- a few days old), you should follow this procedure. It is the most
- failsafe as it uses a /usr/obj tree with a fresh mini-buildworld,
- make kernel-toolchain
- make -DALWAYS_CHECK_MAKE buildkernel KERNCONF=YOUR_KERNEL_HERE
- make -DALWAYS_CHECK_MAKE installkernel KERNCONF=YOUR_KERNEL_HERE
- To test a kernel once
- ---------------------
- If you just want to boot a kernel once (because you are not sure
- if it works, or if you want to boot a known bad kernel to provide
- debugging information) run
- make installkernel KERNCONF=YOUR_KERNEL_HERE KODIR=/boot/testkernel
- nextboot -k testkernel
- To just build a kernel when you know that it won't mess you up
- --------------------------------------------------------------
- This assumes you are already running a 5.X system. Replace
- ${arch} with the architecture of your machine (e.g. "i386",
- "alpha", "amd64", "ia64", "pc98", "sparc64", etc).
- cd src/sys/${arch}/conf
- config KERNEL_NAME_HERE
- cd ../compile/KERNEL_NAME_HERE
- make depend
- make
- make install
- If this fails, go to the "To build a kernel" section.
- To rebuild everything and install it on the current system.
- -----------------------------------------------------------
- # Note: sometimes if you are running current you gotta do more than
- # is listed here if you are upgrading from a really old current.
-
- make buildworld
- make kernel KERNCONF=YOUR_KERNEL_HERE
- [1]
-
[3] - mergemaster -p [5]
- make installworld
- make delete-old
- mergemaster [4]
-
- To cross-install current onto a separate partition
- --------------------------------------------------
- # In this approach we use a separate partition to hold
- # current's root, 'usr', and 'var' directories. A partition
- # holding "/", "/usr" and "/var" should be about 2GB in
- # size.
-
-
- make buildworld
- make buildkernel KERNCONF=YOUR_KERNEL_HERE
-
-
- make installworld DESTDIR=${CURRENT_ROOT}
- make distribution DESTDIR=${CURRENT_ROOT} # if newfs'd
- make installkernel KERNCONF=YOUR_KERNEL_HERE DESTDIR=${CURRENT_ROOT}
- cp /etc/fstab ${CURRENT_ROOT}/etc/fstab # if newfs'd
-
-
-
-
-
- To upgrade in-place from 5.x-stable to current
- ----------------------------------------------
-
- make buildworld [9]
- make kernel KERNCONF=YOUR_KERNEL_HERE [8]
- [1]
-
[3] - mergemaster -p [5]
- make installworld
- make delete-old
- mergemaster -i [4]
-
- Make sure that you've read the UPDATING file to understand the
- tweaks to various things you need. At this point in the life
- cycle of current, things change often and you are on your own
- to cope. The defaults can also change, so please read ALL of
- the UPDATING entries.
- Also, if you are tracking -current, you must be subscribed to
- freebsd-current@freebsd.org. Make sure that before you update
- your sources that you have read and understood all the recent
- messages there. If in doubt, please track -stable which has
- much fewer pitfalls.
- [1] If you have third party modules, such as vmware, you
- should disable them at this point so they don't crash your
- system on reboot.
- [3] From the bootblocks, boot -s, and then do
- fsck -p
- mount -u /
- mount -a
- cd src
- adjkerntz -i # if CMOS is wall time
- Also, when doing a major release upgrade, it is required that
- you boot into single user mode to do the installworld.
- [4] Note: This step is non-optional. Failure to do this step
- can result in a significant reduction in the functionality of the
- system. Attempting to do it by hand is not recommended and those
- that pursue this avenue should read this file carefully, as well
- as the archives of freebsd-current and freebsd-hackers mailing lists
- for potential gotchas.
- [5] Usually this step is a noop. However, from time to time
- you may need to do this if you get unknown user in the following
- step. It never hurts to do it all the time. You may need to
- install a new mergemaster (cd src/usr.sbin/mergemaster && make
- install) after the buildworld before this step if you last updated
- from current before 20020224 or from -stable before 20020408.
- [8] In order to have a kernel that can run the 4.x binaries
- needed to do an installworld, you must include the COMPAT_FREEBSD4
- option in your kernel. Failure to do so may leave you with a system
- that is hard to boot to recover. A similar kernel option COMPAT_FREEBSD5
- is required to run the 5.x binaries on more recent kernels.
- Make sure that you merge any new devices from GENERIC since the
- last time you updated your kernel config file.
- [9] When checking out sources, you must include the -P flag to have
- cvs prune empty directories.
- If CPUTYPE is defined in your /etc/make.conf, make sure to use the
- "?=" instead of the "=" assignment operator, so that buildworld can
- override the CPUTYPE if it needs to.
- MAKEOBJDIRPREFIX must be defined in an environment variable, and
- not on the command line, or in /etc/make.conf. buildworld will
- warn if it is improperly defined.
- FORMAT:
- This file contains a list, in reverse chronological order, of major
- breakages in tracking -current. Not all things will be listed here,
- and it only starts on October 16, 2004. Updating files can found in
- previous releases if your system is older than this.
- Copyright information:
- Copyright 1998-2005 M. Warner Losh. All Rights Reserved.
- Redistribution, publication, translation and use, with or without
- modification, in full or in part, in any form or format of this
- document are permitted without further permission from the author.
- THIS DOCUMENT IS PROVIDED BY WARNER LOSH ``AS IS'' AND ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL WARNER LOSH BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- If you find this document useful, and you want to, you may buy the
- author a beer.
- Contact Warner Losh if you have any questions about your use of
- this document.
- $FreeBSD: src/UPDATING,v 1.632.2.19.2.2 2011/02/16 14:28:04 kensmith Exp $