2015 新版 NAS4Free 的 jails 管理方法實戰 – Finch
在之前初次接觸 NAS4Free 時發表了 NAS4Free 安裝 Jails 實戰教學 過了2年後,現在有更簡便的管理方式-Finch 來建立和管理 NAS4Free 上的 jail. 在參考了官方教學文章和自己實地演練過,整理出以下的實戰教學讓大家能讓 NAS4Free 發揮更多的功能。此外,在官方論壇上有另一個圖形化的 jails 管理方法叫 thebrig (GitHub), 但 thebrig 缺乏管理,最近更新的版本又是超過1年以上。我們就使用 Finch 做此實戰的範本。
系統資訊
System information | |
Hostname | nas4free.local |
Version | 9.2.0.1 – Shigawire (revision 972) |
Build date | Mon Apr 28 02:43:01 CEST 2014 |
Platform OS | FreeBSD 9.2-RELEASE-p4 (kern.osreldate: 902001) |
Platform | x64-embedded on Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz |
System | Oracle Corporation VirtualBox |
System bios | innotek GmbH version: VirtualBox 12/01/2006 |
Virtual Box 硬碟組合設定
Drive 0: 4G for installation
Drive 1: 20G for Storage (格式化成 UFS)
Drive 2: 12G for Jails (格式化成 UFS)
Disk Management 磁碟管理一覽
Device | Device model | Size | Serial number | Controller | Controller model | Standby time | File system | Status |
ada0 | VBOX HARDDISK | 4096MB | VB8dfa1df2-2d372af2 | ahcich0 | Intel ICH8M AHCI SATA controller | Always on | UFS | ONLINE |
ada1 | VBOX HARDDISK | 20480MB | VBd7b48f8c-adbe5cfc | ahcich1 | Intel ICH8M AHCI SATA controller | Always on | UFS | ONLINE |
ada2 | VBOX HARDDISK | 12288MB | VBbfb9786b-7e9f62d0 | ahcich2 | Intel ICH8M AHCI SATA controller | Always on | UFS | ONLINE |
Mounting 磁碟掛載點
Disk | File system | Name | Description | Status |
/dev/ufsid/54b6b6ae049ffa9c (ada1p1) | ufs | Storage | OK | |
/dev/ufsid/54b6b6bc5a8ff378 (ada2p1) | ufs | Jails | OK |
有關 RAID 或 ZFS 的設定我就不多介紹了。如果有問題請來信指教或參考其它管理磁碟陣列的文章。
以上面的設定,Jails 有個獨立的12G空間。記得如果要把 Jails 獨立出在某個碟碟上,內容量一定要超過8G。如果照以前的切割和掛載法,那就會是下面的掛載點:
Jail mounting path: /mnt/Jails
下載和準備 Finch
- 首先先登入到 nas4free 的 terminal console 裡。如果要 ssh 進入,要先到設定網頁裡開啟 ssh, 也要開放 root 權限。
- 預設的登入帳號是 username: root password: nas4free
- 先打入以下指令來準備和下載 finch 的安裝程式
/bin/sh
alias finch-bootstrap="SSL_NO_VERIFY_PEER=YES fetch -q -o - http://git.io/HxXrsw | sh -s --"
finch-bootstrap --help
* 小提醒:
- finch-bootstrap –help 可以看到其它安裝的選項。
- 在一般的情形下,接受預設值就好了。
安裝 Finch
* 注意: 現在要確定 Finch 要安裝的位置,如果參照之前的掛載點,那麼 Jails 分割區就會在 /mnt/Jails 裡。請把 “/path/to/finch” 改換成 /mnt/Jails
安裝語法如下:
finch-bootstrap install --dir "/path/to/finch"
小插曲: 我在安裝時會遇到以下錯誤說我的 /mnt/Jails 目錄不是乾淨的。可能是我之前試過重新 format 也不完整的結果。如果你也有遇到一樣的問題,可以在以上的安裝語法後加入 –force 就可以強制安裝了。
ERROR ********************************************************************* The directory "/mnt/Jails" already exists and is non-empty. It is not WISE to mixup a fresh new FreeBSD installation with other files. The better idea would be to specify an EMPTY folder and install into that. * Querying filesystem at "/mnt/Jails" Filesystem type is "ufs" for this volume. FreeBSD supports installations on the ufs filesystem. So long as it's not a slow usb flash drive. HDDs & SSDs only please. Checking administrator accounts... Done.
設定其它管理者帳號和權限
Finch 會自動建立在 Jails 裡的 root 帳號。但如果需要開放其它的使用者來管理 Jails 和使用 Finch , 可以參考以下步驟:
- 登入到 NAS4Free 的網頁管理介面,再選取 Access -> Users
- 選取欲加入管理群的帳號,選 Edit User
- Group 群組選 wheel
- 登入介面(login shell) 選取 bash
- 選 Save –> Apply changes 來完成儲存和套用
加入關機和關機時自動執行的程式
- 登入到 NAS4Free 的網頁管理介面
- 到 System|Advanced|Command Scripts
- 按 + 並加入這 POSTINIT 語法
/path/to/finch/etc/finch/postinit
- 再按 + 加入這 SHUTDOWN 語法
/path/to/finch/etc/finch/shutdown
小提醒: 請記得把 /path/to/finch 改成你選取的路徑。如果是照參本篇教學,那路徑就會是以下例子:
/mnt/Jails/finch/etc/finch/postinit
/mnt/Jails/finch/etc/finch/shutdown
用 Finch 安裝FreeBSD
跟之前的教學一樣,最後要 buildworld. 就是在 NAS4Free FreeBSD 系統下給 Jails 專用的子 FreeBSD 系統。Finch 程式己經把必要的步驟都自動化了。所以要執行剛才套用的開關機程序需要重開機才會自動啟動。
- 登入到 NAS4Free 的網頁管理介面
- 選 System –> Reboot
查看 Finch 安裝 FreeBSD 系統的進度
重開機會來後,Finch 就會開始安裝系統了,但第一次安裝要花費 20 分鐘到 1 小時的時間。要查看現在安裝的進度,可以鍵入以下 CLI
tail -99999 -f /path/to/finch/var/log/finch/install.log
安裝完成後就會有以下訊息
Stopping finch. Updating finch scripts. finch updated on: Tue Jan 13 02:31:49 UTC 2015 finch: 1.28, 22879731b9, Wed Dec 31 17:33:56 UTC 2014. freebsd: FreeBSD-amd64-9.2-RELEASE Starting finch. Update complete. * Now logout / log back in, or type ". /etc/profile". + /mnt/Jails/usr/sbin/finch restart Stopping finch. Starting finch. + set +x ****************************************************************************** Your Finch FreeBSD Installation has finished. * Installation took 1 hours, 58 minutes, 37 seconds. * Attachment: "finch-install.log.gz". ****************************************************************************** You must now follow the "Post Install Steps" as shown on the Finch website. >>> http://dreamcat4.github.io/finch/install/#toc_12 <<< ****************************************************************************** finch installed on: Tue Jan 13 02:32:14 UTC 2015 finch: 1.28, 22879731b9, Wed Dec 31 17:33:56 UTC 2014. freebsd: FreeBSD-amd64-9.2-RELEASE
NAS4Free, Finch 和 Jail 的關係圖
下面的意示圖大概說明 NAS4Free, Finch 和 jail 的關係。有點像虛擬環境,只要各自的 jail IP 位址不衝突即可。但也是看硬體的容量夠不夠支援多個 jails.
建立新的 Jail
當你看到以上安裝完成後的訊息,就可以開始建立新的 jail
# 首先以root 身份進入 Finch 的 chroot 環境
sudo finch chroot
# 給jail指定一個 IP 位址 (建議和 NAS4Free 在同一個子網路下)
jail_ip="192.168.1.201"
# 設置匹配的本地端(localhost)回圈位置給 ‘lo0’
jail_loopback="lo0|127.0.0.1"
# 設定 jail 的服務器名,官方教學是用 nginx 為例,我們就尊照
jailname="nginx"
# 以下 qjail 語法可以建立一個新的基本 jail
qjail create -4 “$jail_ip,$jail_loopback” “$jailname”
* 小補充: -4 的意思是 IPv4, 另外,你也可以用以下的語法一口氣建立 jail, 但之後的 $jailname 就要改換成你取的 $jailname 如 nginx
** 方法二: qjail create -4 "192.168.1.201,127.0.0.1" "nginx"
# 開啟 unix sockets 網路接口
qjail config -k "$jailname"
第一次登入到新建立的 jail 裡
# 起始剛建立的 jail
qjail start "$jailname"
# 以 root 身份登入到 jail 的終端界面裡
qjail console "$jailname"
# 另外可以設 root 帳號的秘碼,但此項是額外
passwd
原則上利用 Finch 來建立 jails 的部份到這裡就完成了。你可以用子網路裡的電腦來 ping 剛才給予的網址 192.168.1.201. 應該是會回應。接下來就是附加教學在 jails 裡安裝 nginx 網頁伺服器。
額外教學: 安裝 nginx 網頁伺服器
接下來要示範的是在剛才建立的 nginx jail 裡安裝nginx網頁服務器所需要的套件。其它的服務器也可以用類似做法。 如果是在 FreeBSD 的 ports 裡,做法就會很簡單。其它可以加到 jails 的服務比如 AirVideo Server, jdownloader, 和 xmbc 類。
方法1 pkg:
# 更新本地套件
pkg update -f
# 用 pkg 方法安裝 nginx
ASSUME_ALWAYS_YES="yes" pkg install "nginx"
方法2 利用 FreeBSD ports:
#更新 ports 的結構
portsnap fetch
cd "/usr/ports/www/nginx" && make "config-recursive" "install" "clean"
# 開啟 jail 裡的 rc.d 讓 nginx 會在開機時自動執行
sysrc "nginx_enable=YES"
# 離開 nginx jail
exit
# 重新起動 nginx 的 jail. 順便測試 rc.d 的語法有沒有被執行
qjail restart "$jailname"
# 測試 nginx 服務器是否正常運作
fetch -o - "http://$jail_ip"
或者用另一台電腦在瀏灠器直接打入 jail 的網址
http://$jail_ip
如果看見 nginx 的歡迎面畫面,就成功了。
延伸參考文件
qjail 的指令介紹
http://dreamcat4.github.io/finch/qjail-reference/
nginx 相關的指令 (FreeBSD 上)
# 起始 nginx
/usr/local/etc/rc.d/nginx start
# 停止 nginx
/usr/local/etc/rc.d/nginx stop
# 重新起動
/usr/local/etc/rc.d/nginx restart
參考文件
http://dreamcat4.github.io/finch/