X

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: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post