在 FreeBSD Planet 上有詳細一點的 HowTo。
不過主要就是先複製一份(或直接改寫 sup-file),以下都假定你是以 root 權限跑:
% vim /root/8-release (偷渡一下 vim)
裡面主要是改兩個地方 host & release/tag
*default release=cvs tag=RELENG_8_0
當然也可以把 tag 指定為 RELENG_8_0_0_RELEASE, 不過這樣就吃不到後續的更新了,例如昨天出的 p1:
20091203: p1 FreeBSD-SA-09:15.ssl, FreeBSD-SA-09:16.rtld,
FreeBSD-SA-09:17.freebsd-update
Disable SSL renegotiation in order to protect against a serious
protocol flaw. [09:15]Correctly handle failures from unsetenv resulting from a corrupt
environment in rtld-elf. [09:16]Fix permissions in freebsd-update in order to prevent leakage of
sensitive files. [09:17]
接著更新 src tree:
然後就先備便 binary files & kernel:
在這裡之前,都不會對原來的系統造成任何影響。
然後跑一下 mergemaster -p 檢查必要的檔案更新。
這是靠 VCS Id 來檢查是否有新檔,所以很有可能手賤把 /etc/master.passwd & /etc/group 給幹掉,如果不幸發生,記得去 /var/backups 去撿備份。(把 VCS Id 弄成一樣也是個解法啦 XD)
接著就準備昇級了:
% reboot (and specify -s into single user mode)
% cd /usr/src ; make installworld
% mergemaster
% reboot
雖然說是建議要先有一次 reboot 進入單人模式 (-s),不過我喜歡直接上了 XD,本人的方式是
% mergemaster
% reboot && *pray*
這裡就完成了主系統的更新了。
接著,如果你有 jail 的話,也要記得一起更新啊。附帶一提, FreeBSD-8.0 可以允許 Multi-IP/IPv6 jails :
Multi-IP/IPv6 jails
With FreeBSD 8 it will be possible to assign multiple IPv4 addresses to a jail, as well as assigning IPv6 addresses. People that offer hosting services can greatly enjoy these features, a jailed webserver for example can now use many more addresses and do proper SSL virtualhosting.
更新 jail 的方式很簡單,只要 make installworld 並加上 DESTDIR 即可:
% make installworld DESTDIR=/path/to/jail
我自己還會手賤順便做 mergemaster 就是了
% mergemaster -D /path/to/jail
最後,重要的來啦,因為原本經由 ports 安裝的軟體(或是自行安裝的),有些還是連到舊的 library(如原本連的是 libxxx.0, 8.0-R 裝的是 libxxx.1),所以一時之間可能覺得沒問題,不過最好還是檢查一下。然後看著日漸肥大的 /usr ,當然要讓過去的過去囉~~
% make delete-old-libs
% make delete-old
如果在 production 機器上,最好多詳細檢查 XD,如果是個人用的,就先做再說,反正不行, rebuild from ports 就好
UPDATE: 預設 delete-old/delete-old-libs 會逐項詢問你要不要砍,如果想一次砍掉,記得加個 -DBATCH_DELETE_OLD_FILES:
% make -DBATCH_DELETE_OLD_FILES delete-old-libs
% make -DBATCH_DELETE_OLD_FILES delete-old
[...] 昇級 FreeBSD 8.0-RELEASE,其實 FreeBSD [...]