指令寫作範例


GY# alias
....其他省略....
alias vi='vim'  <==重點在這行啊!



【FreeBSD】Mount msdos-掛載 USB 隨身碟



前言

今天為了要測試將三個 FreeBSD .iso 合併為一個 .iso 所以要掛載 USB 隨身碟 (因為我是存在別台電腦上),所以就順手寫個筆記吧。(請尊重 weithenn 的辛勞!!)

作業環境

  • FreeBSD 6.3-RELEASE
  • 2 GB USB 隨身碟(請尊重 weithenn 的辛勞!!)



安裝及設定

步驟1.插入 USB 隨身碟

在插入 USB 隨身碟以前請先檢查在您的 Kernel 中是否將下列項目註解掉。(請尊重 weithenn 的辛勞!!)
device scbus # SCSI bus (required for SCSI)
device da # Direct Access (disks)
device pass # Passthrough device (direct SCSI access)
device uhci # UHCI PCI->USB interface (Support USB 1.x)
device ohci # OHCI PCI->USB interface (Support USB 1.x)
device ehci # EHCI PCI->USB interface (Support USB 2.0)
device usb # USB Bus (required)
device umass # Disks/Mass storage - Requires scbus and da
接下來檢查系統是否啟動 usbd 服務 (預設便開啟)(請尊重 weithenn 的辛勞!!)
#less /etc/rc.conf
usbd_enable="YES" //開機後啟動 usbd 服務
將您的 USB 隨身碟插入 FreeBSD 機器上,此時 FreeBSD Console 應該會出現如下類似訊息,或使用 dmesg 來查看也可。(請尊重weithenn 的辛勞!!)
umass0: vendor 0x13fe Silicon-Power, rev 2.00/1.10, addr 2
da0 at umass-sim0 bus 0 target 0 lun 0
da0: <> Removable Direct Access SCSI-0 device
da0: 40.000MB/s transfers
da0: 1967MB (4029440 512 byte sectors: 255H 63S/T 250C)

步驟2.掛載 USB 隨身碟

所以由上述訊息可知 USB 隨身碟被系統辦認為 da0 (就像 Windows 辦認為 ex. E: 一樣),接下來就使用下列指令掛載 USB 隨身碟到 /mnt 下吧。(請尊重 weithenn 的辛勞!!)
#mount -t msdos /dev/da0s1 /mnt
mount: Using "-t msdosfs", since "-t msdos" is deprecated.
確認 USB 隨身碟是否有掛載到 /mnt 下(請尊重 weithenn 的辛勞!!)
#df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 496M 63M 393M 14% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/ad0s1g 127G 8.0M 117G 0% /home
/dev/ad0s1e 496M 12K 456M 0% /tmp
/dev/ad0s1f 9.7G 1.2G 7.7G 14% /usr
/dev/ad0s1d 2.9G 2.2M 2.6G 0% /var
/dev/da0s1 1.9G 1.5G 400M 80% /mnt //由 Size 可知有正確掛載(我的 USB 容量是 2GB)
當 使用完 USB 後記得離開 /mnt 後下 umount 指令,然後就可將 USB 隨身碟拔出 FreeBSD 機器了,拔出後 FreeBSD Console 應該會出現相關訊息,或使用 dmesg 查看也可, (就像 Windows 會說您可安裝移除該裝置一樣)(請尊

Ports and Packages 常見問題

[轉載] http://www.freebsd.org/zh/FAQ/ports.html


20.1. 如何只抓取 tarball?
如果只希望抓取 tarball 下來的話,僅需打下面指令即可:
# make fetch
如果是要抓取單一的 port,以 editors/joe 為例的話,則:

# cd /usr/ports/editors/joe
# make fetch
那麼,預設會將 editors/joe 的 tarball 下載至 /usr/ports/distfiles 目錄下。
如果是希望抓取安裝此 ports 所有相關相依 ports 的 tarball,以 systuils/portupgrade 為例的話,則:
# cd /usr/ports/systuils/portupgrade
# make fetch-recursive
預設會將此 port 與所有需要的其他 port 的 tarball,都下載至 /usr/ports/distfiles 目錄下。
如果是希望抓取 ftp 分類下所有 ports 的 tarball ,則:
# cd /usr/ports/ftp
# make fetch-recursive
則會所將 ftp 分類下所有 ports 的 tarball 都下載至 /usr/ports/distfiles 目錄下。
20.2. 如何僅做到解開 tarball的步驟?
有時候習慣自己 patch 原始碼的時候,會很常用到這個功能。以 editors/joe 為例的話,則:
# cd /usr/ports/editors/joe
# make extract
那麼就會將 tarball解開至 /usr/ports/editors/joe/work 目錄下。
20.3. 如何僅做到解開 tarball 並補上官方提供的 patch ?
此法與上面方式有一些類似,不同於是先補上官方提供的 patch ,再行 patch 自己的修正。有時候習慣自己 patch 原始碼的時候,會很常用到這個功能。 以 editors/joe 為例的話,則:
# cd /usr/ports/editors/joe
# make patch
那麼就會將 tarball解開至 /usr/ports/editors/joe/work 目錄下 ,並補上官方提供的 patch。
20.4. 如何安裝一個新的 port?
如果系統上未安裝此軟體,則可以選擇安裝一個新的 port。 以 editors/joe 為例的話,則:
# cd /usr/ports/editors/joe
# make install
如此會在系統上安裝一個新的 joe 軟體。 如果需要在安裝完成後,也一併清除編輯時期所留下來的暫存目錄,則可配合 make clean 方法一起使用,如:
# cd /usr/ports/editors/joe
# make clean
20.5. 如何安裝一個新的 port,並打包(package)起來?
將安裝完成的軟體打包起來,有許多便利性:包括在叢集系統中,可供其它機器使用, 或將未來此軟體出問題可重新利用此 package 重新快速安裝。 以 editors/joe 為例的話,則:
# cd /usr/ports/editors/joe
# make package
如此會在系統上安裝一個新的 joe 軟體,並將此軟體打包(package)起來。 package 預設會在 /usr/ports/editors/joe 目錄下,如果希望集中管理的話,建議做如下的步驟:
# mkdir -p /usr/ports/packages/All
以後打包的 packages 都會存放在此目錄下,並且系統會自動做分類,以方便管理。 如果需要在安裝完成後,一併清除編輯時期所留下來的暫存目錄,則可加上 make clean 一起使用,比如:
# cd /usr/ports/editors/joe
# make package clean
20.6. 如何打包一個 port,並將其所有相依的 ports 也打包起來?
因為上面剛說的 make package 方式只有打包單一套件, 中間依賴的 ports 並沒有一起打包,這會出現一個常遇到的問題: 就是如果一個 port 需要依賴其它的 ports,那麼必須將其它 ports 也一起打包,否則安裝 packages 會有相依的問題。 以 sysutils/portupgrade 為例:
# cd /usr/ports/sysutils/portupgrade
# make DEPENDS_TARGET=package package
如此一來,就會對所有 portupgrade 所相依賴的 ports 都一併打包,也包括自己本身。
20.7. 如何對一個已經安裝的 port 打包?
如果安裝好一個套軟,事前並未打包,事後想打包的話, 以 editors/joe 為例:
# cd /var/db/pkg
# pkg_create -b joe-{版本號}
如此一來,就會將已安裝的 port 打包起來,放在 /var/db/pkg 目錄下。
20.8. 如何清理 ports 編輯期間所產生的暫存資料?
在安裝 port 的時候,通常會有編譯期間所需要的工作目錄(work),因此通常安裝好一個套件後,會清除此暫存目錄,以節省硬碟空間。 以editors/joe 為例:
# cd /usr/ports/editors/joe
# make clean
而如果是希望清除所有 ports 的暫存目錄,則:
# cd /usr/ports
# make clean
而如果是希望清除所有 ftp 分類的暫存目錄,則:
# cd /usr/ports/ftp
# make clean
20.9. 如何清理 ports 編輯期間所產生的暫存資料,以及 tarball 檔?
上面所講的 make clean 僅只是清除編輯期間所需要的工作目錄(work),並沒有將編譯 ports 時一併下載的 tarball 刪除(相對應之 tarball 預設會存放在/usr/ports/distfiles) 如果打算把 tarball 也一併清除的話,以 editors/joe 為例:
# cd /usr/ports/editors/joe
# make distclean
make distclean 的步驟包含了 make clean 的功能,也就是說除了會刪除 tarball 外,還會一併清除編譯時的暫存 work 目錄。
如果是希望清除所有 ports 的暫存 work 目錄及 tarball,則:
# cd /usr/ports
# make distclean
而如果是希望清除所有 ftp 分類的暫存目錄以及 tarball,則:
# cd /usr/ports/ftp
# make distclean
20.10. 如何在安裝 ports 前查詢所依賴的相關套件?
在安裝 ports 前,可以查詢所需依賴/相關的套件。 以 mail/p5-Mail-SpamAssassin 為例:
# cd /usr/ports/mail/p5-Mail-SpamAssassin
# make all-depends-list
make all-depends-list 顯示此套件所有相依的套件。
# cd /usr/ports/mail/p5-Mail-SpamAssassin
# make pretty-print-build-depends-list
make all-depends-list 顯示此套件在編譯期間所需要的套件。
# cd /usr/ports/mail/p5-Mail-SpamAssassin
# make pretty-print-run-depends-list
make all-depends-list 顯示此套件要執行時所需要的套件。
20.11. 如何移除已安裝的 ports?
以 editors/joe 為例:
# cd /usr/ports/editors/joe
# make deinstall
或是使用 pkg_delete
# pkg_delete joe-{version}
有時候套件之間的相依性會導致無法直接移除,如果要強制移除的話,則:
# pkg_delete -f joe-{version}
但請注意:很有可能會導致其它相依到這軟體的套件執行起來出現問題。
20.12. 如何一併移除所相依的 ports?
以 sysutils/portupgrade 為例:
# cd /usr/ports/sysutils/portupgrade
# make deinstall-depends
執行此步驟前,請注意是否會移除其他套件也有共同相依的部分。建議先參考 上面所講的 make-depends-list 的方法來檢查。
# pkg_delete joe-{version}
或者建議用:pkg_delete,這樣若仍有相依該套件的話,會先警告而不會移除。 除非有另外加了 -f 參數來強制移除...。
# pkg_delete -r joe-{version}
20.13. 如何重新安裝已安裝過的 ports?
重新安裝的前提是:之前有安裝過或目前已安裝。以 editors/joe 為例:
# cd /usr/ports/editors/joe
# make deinstall clean install
或是
# cd /usr/ports/editors/joe
# make reinstall
或是
# portupgrade -f joe
20.14. 如何以關鍵字搜尋所要找的 ports?
如果要從全部的 ports collection 中找尋與關鍵字 "ldap" 有關的 ports,則:
# cd /usr/ports
# make search key=ldap
如果只要從與 ftp 相關的 ports 下找尋與關鍵字 "ldap" 有關的 ports,則:
# cd /usr/ports/ftp
# make search key=ldap
另外,還有另一個用法,方法只是將 key 換成 name。如果已經知道要搜尋 ports 的名稱,或只想找名稱相關的關鍵字 "ldap", 則:
# cd /usr/ports
# make search name=ldap
20.15. 如何升級已安裝的 ports?
如果已經安裝套件,事後欲升級的話,必須先移除舊版的 port。以 editors/joe 為例:
# portupgrade joe
或是
# cd /usr/ports/editors/joe
# make clean reinstall
或是
# portupgrade -f joe
20.16. 如何查詢目前系統安裝了哪些套件?
查詢目前系統已安裝的全部套件:
# pkg_info
20.17. 如何查詢目前系統有沒有安裝這個關鍵字的套件?
假設要找的關鍵字是 joe 的話:
# pkg_info | grep joe
20.18. 如何查詢某個檔案是屬於哪些套件?
如果想查詢 /usr/local/bin/joe 是屬於哪個套件的話,則:
# pkg_info -W /usr/local/bin/joe
如果沒有回傳任何資訊的話,代表著這個檔案是由 FreeBSD 內建的。
20.19. 如何查詢某個套件安裝了哪些檔案?
如果想查詢目前系統所安裝的 joe 包含了哪些檔案,則:
# pkg_info -L /var/db/pkg/joe-{version}
20.20. 如何安裝舊版的 ports?
有時候會因為相依性,或是新版有問題,而會想裝舊版本的套件。 這裡介紹的方法是利用 CVS 的好處,回歸到以前舊版本存在的日子,以安裝舊版本的套件。
首先,若我們要回復到某一個套件的版本時,需要去查詢 FreeBSD ports CVS repository。 最常見的就是 Freshports 網站、 FreeBSD 的 Mailing FreeBSD cvs 或是 FreeBSD ports cvsweb
查到該套件版本所依存的日子後,就修改 CVS tag。一般預設 ports 的 CVS tag 會寫在 /usr/share/examples/cvsup/ports-supfile ,如要回溯到 2002/10/05 號的話,則:
# vi /usr/share/examples/cvsup/ports-supfile
default date=2002.10.05.00.00.00  #將 date 改成當日
然後按照一般 CVSup 或 csup 的時候一樣,執行 CVSup 或 csup (make update),此時的 ports collections 就會回到當時的情形,那麼該套件的舊版也會出現在 ports collections 中,只要安裝即可。
如果僅是想回溯某部份的 ports,則必須加上額外的資訊,如僅希望把 lang/perl5.8 回溯, 而我們得知此屬於 lang 中的一支,則:
# vi /usr/share/examples/cvsup/ports-supfile
#ports-all #將 ports-all 標示起來
ports-lang #加入這行


最後,執行 CVSup 或 csup ,並安裝即可。目前若希望單獨回溯單一的 port,則比較麻煩。

NanoBSD

就我僅知的, 要把 FreeBSD 作成嵌入式系統的 OS 有三種手法, 最早得知的是 PicoBSD, 然後是 TinyBSD, 還有最近才開始碰的 NanoBSD. 因為系統的需求, 我需要把功能完整而且包含 Ports 的 FreeBSD 搞成嵌入式系統(裝在 CF 卡裡面), 系統基本功能拿 PicoBSD 或 TinyBSD 都很簡單, 但是要包含 Ports 的話則是 NanoBSD 比較容易.

1. 事前準備
先要有一台對應版本的 FreeBSD box(廢話!?), 我用的是 FreeBSD 7.1(目前測試 7.2 和 8.0 都 ok, 這東西已經進 system source, 所以應該不會出什麼大問題)

1-1. 把預定要安裝的 ports 做成 package

mkdir /usr/ports/packages
cd /usr/ports/ooxx
make DEPENDS_TARGET=package package clean

SSH ABOUT

修改sshd_config文件

PermitRootLogin no
改成
PermitRootLogin yes
重新啟動sshd服務就OK了

/etc/rc.d/sshd restart

Setting *.conf file for NanoBSD


Beastie_disable="YES"


It turns off the "Beastie" menu and reverts to the standard loader countdown.

This is what the loader boot looks like normally without beastie_disable="YES".



Here is what it looks like with beastie_disable="YES" set in loader.conf.

SSH scp指令

使用 scp 指令

可以使用 scp 指令來透過一個安全且加密的連線在機器間傳輸檔案,就如同 rcp 指令。
傳輸一個本機檔案到遠端機器的一般語法如下:
scp localfile username@tohostname:/newfilename


localfile 代表來源檔案,而 username@tohostname:/newfilename 代表目的地。
如要傳輸本機檔案 shadowman 到您在 penguin.example.net 主機中的帳號,請在 shell 提示符號下輸入以下指令(使用您的使用者名稱取代 username):
scp shadowman username@penguin.example.net:/home/username


這將會傳輸本機檔案 shadowman 到 penguin.example.net 主機上的 /home/username/shadowman
如果要傳輸一個遠端的檔案到本機系統,一般的語法如下:
scp username@tohostname:/remotefile /newlocalfile


還可以指定多重的檔案當作來源檔案,例如要傳輸 /downloads 目錄的內容到遠端機器 penguin.example.net 上一個既存的目錄稱為 uploads,請在 shell 提示符號下輸入以下指令:remotefile 代表來源檔案,而 newlocalfile 代表目的地。

scp /downloads/* username@penguin.example.net:/uploads/



ex.
scp -r _.disk.image gary@172.16.1.2:/Users/mac/Desktop/ASUSTOR

 scp -P 22 root@111.222.333.444:/root/file_name ./

-P 後面接的是port 預設值是22
-r  可以連目錄一起copy

Mac Terminal 調教


可以參考一下網址:

Setting ssh on FreeBSD

#sysinstall
允許 ssh
在/etc/rc.conf
加上 ssh_enable="YES"
啟動 /etc/rc.d/sshd restart

設定檔位置
/etc/ssh/sshd_config

Note: 允許遠端 Root 登入 PermitRootLogin yes

將 USB 隨身碟或是硬碟格式化成 freebsd UFS2 type


# dd if=/dev/zero of=/dev/da0s1 bs=1k count=1
# newfs -O 2 /dev/da0s1


本來之前常在使用 FreeBSD 當伺服器時沒碰過這樣的問題,不過現在由於習慣使用 Linux 當桌面,自然而然就偶而就會要 mount ufs type 的硬碟,本來還一直以為只能 read only,後來才知道原來可以使用如下的指令來存取 ufs2 的分割磁區:
# mount -t ufs -o ufstype=ufs2 /dev/sdb1 /mnt/usb/
PS: 或許很多人都已經知道如何去 mount,所以寫這篇的目的只是做個紀錄及供大家參考而已…

Development environment on Ubuntu11.04

apt-get install build-essential
apt-get install libsdl1.2-dev

虹光大成就-密教灌頂(一)