精華區beta FreeBSD 關於我們 聯絡資訊
CVSup 系統更新與升級FreeBSD 4.2-RELEASE CVSup 升級為 FreeBSD 4.6-STABLE -------------------------------------------------------------------------------- 寫在前面 CVSup 是 FreeBSD 系統更新的方法之一。 FreeBSD 安裝完成就做 CVSup ,立即將系統升級更新至最新版本, 然後再安裝其他的應用軟體。 每一位玩 FreeBSD 的人,都應該要玩一下 CVSup 。 定時做,每一週、或是每兩週做一次。 遇有發布重大安全性漏洞時,更應該做 CVSup ,以修補漏洞。 做 CVSup 時,硬碟狀況、剩餘空間的多寡很重要。 做 CVSup 時,在某一環節出現 error 時,通常只要再「從頭」做一次即可。 FreeBSD 的更新非常迅速,以 freebsd.csie.nctu.edu.tw 為例, 於每天 1,5,9,13,17,21 點進行 CVSup 更新動作。 以前沒嘗試過,總認為做 CVSup 是很困難,現在自己學會了, 才發現整個程序其實很簡單,只是每一個程序都比較花時間而已。硬體等級越好, 所需的時間就越短。P-II約3.5小時,P-IV約1.5小時。 將 CVSup 的程序做成批次檔,晚上睡覺前「敲下去」,隔天早上起床後就做好了。 而硬體等級高的,晚飯前敲下去,吃過水果後,大概就好了。 以下操作的網路環境是:HiNet-ADSL 384/56 ,並且會註明每一階段所耗費的時間, 以及更新升級前後的 HD 空間狀況。 -------------------------------------------------------------------------------- 備份系統檔案 這兩個檔案一定要備份: /etc/master.passwd /etc/group 其他的資料就看個人的需要啦,將 /etc 整個備份下來也好。 -------------------------------------------------------------------------------- 檢查HD狀況並修復錯誤 fsck -y 如果 HD 有錯誤訊息,而且無法以 fsck 修復,嗯!我就不知道怎麼辦?重灌嗎! -------------------------------------------------------------------------------- 檢查HD剩餘容量 df -m 依個人的操作經驗, / 要有 50MB 、 /usr 要有 1G 以上的空間,比較妥當。 -------------------------------------------------------------------------------- 建立相關的 gid,uid pw groupadd -n sshd -g 22 pw groupadd -n smmsp -g 25 pw groupadd -n mailnull -g 26 pw useradd -n sshd -g sshd -u 22 -m -d /var/empty -s /sbin/nologin -c "Secure Shell Daemon" pw useradd -n smmsp -g smmsp -u 25 -m -d /var/spool/clientmqueue -s /sbin/nologin -c "Sendmail Submission User" pw useradd -n mailnull -g mailnull -u 26 -m -d /var/spool/mqueue -s /sbin/nologin -c "Sendmail Default User" 4.6 的系統中分別有 sshd smmsp mailnull 的 uid,gid ,要先手動建立。 若未先行建立之,更新時可能會有 error 。 記得將 master.passwd group 兩個檔案備份起來。 -------------------------------------------------------------------------------- 安裝 CVSup 的工具程式 使用 packages pkg_add -v ftp://freebsd.csie.nctu.edu.tw/pub/CVSup/cvsup-without-gui-16.1f.tgz pkg_add -v ftp://ftp.tw.freebsd.org/pub/i386/packages/packages-4-stable/All/cvsup-without-gui-16.1f.tgz 建議您一定要親至 CVSup 的站台去看看有沒有更新版本的升級工具軟體。 任選一個站台來源來安裝即可。 使用 PORTS cd /usr/ports/net/cvsup-without-gui ; make install clean distclean -------------------------------------------------------------------------------- 抓取 CVSup 設定檔 cd /usr/src fetch ftp://freebsd.csie.nctu.edu.tw/pub/CVSup/cvsupfile-stable sync;sync;sync -------------------------------------------------------------------------------- 更新 Source 的檔案 /usr/local/bin/cvsup /usr/src/cvsupfile-stable Connected to cvsup.tw.freebsd.org. Updating collection src-all/cvs Checkout src/sys/i386/conf/GENERIC Finished successfully ( 01:10:00 ) -------------------------------------------------------------------------------- 編譯所有的系統程式 make buildworld -------------------------------------------------------------- >>> Rebuilding the temporary build tree -------------------------------------------------------------- rm -rf /usr/obj/usr/src/i386 mkdir -p /usr/obj/usr/src/i386/usr/bin mkdir -p /usr/obj/usr/src/i386/usr/lib/compat/aout mkdir -p /usr/obj/usr/src/i386/usr/games mkdir -p /usr/obj/usr/src/i386/usr/libdata/ldscripts mkdir -p /usr/obj/usr/src/i386/usr/libexec/elf . .(省略) . gzip -cn /usr/src/usr.sbin/i4b/man/iwic.4 > iwic.4.gz ===> usr.sbin/boot0cfg cc -O -pipe -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -c /usr/src/usr.sbin/boot0cfg/boot0cfg.c cc -O -pipe -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -o boot0cfg boot0cfg.o gzip -cn /usr/src/usr.sbin/boot0cfg/boot0cfg.8 > boot0cfg.8.gz ===> etc ===> etc/sendmail rm -f freebsd.cf (cd /usr/src/etc/sendmail && m4 -D_CF_DIR_=/usr/src/etc/sendmail/../../contrib/sendmail/cf/ /usr/src/etc/sendmail/../../contrib/sendmail/cf/m4/cf.m4 freebsd.mc) > freebsd.cf chmod 444 freebsd.cf ( 01:50:00 ) -------------------------------------------------------------------------------- 編譯新的核心 make buildkernel KERNCONF=GENERIC -------------------------------------------------------------- >>> Kernel build for GENERIC started on Wed Aug 21 20:36:05 CST 2002 -------------------------------------------------------------- ===> GENERIC mkdir -p /usr/obj/usr/src/sys cd /usr/src/sys/i386/conf; PATH=/usr/obj/usr/src/i386/usr/sbin:/usr/obj/usr/src/i386/usr/bin:/usr/obj/usr/src /i386/usr/games:/sbin:/bin:/usr/sbin:/usr/bin config -d /usr/obj/usr/src/sys/GENERIC GENERIC Don't forget to do a ``make depend'' Kernel build directory is /usr/obj/usr/src/sys/GENERIC . .(省略) . cc -O -pipe -D_KERNEL -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -fformat-extensions -ansi -DKLD_MODULE -nostdinc -I- -I. -I@ -I@/../include -mpreferred-stack-boundary=2 -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -fformat-extensions -ansi -c setdef1.c ld -Bshareable -o if_xe.ko setdef0.o if_xe.kld setdef1.o -------------------------------------------------------------- >>> Kernel build for GENERIC completed on Wed Aug 21 20:52:25 CST 2002 -------------------------------------------------------------- ( 00:15:00 ) 此時已經抓回最新的 GENERIC ,如果你曾修改過核心,你應當知道此時最好再確認一遍。 那個「GENERIC」就是核心檔,你的如果有不同,要改一改。 -------------------------------------------------------------------------------- 安裝新的核心 make installkernel KERNCONF=GENERIC cd /usr/obj/usr/src/sys/GENERIC; MAKEOBJDIRPREFIX=/usr/obj MACHINE_ARCH=i386 MACHINE=i386 OBJFORMAT_PATH=/ usr/obj/usr/src/i386/usr/libexec PERL5LIB=/usr/obj/usr/src/i386/usr/libdata/perl/5.00503 GROFF_BIN_PATH=/usr /obj/usr/src/i386/usr/bin GROFF_FONT_PATH=/usr/obj/usr/src/i386/usr/share/groff_font GROFF_TMAC_PATH=/usr/ob j/usr/src/i386/usr/share/tmac make KERNEL=kernel install chflags noschg /kernel mv /kernel /kernel.old install -m 555 -o root -g wheel -fschg kernel /kernel if [ -d /modules -a -n "`ls /modules`" ]; then mkdir -p /modules.old; cp -p /modules/* /modules.old; fi; cd /usr/src/sys/modules ; env MAKEOBJDIRPREFIX=/usr/obj/usr/src/sys/GENERIC/modules MACHINE=i386 make install ===> accf_data install -o root -g wheel -m 555 accf_data.ko /modules ===> accf_http install -o root -g wheel -m 555 accf_http.ko /modules ===> agp install -o root -g wheel -m 555 agp.ko /modules . .(省略) . install -o root -g wheel -m 555 svr4.ko /modules install -o root -g wheel -m 444 svr4.8.gz /usr/share/man/man8 install -o root -g wheel -m 555 /usr/src/sys/modules/svr4/svr4.sh /usr/sbin/svr4 ===> vesa install -o root -g wheel -m 555 vesa.ko /modules ===> wi install -o root -g wheel -m 555 if_wi.ko /modules ===> xe install -o root -g wheel -m 555 if_xe.ko /modules ( 00:01:00 ) -------------------------------------------------------------------------------- 安裝新的系統程式 make installworld mkdir -p /tmp/install.53705 for prog in [ awk cat chflags chmod chown date echo egrep find grep ln make makewhatis mtree mv perl pwd_mkdb rm sed sh sysctl test true uname wc zic; do cp `which $prog` /tmp/install.53705; done cd /usr/src; MAKEOBJDIRPREFIX=/usr/obj MACHINE_ARCH=i386 MACHINE=i386 OBJFORMAT_PATH=/usr/obj/usr/src/i386/ usr/libexec PERL5LIB=/usr/obj/usr/src/i386/usr/libdata/perl/5.00503 GROFF_BIN_PATH=/usr/obj/usr/src/i386/usr /bin GROFF_FONT_PATH=/usr/obj/usr/src/i386/usr/share/groff_font GROFF_TMAC_PATH=/usr/obj/usr/src/i386/usr/sh are/tmac PATH=/usr/obj/usr/src/i386/usr/sbin:/usr/obj/usr/src/i386/usr/bin:/usr/obj/usr/src/i386/usr/games:/t mp/install.53705 make -f Makefile.inc1 reinstall -------------------------------------------------------------- >>> Making hierarchy -------------------------------------------------------------- cd /usr/src; make -f Makefile.inc1 hierarchy cd /usr/src/etc; make distrib-dirs . .(省略) . ===> etc ===> etc/sendmail -------------------------------------------------------------- >>> Rebuilding man page indices -------------------------------------------------------------- cd /usr/src/share/man; make makedb makewhatis /usr/share/man makewhatis /usr/share/perl/man rm -rf /tmp/install.53705 ( 00:10:00 ) -------------------------------------------------------------------------------- 更新系統設定檔 mergemaster mergemaster是將方才取回的更新檔案與現有的設定檔做比對, 讓操作者一一決定是否安裝新版的設定檔。 其中有一項是 ./dev/MAKEDEV ,我比較ㄙㄨㄟ,每次裝、每次掛。所以,我就不裝他了。 不過,如果是4.6-RELEASE升級為4.6-STABLE者,則可正常安裝。 除了 master.passwd group aliases 三個檔案延用舊資料外,其他的部份幾乎都裝新的。 如果有個「萬一」,將先前備份的 /etc/master.passwd 及 /etc/group 拷貝回來, 可重建帳號資料:pwd_mkdb -p -d /etc /etc/master.passwd 不要急著重新開機(reboot),此時應再開啟新的登入視窗(login), 如果能成功的login,才可以reboot。 -------------------------------------------------------------------------------- 重新開機 sync ; sync ; sync ; reboot -------------------------------------------------------------------------------- 檢查系統版本 uname -a 除了用 uname -a 檢查外,至 4.6.2-RELEASE 為止的 sendmail 是 8.12.3 版, 只要成功升級至 4.6-STABLE 的 sendmail 是 8.12.5 版,只要telnet localhost 25 即可知道。 另外,以非 root 的身份用 mail 指令直接寄信看看。 -------------------------------------------------------------------------------- 更新前後 HD 的狀況全部切出一塊 4094MB 來安裝 FreeBSD (Minimal) 初安裝完成的 HD 狀況 df -m Filesystem 1M-blocks Used Avail Capacity Mounted on /dev/ad0s1a 125 32 83 28% / /dev/ad0s1f 251 0 231 0% /tmp /dev/ad0s1g 2911 78 2600 3% /usr /dev/ad0s1e 251 0 231 0% /var procfs 0 0 0 100% /proc 安裝前後 /usr 磁碟空間的比較 CVSup(/bin , /sbin , /stand , /boot 和 /usr ) /dev/ad0s1g 2911 986 1692 37% /usr 再安裝應用軟體 gd2 /dev/ad0s1g 2911 1052 1626 39% /usr mysql /dev/ad0s1g 2911 1215 1462 45% /usr imap /dev/ad0s1g 2911 1083 1594 40% /usr apache /dev/ad0s1g 2911 1103 1575 41% /usr fastcgi /dev/ad0s1g 2911 1103 1575 41% /usr gzip /dev/ad0s1g 2911 1103 1575 41% /usr php /dev/ad0s1g 2911 1120 1558 42% /usr 再裝其他的軟體(wget,sudo,bash2,ncftp3,qpopper,pident) /dev/ad0s1g 2911 1122 1555 42% /usr 全部安裝完成,最後的 HD 狀況 df -m Filesystem 1M-blocks Used Avail Capacity Mounted on /dev/ad0s1a 125 41 73 36% / /dev/ad0s1f 251 0 231 0% /tmp /dev/ad0s1g 2911 1116 1562 42% /usr /dev/ad0s1e 251 0 230 0% /var procfs 0 0 0 100% /proc -------------------------------------------------------------------------------- 天有不測風雲 4.6-RELEASE釋出之後,做CVSup都很順利。 2002-08-09 這一天晚上做CVSup,mergemaster時有要求是否安裝./dev/MAKEDEV, 而我沒有將它安裝。reboot之後就ping不到主機。 隔天(2002-08-10)特地抽空至主機前一探究竟,發現開機之後停在一個「15秒之後自動reboot」的訊息上。 解套步驟: 使用舊的 kernel 開機: 重新開機(reset)後 Hit [Enter] to boot immediately, or any other key for command prompt. Booting [kernel] in 10 seconds... 出現上述倒數的訊息時按下空白鍵,出現提示符號後輸入下列兩道指令 unload boot kernel.old 成功地開機之後,將 CVSup 再從頭到尾徹徹底底做一次。 這一次mergemaster時有安裝./dev/MAKEDEV。 這一回的升級失敗,感覺上是 kernel 的問題。 這一次重新開機就成功了。 -------------------------------------------------------------------------------- 相關連結與資源: http://freebsd.sinica.edu.tw/handbook/synching.html http://freebsd.sinica.edu.tw/handbook/makeworld.html http://freebsd.sinica.edu.tw/completed/168.shtml.htm http://ohaha.ks.edu.tw/upgrade.htm http://www.lsps.tp.edu.tw/~gsyan/freebsd2001/ http://www.fanqiang.com/a1/b2/20020306/060200121_b.html -------------------------------------------------------------------------------- 本篇文章摘錄自 http://freebsd.lab.mlc.edu.tw/CVSup.htm