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 外有什麼不一樣。

Simple Optimization for PHP and MySQL

Simple Optimization for PHP and MySQL
Saturday April 29 2006 03:23

Here is a list of a few very simple tips for optimizing your php/mysql applications. Keep these in mind while developing.


MySQL

MySQL is interpreted from right to left so you should put the most significant limiters as far to the right as possible.


Only select fields you need, instead of selecting * (everything).


Don't put things that changes very rarely in the database, instead put it in a global array in some include file.


Use indexes on the columns in the WHERE clause and on the columns you want to ORDER BY.


Indexes are great if you search the table alot, but it slows down insertion.


Use the EXPLAIN command to analyze your indexes.


If you only want one line as a result from the database you should always use LIMIT 1. This way mysql stops searching when it finds the first line instead of continuing through the whole database, only to find that there weren't any more lines that matched the query.


If you use $line = mysql_fetch_array($result) you'll get two ways of accessing the columns, $line[0] and $line['columnname']. If you only use the $line['columnname'] you should use $line = mysql_fetch_assoc($result) instead, then there will not be any $line[int index] array.


Sometimes mysql_free_result() end up wasting more memory than it saves. Check the difference with memory_get_usage().


Don't ask the database for the same stuff over and over again, save the result.


Use NOT NULL as default value as much as you can, it speeds up execution and saves one bit.


Use datatypes that fits your data, not too large. For example, INT can hold values up to 4294967295 unsigned, which is often unnecessarily big. Use MEDIUMINT or SMALLINT where applicable.


Make use of the default values, only insert values that differs from the default values to speed up the insertion.





PHP:

Many code blocks might slow down the interpretation a little bit.





is faster than







Don't concatenate when you don't need to.

"SELECT id FROM tabell WHERE id = $_SESSION[id] LIMIT 1"

is faster than:

"SELECT id FROM tabell WHERE id = ".$_SESSION['id']." LIMIT 1"


Surrounding your string by ' instead of " will make things interpret a little faster since php looks for variables inside "..." but not inside '...'. Of course you can only do this when you don't need to have variables in the string.


The previous item makes it all boil down to

'SELECT id FROM tabell WHERE id =
'.$_SESSION['id'].' LIMIT 1'

as the fastest way of concatenating querys.




When echoing strings it's faster to separate them by comma instead of dot.

echo "echoing ",$variable," something";

Note: This only works with echo, which is a function that can take several strings as arguments.



echo is faster than print.


Set the maxvalue for your for-loops before and not in the loop.

$maxvalue = 100/10;
for($i=0; $i<$maxvalue; $i++){
// Some code
}


is faster than:

for($i=0; $i<100/10; $i++){
// Some code
}


because the value is calculated once instead of ten times.



Unset your variables to free memory, especially large arrays.



If possible it's of course always better to generate static html pages every time something is updated or as often as an update might be relevant instead of querying the database every time.

Choosing right data type
http://dev.mysql.com/doc/refman/5.0/en/data-size.html
Optimizing Queries with EXPLAIN
http://dev.mysql.com/doc/refman/5.0/en/explain.html
Other Optimization Tips http://dev.mysql.com/doc/refman/5.0/en/tips.html
A HOWTO on Optimizing PHP http://phplens.com/lens/php-book/optimizing-debugging-php.php

[轉錄]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
不知道現在的書還會不會教這些…

[轉錄]为FreeBSD中的Firefox安装Flash插件

要在FreeBSD中為Firefox安裝Flash插件需要以下步驟:

a) install www/linuxpluginwrapper

b) install www/linux-flashplugin7

c) cp /usr/local/share/examples/linuxpluginwrapper/libmap.conf-FreeBSD6 /etc/libmap.conf

d) ln -s /usr/local/lib/npapi/linux-flashplugin/* /usr/local/lib/firefox/plugins/

[轉錄]功能強悍的 Window Manager - IceWM!

Tetralet | 11 二月, 2006 15:19

雖然 GNU/Linux 一直給人生人勿近的印象,但別就這樣以為在 GNU/Linux 上就沒有好用的圖形介面。事實上,如果不要抱持著太深的偏見,GNU/Linux 的桌面環境只要稍加調校就能夠讓人驚豔不已。


X Window System 簡介

X Window System 是在 Linux 上,類似 Microsoft Windows 的一個圖型介面環境,它可以簡稱為 X Window、X11 或 X,其實它的年紀可是比 Microsoft Windows 還大呢!

在 X Window System 的架構裡,X Client 是那些在 X 上執行的應用程式,它會呼叫 Xlib,Xlib 使用 X Protocol 和 X Server 溝通。而 X Server 則是負責控制硬體,依 X Client 的請求而將結果顯示在使用者螢幕上,因此如果將 X Server 視為本機的顯示服務程式也不為過。而夾在中間的則是 Window Manager,Window Manager 管理包含視窗裝飾在內的許多 X Resources,比如說它會決定視窗的位置、管理視窗的操作及視窗的大小、決定視窗邊框的樣式及一些使用者和視窗的互動方式等等。

註一: 以上 Window Manager 的說明文字經過 Jserv 前輩的指正。感謝!
註二: Jserv 前輩表示他會寫一篇釐清 Window Manager 觀念的文章。敬請期待!

IceWM 簡介

IceWM 是一個非常輕巧快速且功能齊全的 Window Manager,在外觀及操作上極為類似 Motif、OS/2 及 Microsoft Windows。如果您受夠了肥大的 KDE 或是 GNOME,那麼 IceWM 可能會是您的最佳選擇。

安裝 IceWM

在 Debian GNU/Linux 裡安裝 IceWM 絕非難事,只要一行指令就搞定了:

apt-get install icewm

如果您同時在您的系統上安裝了多個 Window Manager,那麼請修改系統的設定,讓 X Window 啟動時呼叫 IceWM:

update-alternatives --config x-session-manager
update-alternatives --config x-window-manager

或者您也可以在您的 ~/.xinirc 中自行指定。例:

#!/bin/sh
# $Xorg: xinitrc.cpp,v 1.3 2000/08/17 19:54:30 cpqbld Exp $

# /etc/X11/xinit/xinitrc
#
# global xinitrc file, used by all X sessions started by xinit (startx)

xset +dpms
xset dpms 300 480 600

export LC_CTYPE=zh_TW.UTF-8
export LC_MESSAGES=zh_TW.UTF-8
export XMODIFIERS="@im=gcin"
export GTK_IM_MODULE=gcin
/usr/bin/gcin &

icewm-session

飛快!

IceWM 給人的第一印象就是:快!快!快!因為它的程式碼不大,並且對於系統資源也要求不高,官方網站說只要 X 可以跑,IceWM 就可以跑,就算是是 386 機器也行。在此可以約略得知 IceWM 是如何的輕巧快速了。

相容性

因為 IceWM 本身預設上並不是專為其它 Desktop 環境所設計的,所以它的相容性極佳,不管是 KDE 或 GNOME 多可以在 IceWM 上執行無誤。IceWM 同時也支援了 Desklet(系統工具匣)、透明底圖... 等等常見的功能,所以有不少人乾脆捨 KDE/GNOME,直接拿 IceWM 來當桌面使用了。

簡易的操作介面

由於 IceWM 在外觀及操作上刻意模仿 Motif、OS/2 及 Microsoft Windows,所以由 Microsoft Windows 跳槽過來的人們在操作 IceWM 時就免於重新適應之苦了。

比如說,Microsoft 上的【程式集列表】、【快速啟動列】、【系統工具列】、【小時鐘】等等,在 IceWM 上都可以看到。另外,像是在應用程式的標題列上點兩下是視窗放大,再點兩下則是還原,這些操作方式在 IceWM 裡都可以見到。

另外,修改您的 ~/.icewm/preferences 如下:

# Support win95 keyboard keys (Penguin/Meta/Win_L,R shows menu)
Win95Keys=1 # 0/1

# Auto hide task bar after delay
TaskBarAutoHide=1 # 0/1

那麼,在 IceWM 裡按下【Win】這個鍵時,下方的系統工具列就會跳出來,而等上一定的時間後它又會縮回去,而這和 Microsoft Windows 的操作也是極為類似的。

虛擬桌面

在預設上,IceWM 會啟動 4 個虛擬桌面,這對於習慣同時開啟多個應用程式的人們可以說是難得的福音。以筆者為例,個人喜歡把日常事務擺在第一個桌面裡、root 的工作擺在第二個桌面,第三個桌面擺的則是遠端的 SSH、rdesktop、xvncviewer 之類的遠端操作環境,第四個桌面擺的則是一些在背景執行的程式,像是 XMMS 或是用來編譯程式的 chroot 環境等等。這樣的分門別類後將有助於增加工作效率。像是在切換至第二個桌面時,直覺上就知道這個桌面裡擺的全是以 root 權限執行的程式,當然會更加小心謹慎得操作,這樣多多少少能避免一些無心之過所導致的災難性後果。

IceWM 的虛擬桌面

您可以修改您的 ~/.icewm/preferences:

WorkspaceNames=" 1 ", " 2 ", " 3 ", " 4 "

來自訂虛擬桌面的名稱及數量。

另外,請同時修改您的 ~/.icewm/preferences 如下:(因為它和 XCIN 的快捷鍵重覆了)

KeySysWorkspace1="Super+F1"
KeySysWorkspace2="Super+F2"
KeySysWorkspace3="Super+F3"
KeySysWorkspace4="Super+F4"

之後,【Win】+【F1】就會直接跳至第一個虛擬桌面,【Win】+【F2】就會直接跳至第二個虛擬桌面... 同時,您還可以使用【Ctrl】+【Alt】+【←】和【Ctrl】+【Alt】+【→】直接切換至 上/下一個虛擬桌面。或是按下【Ctrl】+【Alt】+【Shift】+【←】和【Ctrl】+【Alt】+【Shift】+【→】直接將應用程式移至上/下 一個虛擬桌面。或是按下【Ctrl】+【Alt】+【Shift】+【1】直接將應用程式移至第一個虛擬桌面。在操作 IceWM 時這些快捷鍵將會是很方便的小技巧。

將視窗『釘』起來

在操作 GIMP 時,會不會覺得它的工具視窗常常被正在操作中的前景視窗蓋住實在不怎麼好用?在 IceWM 裡,您可以將視窗『釘』在別的視窗之上,它就永遠不會被別的視窗蓋住了:

把 GIMP『釘』在其它視窗之上

其它 Linux 桌面的特性

除了虛擬桌面之外,一些 Linux 桌面常見的特性,像是:

*

將視窗捲起(【Alt】+【F12】)
*

隱藏視窗(【Alt】+【Shift】+【F12】)
*

全螢幕顯示(【Alt】+【F11】),當應用程式不支援全螢幕顯示時這可是超好用的。
*

將所有視窗縮至工具列(【Alt】+【Shift】+【F9】)
*

顯示桌面(【Alt】+【Ctrl】+【d】)

等等,都可以在 IceWM 裡找到。而這些快捷鍵都可以在 ~/.icewm/preferences 中加以修改:

KeyWinRollup="Alt+F12"
KeyWinHide="Alt+Shift+F12"
KeyWinFullscreen="Alt+F11"
KeySysMinimizeAll="Alt+Shift+F9"
KeySysShowDesktop="Alt+Ctrl+d"

快捷鍵

IceWM 還有一個讓人津津樂道的優點,就是它使用了超多的快速鍵組合,幾乎可以取代滑鼠的所有動作,比如說:

*

【Alt】+【F4】= 關閉視窗
*

【Alt】+【F6】= 下一個視窗
*

【Alt】+【Shift】+【F6】= 上一個視窗
*

【Alt】+【F9】= 縮至最小
*

【Alt】+【F10】= 放至最大
*

【Alt】+【空白鍵】= 呼叫視窗選單
*

【Alt】+【Tab】= 顯示視窗列表並切換至下一個視窗
*

【Alt】+【Shift】+【Tab】= 顯示視窗列表並切換至上一個視窗
*

【Ctrl】+【Alt】+【Del】= 系統關機/登出/鎖定/重新啟動 IceWM 對話視窗
*

【Ctrl】+【Alt】+【Esc】= 視窗列表
*

【Ctrl】+【Alt】+【空白鍵】= 快速啟動。可以用來直接執行應用程式。

對於一些鍵盤快手而言,IceWM 提供的這些快捷鍵實在是非常方便!當然了,這些快捷鍵全都可以自訂,您可以在 ~/.icewm/preferences 依自己的喜好來任意指定這些快捷鍵組合。

自訂呼叫應用程式的快捷鍵

除了以上 IceWM 所內建的快捷鍵之外,您還可以在 ~/.icewm/keys 中自行指定呼叫應用程式的快捷鍵。比如說:

key "Super+t" x-terminal-emulator

那麼當您按下【Win】+【t】時,系統就會呼叫 x-terminal-emulator 這個應用程式了。

當然了,我們可以稍加變化:(請安裝 aumix 套件)

key "Super+Up" aumix -w +5
key "Super+Down" aumix -w -5
key "Super+Right" aumix -w +1
key "Super+Left" aumix -w -1

那麼我們就可以用【Win】+【↑】【↓】【←】【→】來直接控制音量大小了。

類似的手法:

key "Super+Prior" xmms -r
key "Super+Next" xmms -f
key "Super+Insert" xmms -t
key "Super+Delete" xmms -q

我們就可以用【Win】+【PageUp】【PageDown】來控制 XMMS 播放上一首、下一首,用【Win】+【Insert】來讓 XMMS 暫停/開始 播放,或是用【Win】+【Delete】來關閉 XMMS。

另外,我們還可以使用:(請安裝 xmacro 套件)

key "Menu" /bin/sh -c "echo -e "ButtonPress 2nButtonRelease 2n" | xmacroplay "$DISPLAY""

來用【Menu】這個鍵來模擬按下滑鼠中鍵貼上的動作。

其實只要花點心思,IceWM 的快捷鍵是可以千變萬化的!

系統工具列上的小圖示

IceWM 在系統工具列上預設就有【現在時間】、【即時 CPU 負載】、【網路即時流量】、【監看 POP、IMAP 的 E-mail】等小圖示,所以您只要一按下【Win】這個鍵,您就可以直接由系統工具列得知這些即時資訊:

IceWM 的系統工具列

當然了,如果您不喜歡這些圖示,您可以由 ~/.icewm/preferences 把這些功能關閉。如上圖中,就沒有【監看 POP、IMAP 的 E-mail】這個圖示。
在 X Window 上眾多的 Window Manager 中,還找不到幾個有這些貼心的功能的呢!

快速啟動列:

和 Microsoft Windows 類似的,IceWM 也有快速啟動列:

IceWM 的快速啟動列

方法是修改 ~/.icewm/toolbar 如下:

prog Mozilla mozilla /bin/sh -c 'LC_ALL=zh_TW.UTF-8 mozilla'
prog XTerm xterm crxvt-big5
prog Konqueror kde konqueror

這個檔案的格式為:

#
顯示名稱
圖示
指令
prog Mozilla mozilla /bin/sh -c 'LC_ALL=zh_TW.UTF-8 mozilla'

修改後按下【Ctrl】+【Alt】+【Del】重新啟動 IceWM 即可生效。

設定按下【Ctrl】+【Alt】+【Del】時所執行的命令

在 IceWM 裡,按下【Ctrl】+【Alt】+【Del】後,會出現以下視窗:

在 IceWM 裡按下【Ctrl】+【Alt】+【Del】時所出現的畫面

您必須在 ~/.icewm/preferences 中加以修改:

# Command to shutdown the system
ShutdownCommand="sudo /sbin/shutdown -h now"

# Command to reboot the system
RebootCommand="sudo /sbin/shutdown -r now"

# Command to lock display/screensaver
LockCommand="xlock"

並安裝設定好 sudo 及 xlockmore/xlockmore-gl 套件,這些按鈕才能有作用。

自訂佈景主題

IceWM 也可以讓您自訂佈景主題,您可以把您的佈景主題放到 ~/.icewm/themes 下,然後修改 ~/.icewm/preferences:

Theme="icedesert/default.theme"

其中的 icedesert 為您的佈景主題目錄。

在 IceWM 裡,您可以修改您的滑鼠遊標圖示、視窗標題、視窗按鈕、邊框、桌面背景... 等等。請參考 IceWM Themes Howto page 來取得更多設定佈景主題的技巧。

易於設定:

IceWM 的設定檔十分簡易,大多只要看一下設定檔上的簡短說明就會設定了,所以雖然有不少的 IceWM 的圖形介面設定程式,但多數人還是選擇直接修改它的設定檔。像 IceWM 的官方網頁上面就寫:

如果您想尋找什麼選項的話,您可以直接查看 ~/.icewm/preferences。
它經過了精心的配置,您應該輕易得就可以找到您所尋找的東西-
比如說,您想改變一些 quickswitch 選項,只要試著在偏好檔尋找 "QuickSwitch" 即可。

IceWM 功能強大卻還能保持輕巧快速,加上又如此易於設定,實在是不可多得的 Window Manager!推薦大家能試用看看!

Debian_Desktop :: 迴響 (9) :: 靜態連結網址 :: 引用 (0)

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