project patch

diff 和patch是在opensource project常常用到的工具,這裡介紹一下流程和用法

* 建立project

myproject
-> config -> address.inc
-> main.c

* 修改project

> cp -rfv myproject myproject.orig
> cd myproject (開始進行修改)

* 建立差異檔 use diff

> cd .. (離開myproject目錄,此時可看到myproject 與myproject.orig兩目錄同時存在)

此時分辨一下 myproject 是修改完,所以是新的,而myproject.orig則是舊的

> diff -urN myproject.orig myproject > myproject.patch (注意,是從舊到新,不能寫反)
> cat myproject.patch 看一下內容
diff -urN myproject.orig/doc/README myproject/doc/README
--- myproject.orig/doc/README 1970-01-01 08:00:00.000000000 +0800
+++ myproject/doc/README 2011-11-03 18:19:15.000000000 +0800
@@ -0,0 +1 @@
+this is a diff,patch test
diff -urN myproject.orig/main.c myproject/main.c
--- myproject.orig/main.c 2011-11-03 18:18:25.000000000 +0800
+++ myproject/main.c 2011-11-03 18:18:41.000000000 +0800
@@ -1,6 +1,8 @@
#include
+#include

int main()
{
puts("hello world");
+ return 0;
}


* 將myproject.patch分享給別人讓別人套用更新

當其實使用者拿到此patch檔的時候,他將要為他的myproject打上更新,因此在目錄下會存在
home
-> myproject/
-> myproject.patch

與我們建新patch時相同的目錄結構

* 打上myproject.patch更新

> patch -p0 < myproject.patch

* 注意

經過以上流程就已可以打上更新了,但是常常有人會失敗,可能的原因有目錄 錯誤或是-p?路徑不正確,建議使用者可以看一下myproject.patch檔案內容

+++ myproject/doc/README 2011-11-03 18:19:15.000000000 +0800

我們要將舊的myproject更新成新的,因此若要使用-p0的話那myproject.patch目錄下也要存在有一個叫myproject目錄,如此可以正確的打上patch

send-pr log

send-pr -a epdfview.patch

To: FreeBSD-gnats-submit@freebsd.org
From: Anati Chang
Reply-To: Anati Chang
Cc:
X-send-pr-version: 3.113
X-GNATS-Notify:


>Submitter-Id: current-users
>Originator: User &
>Organization:
>Confidential: no
>Synopsis: [PATCH] graphics/epdfview: fix wrong color
>Severity: non-critical
>Priority: low
>Category: ports
>Class: update
>Release: FreeBSD 8.2-STABLE i386
>Environment:
System: FreeBSD cse.tw 8.2-STABLE FreeBSD 8.2-STABLE #6: Wed Oct 5 11:51:25 CST 2011 gaod@cse.tw:/usr/obj/usr/src/sys/GENERIC i386



>Description:
PDF document will get wrong color, when poppler-glib update to 0.18.0.
apply this thread http://trac.emma-soft.com/epdfview/changeset/367
>How-To-Repeat:
apply this patch
>Fix:

快速建立 FreeBSD 無線網路連線

Quick Wireless Setup On FreeBSD

Scripting Language 語法對照表

寫過多種程式的人,如果不常常使用,一定常常會把語法格式寫錯,今天找到一個很好的網站,它整理了各種常用的scripting language並將它語言特性做了整理,方便查詢

http://hyperpolyglot.org/scripting

update desktop cache

在偶然的過程中,發現freebsd會有軟體安裝先後順序的問題,可能會發生檔案無法由某特定軟體開啟,但明明已經安裝了,另外又有可能某軟體升級了,但是圖示卻出不來,這都是因為部份軟體為了求快,而gtk會將這些資料做成cache方便取用,然而每個ports的管理者也許會忘記更新系統內的圖示或軟體對應的快取,因此有些時候自己手動來比較快。

* 更新軟體對應快取(針對.desktop檔案)主要產生mimeinfo.cache

# update-desktop-database (預設路徑為 /usr/local/share/applications系統路徑)
> update-desktop-database ~/.local/share/applications (更新使用者自己的.desktop檔案快取)

* 更新軟體對應圖示快取(針對軟體的icons)主要產生icon-theme.cache

# gtk-update-icon-cache -f /usr/share/icons/hicolor

Bind9 dns server

在bsd中如果要架設dns server是非常方便的事情,因為內建就有bind9,因此險只要經過一些動作就可以輕鬆架設dns,不過這裡不解釋dns的架構與學理的討論

通常dns最少都會有兩台為了防止查不到的情況,因此這裡以master/slave架構來介紹這兩台機器如何共同運作,假設機器有140.114.3.83與140.114.6.93兩台來說

* 140.114.3.83 master 設定bind9

# cd /etc/namedb/
# cp named.conf named.conf.back (先備份起來,免得改壞了)
# vim named.conf

// listen-on {127.0.0.1;}; (要註解掉,因為預設只允許本機查詢)
include "named.conf.my_config" (將自己做出來的設定檔用include方法加入)

# cd /etc/namedb/working/
# vim named.conf.my_config (因為在named.conf裡面有指定directory的關系所以要放在working目錄下才讀的到)

zone "arkbsd.org" {
type master;
file "master.arkbsd.org";
allow-transfer {
140.114.6.93; (允許的slave機器)
};
};

# cd /etc/namedb/working/
# vim master.arkbsd.org (開始要寫zone檔了)

$TTL 86400
@ IN SOA dns1.arkbsd.org. femc7488.gmail.com. (
2011052001 ; serial
8H ; refresh (8 hours)
2H ; retry (2 hours)
1W ; expire (1 week)
1D ; negative cache (1 day)
)
IN A 140.114.3.83 ; arkbsd.org 正解ip
IN NS dns1.arkbsd.org. ; master dns1
IN NS dns2.arkbsd.org. ; slave dns2
dns1 IN A 140.114.3.83 ; dns1.arkbsd.org 正解ip
dns2 IN A 140.114.6.93
www IN CNAME arkbsd.org. ; www.arkbsd.org為arkbsd.org的alias
ftp IN CNAME arkbsd.org.
aria IN A 220.134.30.214
tifa IN A 140.114.6.93
movie IN A 114.34.131.23
locker IN A 140.114.6.114


# echo 'named_enable="YES"' >> /etc/rc.conf
# /etc/rc.d/named start (之後可以看一下在/var/log/message中有沒有錯誤)

* 140.114.6.93 slave 設定bind9

# cd /etc/named/
# cp named.conf named.conf.back (一樣先備份)
# vim named.conf

// listen-on {127.0.0.1;}; (要註解掉,因為預設只允許本機查詢)
include "named.conf.my_config" (將自己做出來的設定檔用include方法加入)

# cd /etc/namedb/working/
# vim named.conf.my_config (因為在named.conf裡面有指定directory的關系所以要放在working目錄下才讀的到)

zone "arkbsd.org" {
type slave;
file "slave.arkbsd.org";
masters {
140.114.3.83;
};
};

在slave機器中不需要編輯slave.arkbsd.org的zone檔,因為它會由master來提供

# echo 'named_enable="YES"' >> /etc/rc.conf
# /etc/rc.d/named start (之後可以看一下在/var/log/message中有沒有錯誤)

* 設定完後的工作

當設定完當然要看看有沒有正常運作,我們可以透過dig這個命令來查看看是不是可以查的到
# dig arkbsd.org @127.0.0.1
# dig www.arkbsd.org @127.0.0.1
# dig -t ns arkbsd.org @127.0.0.1
# dig dns1.arkbsd.org @127.0.0.1
# dig dns2.arkbsd.org @127.0.0.1

另外如果正常運作的話 slave中的zone檔會自動透過同步路產生,也可以檢查一下是否存在
# cd /etc/named/working/ (看看在6.93那台上有沒有存在slave.arkbsd.org)

如果一切都正常的話,就可以將dns代管那邊改為自管,並將dns指向dns1, dns2
之後過一段時間我們可以使用
# dig arkbsd.org @168.95.1.1
查詢結果如果有正確指向我們要的機器的ip的話就代表成功了,如果簡單的dns只需要正解的功能,而反解的話需要上層的設定,除非自己有一個網段下的ip否則可以不用設

找出目錄下所有壞掉的symblic link

找出壞掉的s-link

find . -type l | perl -lne 'print if ! -e'

配合xargs 做刪除動作

find . -type l | perl -lne 'print if ! -e' | xargs rm -rf