顯示具有 FreeBSD tool 標籤的文章。 顯示所有文章
顯示具有 FreeBSD tool 標籤的文章。 顯示所有文章

2008年5月3日 星期六

MySQL Server 安裝使用手冊

MySQL安裝使用手冊
一、概述:  
MySQL為一個多使用者、多執行緒及多站台的快速反應資料庫系統,系統主要著眼於快速與多使用者,最大的好處是用於教育用途,免費使用。
  它具有多種版本,從Unix到Windows 98(或NT)都有,很適合於一般教育界來使用開發一些資庫料的整合應用,把它當成後端資料庫系統,一個不錯的選擇。 二、資源:
作業環境:
RedHat 6.0 + CLE 0.8p1
原始出處:
http://www.mysql.net/
台灣Mirror站:http://mysql.ht.net.tw/
版本:
MySQL-3.22.27中文修正版
檔案來源:
ftp://sql.hmes.kh.edu.tw/pub/apache_php3_mysql/mysql-3.22.27/ 或
Mirror站 ftp://ftp.linuxer.nu/Linux/apache_php_mysql/rpms/mysql-3.22.27/ 或
Mirror站 http://linux.mcic.thu.edu.tw/download/pub/packages/apache+php+mysql/
檔案列表: -rw-r--r-- 1 root ftp 4693686 Nov 27 00:59 MySQL-3.22.27-2c.i386.rpm
-rw-r--r-- 1 root ftp 4041769 Nov 27 00:59 MySQL-3.22.27-2c.src.rpm
-rw-r--r-- 1 root ftp 541043 Nov 27 00:59 MySQL-bench-3.22.27-2c.i386.rpm
-rw-r--r-- 1 root ftp 2050704 Nov 27 00:59 MySQL-client-3.22.27-2c.i386.rpm
-rw-r--r-- 1 root ftp 601871 Nov 27 00:59 MySQL-devel-3.22.27-2c.i386.rpm
 
網路資源:
PHP-Zend Resources Center - 技術與資源交流中心 MySQL交流討論區
瑞琦資訊工作室 MySQL交流討論區
linux.twbbs.org BBS站 MySQL版
三、安裝:
以 root 身份登入 Redhat 系統。
到「檔案來源」的其中一站下載上述五個檔案。
依序以 rpm -ivh 命令將所下載下來的檔案安裝入Redhat作業系統中。 [root@test /root]# rpm -ivh MySQL-3.22.27-2c.i386.rpm
[root@test /root]# rpm -ivh MySQL-client-3.22.27-2c.i386.rpm
[root@test /root]# rpm -ivh MySQL-devel-3.22.27-2c.i386.rpm

若您需要重新Compiler,則只要安裝 MySQL-3.22.27-2c.src.rpm 套件即可。
以 root 身份登入 Redhat 系統後,進入MySQL資料庫系統。 [root@test /root]# mysql mysql
 
若安裝成功您可看到下列畫面,並看到mysql的提示號! Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 212 to server version: 3.22.27 Type 'help' for help.
mysql>

 
更改MySQL系統之管理者密碼(新密碼的地方,換成您要設定的密碼) mysql> UPDATE user SET password=password('新密碼') where user='root';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 2 Changed: 0 Warnings: 0
 
刪除空帳號,以維護系統安全 mysql> DELETE FROM user WHERE User = '';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 2 Changed: 0 Warnings: 0
(最後是兩個單引號)
即時更新上述修正之資料 mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
 
離開MySQL資料庫系統 mysql> exit
Bye
[root@test root]#
 
測試一下剛剛更新的密碼是否正常:
[root@test root]# mysql mysql -uroot -p新密碼
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 29 to server version: 3.22.27 Type 'help' for help.
mysql> exit
Bye
[root@test root]#

說明:(1)mysql mysql為連結MySQL資料庫,資料庫名稱為mysql。
   (2)-uroot:-u宣告使用者,root為使用者名稱。
   (3)-p新密碼:-p宣告密碼,後面接root新設的密碼。
以後進入使用MySQL資料庫系統,須以下列格式進入: [root@test root]# mysql 資料庫名稱 -u使用者名稱 -p密碼
說明:[-u使用者名稱]-u和使用者名稱間不可有空格。
   [-p密碼]-p和密碼間不可有空格。
四、mysqladmin公用程式的使用:
新增資料庫: [root@test root]# mysqladmin -uroot -p密碼 create 資料庫名稱
說明:用法與mysql一樣,-u緊接MySQL管理者帳號(通常為root),-p緊接管理者密碼(通常為root之密碼)
   資料庫名稱為您要新增的DataBase的名稱。
刪除資料庫: [root@test root]# mysqladmin -uroot -p密碼 drop 資料庫名稱
說明:用法與上述新增資料庫方式一樣。
關閉MySQL服務: [root@test root]# mysqladmin -uroot -p密碼 shutdown

五、基本用法:
增加新的MySQL使用者:(方法一)
(1)開啟mysql資料庫 [root@test root]# mysql mysql -uroot -p密碼
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 29 to server version: 3.22.27 Type 'help' for help.
mysql>

 
(2)增加一個新帳號,並設定權限 mysql> insert into user values ('host','user',password('密碼'),'y','y','y','y','y','y','y','y','y','y','y','y','y','y');
說明:host->填入您要連線的主機名稱(完整名稱hostname+domainname),若位於本機則填localhost。
   user-->您要設定的帳號
   密碼-->您要設定的密碼
   之後14個y代表著14個不同的權限,依序為
1.Select_priv 2.Insert_priv 3.Update_priv 4.Delete_priv 5.Index_priv
6.Alter_priv 7.Create_priv 8.Drop_priv 9.Grant_priv 10.References_priv
11.Reload_priv 12.Shutdown_priv 13.Process_priv 14.File_priv

   若您不開放權限,則在該項目下填n即可。
 
增加新的MySQL使用者:(方法二)(較安全)
格式: mysql> GRANT 權限 ON 資料庫(或資料表TABLE) TO user@host IDENTIFIED BY '密碼';
說明:權限授與共分三種:
對資料庫(DateBase)有十五種權限: ALL PRIVILEGES ALTER CREATE DELETE DROP
FILE INDEX INSERT PROCESS REFERENCES
RELOAD SELECT SHUTDOWN UPDATE USAGE
 
對資料表(Table)則只有八種權限: SELECT INSERT UPDATE DELETE CREATE
DROP INDEX ALTER
 
對資料欄(column)則只有三種權限: SELECT INSERT UPDATE

 
user@host表示法:表示來自host主機的user使用者。user為您欲連線MySQL的帳號,host則必須填上你連線來源的主機完整名稱(hostname.domianname);例如:我想要設定的帳號為coco,而且是從mail.hmes.kh.edu.tw這台主機連上來使用的,所以就寫成coco@mail.hmes.kh.edu.tw。若使用萬用字元,則必須加上括號,例如:('test%'@'%.hinet.net')==>表示從.hinet.net網域連上來的test開頭的帳號。  GRANT的特性:在MySQL資料庫,若找到相對應的entry則只作UPDATE,找不到才會CREATE一個新的帳號及權限。  權限設定建議:除了管理者外,其他user儘量避免設定全部權限全開。一般而言,只開SELECT、INSERT、UPDATE三項權限;進階的user則加開DELETE、CREAT、DROP、INDEX四項權限;其餘權限,能不開,則不開,以確保整個MySQL的安全性。 (1)新增帳號,並給予全部權限 mysql> GRANT ALL PRIVILEGES ON *.* TO user@host IDENTIFIED BY '密碼';
說明:將全部權限都設給從host連線上來的user這個人,並給定密碼為密碼。 (2)新增帳號,並指定某資料庫與特定權限給該帳號 mysql> GRANT SELECT,INSERT,UPDATE ON 資料庫名.* TO user@host IDENTIFIED BY '密碼';
說明:開放某資料庫給從host連線上來的user這個人,並給定密碼為密碼。


刪除使用者帳號與權限:
格式: mysql> REVOKE 權限 ON 資料庫(或資料表TABLE) TO user@host IDENTIFIED BY '密碼';
說明:命令與用法均與GRANT一樣,特性也一樣,但不做DELETE的動作,只是將權限關閉,真的要刪除時,須用到DELETE命令。
對MySQL直接下命令作任何動作,離開MySQL系統時,必須先做即時更新(FLUSH)再離開吧! mysql> FLUSH PRIVILEGES;
 
在作業系統中,檢查權限之命令: [root@test root]# mysqlaccess host user 資料庫名 -U root -P 密碼
說明:host->填入您要檢查的來源主機名稱(完整名稱hostname+domainname),若位於本機則填localhost。
   user-->您要檢查的帳號
   資料庫名-->填入您要檢查的資料庫名稱
   -U root-->-u後面填入MySQL管理者的帳號(通常設root)
   -P 密碼-->-p後面填入MySQL管理者的密碼
例如:我要檢查來自mail.hmes.kh.edu.tw這台機器的root帳號,對資料庫fm的權限為何?
   則在系統下輸入
[root@test root]# mysqlaccess mail.hmes.kh.edu.tw fm focalmail -U root -P nnyyjj
結果為 mysqlaccess Version 2.03, 27 Feb 1997
By RUG-AIV, by Yves Carlier (Yves.Carlier@rug.ac.be)
This software comes with ABSOLUTELY NO WARRANTY.
+++USING FULL WHERE CLAUSE+++
+++USING FULL WHERE CLAUSE+++
+++USING FULL WHERE CLAUSE+++ Access-rights
for USER 'fm', from HOST 'mail.hmes.kh.edu.tw', to DB 'focalmail'
+-----------------+---+ +-----------------+---+
| Select_priv | Y | | Shutdown_priv | Y |
| Insert_priv | Y | | Process_priv | Y |
| Update_priv | Y | | File_priv | Y |
| Delete_priv | Y | | Grant_priv | Y |
| Create_priv | Y | | References_priv | Y |
| Drop_priv | Y | | Index_priv | Y |
| Reload_priv | Y | | Alter_priv | Y |
+-----------------+---+ +-----------------+---+
NOTE: A password is required for user `fm' :-( The following rules are used:
db : 'No matching rule'
host : 'Not processed: host-field is not empty in db-table.'
user : '','fm','017186377a52afaf','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'' BUGs can be reported by email to Yves.Carlier@rug.ac.be
[root@test /root]#

snmp && mrtg

首先是修改 /etc/rc.conf,開機時會自動跑 bsnmpd:
bsnmpd_enable="YES"
第一次啟動時可以手動跑:
# /etc/rc.d/bsnmpd start
然後裝 :
# cd /usr/ports/net-mgmt/mrtg# make install clean
裝完後跑 cfgmaker 產生檔案:
# cfgmaker public@127.0.0.1 > mrtg.cfg
然後修改 mrtg.cfg 內的 WorkDir,最後產生 index.html:
# indexmaker mrtg.cfg > index.html
然後將 mrtg 指令放到 crontab

2008年3月9日 星期日

PPPOE

發信人: Eintisy.bbs@bbs.ee.ccu.edu.tw (月光小俠), 看板: 386BSD
標 題: [HOWTO] FreeBSD+PPPoE (ADSL auto redial)
發信站: 中正電機網路中繼站 (Sat Jun 30 22:54:56 2001)
轉信站: abpe.org!News.Math.NCTU!news.CDPA.nsysu!news.nsysu!ctu-gate!news.nctu!n
Origin: bbs.ee.ccu.edu.tw

[寫在前頭]
海! 各位 大大 以及 FreeBSD 的朋友們! :)
笨小俠又來了! 這次要談談另一個使用 FreeBSD+PPPoE 的心得
不知道內容是否正確,還請各位大大幫忙訂正! ^^;

[環境]
1. 再 report any error 之前, 請先確定自己的硬体沒問題...
2. kernel 方面,如果 最佳化(看/etc/default/make.conf) 參數加下去有問題
就先不要加! (Reference: /etc/dafault/make.conf)
3. 依照之前笨小俠的小文章,如果閣下的測試均沒問題,那麼剩下的就只需改一個檔
4. 其他步驟,笨小俠還是也重新貼一下好了! ^^;

[測試]
方法一:
比較直接,但是有點兒浪費本來 ppp 的功能. 而且不夠 real time ^^;
但是,好處是不必動到原來的設定,而是另跑一個 process 去 monitor ip
這個 process 可以是一個 daemon 也可以 以 cron 的方式去執行!
我比較不 prefer 這個方法... ^^; 不過,到是在 rp-pppoe 的做法中可以看出來!
這裡我只寫了 cron 的 shell script ...若需 daemon ,請 Free your Power :)

Concept Shell Script Example: [若有不正確,請自己修改,總之就是這個意思]
#!/bin/sh
IFS=" "
set -- `ping -c 5 -t 4 PEER_ADDR grep loss`
LOSS=$7
if [ "$LOSS" = "100%" ]; then
killall /usr/sbin/ppp
sleep 3
ppp -ddial hinet
fi
註: PEER_ADDR 以及 hinet 應該不用多作解釋吧? ^^;

方法二:(I prefer it... and you? ^^;)
1. 如何在沒有 make kernel 時候就做測試呢?
修改 /boot/loader.conf 加入下面的東東..
module_load="YES"
module_name="netgraph" ( <=== 注意 不是 netgraph.ko ) 其他如 ng_pppoe_load="YES" 等 module...可以參考 /boot/default/loader.conf 2. reboot (kernel.GENERIC應該有將 tun compile進去) 3. 編寫 /etc/ppp/ppp.conf 如下:(這個檔是最重要的了!) default: set log Phase Chat LCP IPCP CCP tun commadn # 這個log可以自己看manpage設! 不要 set log all ... 否則硬碟一下就爆了! :P set redial 1 86400 # Format: set redial n 秒 m 次 .. # => 當斷線時 每隔n秒重撥一次直到撥了m 次 ppp 才會放棄
# 笨小俠這兒的設定是 每隔一秒重撥一次...希望機器能隱定到重撥 86400次 :P

set reconnect 1 5
# 同上的 format, 不同處,應該是 每次dial並不會很順利connect..所以才需reconnect
# 附註:其實這兩行還有關於 timeout stuff .. 想了解更清楚,麻煩跟小俠一樣
# 將整個 ppp 的 manpage 看過一次吧! 要不然請直接放心使用! ^^;
# 另外, /usr/share/example/ppp/ppp.conf.sample 也是很好的參考資料

hinet:
set device PPPoE:ed1(網路卡device)
set speed sync
set mru 1492
set mtu 1492
enable lqr
set lqrperiod 5
set cd 5!
set dial
set login
add default HISADDR
set authname 帳號
set authkey 密碼
註:如果小俠多加了任何累綴的東西(for automatic redial),還請大大不吝賜教! :)

4. echo "nameserver 168.95.192.1" >> /etc/resolv.conf
[請注意,如果在 ppp.conf 裡頭有加入 enable dns 就不用寫這個檔了!

5. 執行 ppp 進行測試!
# /usr/sbin/ppp hinet
ppp on myhost> dial
ppp on myhost>

開另一個 term ...
$ ifconfig tun0
tun0:flags=8051mtu 1492
inet LOCAL_ADDR --> PEER_ADDR netmask 0xffffff00
Opened by PID 1234
此時,LOCAL_ADDR 就是你 get 到的 IP ...PEER_ADDR 是你 ISP's router
$ ping PEER_ADDR ....如果有通,就算成功了!
然後,趁著花好月圓時候.. 關掉 ADSL 電源(以產生突然被斷線的狀況)
再等待一些時候再開ADSL :)
$ ifconfig tun0 觀察是否自動 redial 得到新的 IP ..(Should work fine!)

6. 修改 /etc/rc.conf 加入
ppp_enable="YES"
ppp_mode="ddial"
ppp_profile="hinet" <= 請對映 ppp.conf 裡頭 ISP. 7. 若要重新 make kernl (or not ... it is up to u.) 可以不必加入 options NETGRAPH 等三項. 這樣子,也可以免去下面一個煩人的warning (WHY? :> 自己想想)
module_register: module netgraph already exists!
linker_file_sysinit "netgraph.ko" failed to register! 17

8. 編輯 /etc/ppp/ppp.linkup (這個檔是幹麻用的呢? :> 自己想想)
內容: !bg /etc/ppp/dyns.sh

9. 編輯 /etc/ppp/dyns.sh script(如果你想要動態 DNS 的話... hope it help.)
#!/bin/sh
IP=""
IFS=" "
while [ "$IP" = "" ]; do
set -- `/sbin/ifconfig tun0 /usr/bin/grep netmask`
IP=$2
done
/usr/local/bin/lynx -dump "http://www.myip.org/cgi-bin/Update.py?id=\
我註冊的帳號&pwd=我註冊的密碼&ip=${IP}&recordtype=A&hostname=我註冊的名稱"
附註:現在的 http protocal 裡頭 remote ip 應該都包含了!
如果 找的 那個 提供 Dynamic Domain Name 的 provider 要求必須自己抓 ip.
上面的 dyns.sh 是一個簡單的例子!

10. reboot and enjoy. Hope this article helps.

--

問的人,請問清楚
答的人,就能切中要領
如果問的人,問得亂七八糟
那麼答的人,也只好答非所問 !

--
◆ Origin: 中正電機網路中繼站 (bbs.ee.ccu.edu.tw)
◆ From: swsh234-239.adsl.seed.net.tw
※ X-Info: pasear -> pasear@ckeisc.ck.tp.edu.tw
※ X-Sign: 0TOF9M5hJ0vIoGgccEMA (01/08/25 21:23:17 )

2007年9月20日 星期四

[轉錄OpenVPN on FreeBSD

這篇 quick guide OpenVPN with FreeBSD, PF and Windows XP 寫得蠻清楚的
http://www.ubergeek.co.uk/howtos/openvpn-freebsd-pf-windows-howto.html
以及找到 Richliu 的 wiki 上的 OpenVPN 也很好懂
http://wiki.richliu.com/index.php/OpenVPN
不過我還是在看了 howto 和 man 之後才了解大部分的事
筆記一點東西



* bridged or routed ?

一開始看 howto 的說明, openvpn 有兩種分配 ip 給 client 的方法
想說其實用 vpn 的人不多、IP也夠, 想說用 bridged 的方式就好
但接著看到他推薦 routed 比較好設就馬上改變心意 XD
難怪 google 到的前幾名都是怎麼設 routed 的..
用 routed 的話, /etc/rc.conf 要加上 gateway_enable="YES"
* 裝 OpenVPN

用 ports 裝一下 security/openvpn 就好
記得在 /etc/rc.conf 加上 openvpn_enable="YES"



* logging

就 syslog 一下...
/etc/syslog.conf 加上 !openvpn *.* /var/log/openvpn.log



* firewall 設定 nat forwarding

設好 nat forwarding 這樣才會有正確的 vpn routing
上面那篇用 pf, ipfw 應該也行啦, 只是趕時間就沒查 ipfw, 直接依樣畫葫蘆了

* CA(Certificate Authority) key

要有 openssl, 然後可以用 openvpn 提供的 easy-rsa script
build-ca: 生 CA
build-key-server: 生 server key
build-key: 生 client key, 基本上一個 client 一個 key
build-dh: 生 Diffie Hellman parameters, openvpn 要用的

生完 keys 後, server 要有 ca.crt, server.crt, server.key,
client 要有 ca.crt 和 client key(如果要用的話)



* login authentication

我考慮過兩種方法

1. certificates & keys: 需要一個 client 生一個 key. 正常是每個 client
使用一個 key, 也是有人設成多人用一個 key 啦.... 要的話 server 的設定要加
上 duplicate-cn 就是
2. username & password: 用 shell 帳號, 應該還可以搭配 NIS. 在 server 的
設定加上 plugin /usr/local/lib/openvpn-auth-pam.so login 若要單純用帳
號密碼登入不使用 client key, server 的設定再加上 client-cert-not-required
和 username-as-common-name

方法 2 如果考慮到被聽走密碼的可能, 可以再加上 tls 加密, 用
openvpn --genkey --secret ta.key 產生 tls key, server 與 client 兩邊都要
有這個 key, 並在 server 設定 tls-auth ta.key 0, 在 client 設定
tls-auth ta.key 1



* server 及 client 的設定

基本上改範例就行了
authentication 的設定要依照要用的方式設, 要用哪種就加上相關設定

-- server.conf --
# routed 用的 device
dev tun
# udp server, 若 client 有要設 proxy 要用 tcp
port 1194
proto udp

# vpn nat 的 ip pool, 隨便設一段跟範例不一樣的 private subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

# 把 client 的 default gateway 搶過來, 用 vpn server 去 routing
push "redirect-gateway"
# 設台 DNS server
push "dhcp-option DNS 168.95.1.1"
# vpn ip pool 的 routing
push "route 10.8.0.0 255.255.255.0"

# 用 shell 帳號登入, 並用 username 作辨識
plugin /usr/local/lib/openvpn-auth-pam.so login
username-as-common-name
# 不使用 client key
client-cert-not-required
# 使用 tls
tls-auth ta.key 0
# CA keys 和 Diffie hellman parameters, 放在和設定檔同一目錄下
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem

# 最大 client 可連數目
max-clients 100

# 其他照範例設的
# 如果該台機器有多個 IP, 再加上 local
keepalive 10 120
cipher BF-CBC # Blowfish (default)
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
-- client.ovpn on Windwos --
client
dev tun
proto udp
remote 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
comp-lzo
verb 3
cipher BF-CBC # Blowfish (default)

# 用帳號密碼登入
auth-user-pass

# keys
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1

# For Vista security issue, client 是 Vista 的要加
route-method exe
route-delay 2

2007年8月6日 星期一

FreeBSD 如何 mount iso image? 2006/1

在 FreeBSD 要 mount 一個燒錄用的 iso 檔,並不像 GNU/Linux 般的容易。無法直接使用 mount 指令給 mount 上來,這究竟是怎麼一回事?


在 GNU/Linux 有個 loop device(/dev/loop*),可以給燒錄用的 iso 檔使用,就是把 iso 檔使用 -o loop 參數直接 mount 上來,查看裡頭的內容細節,這本是非常平常的事。可是,到了 FreeBSD,發現並沒有 loop device 可以用,這下要怎麼把 iso 檔 mount 上來呢?

首先想到的是 FreeBSD Handbook,找了一下,藏在第 17 章,而且敘述也很簡短,不過,總算是能用了。原來 FreeBSD 有一個虛擬的 memory disk device(/dev/md*),他有多種用途,其中的 vnode 型態就可以給 iso 檔來用。

但手續上就比較麻煩一點,例如,我們想把 xxx.iso 給 mount 上來的話,首先要去製作一個 vnode type 的 memory disk,並把 iso 檔內容映射至這個 md device,然後再來 mount 這個 md device:

mdconfig -a -t vnode -f xxx.iso -u 0
mount -t cd9660 /dev/md0 /mnt/iso
這樣就行了,要把他 umount 也是要兩個動作:
umount /mnt/iso
mdconfig -d -u 0
是否有此 md device 可以使用 mdconfig -l 來得知。

好像有點給他麻煩,我試著寫了兩個很醜的 sh script 來做這些動作,如果有人有更好的寫法,請不吝借我一用:

#!/usr/bin/env sh
# vim:ts=2 sw=2 et
# isom.sh : mount iso on FreeBSD box using md device.
# Edward G.J. Lee (08/02/06)

if [ $# -eq 0 ]
then
echo
echo "Usage: `basename $0` youriso"
echo
exit 1
fi

file $1 | grep 'ISO 9660' > /dev/null 2>&1
IFIOS=$?

if [ $IFIOS -eq 0 ]
then
if [ ! -d $HOME/mnt/iso1 ]
then
mkdir -p $HOME/mnt/iso1
fi
mdconfig -a -t vnode -f $1 -u 0
mount -t cd9660 /dev/md0 $HOME/mnt/iso1
if [ $? -eq 1 ]
then
mdconfig -d -u 0
echo
echo "mount failed."
echo
exit 1
else
echo
echo "mount under $HOME/mnt/iso1"
echo
exit 0
fi
else
echo
echo 'This is not an iso file, abort!'
echo
exit 1
fi
不過,你要讓這個 user 有 md device 讀寫權限,否則就要使用 root 的身份來 mount。umoun 是寫在另外一個 sh script:
#!/usr/bin/env sh                                                             
# vim:ts=2 sw=2 et
# isoum.sh : umount iso from FreeBSD md device
# Edward G.J. Lee (08/02/06)

umount $HOME/mnt/iso1
mdconfig -d -u 0
當然,由於我的環境很單純,只有我一個人在用,所以就固定在 /dev/md0 了。雖然麻煩了點,不過 FreeBSD 的做法還真的感覺有點 hacker 風格呀!:-)

2007年8月2日 星期四

嘸蝦米輸入法安裝[gcin]

如已有liu57a.gtab,請直接跳到第4步驟)

1.修改liu57a_tra_big5.cin如下:
代碼:
%ename liu57a
%cname 嘸蝦米
%selkey 1234567890
%keyname begin
a A
b B
c C
d D
e E
f F
g G
h H
i I
j J
k K
l L
m M
n N
o O
p P
q Q
r R
s S
t T
u U
v V
w W
x X
y Y
z Z
, ,
. .
' ’
[ 〔
] 〕
%keyname end
%chardef begin
a 對
aa 寸
..
..
]]v ︼
]]v ︾
%chardef end


2.用kwrite或gedit等支援中文utf-8的editor開啟liu57a_tra_big5.cin,然後以utf-8另存新檔,檔名可自定,舉例:liu57a_tra_utf8.cin
(ps:不要用iconv轉檔,因實測結果發現片假名、平假名的部分不會出現…)

3.此時的liu57a_tra_utf8.cin已是utf-8了。執行代碼:
gcin2tab liu57a_tra_utf8.cin
mv liu57a_tra_utf8.gtab liu57a.gtab


,就可產生liu57a.gtab。

(第4步驟請用root)
4.把liu57a.gtab 拷到/usr/share/gcin/table/
然後用支援utf-8的editor編輯 /usr/share/gcin/table/gtab.list
加入代碼:
嘸蝦米 9 liu57a.gtab
存檔
如此一來,就大概安裝完成了,接下來是一些細部設定工作。


5.第5步驟是為了讓嘸蝦米更方便打字:

執行gcin-setup
選擇「外觀鈴聲行為設定」-「空白鍵選項-按空白立即送出第一字(嘸蝦米)」-「ok」

選擇「內定輸入法 & 開啟/關閉」-「嘸蝦米」-「ok」

6.重新啟動X,即可享用嘸蝦米with gcin

附上.xinitrc
代碼:
export XMODIFIERS="@im=gcin"
export GTK_IM_MODULE="gcin"
export LC_ALL=zh_TW.UTF-8
gcin&
icewm-session

嘸蝦米輸入法安裝[xcin]

.修改liu57a.cin如下:
代碼:

%gen_inp
%ename liu57a
%cname 嘸蝦米
%selkey 0123456789
%keyname begin
a A
b B
c C
d D
e E
f F
g G
h H
i I
j J
k K
l L
m M
n N
o O
p P
q Q
r R
s S
t T
u U
v V
w W
x X
y Y
z Z
, ,
. .
' ’
[ 〔
] 〕
%keyname end
%chardef begin
a 對
aa 寸
..
..
]]v ︼
]]v ︾
%chardef end


2.執行
代碼:
cin2tab liu57a.cin

會產生liu57a.tab

(以下用root)
3.然後把liu57a.tab拷到/usr/lib/xcin/tab/big5/
4.修改/etc/xcinrc,把嘸蝦米的設定加進來

代碼:
(define zh_TW.Big5
'((DEFAULT_IM "liu57a")
(DEFAULT_IM_MODULE "gen_inp")
(DEFAULT_IM_SINMD "phone")
(PHRASE "default.phr")
(CINPUT (liu57a cj .....))
...

代碼:
(define liu57a@big5
'((SETKEY 11)
(AUTO_COMPOSE YES)
(AUTO_UPCHAR YES)
(AUTO_FULLUP NO)
(SPACE_AUTOUP YES)
(SELKEY_SHIFT NO)
(SPACE_IGNOR NO)
(SPACE_RESET YES)
(AUTO_RESET YES)
(WILD_ENABLE YES)
(BEEP_WRONG YES)
(BEEP_DUPCHAR YES)
(END_KEY NO)
(AUTO_SELECT NO)
(SINMD_IN_LINE1 NO)
))


然後把 (CINPUT (liu57a cj .....))裡的jyutping0去掉

完成後,請重新啟動xcin,或者是重新啟動X-window也可以。
代碼:
killall xcin
xcin&

2007年7月21日 星期六

Jail in FreeBSD 5.3(下)

體驗完單人模式 jail, 那麼來把多使用者模式 jail 也跑起來吧。還有些 設定要做: 在主系統的 /etc/rc.conf 放一行:
ifconfig_lo0_alias0="inet 127.0.0.115/32"
這行是設定 jail 要用的 IP。一般是用 alias 的方式。 再加上這幾行:
jail_enable="YES"
jail_list="conair"
jail_conair_hostname="conair"
jail_conair_ip="127.0.0.115"
jail_conair_rootdir="/usr/jails/conair"
jail_conair_exec="/bin/sh /etc/rc"
jail_conair_devfs_enable="YES"
jail_conair_devfs_ruleset="devfsrules_jail"
上面這幾行是 FreeBSD 5.3 之後才有的設定。jail_list 是設定系統裡面 有那些 jail(s)。jail_xyz_hostname, jail_xyz_ip, jail_xyz_rootdir 是每個 jail (上述範例的 xyz 以 conair 代入) 單獨的相關設定, 依實際 情況而有所不同。jail_xyz_exec, jail_xyz_devfs_enable, 以及 jail_xyz_devfs_ruleset, 基本上是固定的, 不用更動。
Jail 設定
多使用者模式 jail, 就當一般的 FreeBSD 系統來設定吧! 照上述的方法進 入 jail 單人模式, 把以下幾個檔案設定好: /etc/hosts第 13 和 14 行, 該 jail 的 IP 和 hostname 要設好。 /etc/resolv.conf至少放 DNS server。 /etc/master.passwd這就是系統帳號存放的地方了。重點就是, 要新增一個可以遠端登入的 帳號。最簡單的方法是用 adduser 或者 sysinstall 開好就行了。 root 的密碼也要設好。 /etc/group別忘了把自己的帳號加進 wheel。 /etc/rc.confsshd_enable="YES"開啟 sshd 才能遠端登入, 因為 jail 是沒有 console 的。 /etc/ssh/ssh_host_*key自 5.3 起, 第一次啟動 sshd 的時候, 會要求使用者打一些資料進去, 幫助系統產生 ssh key。不過呢, jail 啟動的時候是沒有 terminal 的, 這會導致第一次啟動 jail 的時候有 5 分鐘的停頓。有以下兩個 方法, 可以避開這 5 分鐘的延遲:1. 手動執行 /etc/rc.d/sshd start, 亂打一些東西進去。2. 手動執行下列三行指令:/usr/bin/ssh-keygen -t rsa1 -b 1024 -f /etc/ssh/ssh_host_key -N ''/usr/bin/ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ''/usr/bin/ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''/etc/crontab在 jail 裡面 adjkerntz 要特別關掉。至於其它的 periodic jobs, 依各人需要自行調整。 以上是基本的設定, 接下來看 jail 裡其它的設定檔: /etc/periodic.confperidoc daily 有些事 jail 裡面不用做:
daily_status_security_chksetuid_enable="NO"
daily_status_security_chkmounts_enable="NO"
daily_status_disks_enable="NO"
daily_status_security_kernelmsg_enable="NO"
daily_status_network_enable="NO"
關於 mail, 因為 jail 沒有 127.0.0.1, 所以它無法像一般的 sendmail只聽 127.0.0.1, 反而會直接聽某某 IP。因此 sendmail 要整個關掉。/etc/rc.confsendmail_enable="NONE" 這時候在 /etc/periodic.conf 也要做相對應的修改, 叫它不要寄信出來:/etc/periodic.confdaily_output="/var/log/daily.output"daily_status_security_output="/var/log/security.output"weekly_output="/var/log/weekly.output"monthly_output="/var/log/monthly.output"沒有閱讀 periodic output 習慣的人, 可以將它們都改成 /dev/null。
啟動 jail
到此在 host 上以及 jail 內, 該設定的都差不多了。自 5.3 起, FreeBSD 提供了非常方便的 jail 管理機制, 可以任意的啟動, 關閉任一個 jail。 現在來試一試。 在主系統上# /etc/rc.d/jail start conair 接著 ssh 127.0.0.115, 用剛剛的新加的帳號登入。到目前都沒問題的話, 恭禧你, 已經成功的安裝好一個 jail 了! 接下來就依一般使用 FreeBSD 的方式來使用該 jail 吧。
/etc/rc.d/jail 用法
# /etc/rc.d/jail stop 停止列在 /etc/rc.conf jail_list 中的所有 jails # /etc/rc.d/jail start啟動列在 /etc/rc.conf jail_list 中的所有 jails # /etc/rc.d/jail stop jail1停止列在 /etc/rc.conf jail_list 中的特定 jail # /etc/rc.d/jail start jail1啟動列在 /etc/rc.conf jail_list 中的特定 jail
進階議題
網路連通問題 Host 上若同時設有對內及對外的 IP, 且設給 jail 內部的 private IP, 那麼 jail 設定好後, 還需在 host 上設定 NAT, jail 才能對外連線。在 其它場合, 例如 jail 是對 public IP, 或 jail 及 host 同為 private IP, 已外有執行 NAT 的主機, 則無此限制。
Share ports tree among jails 幾乎所有人使用 jail 的第一個疑問就是, 要怎麼共享 ports tree? 有很 多方法, 例如 nullfs, unionfs, hardlink, NFS 等。mount_nullfs(8) 和 mount_unionfs(8) 看起來很嚇人 (see BUGS), hardlink 也不是好主意。 比較通用的方式是用 nfs。 如何設定 NFS server 和 NFS client 不在本文的討論範圍內, 故將焦點集 中在如何在 jail 內正常使用 NFS mount 進來的 ports tree。 首先, 為了效率, 以及 jails 之間不互相干擾 make ports 程序, 要將 work 目錄調開。設定的方法是把 WRKDIRPREFIX 設定到一個不在 ports tree 裡面的地方。設定的地方是 jail 的 /etc/make.conf, 例如: WRKDIRPREFIX=/tmp 另外還有一個常用的工具程式, portupgrade, 也會寫東西進 /usr/ports, 這也要調開。可以設定的地方之一是 jail 的/etc/login.conf, 裡面多設 一個環境變數, 把 PORTS_DBDIR 改到 /var/db/pkg。除此之外, jail 內的 /etc/csh.login, /etc/profile 也都可以設定這個環境變數。
在 jail 中跑 DNS server FreeBSD 5.3 內建的 bind 已經昇級到 bind 9, 而且預設是以 chroot (不 是 jail!) 方式執行。於 jail 中再 chroot 是沒有問題的, 不過由於 5.3 還有 devfs, 而預設 bind 9 在執行的時候還會再 mount devfs, 這在 jail 內會造成問題。因此要對這點要做點特別調整。把 mount devfs 以及 停止 devfs 相關動作的方式, 是在 jail 內的 /etc/rc.conf 中, 加入 named_chroot_autoupdate="NO" 不過目前為止 named 尚不能正確啟動。接下來解析由 /etc/rc.d/named 啟 動 bind 時需要那些元素:
配置完成的 named_chrootdir (預設是 /var/named)
需要 /dev/null 和 /dev/random
/etc/namedb symbolic link 到 /var/named/etc/namedb 目前欠的就是第 2 點提到的兩個 device nodes。建立它的方式是由 host 中去建立: cd /usr/jails/conair/var/named/devmknod random c 245 0; mknod null c 2 2這樣就可以了。 好了, 接下來一切照舊。:) 在新裝好的 jail 中啟動 bind 的話, 建議先 跑一下 make-localhost, 還有調整一下 named.conf。在 FreeBSD 5.3 裡 面, bind 預設也只有聽 localhost, 不對外服務。而 jail 裡面是沒有 127.0.0.1 的, 所以要把 listen-on { 127.0.0.1; }; 這裡的 127.0.0.1 換成配給 jail 的 IP。
Jail 管理基本知識及工具
以下以列舉在 FreeBSD 5.3 上, 系統提供的 jail 相關訊息以及工具, 及實際應用。 ps利用 ps 指令可以得知某 process 是在 host 或是某一 jail 內運行。在 jail 內的 process, 於 ps 顯示時, 會在 STAT 欄位顯示 J # ps ax grep J這個指令可以列出目前處於 jail 內的 process。但儘止於此, 要得知是屬於那一個 jail 則要用到 procfs。 /proc 在 host 上, 要得知某 process 是屬於何 jail, 可以利用 /proc。但是 5.3 預設並沒有把 /proc 掛上系統, 所以得在 /etc/fstab 加上這一行:
/proc /proc procfs rw 0 0
把 /proc 掛上系統
# mount /proc
把 /proc mount 上來後, 以如下方式觀看該 process 的 status:# cat /proc//status在最後會得知該 process 位於那一個 jail (以 hostname 表示) jls 列出正在運行的 jail# jlsjls 會列出下列幾個欄位 JID, IP Address, Hostname, Path。其中的 JID 是系統配的, 接下來會經常用到它。killallFreeBSD 5.3 的 killall 多了個 -j option, 接 jls 看到的 JID。用 途是將屬於某個 jail 的 process 都砍光。jexec 相關的應用jexec 的用途是, 將 process 由 jail 外送入 jail 內執行。看某 jail 內的 process 列表# jexec ps axwww看某 jail 內的 top# jexec top看某 jail 內的使用者# jexec w 使用 jexec 把 ps / top 送進 jail 內看 process, 有一個很大的好 處是, uid : username 的對照, 會以該 jail 內的為準。 sysctl以下是幾個和 jail 有關的 kernel state 的說明
security.jail.set_hostname_allowed 可於 host 環境中設定, 為 1 的時候在 jail 中可以更改該 jail 的 hostname。預設為 1。
security.jail.socket_unixiproute_only 可於 host 環境中設定, 為 1 的時候表示 host 只幫 jail 把 IP 封包往外送(FreeBSD 還支援 Netware, Appletalk 等等通訊協定)。 預設為 1。
security.jail.sysvipc_allowed 可於 host 環境中設定, 為 1 的時候表示可以在 jail 中使用 shared memory, message queues, 還有 semaphores。預設為 0。 要在 jail 中提供用到上述三者的服務, 如 BBS, 或者 PostgreSQL 時, 要將它設為 1。
security.jail.getfsstatroot_only 可於 host 環境中設定, 為 1 的時候表示在 jail 裡面可以看到 其它 mount point, 反之則只能看到 jail 所在的 mount point。 預設為 1。
security.jail.allow_raw_sockets 可於 host 環境中設定, 為 1 的時候表示在 jail 裡面可以產生 raw sockets。最大的用處是允許在 jail 中使用 ping 指令。預 設為 0。
security.jail.jailed 在 host 和 jail 環境中都是唯讀的, 用途在於幫助 /etc/rc.d 的 shell scripts 判斷是不是身處 jail 之中。 可以直接使用 sysctl 指令, 亦可在 /etc/sysctl.conf 或 /boot/loader.conf 中, 設定上述的 kernel state。
Jail 昇級
Jail 內的 FreeBSD 系統, 和一般的 FreeBSD 系統一樣, 也是要昇級的。 不過手續稍微不一樣。其一, 要先在 host 上 buildworld 好。其二, 在 installworld 的時候要指定 DESTDIR。其三, mergemaster 時要多接一個 -D 的參數。以 conair 為例, 在 host 上執行下列指令:
# cd /usr/src
# make installworld DESTDIR=/usr/jails/conair
# mergemaster -D /usr/jails/conair
這些過程比較複雜且煩瑣, 處理的時候要花點耐心。
結語
自 FreeBSD 4.0 起, jail 為 FreeBSD 提供了良好的資訊安全機制, 更佳 的硬體資源利用方式, 以及更方便的系統管理模式。圍繞著 jail 所衍生的 資安機制, 系統工具, 及管理技巧, 也一直持續的在發展。除了 FreeBSD 5.3 本身之外, 於 ports 中還有許多本文尚未提及的 jail 管理工具, 有 興趣的人可以嘗試看看。如今 jail 已是被廣泛應用, 以及持續發展的技術, 如果您尚未使用過 jail, 何不從現在開始?
延伸閱讀
ps(1), killall(1), jail(2), login.conf(5), sysctl.conf(5), loader.conf(5), jail(8), jexec(8), jls(8), sysctl(8)

Jail in FreeBSD 5.3(上)

作者:evilc
什麼是 jail, 和 FreeBSD 有什麼關係?
Jail 是自 FreeBSD 4.0 起獨有的功能, 發展至今已 4 個年頭。和 chroot 有點像, 但又比 chroot 更強大。Jail 和 chroot 的相同的地方是, 皆會 將某個 process 及其 children 的根目錄 "/", 切換到某一個目錄下, 將 它們關起來。但 jail 可以關的就更多了, 除了可以在存取檔案系統方面做 限制, 在 process 這個層次也做了類似概念的隔離。TCP/IP stack 層次, 也有一定程度的限制。
Jail 的組成, 如同 chroot 般, 首先需要一個目錄, 再視用途, 把必要的 應用程式放進去。以往在建 chroot 環境的時候, 傾向於只把必要的東西放 進去。但在建 jail 的時候, 反而傾向把完整的系統放進 jail 裡。除了已 經裝好系統的目錄之外, jail 還需要有自己的 hostname, 以及自己的 IP。
運行中的 jail 亦是系統的一部份, 共享各種硬體資源, 如 CPU time, memory, disk space, network bandwidth 等等。一般將提供 jail 運行的 主系統稱之為 host。一個空的 jail (不包含 ports) 大約要佔用 150 MB 左右的磁碟空間。日後依 jail 利用方式的不同, 空間的使用也會有很大的 差異。而 CPU time, memory, network bandwidth 方面, 則視 jail 內提 供的服務, 以及執行的應用程式而定。故一個 host 能提供多少 jails, 乃 是依硬體規格及實際負載而定, 系統管理者需依情況評估及調整。
Jail 適合用來做什麼?
一個 jail 幾乎可以被視為一台獨立的 server。因此一般 server 能做的事, jail 幾乎都能做。例如 web server, mail server, shell server, database server... 都是可以 "養" 在 jail 裡面的。
Jail 仍不適合用來做什麼?
Jail 的概念是隔離, 而不是分割, 也不是模擬。某些系統資源, 像是 System V IPC (message queues, shared memory, semaphores) 目前也不 在目前 jail 能隔離的範圍內。又如在檔案系統層次, 雖然和主系統隔離了, 但所使用的磁碟空間, 卻是沒辦法強制限定只能用多少。在 TCP/IP 層次, jail 被限定只能有一個 IP, 連 lo0 127.0.0.1 都沒有。因此, 像是防火 牆, 路由器等等工作, jail 是無法勝任的。又如 BBS, PostgreSQL server 等等, 會使用到 System V shared memory, semaphores 的服務, 也得小心 調整。
FreeBSD 5.3 的 jail 有什麼新奇功能?
Jail 自 FreeBSD 5.0 起逐一修正了許多大大小小的問題, 也新增了如 jls, jexec 等等系統工具。但要說到讓人感到耳目一新, 有全新的感受, 就非得推 FreeBSD 5.3 了! Devfs 有了給 jail 專用的規則, df 能做到不 顯示 host 上其它的 mount point, 且 /etc/rc.d 已完全支援 jail! 如今 啟動 jail 時十分的乾淨, 沒有任何看了心煩的訊息。
安裝 jail
首先, 要把 jail 所需的資源先規劃好。假設 IP, hostname, path 如下:
jail IP: 127.0.0.115
jail hostname: conair
jail path: /usr/jails/conair
以上假設, 是每個 FreeBSD 系統都可以設定的。但在實際的應用上, 則依 客觀條件的不同而有所不同。 接著來把系統裝進去 jail 要使用的目錄。在安裝之前, 要先 buildworld。 這要花一點時間, 視機器的速度而定。
# cd /usr/src; make buildworld
Buildworld 做完後, 要 installworld 到上面規劃的目錄去, 還要把 jail 的 /etc 做出來。這些事有些瑣碎, 也有點危險 (不小心少打幾個字元, 會 reset 主系統的 /etc), 故建議自行寫 shell script 處理。下面是個簡單的範例: newjail.sh
------------------ newjail.sh -------------------------
#!/bin/sh
if [ -z $1 ]; then
echo "specify dest dir such as $0 /some/dir"
exit
fi
if [ ! -d $1 ]; then
echo "dest dir $1 does not exist, mkdir first"
exit
fi
echo "Install a new jail into $1"
D=$1
cd /usr/src
make installworld DESTDIR=$D
cd etc
make distribution DESTDIR=$D
cd $D/etc
ln -sf /var/named/etc/namedb
cd $D
ln -sf dev/null kernel
------------------ newjail.sh -------------------------
我把它放在 /usr/local/sbin/newjail
# cp newjail.sh /usr/local/sbin/newjail
# chmod +x /usr/local/sbin/newjail
安裝 jail base system
# mkdir -p /usr/jails/conair
# /usr/local/sbin/newjail /usr/jails/conair
接著要在主系統上設一個 IP 給它。
# ifconfig lo0 inet 127.0.0.115/32 alias
該有的都有了, 來試試 jail 的 "single user mode"
# jail /usr/jails/conair conair 127.0.0.115 /bin/sh
一些常用指令都可以拿來試試看, 例如 ps, df, top, sockstat, netstat 等等。可以再開一個窗同時比較看看, jail 內和 jail 外有什麼不一樣。

[轉錄]FreeBSD Tinderbox (上)

ublished by Gea-Suan Linat July 17, 2006 in , , , and .
這篇主要是給 FreeBSD Ports maintainer/committer 看的,如果你看不懂,呃… 到 #bsdchat 上問看看吧 :p

Tinderbox (在 misc/tinderbox 裡) 主要是拿來測試 port 是否可以正常的編出來,順便產生 package。網頁在 http://tinderbox.marcuscom.com/ 這,其中的 README 寫得蠻清楚的,建議仔細看。

Tinderbox 的好處在於他會產生一個 chroot 的環境 (在 Tinderbox 官方說明文件裡的 “Jail” 指的是 chroot 的環境,下面提到 Jail 都是指這個,而非 FreeBSD 的 jail),然後在裡面進行編譯的工作,這可以測試在系統什麼都沒有裝的情況下是否能正確編譯。主要是要看有沒有漏設 *_DEPENDS。

另外,Tinderbox 可以在 6.x 的機器上建立出 5.x 甚至 4.x 的 Jail 並進行編譯,這使得以往要在多台機器上測試的情況可以在一台機器上測試完畢。

再來,Tinderbox 可以對每個 Jail/PortsTree/Build 自訂環境變數 (關於什麼是 PortsTree 與 Build,在後面會提到),於是你可以利用這些東西建立出設定不同的 Perl version (4.11 系統裡的 5.00503,或是 5.6.x,或是目前建議用的 5.8.x),這對於 p5-* 的 maintainer 相當方便。

接下來開始講 misc/tinderbox 的安裝,Tinderbox 需要一個 Database,裝 mysql 4.1 之後的版本,接著裝 databases/p5-DBI 與 databases/p5-DBD-mysql{41,50,51,…},然後才裝 Tinderbox。

裝好後東西都丟在 /usr/local/tinderbox 下,原則上不動這個目錄,直接找個夠大的空間 cp -R 過去,像我自己是丟在 /da1/tb 下。

丟進去以後改 /da1/tb/scripts/tinderbox.ph,改前面幾行的設定就好,重點在於第一行的路徑要設對就可以了。改好後跑 cd /da1/tb/scripts && ./tc init,然後看看 /da1/tb 下面是不是多了一堆目錄。

接著建立 Jail,挑你想要測試的環境建立:

#
# 4.11-RELEASE
./create Jail -j 4.11 -d “FreeBSD 4.11-RELEASE” -t RELENG_4_11 -u CVSUP -H cvsup.tw.freebsd.org
#
# 4-STABLE
./create Jail -j 4 -d “FreeBSD 4-STABLE” -t RELENG_4 -u CVSUP -H cvsup.tw.freebsd.org
#
# 5.5-RELEASE
./create Jail -j 5.5 -d “FreeBSD 5.5-RELEASE” -t RELENG_5_5 -u CVSUP -H cvsup.tw.freebsd.org
#
# 5-STABLE
./create Jail -j 5 -d “FreeBSD 5-STABLE” -t RELENG_5 -u CVSUP -H cvsup.tw.freebsd.org
#
# 6.0-RELEASE
./create Jail -j 6.0 -d “FreeBSD 6.0-RELEASE” -t RELENG_6_0 -u CVSUP -H cvsup.tw.freebsd.org
#
# 6.1-RELEASE
./create Jail -j 6.1 -d “FreeBSD 6.1-RELEASE” -t RELENG_6_1 -u CVSUP -H cvsup.tw.freebsd.org
#
# 6-STABLE
./create Jail -j 6 -d “FreeBSD 6-STABLE” -t RELENG_6 -u CVSUP -H cvsup.tw.freebsd.org

執行後他會跑 cvsup 將指定的版本抓回來,然後 make world 將 Jail 建立出來。

portupgrade under jail

使用上一篇的host 共用 ports 的方法
portupgrade 升級軟體,你會發現因為沒有辦法寫入 /usr/ports (要更新 INDEX.db) 而失敗
我發現這個問題可以想辦法避開寫入 /usr/ports 就可以了,在 portupgrade 的 manpage 裡面有提到 PORTS_DBDIR 這個變數
PORTS_DBDIR Alternative location for the ports database files.
Default is ``$PORTSDIR''.於
是只要在 /usr/local/etc/pkgtools.conf 裡面設定:
ENV['PORTS_DBDIR'] ||= '/tmp'
指到 /tmp 就可以解決了。

Jail installtion

1.enviroment Setting
buildworld
make installworld DESTDIR=/da1/jail0
make distribution DESTDIR=/da1/jail0
2.add users
改 /da1/jail0/etc/master.passwd
pwd_mkdb -d /da1/jail0/etc /da1/jail0/etc/master.passwd (rebuild password)
add your home dir
3. edit rc.conf
ifconfig_fxp1_alias0="inet 192.168.1.10/24"
jail_enable="YES"
jail_list="testbase"
jail_testbase_devfs_enable="YES"
jail_testbase_devfs_ruleset="devfsrules_jail"
jail_testbase_exec="/bin/sh /etc/rc"
jail_testbase_hostname="testbase"
jail_testbase_ip="192.168.1.10"
jail_testbase_rootdir="/da1/jail0"
pf_enable="YES"
4.pf setting
nat on fxp0 from 192.168.1.0/24 to any -> (fxp0)
nat on fxp1 from 192.168.1.0/24 to any -> (fxp0)
5. other setting ex.resolv.conf , hostname
6.start jail
/etc/rc.d/jail start
7.generate ssh key 請自己去 /etc/rc.d/sshd 翻
ps. 如果要跟 host 共用 ports directory,可以用 mount_nullfs 以 read-only 掛上來 (security issue),然後修改 /etc/make.conf,把本來會寫入的部分都改到 /tmp 下:
DISTDIR= /tmp/distfiles
WRKDIRPREFIX= /tmp/WRKDIR
ps2.
像是 jail 弄好之後發現沒有帳號可以登入,在 jail host 上:
cd /jail_path/etc
vim master.passwd
pwd_mkdb -d . master.passwd
其實也可以這樣:
vipw -d /jail_path/etc
不知道現在的書還會不會教這些…

2007年7月19日 星期四

[轉錄]FreeBSD ports send-pr 初體驗

Published by Hubert at 5:57 pm under FreeBSD

剛好在實驗室有幾個 library 很常用,不外乎 jrtplib, ortp, osip, eXosip。可是 ports 裡的 jrtplib 是 3.1.0,大概是 2004 年的版本,所以我就想來試試看吧,把他送進 ports 之後,要升級或者是移除都方便許多……

所以我先找到 chinsan 長輩在 tw.bbs.comp.386bsd 發表的這篇,也參考了一下 FreeBSD Porter’s Handbook,還有 rafan 及 clsung 長輩的文章。

我的流程大概是這樣:

ports 施工:

# fetch -o /usr/ports/distfiles source-url
# cd /usr/ports/
# cp -r port-name port-name.orig
# vim Makefile
# vim pkg-desc
# make makesum
# 不幸的話,在 files 裡面加入 patch 檔

產生 pkg-plist,你可以參考 Automated package list creation

# mkdir /var/tmp/port-name
# mtree -U -f /etc/mtree/BSD.local.dist -d -e -p /var/tmp/port-name
# make depends PREFIX=/var/tmp/port-name
# make install PREFIX=/var/tmp/port-name
# (cd /var/tmp/port-name && find -d * \! -type d) | sort > pkg-plist

# vim pkg-plist
(不見得他產生的東西都會正確,例如:有時候你會希望用變數取代絕對路徑、有時候你想把某些東西拔掉)

施工完成的測試:

FreeBSD Porter’s Handbook 的建議順序:

1. make install
2. make package
3. make deinstall
4. pkg_add package-name
5. make deinstall
6 .make reinstall
7. make package

除此外,你可以用 devel/portlint 來做測試。

send-pr:

我這邊是偷懶用 devel/porttools 來送。porttools 裝好之後,還是不外乎用 port test 測試看看,port diff 看一下結果,如果都沒有問題的話,就直接用 port sumbit 送出去了。那些欄位的要求,我想 chinsan 長輩的文件寫得很清楚歐 :p

你可以編輯 .porttools 方便你用 devel/porttools 處理 port。

EMAIL=”foo@bar.com”
FULLNAME=”Yi-Huan Chan”
ORGANIZATION=”"
BUILDROOT=”/tmp”
ARCHIVE_DIR=”"
DIFF_MODE=”.orig”
DIFF_VIEWER=”more”
PORTLINT_FLAGS=”abct”

你可以發現我的 DIFF_MODE 設定為 “.orig”,那也和我一開始取名的方式有關,你可以依照自己的需求改變這個參數。

port submit 之後就等著去信箱領取號碼牌了,像是我之前處理的某兩個……

http://www.freebsd.org/cgi/query-pr.cgi?pr=95461
http://www.freebsd.org/cgi/query-pr.cgi?pr=95534

然後看有沒有好心人幫你送上去,處理完之後,你就可以看到你處理過的 port 出現在 ports tree 裡面了。

[文件] send-pr 的基本介紹

發信人: chinsan.bbs@bbs.ilc.edu.tw (我只是小小新手唷), 看板: FreeBSD
標 題: [文件] send-pr 的基本介紹
發信站: 山水蘭陽 (Sat Dec 3 23:01:26 2005)
轉信站: ptt!ctu-reader!news.nctu!ilcbbs


====== 授權方式 ======
姓名標示-非商業性-相同方式分享 2.5 (Attribution-NonCommercial-ShareAlike 2.5)
http://creativecommons.org/licenses/by-nc-sa/2.5/


====== 前言 ======
感謝 nung 大長輩在 MSN 上再次提醒了我的欠稿 XD
(本來答應要寫份關於 send-pr 的文件,結果寫的蠻簡陋)

如果沒有他的提醒,我可能一直都沒丟出這份文件..
此外,再次感謝他對我在 LDAP 上的教導 :)


====== send-pr 簡介 ======
/usr/bin/send-pr 這支 shell script在 *BSD 環境中相當好用,怎麼說呢?
它的應用範圍:
就 ports 而言,可以透過 send-pr 將做好的新 port 、送 patch
或是問題狀況回報總部。
當然囉.. www, docs, i386, ia64 等不同領域的問題也都可以透過 send-pr 來完成。

另外,還有其他方式的 send-pr
www介面的 send-pr
http://www.freebsd.org/send-pr.html

圖形介面的 send-pr
sysutils/gtk-send-pr

當然,也可以複製一份 shell script,然後修改成自己想要的方式。


====== send-pr 使用 ======
send-pr 會先用你的 $EDITOR 進入PR樣本來編輯,通常會有下面這樣

(略過前面一堆東西,先從 header 介紹起)
To: FreeBSD-gnats-submit@freebsd.org

From: chinsan
Reply-To: chinsan
通常發信的 From 跟 Reply-To 都填一樣就好,
前面是名字,後面先加空白,再把 <> 括號內填入可收信的 e-mail
(這裡純舉例,不要真的填 chinsan =.=!)
Cc:
如果 port 有 maintainer 的話,則順便這邊填上他的 email
也可以用 send-pr -c 該maintainer的 e-mail

X-send-pr-version: 3.113
X-GNATS-Notify:

(以下開始進入 send-pr 的 body)
>Submitter-Id: current-users
>Originator: chinsan
^^^^^^^ 填自己名字或全名。

>Organization:
看要不要填『單位』,有填沒填無所謂
也可以設定 $ORGANIZATION 省得每次填 send-pr 要重填一次
另外,
1. 用 <> 括號括起來的文字都是那欄資料的描述文字,
2. 真正要寫的部分,不要寫在 <> 括號內,
<> 括號內的字只是說明給自己看而已
3. <> 括號跟裡面的文字都可以砍掉,或不砍都可以
4. 通常可不可以填多行會有註明 (multiple lines)
而 (one line) 就是只能寫一行。
5. 以下所有出現 <> 括號的地方都是該欄的說明文字,
請不要把字填在 <> 括號內。

>Confidential: no
^^ 通常用 no 就可以了,也就是公開的

註:
除非你找到重大漏洞,在該重大漏洞獲得解決前,
有需要用到"保密",以免他人一起遭殃

>Synopsis:
這邊就是該問題報告的『標題』,
標題要下得簡潔有力,並且請填 1 行就好。
似乎很多人都會先看這邊寫什麼,如果亂填一通或是文不對題
那就會被人連看都不看就 close 掉。

通常像是 ports 的話,Synopsis 會以類似下面的命名規則:
[性質] 分類/該 port 名稱: 簡潔描述本 PR 內容、目的
性質:通常有 [NEW PORT]、[PATCH]、[UPDATE]、[MAINTAINER]等等
分類:該 port 位於 /usr/ports 內的分類目錄名稱,
比如 gcin 位於 /usr/ports/chinese/gcin ,
所以就是 chinese

>Severity: 請在 non-critical 或 serious 或 critical 三者選一
看問題嚴重性,通常都是 non-critical,
如果不嚴重卻填很緊急(critical),那就蠻 xxoo...

>Priority: 請在 low 或 medium 或 high 三者選一
問題的處理態度是否需要優先或普通或不急慢慢來,
通常無關 security 的小 bug、update 填 low 就好。

>Category: 問題有下面這幾種分類:
advocacy, alpha, amd64, bin, conf, docs, gnu, i386, ia64,
java, kern, misc, ports, powerpc, sparc64, standards,
threads, www
通常 ports 的問題就填 ports 就好,
www 類的就填 www。kernel 類的填 kern,自己找適合的問題歸類就好

>Class: <[sw-bug|doc-bug|change-request|update|maintainer-updae]>
以 ports 方面的 PR 為例:ports 的安裝問題通常填 sw-bug
升級 update
新增/移除 change-request
port maintainer 自己提的就填 maintainer-update

>Release: FreeBSD 4.11-STABLE i386
這邊是 send-pr 自動幫你產生的(uname -rsm),不用改

>Environment:
System: FreeBSD bbs.ilc.edu.tw 4.11-STABLE FreeBSD 4.11-STABLE #0: Sat Jan 29
這邊也是會自動抓 uname -a 的訊息,
如果要補充使用環境也可以在這邊填(可多行)

>Description:
請精準描述問題狀況,把問題講清楚、說明白,並把相關所有出現的訊息附上

>How-To-Repeat:
這邊附上如何讓問題重新產生(操作程序、執行動作),也可把相關疑似有問題
的程式碼貼出來

>Fix:
如果知道怎麼修正的話,就在這邊可填上說明或程式碼。
不知道就請跳過。
如果有 patch 的話,請用 attatchment 附檔方式,
也就是 send-pr -a 你放patch的地方,這樣 send-pr 的 Fix: 這區
就會幫你弄好了

* * *
FreBSD PR 的 feedback 期限是 1 個月
maintainer feedback 期限是 2 週
reply,followup 要順便 CC 給 bug-followup@freebsd.org

* * *

此外如果不太會傳統的 send-pr 或者機器 policy 不開 MTA
也有網頁式介面 http://www.freebsd.org/send-pr.html
不過若用網頁回報方式,它不會認 TAB 跟 spacing 的區別而都弄成 spacing
如果堅持要用 Web 來送 code 的話,那麼建議先壓成檔案,然後附上可取得該檔的 URL
還有,最下方有個防止惡搞機器人的簡易確認機制。


* * *

send-pr 之後就會在你填的 Originator 那欄的 Email Address 收到確認信
會有如下資料,告知 GNAT 已經收到了,而你的 PR 編號為 ports/78996
可以透過信中 URL 來察看狀態

來源: FreeBSD-gnats-submit@FreeBSD.org
收信: chinsan
日期: Fri, 18 Mar 2005 20:10:02 GMT
標題: Re: ports/78996: [MAINTAINER] chinese/gcin: update to 0.8.9

Thank you very much for your problem report.
It has the internal identification `ports/78996'.
The individual assigned to look at your
report is: freebsd-ports-bugs.

You can access the state of your problem report at any time
via this link:

http://www.freebsd.org/cgi/query-pr.cgi?pr=78996

>Category: ports
>Responsible: freebsd-ports-bugs
>Synopsis: [MAINTAINER] chinese/gcin: update to 0.8.9
>Arrival-Date: Fri Mar 18 20:10:02 GMT 2005


====== send-pr 補充事宜 ======
FreBSD PR 的 feedback 期限是 1 個月
maintainer feedback 期限是 2 週
reply,followup 要順便 CC 給 bug-followup@freebsd.org


====== send-pr 的另外一種運用方式 : send-pr + ssmtp ======

如果機器沒反向DNS解析的話...該怎麼辦呢?

因為垃圾郵件太多,FreeBSD 的 mailing list 主機做了些限制:
一定要從可以做反向DNS解析(具 RDNS record)的機器發出的信才接收。

這部分請參考 dryice 的 send-pr + ssmtp 解法:
http://www.douzhe.com/docs/jh/5/231360.html


====== patch檔 跟 new port 的 shar 檔 如何產生? ======

- diff/patch 篇: 大致以 "diff -ruN 舊 新"產生

- shar 的時機: 通常是 new port (要新增port)才會用到的
指令類似:
shar `find 該port的目錄 -print` > /path/to/your.shar

我自己作法通常都是像這樣:
shar `find dokuwiki -print` > ~/dokuwiki.shar
send-pr -a ~/dokuwiki.shar -c 長輩的e-mail

關於 diff/patch 以及 shar ,將在日後的 Porter Handbook 中譯有進一步解說


==
以上是我之前 send-pr 的經驗啦 :p
可參考 http://tinyurl.com/6j2kg
aka http://www.freebsd.org/doc/en_US.ISO8859-1/articles/
problem-reports/article.html

不知道有沒有其他長輩要補充? :Q


--
靜中見真境,淡中識本然
--
◢◣ - ● -
◢██◣◢◣ ` Origin: 宜蘭資教.山水蘭陽 telnet://yilan.twbbs.org
~~ ﹌ ~﹌ ﹉ From : 220-135-110-151.HINET-IP.hinet.net