注意注意
* always pkgdb -F before upgrade
* always backup /var/db/pkg (好吧,我承認我每次都沒做)
選項
pkgname_glob pkg_glob(1)
-a 全部安裝的 packages
-A 每次 install 後要跑的指令
-b 把舊的 package 備份到 PKG_TMPDIR or TMPDIR (default /var/tmp)
-B build 前要跑的指令 (如果 fail 的話,那這個 port/package 會被略過)
要更新 gnome* 前先 cvs update
portupgrade -B 'cvs update' 'gnome*'
不知道
portupgrade -B 'ports_glob -M $(pwd) | (cd
../..; xargs cvs up)' slave/port
通通都更新,除了 interactive 的 ports
portupgrade -aB 'test ! `make -V IS_INTERACTIVE`'
-c 在 build 之前 clean (default)
-C 在 install 之後 clean (default)
-D 在 fetch/build 之前 distclean
-f 強迫更新一個要被 downgrade 或相同版本或在 pkgtools.conf 標記為 HOLD_PKGS
的 package
-F 只會把 distfiles 抓下來(如果加 -P 則是抓 packages)
-g 強迫更新 require 的 package 更新失敗的 package
-i interactive 就是會問你要不要的 (implies -v)
-I 把結果丟到 FILE 去
-L 把每一個 port build & install 結果丟到 PREFIX 去
存成::
-m 要 append 給 make(1) 的參數
-M 要 prepend 給 make(1) 的參數
-n 看看會幹些什麼事情 (implies -v, negates -i, -y)
-N 安裝新的 port/package 而且會先更新所有 require 的 packages
可以指定 portorigin glob
-o 指定 ORIGIN
-O 別做完整的 denendency check(如果跑之前有 pkgdb -F 那可以放心的用)
-p 在 install/upgrade 後生出 package,如果有指定到 dependent package
的話(like -r),那些也會生 package
-P 用 package,會去掃 PKG_PATH,找不到就 pkg_fetch 再不然就用 ports
-PP 堅持只用 package,不用 ports
-q 不要讀 $PREFIX/etc/pkgtools.conf
-r 把 depends on given ports 的 packages 也一起更新
比如說 -r png-* 的話,會把需要 png 的 packages 一起更新
-R 把 given ports 需要的 packages 也一起更新
比如說 -R kde3 的話,會把其他 kde3-* 的一起更新
-s 在需要 root 權限的時候執行 sudo
-S 取代 sudo(8) 的指令,例如 su root -c %s ''
-u 不要保留舊的 shared libraries
-v verbose output
-w 不要在 build 之前 clean
-W 不要在 install 之後 clean
-x 排除 match GLOB 的 packages
例如 portupgrade -rx XFree86 XFree86 會更新所有 depends on XFree86 的
packages,卻不更新 XFree86 本身
-y 所有問題通通回答 yes (implies -v, negates -n)
portuprade 流程
1. 沒給 -P 的話,跳到 4。否則 search PKG_PATH 看看有沒有新的 packages,
有找到的話,跳到 5。
2. 用 pkg_fetch(1) 去抓新的 packages 下來,如果是最新的話跳到 5。
如果給 -PP 但抓下來的 packages 比安裝的新(不一定是最新)的話,
也跳到 5。
3. 如果給 -PP 的話,停止作業。
4. build given package 相對應的 port。
5. 修 depends on given package 那些 packages 的 dependency。
6. save given package 的 +REQUIRED_BY。
7. 把 given package 用 pkg_create(1) 備份下來。
8. 把 given package 的 registration 檔案備份下來。
9. 強迫 uninstall given package,並保留 share libraries,
除非有指定 -u。
10. 安裝新的 port or package(看是 cond. 1 or 2 or 3)。
11. 如果安裝失敗,
11.1. 把 7. 備份的檔案還原。
11.2. 把 8. 備份的 registration 檔案還原。
11.3. 把 5. 修過的 dependency 還原。
12. 把 obsoleted 的 dependencies 移除。
13. 把 6. 備份的 +REQUIRED_BY 復原。.
14. 執行 portsclean -L 把重複的 share libraries 砍掉,
並且保留舊的 share libraries,詳情請見 portsclean(1)。
一些例子
o. portupgrade glib
更新 glib
o. portupgrade XFree86 -m '-DWANT_GGI' Mesa
傳 -DWANT_CGI 給 Mesa。
當 portupgrade 用在很多 packages 上面時,他會依照 dependency order 處理。
o. portupgrade -L /var/tmp/log. '*gnome*'
更新所有 GNOME packages,並 log 在 /var/tmp/log.::
o. portupgrade -Rpv sawfish
更新 sawfish 和所有 sawfish 需要的 packages
o. portupgrade -ri glib
更新 glib 和所有需要 glib 的 packages
o. portupgrade -rfx sdl sdl
更新/重安裝所有需要 sdl 的 packages 但不包含 sdl
o. portupgrade -f '<2001-09-20'
更新/重安裝所有在 2001/09/20 前安裝的 packages
o. portupgrade -fr png -x '>=png'
更新/重安裝所有在 png 前安裝且需要 png 的 packages
o. portupgrade -aFR
去 fetch 更新所有 packages 需要用的 distfiles
o. portupgrade -o print/ghostscript-afpl ghostscript-gnu
用 print/ghostscript-afpl 換掉 ghostscript-gnu
o. portupgrade -P glib
用 package 更新 glib
o. env PKG_PATH=/mnt/cdrom/packages/All portupgrade -anPP
用 CDROM 裡面的 packages 來進行大量更新
如果不想讓 portupgrade 去 fetch 不在 CDROM 的 packages 的話,
把 PKG_FETCH 設定為 /bin/false
小技巧
o. 在進行 binary uprage 後,請用 pkgdb -F 修一下 dependencies。
o. 透過網路進行大量更新 portupgrade -aPPR。
o. 如果懷疑 portupgrade 倒底會幹哪些事情的時候,請用 -n 和 -i,
也可以用 pkg_glob(1) 來看 glob patterns 到底會展開成什麼。
o. 為了讓更新更正確、更有效率,請愛有事沒事跑一跑 pkgdb -F,
每次 CVSup 更新完 ports tree 之後,portsdb -Uu,以確保 INDEX 跟 ports
tree 同步。
o. 可以用 portversion(1) 取代 pkg_version(1) 來檢查可以 upgrade 的
packages。portversion(1) 用法跟他一樣,而且比較快。
portversion -c 可以輸出給 portupgrade(1) 更新用的 script。
o. 可以用 pkg_deinstall(1) 取代 pkg_delete(1) 來移除 packages。
這其實是 pkg_delete(1) 的 wrapper,不過有些更好的特性,
比如說 recursive deinstall 或者保留 shared library。
o. 可以用 portsclean(1) 清理不需要的 distfiles、working、
舊的 shared libraries。
o. 可以用 portcvsweb(1) 來看看一個 port 的 change。
環境變數
這邊列出來 default 的值,不多做解釋。
PKG_DBDIR /var/db/pkg
PORTSDIR /usr/ports
PORTS_INDEX $PORTSDIR/INDEX
PORTS_DBDIR $PORTSDIR
PKG_TMPDIR
TMPDIR /var/tmp
PACKAGES $PORTSDIR/packages
PKG_PATH $PACKAGES/All
PKG_SUFX 定義在 bsd.port.mk 或 /etc/make.conf
PKGTOOLS_CONF $PREFIX/etc/pkgtools.conf
PORTUPGRADE 預設 portupgrade 的選項
SEE ALSO
pkg_add(1), pkg_deinstall(1), pkg_delete(1), pkg_glob(1), pkg_info(1),
pkg_sort(1), pkg_update(1), pkgdb(1), portcvsweb(1), ports_glob(1),
portsclean(1), portsdb(1), portversion(1), pkgtools.conf(5), ports(7)
BUGS
SUSP (^Z) 在 build/install 過程中沒有用。
有時候 database 會爛掉導致 pkgtools segmentation fault,這樣子的話,
用 pkgdb -fu 重新 build database 問題就可以解決。
2007年3月27日 星期二
[FreeBSD] portupgrade(1) 相關資訊
[FreeBSD] 動態載入相關資訊
From : BSD 討論版 @ 酷!學園, 2002/07/26 的文章對話
- FreeBSD不是把硬體裝置都編到Kernel內了, 那 /modules 除了放 ScreenSaver 外, 到底是作什麼用的?
- 不知您有無注意到,在編譯核心時,最後在 Install 的時候,不是會有安裝 module 的訊息嗎? 那就是將可以採用模組載入的方式的硬體,不管是否已編入核心了,全部都給編成模組,以方便某些未編入核心的硬體,要使用時可以動態載入使用。
如果已開完機且登入到系統了,可以使用 kldload <module name> 來動態載入
kldunload <module name> 來卸載
kldstat 來查看目前載入的模組狀態
如果要在開機前載入未編入到核心的硬體模組,可將其寫入到 /boot/loader.conf 檔案中,詳細的模組載入語法,請查看 /boot/defaults/loader.conf 便知。 - 那可以作基本的kernel, 其他的裝置及服務都以modules的方式載入吧! 像Linux那樣!
- 當然可以呀,而且如果沒記錯的話,早在 2.X 版就已支援這種作業方式了,搞不好更早 ^_^
不過哩,就像 Linux 一樣,有些硬體是尚未支援動態載入的,所以如果需要用到的話,還是只能乖乖的編到核心中地。 - 對呀,不過因為版本已和黑皮書時的版本不同了,所以載入模組的指令也已不一樣了 ^_^
對了,如果沒記錯的話,Linux 的核心,好像也是有分可模組化和不可模組化吧?? - Linux下用make menuconfig時, 可以作成modules的會有個"M"的選項, Linux下作成Modules的也多半是硬體裝置及一些功能(Firewall AP Support)...
簡單的來說,系統一些硬體裝置大部分都是編進 kernel 的,然而,也有提供需要時再載入的方式,嘿,可以回想讀OS的心情喔!至於後者的使用方式,就稱為動態載入,因此,有些系統軟體安裝就會分成要編 kernel 或是採用動態載入啦,不過要留意的是,有些功能是限定編入 kernel 來使用的,需留意啦。
2007年3月26日 星期一
[FreeBSD] FreeBSD 詳細的安裝教學 - 舊安裝方式
這篇是以前大三修交大資工計算機系統管理課程中的投影片,從中取出紀錄的過程。當時使用的 FreeBSD 4.10 左右的作業系統,在此當作個筆記記錄回憶啦。比較新的方式可參考:[FreeBSD] 安裝 FreeBSD 與系統更新
我習慣用光碟安裝,所以以 6.1 來說,就是去抓光碟啦
至於安裝的套件就選:
- base : binary
- kernels(all) : Generic kernel and SMP kernel
- Man : Manual
- src : FreeBSD Source Code
- ports : FreeBSD Software Collection
- local : local additions
安裝完套件可以調的東西:
- Root Password
- Time Zone > Asia > Taiwan
- Mouse > enable
- Networking > sshd
- Packages (optional), ex: net/csup, editors/vim-lite
抓取更新系統的檔案:
- pkg_add ftp://freebsd.csie.nctu.edu.tw/pub/releases/i386/6.1-RELEASE/packages/net/csup-20060223_1.tbz
- 編寫 /usr/local/etc/cvsup-all 更新檔案
- Where to get source
- Where to put status file
- Where to put source
- Allow cvs to delete
- Compress before transmit
- *default host=freebsd.csie.nctu.edu.tw
*default base=/usr
*default prefix=/usr
*default delete use-rel-suffix
*default compress
*default release=cvs tag=RELENG_6
src-all
ports-all tag=. 記得寫一下 /etc/make.conf 檔
MASTER_SITE_OVERRIDE?= \
ftp://freebsd.csie.nctu.edu.tw/pub/distfiles/${DIST_SUBDIR}/\
ftp://ftp.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp2.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp3.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp4.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp5.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp7.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp8.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/WITHOUT_X11=YES
- # /usr/local/bin/csup -L 1 /usr/local/etc/cvsup-all > /var/log/csup.log
The “–L 1” tells cvsup to print out the details of all the file updates it is doing. from 0 (silent) to 2.
更新步驟:
- make buildworld
- # cd /usr/src
- # make buildworld >& /var/log/world.log &
- make buildkernel
- # cd /usr/src/sys/i386/conf
- # cp GENERIC “YOUR-NAME”
- # edit config file
- make installkernel
- 新的方式
# cd /usr/src
# make KERNCONF=YOUR-NAME buildkernel其他資訊
Note: This method of kernel building requires full source files. If you only installed the kernel source, use the traditional method.
Tip: By default, when you build a custom kernel, all kernel modules will be rebuilt as well. If you want to update a kernel faster or to build only custom modules, you should edit /etc/make.conf before starting to build the kernel:
MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs
- 舊的方式
@ /usr/src/sys/i386/conf/
# /usr/sbin/config YOUR-NAME
# cd ../compile/YOUR-NAME (or ../../compile/YOUR-NAME )
# make dependclean (6.1版會提醒你要作這步, 之前的只有提醒做 make depend)
# make depend
# make
# make install
- reboot and boot in single user mode
- 使用 shutdown now 或
- Press "4" 於開機選項
- mergemaster -p
- Pre-buildworld mode. Compares only files known to be essential to the success of {build|install}world, including /etc/make.conf.
- make installworld
- mergemaster
- Synchronize /usr/src/etc with /etc
- Choose “i” for most case, such as /etc/defaults/rc.conf, …
- Press “enter” for certain file, such as master.passwd, hosts, csh.*
- reboot
如果有任何錯誤的話:
- Possible errors in building new kernel
- Boot with old kernel
- In 5.x ~
- Press “6”
- Type “boot /boot/kernel.old/kernel”
- In 4.x
- Hit any key other than “enter” when counting down
- Type “unload”
- Type “load /kernel.old”
- Type “boot”
上述的一些過程可以當作更新系統的方法,但有些部分不適用於已安裝好的系統,即已安裝於系統的軟體並不會得到更新,必需額外使用軟體來進行更新,這是以前的文章(用的是 cvsup ,現在大多改用 csup ):
安裝所需的軟體
cvsup
# cd /usr/ports/net/cvsup-without-gui && make install portupgrade
# cd /usr/ports/sysutils/portupgrade && make install 打這個指令讓才剛裝好的程式立即可以使用:
rehash cvsup 是個工具,她可以幫我們至 FreeBSD 站台更新 Source-Tree 及 Ports-Tree 回來您的主機中。portupgrade 是 FreeBSD 中升級以 PORTS 安裝的軟體的一個套件(必須是您更新 Ports-Tree 之後)。 更新 PORTS-Tree 且升級已安裝的軟體
取回「更新 PORTS-Tree的設定檔」cvsupfile-ports:
fetch ftp://ftp.tw.freebsd.org/pub/CVSup/cvsupfile-ports 依據 cvsupfile-ports 中的定義,至 CVSup 站臺更新 PORTS-Tree
cvsup -g -L 2 cvsupfile-ports 先重建您系統中 PORTS 的 INDEX 資料庫
這個部份恐需時甚久,而且會令你覺得是不是當機了,所以請耐心等候。
portsdb -Uu 再接著是修補程式間的關連性,才能正確並有效率的升級已安裝的軟體
pkgdb -F 為了以防萬一,我們先做個升級的假動作:
portupgrade -ayn 如果剛剛的升級測試都沒有問題,現在就可以正式來一遍了:
portupgrade -ay 你可以寫一個批次檔讓此程式來執行:
#!/bin/sh
cvsup -g -L 2 cvsupfile-ports
portsdb -Uu
pkgdb -F
portupgrade -ayn 更詳細的資訊,您可以
man portupgrade
[FreeBSD] 調整自己的最佳環境 - CPUTYPE
依照自己的 CPU 的型態去作調整,即在 make.conf 中去編寫CPUTYPE。
取得自己的 CPU Type:
- cd /usr/ports/benchmarks/ubench
- make extract
- make "CPUTYPE?=k6-2"
- 執行 work/ubench-x.xx/ubench 看分數
- 然後再 make clean ; 再換新的CPUType去編,再看分數
使用 extract 即下載並解壓縮,但不安裝。至於 CPUTYPE 可從 /usr/share/examples/etc/make.conf 找尋,不確定的話就透過上述步驟,去測看看哪個分數高,就是你的CPUTYPE啦,透過這簡單的調整,可以增進效能喔!
2007年3月22日 星期四
上課的態度
大一時,我上下學期修了27學分,但被當了2學分;大二時,上學期22,下學期27;大三時,上學期24,下學期19;大四時,上學期11,下學期11,但被當了6學分延畢。大五的生活?課當然不會超過六學分。
自從大四生活後,開始覺得自己對課程的吸收度有點退步!大一可以一下就適應高學分的學期,大四下卻連四門課都搞不定?發現自己大五的生活也有點如此,並不是能力的問題,而是心態上的積極度。
該找個方式找回學習的積極度了。我想,做個筆記是個不錯的開始。