Sunday, January 6, 2008

aptitude tutorial

aptitude 是 sarge 之後建議的套件管理器, etch 之後應該是預設的,同時支援指令介面和文字 cursor 介面,是基於 apt-get 的模式發展的,我想他是想解決 apt 相關指令太過繁瑣的問題吧,另外也加上了自動解除不被相依套件的功能,以及 mutt-like 正規式搜尋的支援,後者還頗為重要,我想這是使 .deb 系統領先 .rpm 系統的關鍵(註:yum 管理器可以支援 shell 的 pattern 查詢,apt-cache 不支援任何 pattern),他也相容 dselect,可以說把 debian 之前的所有套件管理方式都包含進來,使用 aptitude 也一段時間了,不過最近才弄清楚他的特性。

Review

首先,回顧一下 apt 套件管理器運作的方法,這在 aptitude 中也是一樣的,利用 /etc/apt/source.list 內指定的套件庫來源,aptitude 可以取得這些伺服器上準備好的套件列表,當然是有註記相依性在裡面,使用者只要指定要安裝的套件,aptitude 便會下載所有相依套件,交給 dpkg 解壓縮,配置到正確位置,和 apt 不同的是 aptitude 會將未被指定安裝,但相依性上需要而安裝的套件標記一個 A (Append),表示是個附加套件,當使用者移除當初指定安裝的套件時,如果附加套件沒有被其他套件相依,aptitude 便會移除他。

Interactive Interface

接下來來實際使用一下,先看比較簡單的互動式介面,在 shell 下直接輸入 aptitude 就可以得到文字 cursor 的介面。

這裡使用了樹狀的分類,主分類分成七個,只要用方向鍵移動就可以瀏覽套件庫:
1.資安更新 security update:這裡列出已經安裝且有更新的套件
2.新套件 new package:列出這次套件庫中的新套件,也就是之前不曾出現過的套件,按下 f 會將這些套件歸類為已知而不再出現在這裡,直到下次有新增套件才會羅列在此
3.已安裝套件 installed package:列出已經安裝的套件,而且都已經是最新版的
4.未安裝套件 not installed package:列出還未安裝的套件
5.過期的和自行建立的套件 obsolete and locally created packages:已安裝的套件但沒有出現在套件庫的
6.虛擬套件 virtual package:虛擬套件指的是一個邏輯上的套件名稱,這些套件實際上會由其他套件提供,例如 mail-transport-agent 由 postfix, sendmail, exim 來提供
7.作業 task:有點類似 deselect,利用預定義的方式安裝特定任務套件,還可以利用 .aptitude 檔案對任務進行瀏覽和安裝

文字 cursor 介面使用方式非常直覺,進入後第一件是就是按下 u 來更新套件庫資訊,利用 Ctrl-t 來選擇上方選單標定套件要進行的動作,最後按下 g 就可以得到想要的效果,如果嫌太麻煩,選單旁邊還有標示快速鍵,其中有許多快速鍵是支援 vi 模式的,例如按下 / 就可查詢,查詢完按 n 可以跳到下一個符合項目,上下方向鍵也是,其中最重要的當然是標定哪些套件要安裝/移除的快速鍵,分別是 + 和 - ,標定好狀態後按下 g,就會執行更動。常用的快速鍵列表有:

F10:和 Ctrl-t 一樣顯示 menu
Enter 觀看套件內容
q 離開這個頁面,在主頁面按下會離開 aptitude
?:幫助頁面
f:清除新套件標記,也就是將新套件這個分類內的套件都標示為已知的套件
u:更新套件庫資訊

/ 搜尋
\ 反向搜尋 (這項在 debian reference 內寫錯)

g 執行所有套件異動
+ 將套件標記為新安裝或更新
- 將套件標記為要移除,此選項會保留組態檔
_ 將套件標記為清除,包含組態檔也刪除
= 將套件標記為固定
: 在此次執行期間鎖定該套件

U 將所有可升級套件標記為升級
C 觀看套件變更紀錄
L 將套件標示為重新安裝
R 將套件標示為重新配置


Command Line Interface

不過對於習慣在文字介面下過活的人,上述方法未免太痛苦了:D,aptitude 提供的強大 command line,可以讓你更快速達到目的,而且和 apt 系列指令基本上相容,具官方說法,aptitude 和 apt-get 管理不同資料庫來維護相依性,實際上使用,apt-get 和 aptitude 可以看到彼此安裝的套件。

aptitude 的命令形式為 aptitude action [argument],如 aptitude update,使用 update 這個 action 指示更新最近套件列表,可用的 action 為:

update 從來源處更新套件列表
upgrade 更新所有資安更新
dist-upgrade 更新所有版本更新

search pattern1 [pattern2...] 搜尋滿足樣式的套件
show package1 [package2...] 顯示套件資訊
changelog 顯示套件更改紀錄

install package1 [package2...] 安裝套件
reinstall package1 [package2...] 再次安裝套件
remove package1 [package2...] 移除套件
purge package1 [package2...] 清除套件

download 下載套件的 .deb 檔案
clean 刪除已下載的套件檔案
autoclean 刪除舊的已下載的套件檔案

hold 將套件標示為保持狀態
unhold 取消對一套件的保持命令

markauto 將套件標記為自動安裝
unmarkauto 將套件標記為手動安裝

forbid-version 禁止升級特定的套件版本
forget-new 將新套件辨識為已知套件

可用的 argument 請自行參閱 aptitude -h 所顯示的內容,可最為命令時的輔助用。

另外在搜尋中有些判斷語句可以作為輔助
~ahold 代表標示為保持現狀的套件
~b 為損壞套件
~g 無用的套件
~c 未清除的套件
~n{text}名稱中含有{text}的套件
~d{text} 描述中含有{text}的套件
~m{maintainer} 由指定維護者維護的套件
~V{version} 版本號{version}的套件

這在清潔系統時非常有用,例如,可以下

# aptitude purge ~g

這樣的命令,就會清除系統內所有無用的套件,這個功能在 deborphan 套件內也有提供且更為強大,但 aptitude 這樣的整合提供了很高的便利性。

文字介面的彈性不只於此,在互動式介面中可以用的標記這裡全都可以用,例如,可以下這樣的命令

# aptitude install A+ B- C_ D=

這樣便代表了安裝A,移除B,清除C,保持D,僅用一行便可以完成。

Tag Definition

無論利用 aptitude 瀏覽套件庫或是使用文字介面查詢,可以看到每個套件前面標示有一些 tag,標示套件目前的狀況或種類:
p 已清除或未安裝的
v 虛擬套件
B 損壞
u 已由 dpkg 解開
C 配置到一半的的
H 安裝到一半的的
c 移除 (remove) 但尚未清除 (purge) 組態的
i 已經安裝的
E 內部錯誤的

moo


OK,寫程式總是要來點樂趣,可是寫這種套件管理程式哪有什麼樂趣可言,又是正規式又是相依性的,那...作者到底在哪裡找樂趣呢?如果你仔細瞧瞧 aptitude -h 所顯示的幫助頁面,會發現在最後一行有個 "這個 aptitude 沒有超級牛力 (This aptitude does not have Super Cow Powers.)",如果你有用過 apt-get,那還會發現 apt-get -h 所顯示的幫助頁面最後一行有個 "這個 apt 有著超級牛力 (This APT has Super Cow Powers.)",什麼是超級牛力呢?嘿嘿,超級牛力是 debian 系統中一股神秘的力量喔~。請試著鍵入

# aptitude moo

有東西嗎?那...再多加個 -v 進去看看。
哈哈,你肚子痛了嗎?那...再多加幾個 v 看看XD。

Reference Document


[1] aptitude 簡明手冊
[2] debian reference
[3] aptitude user manual
第[2],[3]項在 debian 上分別為 debian-reference-zh-tw, aptitude-doc-en 這兩個套件

後記


寫這篇大概寫了我五六個小時不只,剛開始寫真的沒想到會寫這麼久阿。我可以了解 Rails 聖經作者 Dave Thomas 說 "我每寫一本書,就發誓這是最後一本了" 的心情:D

Saturday, January 5, 2008

debian 上的 apache2 manual

適才偶然發現了 debian 上的一個 apache 小秘密,還頗有趣的。

事實上,debian 上的軟體很多都有提供 xxx-doc 這樣的文件套件,安裝位置都在 /usr/share/doc/ 底下,apache2 也不例外,預設上 /etc/apache2/site-available/default 這個 site configure file 是有 alias /doc /usr/share/doc 這樣的配置,所以雖然我有裝了apache2-doc,一直以來我也都是連到 http://mymachine/doc/ 來看的。不過 apache2-doc 提供的 html doc 就是特別奇怪,連結都連結不好,所以我都會重新配置檔案,copy 一份 en 的到特定資料夾,這樣才會比較正常。

但沒想到這份文件其實提供了一個 configure 在 /etc/apache/conf.d/apache2-doc,cat 一下這個檔案,會發現裡面寫好了 /manual 這個 alias 並且做了一些 redirection 來符合文件內的超連結。所以其實連到 http://mymachine/manual/ 就可以正常觀看。

我只能說......真是服了XD。

Saturday, December 29, 2007

gem update on debian

日前升級了 debian 上的 gem,隨即發生無法使用的狀況,檢查之後發現,debian 內建的 rubygems 套件安裝位置在 /var/lib/gems/,而gem 原生的安裝位置在 /usr/lib/ruby/gems/,因此升級後會發生找不到正確 gems 的狀況。

因為 gems 的目錄配置方式不符合 FHS,debian 在 3.x 就一直遲遲不發佈 rubygems 套件,即使目前 4.x 發佈了,在目錄的相容性上問題也很多。

目前看來要安裝 gems 又不用通過官方安裝包條件的最好方法就是,先安裝內建的 rubygems,執行 gem update --system 之後,會得到一個 /usr/bin/gem1.8,然後移除 rubygems 和 libgems-ruby1.8,最後將 /usr/bin/gem1.8 重新命名成 /usr/bin/gem,就可以得到原生的 gem。

Sunday, December 23, 2007

jifty screencast

今天發現一個還不錯的 jifty 教學影片,位在
http://www.crium.univ-metz.fr/docs/devel/jifty/screencast.html

感覺上和 rails demo movie 差不多,晚點再來看看,不然 CPAN 上的 tutorial 實在不是我小小弱者看得懂的阿XD。

OS: CPAN 上的 tutorial 連基本的 MVC 架構都沒解釋清楚,實在也太把大家都當作強者了 Orz...

Thursday, December 6, 2007

CGI::UploadEasy

今天研究了一下 CGI::UploadEasy 模組,這是 CGI 上傳模組中最簡單的一個,只要在網頁內設定好上傳檔案用的 input 欄位,然後最後加上一行

my $upload = CGI::UploadEasy->new(-uploaddir=>"上傳資料夾",-maxsize=>"負數視為不設限,單位為KB",-tempdir=>"暫存資料夾");

這樣會自動判斷有多少個檔案要上傳,還有上傳檔案的 mime-type,最後可以用 $upload 物件內的方法來取得上傳檔案的參數。

不過這個模組不是很適合我目前希望的方式,他能夠指定的參數只有目錄,中文也有問題,另外兩個 CGI::Upload 和 CGI::Uploader 模組則是功能太複雜了,過兩天有時間的話自己動手作一個上傳模組好了。

Tuesday, November 27, 2007

example ruby

今天在我的 Debian 上面裝了 ruby 來嚐鮮,感覺相當有趣,就如同作者所希望的 ruby 這顆紅寶石給人輕快簡單的感覺,相較於 perl 這個穩重的珍珠,各有所擅。

要建制一個 Rail application 的環境需要下的指令有
sudo aptitude install ruby ri rdoc irb rubygem

這還會自動安裝 libreadline 等等 lib
其中
  • ri 可以用來查詢 module
  • irb 是 interactive ruby
  • rubygem 是 ruby 的 package management framework,安裝完後有 gem 指令可用
  • rdoc 可以用來生成 doc

然後再下
sudo gem install rails --include-dependencies

就可安裝 Rails,不過還未包含 Mongrel 伺服器,等等再研究須不需要現在安裝

Tuesday, November 20, 2007

blind spot of leopard


用了 leopard 之後一直找不到如何用 tab 跳躍到 button 上的選項,終於還是在這裡發現了,看起來似乎是個 UI 的盲點阿 XD

期中考

期中考終於告一段落了,在繼續這樣考下去我實在會撐不住,這種沒意義的活動要持續到什麼時候呢,看了 Hacker & Painter 之後真的覺得人生從七歲到二十一歲的現在,自己和周遭的人都在不斷進行這種奇怪的活動,老師和學生都只是互相應付而已,但是卻沒人肯真正面對事實,高喊教改的蠢豬們真的應該試著去讓教育產出可以創造出財富的人,而不是讓大家輕鬆學習,輕鬆學習又不代表快樂,要輕鬆的話作弊就可以了,何必要教改呢?不是嗎?

不過雖說告一段落,下星期還有電路學,下下星期還有電磁學,看來又跟上學期一樣,到學期末都不會有停止的一天了,我只能說,這不是我要的生活阿,大學生不是應該學習如何去創造或欣賞美好的事物嗎?失去了本身最值得驕傲的文化和大腦的創意,在怎麼會寫考卷也不值得驕傲吧?歷史上從來未曾聽說過考試可以讓一門學問興盛繁榮,倒是看了不少美麗的中文文體和學科因為考試制度的介入而跨入學問演化的死胡同。我只能説,我想要愉快、有趣的工作,不要考試阿。但只要杜正勝一天不下台,教育界就只會一天無法進步,看來還是不用期待大學畢業前會又什麼好日子過了,就這樣看著國家部會首長們把高教一步步的推向毀滅吧。

Saturday, November 10, 2007

回憶

最近幾天事情都變得很奇怪,或許是我壓力太大?做了怪夢,許多事情這幾天都開始回到腦中,原本以為這些回憶都應該被擠出我稀少又耗用過度的記憶體外了,真的不懂這些事情為什麼現在會浮現上來,簡直像奪命連環索一樣緊緊的扣回大腦,或許我該思考一下我過去到現在面對這些問題的態度了。

Thursday, November 8, 2007

11/8

從昨天開始心神不寧後,今天清晨做了詭異的夢,醒後依稀記得是順忻回來了,夢中氣氛似乎還頗為歡欣,不記得怎麼結束的了,只記得醒來後悵然若失的感覺,一度還不記得夢中情景,最後勉強回憶起再度見面的一瞬間,整體而言不算個好夢,唯一欣喜者與順忻相見甚歡而已。

今天整天仍然氣血翻湧不能自己,想來也已經許久不曾見面,頗想撥通電話去問問她是否仍然安好,只是惟恐她或許不願見到我。

什麼時候還會有國中同學會呢?還有機會見到大家嗎?