Archive for October, 2008
devscripts 系列: mk-build-deps
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
Blog 爆炸
Blog 消失了兩天
損失了幾篇文章以及一些 comments,不過還好損失的文章都從 planet 找回來了
comments 我就留在信箱裡吧
Display VCS info in prompts
通常 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 上。

我的 prompt 設定如下
autoload -Uz vcs_info && 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<...<%B%~%b%<<"'${vcs_info_msg_0_}'"
${YELLOW}%# ${NO_COLOUR}"
詳細的設定請參閱 zshcontrib(3) GATHERING INFORMATION FROM VERSION CONTROL SYSTEMS
跟螢幕玩 SM
這個 SM 是之前發現的小工具,全名是 screen message,不要想歪囉
sm 是用來在螢幕上顯示顯示一段文字,並盡可能的塞滿整個螢幕,可以事先在 command line 指定好前景背景顏色與字型,還有旋轉方向。預設不加任何參數的話,會使用白底黑字與 Sans 字型,顯示一個笑臉如下:

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

Xorg 1.5 XInput Hotplug
之前寫過 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><match key="info.capabilities" contains="input.keys">
<merge key="input.x11_options.XkbRules" type="string">base</merge>
<!-- If we're using Linux, we use evdev by default (falling back to
keyboard otherwise). -->
<merge key="input.x11_driver" type="string">keyboard</merge>
<merge key="input.x11_options.XkbModel" type="string">pc105</merge>
<match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"
string="Linux">
<merge key="input.x11_driver" type="string">evdev</merge>
<merge key="input.x11_options.XkbModel" type="string">evdev</merge>
</match>
<merge key="input.x11_options.XkbVariant" type="string" />
<merge key="input.x11_options.XkbLayout" type="string">dvorak</merge>
<merge key="input.x11_options.XkbOptions" type="string">ctrl:nocaps</merge>
</match>
<match key="info.capabilities" contains="input.touchpad">
<merge key="input.x11_driver" type="string">synaptics</merge>
<merge key="input.x11_options.Protocol" type="string">auto-dev</merge>
<merge key="input.x11_options.SHMConfig" type="string">on</merge>
<merge key="input.x11_options.LeftEdge" type="string">1100</merge>
<merge key="input.x11_options.RightEdge" type="string">5800</merge>
<merge key="input.x11_options.TopEdge" type="string">1600</merge>
<merge key="input.x11_options.BottomEdge" type="string">4200</merge>
<merge key="input.x11_options.HorizEdgeScroll" type="string">on</merge>
</match>
</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 都可以隨插即用