2011年7月24日 星期日

關於 uptime 的一些小事

在 GNU/Linux 系統底下如果想要知道電腦開機後使用了多久的時間,可以直接打指令:
$ uptime
 22:35:06 up  6:26,  4 users,  load average: 0.00, 0.03, 0.05
或是利用 /proc/uptime 來取得資料:
$ cat /proc/uptime 
23282.04 41316.79
但是如果想要寫 C 程式來取得資料呢?
我找到一個在 <time.h> 裡面的函式 clock_gettime()
程式碼如下:
#include <stdio.h>
#include <time.h>

int main(int argc, char* argv[])
{
    struct timespec ts;
    if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
        printf("%ld.%ld\n", ts.tv_sec, ts.tv_nsec);
    }
    return 0;                                      
}
在編譯的時候要加上 -lrt 才能通過編譯
$ gcc -Wall -g -lrt uptime.c -o uptime
執行的結果
$ ./uptime 
23637.821285555
因為我想要在 XWindow 底下根據當下的開機時間,製造出新的 XKeyEvent 出來,而所有的 XEvent 都是使用毫秒的時間格式 (ex. 23637821),所以才去找出這個的函式來用。
詳細的使用說明可以看 manpage
$ man clock_gettime

2011年7月12日 星期二

使用 pbuilder-dist/cowbuilder-dist 協助編譯及打包 Debian package

在 Debian/Ubuntu 上面寫好程式並且打包成 Debian source package 之後,可以藉由 Launchpad 上的 PPA 服務來編譯打包成 Debian binary package 給 Ubuntu 的使用者使用,但是在 Debian 這邊目前還沒有像是 PPA 這樣的服務可以使用 (不過Debian 官方已經有計劃要做了),於是現在就只能使用 pbuilder/cowbuilder 這樣工具來建立一個乾境的 chroot 環境來編譯打包 Debian binary package 給 Debian 的使用者使用。

最近發現在 ubuntu-dev-tools 裡面有 pbuilder-dist/cowbuilder-dist 這樣方便的工具,可以透過幾個簡單的指令就完成複雜的動作,雖然它的名稱叫做 ubuntu-dev-tools 其實它也是存在 Debian 官方套件庫裡面可以直接安裝來使用。

例如在 Ubuntu 11.04 (amd64) 底下想要建立 Debian 6.0 squeeze (i386) 的 chroot 環境就可以使用以下的指令:
$ pbuilder-dist stable i386 create

接下來要利用這個環境編譯 Debian 6.0 squeeze (i386) 底下使用的 pcmanx-gtk2,所以要執行以下的指令:
$ pbuilder-dist stable i386 build pcmanx-gtk2_1.0-svn577-1~squeeze1.dsc

最後就可以在 ~/pbuilder/stable-i386_result/ 底下看到編譯好的 pcmanx-gtk2_1.0-svn577-1~squeeze1_i386.deb

當然上面的 stable 在 Ubuntu 底下可以代換成 natty,maverick,lucid,... (如果是要編譯打包 Ubuntu 發行套件) 或是 testing, unstable, experimental (如果是要編譯打包 Debian 發行套件);另外就是 i386 可以代換成 amd64 如果搭配 qemubuilder 也許還可以編譯打包出 arm, mipsel, ... 其它 CPU 架構底下的套件出來使用。

此次編譯出來給 Debian 6.0 squeeze i386/amd64 使用的 pcmanx-gtk2 放在 http://archive.sylee.org/deb/ 底下。

參考文件:https://wiki.ubuntu.com/PbuilderHowto