Kanru’s 探險日誌

當發現美好的事物時,所要做的第一件事,就是把它分享給所有人

Archive for October, 2008

devscripts 系列: mk-build-deps

leave comments »

devscripts 是給 Debian developer 用的一些好用工具的集合,今天要介紹的是 mk-build-deps

Debian distribution 中包含了許多預先編譯好的 deb 檔,通常我們只要 apt-get install 安裝即可,但是當我們需要修改編譯參數或是製作新版本的套件時,就會需要 apt-get source 取得 source package 自行編譯。要製作 deb 時會要求先安裝一些相依套件,通常是 libfoo-dev 等,此時可以用 apt-get build-dep 自動安裝相依套件。

麻煩的地方是,透過 apt-get build-dep 安裝的套件並不是因為跟任何套件有相依性才被安裝的,相等於直接 apt-get install,因此不會在你編譯完不需要的時候自動移除。如果時常要編一些東西的話,常常系統上會裝滿了許多 libxxx-dev 難以整理。有一個技巧就是利用 equivs 製作 metapackage ,把編譯需要的套件都包含進去,以後不需要了只要移除這個 metapackage 就可以把所有相依套件移除乾淨。

mk-build-deps 就是把這個技巧自動化的工具,使用範例如下:


% mk-build-deps network-manager-gnome
dh_testdir
dh_testroot
dh_clean -k
dh_testdir
dh_testroot
dh_install
dh_installdocs
dh_installchangelogs
dh_compress
dh_fixperms
dh_installdeb
dh_gencontrol
dh_md5sums
dh_builddeb
dpkg-deb: building package <code>network-manager-applet-build-deps' in</code>../network-manager-applet-build-deps_0.6.6-2_all.deb'.</p>

<p>The package has been created.
Attention, the package has been created in the current directory,
not in ".." as indicated by the message above!</p>

<p>% dpkg -f network-manager-applet-build-deps_0.6.6-2_all.deb depends
autotools-dev, cdbs, debhelper (>= 5.0.0), docbook-to-man, intltool,
libdbus-glib-1-dev (>= 0.60), libgconf2-dev, libglade2-dev, libglib2.0-dev
(>= 2.10), libgnome-keyring-dev, libgnome2-dev, libgnomeui-dev,
libgtk2.0-dev, libiw-dev (>= 27+28pre9), libnm-util-dev (>= 0.6.6),
libnotify-dev (>= 0.3.0), network-manager-dev (>= 0.6.6), pkg-config

而 Frank Lichtenheld 更整理了一個 apt repository 可以直接安裝已經製作好的 build-dep 套件!只要加入以下到 sources.list 即可:


deb http://sourcedeps.debian.net/ sid main contrib non-free

Written by Kanru Chen

October 4th, 2008 at 11:26 pm

Posted in Debian, Linux, 小工具, 爬網探險

Tagged with ,

Blog 爆炸

leave comments »

Blog 消失了兩天

損失了幾篇文章以及一些 comments,不過還好損失的文章都從 planet 找回來了 :)

comments 我就留在信箱裡吧

Written by Kanru Chen

October 4th, 2008 at 8:04 pm

Posted in 未分類

Display VCS info in prompts

with one comment

通常 VCS (Version Control System) 都會在工作目錄底下藏一些特殊目錄用來儲存資訊,如 .svn .git .hg 等,因此我們可以在 shell prompt 上動一些手腳,當我們進到 VCS 工作目錄時,自動顯示相關的訊息在 prompt 上。

而 zsh-beta 4.3.6-dev-0+20080921-1 內建了由 Frank Terbeck 開發的 vcs_info 子系統,可以自動偵測 bzr, cdv, CVS, darcs, git, hg, mtn, p4, svk, svn, tla 等多種 VCS,並設定相關的環境變數可以顯示在 prompt 上。

zsh prompt

我的 prompt 設定如下


    autoload -Uz vcs_info &amp;&amp; vcs_info
    zstyle ':vcs_info:<em>' actionformats \
    '%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{3}|%F{1}%a%F{5}]%f '
    zstyle ':vcs_info:</em>' formats       \
    '%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{5}]%f '
    zstyle ':vcs_info:(sv[nk]|bzr):<em>' branchformat '%b%F{1}:%F{3}%r'
    precmd () { vcs_info }
    EXITCODE="%(?..%?%1v )"
    JOBS="%(1j.%j .)"
    local BLUE="%{^[[1;34m%}"
    local RED="%{^[[1;31m%}"
    local GREEN="%{^[[1;32m%}"
    local CYAN="%{^[[1;36m%}"
    local YELLOW="%{^[[1;33m%}"
    local NO_COLOUR="%{^[[0m%}"
    PROMPT="${RED}${EXITCODE}${CYAN}${JOBS}${YELLOW}%</em> ${RED}%n${BLUE}@%m:${GREEN}%40&lt;...&lt;%B%~%b%&lt;&lt;"'${vcs_info_msg_0_}'"
    ${YELLOW}%# ${NO_COLOUR}"

詳細的設定請參閱 zshcontrib(3) GATHERING INFORMATION FROM VERSION CONTROL SYSTEMS

Written by Kanru Chen

October 4th, 2008 at 7:58 pm

Posted in 小工具, 爬網探險

Tagged with , , ,

跟螢幕玩 SM

leave comments »

這個 SM 是之前發現的小工具,全名是 screen message,不要想歪囉 ;-)

sm 是用來在螢幕上顯示顯示一段文字,並盡可能的塞滿整個螢幕,可以事先在 command line 指定好前景背景顏色與字型,還有旋轉方向。預設不加任何參數的話,會使用白底黑字與 Sans 字型,顯示一個笑臉如下:

sm

按一下 ESC 就可以把畫面清空,按任意鍵後可以開始輸入,如果打字夠快的話,說不定能來一段即興的高橋流演說?

sm

Written by Kanru Chen

October 4th, 2008 at 7:58 pm

Posted in 小工具, 爬網探險

Tagged with

Xorg 1.5 XInput Hotplug

leave comments »

之前寫過 Xorg 1.4 XInput Hotplug,提到 xorg, evdev 可以利用 hal 自動偵測硬體載入 driver 與設定參數,而即將 release 的 Xorg 1.5 又新增了一些可以在 hal policy 裡設定的參數:

  • input.x11_driver 可以設定這個 device 要使用的 driver,對應到 xorg.conf 的 Driver 選項
  • input.x11_options.

如今我的 /etc/hal/fdi/policy/10-x11-input.fdi 長這樣:


<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
  <device>
      <match key="info.capabilities" contains="input.mouse">
          <merge key="input.x11_driver" type="string">mouse</merge>
          <match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"
              string="Linux">
              <merge key="input.x11_driver" type="string">evdev</merge>
          </match>
      </match></p>

<pre><code>&lt;match key="info.capabilities" contains="input.keys"&gt;
    &lt;merge key="input.x11_options.XkbRules" type="string"&gt;base&lt;/merge&gt;
    &lt;!-- If we're using Linux, we use evdev by default (falling back to
    keyboard otherwise). --&gt;
    &lt;merge key="input.x11_driver" type="string"&gt;keyboard&lt;/merge&gt;
    &lt;merge key="input.x11_options.XkbModel" type="string"&gt;pc105&lt;/merge&gt;
    &lt;match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"
        string="Linux"&gt;
        &lt;merge key="input.x11_driver" type="string"&gt;evdev&lt;/merge&gt;
        &lt;merge key="input.x11_options.XkbModel" type="string"&gt;evdev&lt;/merge&gt;
    &lt;/match&gt;
    &lt;merge key="input.x11_options.XkbVariant" type="string" /&gt;
    &lt;merge key="input.x11_options.XkbLayout" type="string"&gt;dvorak&lt;/merge&gt;
    &lt;merge key="input.x11_options.XkbOptions" type="string"&gt;ctrl:nocaps&lt;/merge&gt;
&lt;/match&gt;
&lt;match key="info.capabilities" contains="input.touchpad"&gt;
    &lt;merge key="input.x11_driver" type="string"&gt;synaptics&lt;/merge&gt;
    &lt;merge key="input.x11_options.Protocol" type="string"&gt;auto-dev&lt;/merge&gt;
    &lt;merge key="input.x11_options.SHMConfig" type="string"&gt;on&lt;/merge&gt;
    &lt;merge key="input.x11_options.LeftEdge" type="string"&gt;1100&lt;/merge&gt;
    &lt;merge key="input.x11_options.RightEdge" type="string"&gt;5800&lt;/merge&gt;
    &lt;merge key="input.x11_options.TopEdge" type="string"&gt;1600&lt;/merge&gt;
    &lt;merge key="input.x11_options.BottomEdge" type="string"&gt;4200&lt;/merge&gt;
    &lt;merge key="input.x11_options.HorizEdgeScroll" type="string"&gt;on&lt;/merge&gt;
&lt;/match&gt;
</code>

我的 /etc/X11/xorg.conf 只剩下必要的:


Section "Device"
    Identifier  "i915gm"
    Driver      "intel"
EndSection</p>

<p>Section "Screen"
    Identifier  "Default Screen"
    Device      "i915gm"
    DefaultDepth    24
    SubSection "Display"
        Modes       "1280x768"
        Virtual     1280 1792
    EndSubSection
EndSection

X 啟動的 log 如下:


(II) config/hal: Adding input device SynPS/2 Synaptics TouchPad
(II) LoadModule: "synaptics"</p>

<p>(II) Loading /usr/lib/xorg/modules/input//synaptics_drv.so
(II) Module synaptics: vendor="X.Org Foundation"
        compiled for 1.4.99.906, module version = 0.15.0
        Module class: X.Org XInput Driver
        ABI class: X.Org XInput driver, version 2.1
(II) Synaptics touchpad driver version 0.15.0
(<strong>) Option "Device" "/dev/input/event8"
(</strong>) Option "SHMConfig" "on"
(<strong>) Option "LeftEdge" "1100"
(</strong>) Option "RightEdge" "5800"
(<strong>) Option "TopEdge" "1600"
(</strong>) Option "BottomEdge" "4200"
(<strong>) Option "HorizEdgeScroll" "on"
(--) SynPS/2 Synaptics TouchPad touchpad found
(</strong>) SynPS/2 Synaptics TouchPad: always reports core events
(II) XINPUT: Adding extended input device "SynPS/2 Synaptics TouchPad" (type: MOUSE)
(--) SynPS/2 Synaptics TouchPad touchpad found

未來各 distro 可以提供預設的 fdi 檔,常見的 input device 都可以隨插即用 :)

Written by Kanru Chen

October 4th, 2008 at 7:58 pm

Posted in 爬網探險

Tagged with , ,