FreeBSD 初期環境建置

當新灌好的一台 BSD, 該做哪些設定, 才可以使用起來比較順手.

主要是剛開始建立 make.conf, 更新 Ports Index 的 Source Tree 的步驟, 其它 紀錄 Package 安裝, 指令 和 操作方法 等.

感謝 Gawain 提供, 從 FreeBSD 6.0 開始就已經內建 portsnap, 可以快速做更新的動作:

  • get Ports Tree:  portsnap fetch extract
  • update Ports Tree: portsnap fetch update
  • update 指定的 Ports 機器: portsnap -s portsnap.cn.freebsd.org fetch
  • 設定檔於 /etc/portsnap.conf 可以設定預設要抓哪台機器的 Ports Tree 

以下是採用 cvsup 的方法, 剛開使用 root 登入後, 要先更新 Ports Tree, 先來裝 cvsup.(如果灌 BSD 6.2, 預設有 /usr/bin/csup 可以用, 就不用裝 cvsup 囉~, 感謝 jerome 提供)

  1. cd /usr/ports/net/cvsup-without-gui # 此為 BSD 6.1 以前才需要裝, 6.2 直接用 csup 即可
  2. make install clean

基本設定建置(for Bsd 6.1) - 6.2 以上請跳過此段

  • 此步驟省略下述也可用, 只是下面可以少打些字
  • cp /usr/share/examples/etc/make.conf /etc/

修改 抓 Ports 的來源(沒有 make.conf 就自己建一個)

vi /etc/make.conf

SUP_UPDATE=    yes
SUP=        /usr/local/bin/cvsup
SUPFLAGS=   -g -L 2
SUPHOST=    cvsup.tw.FreeBSD.org
SUPFILE=    /usr/share/examples/cvsup/stable-supfile
PORTSSUPFILE=   /usr/share/examples/cvsup/ports-supfile
DOCSUPFILE= /usr/share/examples/cvsup/doc-supfile

MASTER_SITE_BACKUP?=    \  
ftp://ftp.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp2.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp9.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/
MASTER_SITE_OVERRIDE?=  ${MASTER_SITE_BACKUP}

STER_SITE_OVERRIDE=ftp://ftp.tw.FreeBSD.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/

# 安裝 Package 問的問題都用 default 值, 有需要特別打開再自己 make config 修改
BATCH=yes

# 不使用 Xwindow
WITHOUT_X11=yes
X11BASE=${LOCALBASE}

不新增 make.conf 的做法(通常還是建議就建一個 make.conf 吧!)

cvsup -g -L 2 -h cvsup.tw.freebsd.org /usr/share/examples/cvsup/ports-supfile 

基本設定建置(for Bsd 6.2 以上, 使用 csup)

下述採用 us 設定, 可再自行修改成 tw link 即可, vim /etc/make.conf

MASTER_SITE_BACKUP?=    \
 http://ftp5.us.freebsd.org/FreeBSD/distfiles/${DIST_SUBDIR}/
MASTER_SITE_OVERRIDE?=  ${MASTER_SITE_BACKUP}
SUP_UPDATE= yes
SUP=        /usr/bin/csup
SUPFLAGS=   -4 -L 2 -z
SUPHOST=    cvsup4.us.freebsd.org
SUPFILE=     /usr/share/examples/cvsup/stable-supfile
PORTSSUPFILE=   /usr/share/examples/cvsup/ports-supfile

使用 csup (update ports index)

csup -h cvsup6.tw.freebsd.org /usr/share/examples/cvsup/ports-supfile

更新 ports tree

  1. cd /usr/ports
  2. make update

更新 ports index

  • 感謝 Duck 指點. ports index 跟 ports tree 更新是不同的. Orz.
  • make index # 在自己的目錄下重建
  • make fetchindex # 抓別人建好的

常用套件

  • /usr/ports/net/cvsup-without-gui
  • /usr/ports/sysutils/fastest_cvsup # 找哪個 cvsup 離你最近, fastest_cvsup -c tw
  • PS: 6.2 以後直接使用 csup 即可, 不需再使用 cvsup.
  • /usr/ports/sysutils/portupgrade
  • /usr/ports/editors/vim-lite
  • /usr/ports/shells/bash
  • /usr/ports/misc/gnuls
  • /usr/ports/sysutils/screen
  • /usr/ports/security/sudo
  • PS: Ports 安裝完成的 Package 會放在 /var/db/pkg

搜尋套件方法

  • make search name=KEYWORD
  • make search key=KEYWORD
  • make search key=KEYWORD | grep -1 Port # 找到 Port 連下一行一起印
  • 或者直接 grep /usr/ports/INDEX-6 來找也可以(INDEX-6 是 BSD6, INDEX-4 是 BSD4.. 以此類推)
  • ex: grep ^p5-IO-Socket-SSL- /usr/ports/INDEX-6

Package 升級

  • pkg_version -v # 看哪些版本要升級
  • pkg_version -IvL = 或 pkg_version -Ivl '<' 或 portversion -vl '<' # 只看哪些版本需要升級
  • portupgrade PKG_NAME_VERSION # 單純升級一個版本
  • portupgrade -a # 全部升級
  • pkg_version -Iql '<' | xargs portupgrade # 列出套件再丟進去升級

Pakcage 操作(make 版)

  • make package clean; pkg_add *.tbz (包好 package 後安裝, 通常後面 pkg_add 都不用了, 包好通常也裝好了)
  • make install clean # 安裝
  • make deinstall # 移除
  • make reinstall # 升級/重新安裝(建議先 make clean 再 make reinstall)

Package 操作(pkg 版)

  • pkg_add zh-telnet-1.0_1.tbz # 直接安裝 Package
  • pkg_add -r PACKAGE_NAME # 會自己找 Mirror site 下載 Package 直接安裝
  • pkg_delete PACKAGE_NAME # 移除
  • pkg_version -v # 看哪些版本要升級

Ports 其它相關

  • pkgdb -F # 修補程式關連性
  • portsdb -Uu # 重建系統 Ports 的 INDEX db, 這個部份比較久, 並不是當機, 所以請耐心等候.
  • portupgrade -ayn # 升級測試動作
  • portupgrade -ay # 升級測試沒問題, 就安裝上去

系統核心升級(創造世界 make world): (還不熟的, 這個先不要亂玩 XD)

  1. cd /usr/src
  2. make buildworld
  3. make buildkernel (或 make buildkernel KERCONF=GENERIC)
  4. make install kernel
  5. make install world

製作標準 FreeBSD Package

  1. 簡短記錄從拉一個 Open Source tgz 檔, 該怎麼包 Package, 運氣好可以直接包好, 遇到問題就遇到再說囉 XD
  2. vim /usr/local/etc/pkgtools.conf # 看看自己覺得有什麼設定要設的
  3. /usr/ports/Tools/scripts/mkptools/mkpskel http://xxxxx/source_code.tar.gz 
  4. make extract
  5. portlint
  6. /usr/ports/ports-mgmt/portlint/
  7. make makesum
  8. make extract
  9. portlint -N

看目前系統裝了哪些 Package

  • ls /var/db/pkg

參考文章:

其它推薦文章:

PS: 很快 portupgrade 就被我玩壞了 Orz...

portupgrade -a 出現下述訊息:

[Updating the pkgdb <format:bdb_btree> in /var/db/pkg ... /var/db/pkg/pkgdb.db: unexpected file type or format -- Invalid argument; rebuild needed] [Rebuilding the pkgdb <format:bdb_btree> in /var/db/pkg ... /var/db/pkg/pkgdb.db: unexpected file type or format -- Invalid argument: Cannot update the pkgdb!]: Cannot update the pkgdb!]

看起來好像是 pkgdb.db 壞了, 解法:

  1. cd /var/db/pkg
  2. rm pkgdb.db # 砍了, 反正應該之後更新會回的來
  3. rm /usr/ports/INDEX-6.db # 這個應該可以不用砍, 但是我也同時搞爛了, 索性一起砍了 Orz...
  4. pkgdb -fu # 重建 pkgdb.db 回來.
  5. portupgrade -a # 正常囉!!

關於 Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
本篇發表於 My_Note-Unix。將永久鏈結加入書籤。

FreeBSD 初期環境建置 有 10 則回應

  1. jerome 說道:

    > 剛開使用 root 登入後, 要先更新 Ports Tree, 先來裝 cvsup.
    FreeBSD 6.2 以後內建 csup
    用 /usr/bin/csup 就可以不必裝 cvsup 囉!

  2. Tsung 說道:

    一看到馬上試試,
    sudo /usr/bin/csup
    sudo: /usr/bin/csup: command not found
    .... Orz....
    才發現我是裝 BSD 6.1...... XDDDD
    感謝指點.. 🙂

  3. cecil.tsai 說道:

    ports 檢查更新的部份,可以使用 portversion 來檢查,比較清楚 😀
    portversion -vl '

  4. Tsung 說道:

    回 portversion -vl 怎麼好像都沒有東西出來 XDD
    portversion -v 看起來跟 pkg_version -v 一樣...
    不曉得有什麼差別??... Orz
    不過多知道了一個指令~ 感恩~ 🙂

  5. Gawain 說道:

    其实FreeBSD从6.0起就已经自带一个很优秀的工具,portsnap
    得到Ports Tree
    portsnap fetch extract
    升级Ports Tree
    portsnap fetch update
    要指定更新服务器
    portsnap -s portsnap.cn.freebsd.org fetch
    他的设置档是/etc/portsnap.conf可以设定默认服务器地址等等.

  6. Tsung 說道:

    原來如此, 感謝您的指點..
    先記下來了~~ Orz..

  7. DucK 說道:

    更新 ports index
    1. cd /usr/ports
    2. make update (或 make fetchindex)
    要在自己的目錄下重建
    make index
    要抓別人建好的
    make fetchindex
    make update 是用來更新ports tree的,並不會更新index

  8. Tsung 說道:

    嗯嗯, 感謝指點, 已經更正.
    我一直以為它會一起更新, 原來 ports tree 跟 ports index 是不同的.. Orz..

  9. DucK 說道:

    在基本設定建置的部份
    >基本設定建置
    > * cp /usr/share/examples/cvsup/standard-supfile.conf /usr/
    > * cp /usr/share/examples/etc/ports-supfile.conf /usr/
    > * cp /usr/share/examples/etc/doc-supfile.conf /usr/
    已經在 make.conf 裡面指定了預設的supfile,不懂你要把上面的範例supfile複製到 /usr 目錄下的目的是啥?
    而且複製的來源路徑也錯了,我以為應該是 /usr/share/examples/cvsup ?
    另外一開始若安裝cvsup似乎比較累贅,因為csup之所以誕生的原因就是因為不喜歡cvsup相依其他lib,已經有了csup,為啥裝ports還要裝cvsup一屁股來用呢?現在csup除了package-6-stable和packages-6.2-release都已經內建所以找不到pkg來裝以外,其他的版本只要是抓csup.tbz的全部都指到ALL裡面的csup-20060318.tgz了。
    個人比較偏好直接裝csup的pkg,這樣裝比較快。所以剛裝機完的只要改make.conf裡面csup的路徑+host應該就能動了。
    然後make.conf裡面的MASTER_SITE_BACKUP的伺服器事實上也沒必要填這麼多,主要的前幾個mirror站如果都沒有了,後面的幾乎也不會有,列一堆只會讓別人busy然後自己慢慢全部踹完才去國外找。

  10. Tsung 說道:

    嗯嗯~
    1. 基本設定建置 這邊確實是在 make.conf 已經寫了, 再指定也沒有意義. 還是拿掉好了 🙂
    2. csup 是後來我才知道的, 我裝 6.1 的時後還沒有, 所以就傻傻裝 cvsup... Orz... 我還是修改一下好了. 😛
    3. 嗯嗯~ 原來如此, 那就先留著剩前三台好了.
    主要只是怕說, 會有掛掉的, 那就可以再試試其它台.
    我再修改一下, 感謝大大指點. Orz..

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料