2009年12月30日

使用 auto-apt 與 checkinstall 自動滿足套件編譯相依性

以往非 Debianize 的套件要安裝時,免不了要經過下列的噁心步驟:

./configure # 設定軟體相關資訊並檢查是否滿足編譯條件
make # 編譯
sudo make install # 安裝到系統

而且還往往非常不容易成功。現在可以利用 auto-apt 自動幫你搞定。

sudo apt-get install auto-apt
#  安裝 auto-apt 套件

sudo auto-apt update
# 更新套件庫清單

auto-apt run ./configure
make
sudo make install

另外一種將原始碼徹底 Debianize 化的方法更簡單了

sudo apt-get install checkinstall
# 安裝 checkinstall 套件

gunzip source.tgz
./configure
make
checkinstall
sudo dpkg -i source.deb

沒錯,就是把最後一個步驟的 make install 換成 checkinstall 即可,是不是很簡單呢QQ

使用 apt-build 編譯最佳化套件

sudo apt-get install apt-build
# 安裝 apt-build 套件

sudo dpkg-reconfigure apt-build or sudo vi /etc/apt/apt-build.conf
# 重新設定 apt-build 選項與 apt-build 設定檔位置

sudo apt-build update
# 更新套件庫清單

sudo apt-build install
# 安裝新套件,且自動最佳化編譯

sudo apt-build --reinstall install

# 重新安裝套件,且重新最佳化編譯

sudo dpkg --get-selections | awk ' { if ( $2 == "install" ) print $1 } ' > /etc/apt/apt-build.list
sudo apt-build world
# 匯出系統所有安裝套件清單,並做全系統編譯,費時好幾天,並可能失敗,請慎重考慮

利用 apt-get 自行編譯套件

sudo apt-get install build-essential
# 安裝 gcc-compiler make dpkg-dev 編譯程式常用環境

sudo apt-get source
# 取得軟體原始碼,可加 -b 下載完自動編譯

sudo apt-get build-dep
# 安裝編譯此套件所需要的套件(表頭檔或函式庫補完)

dpkg-source -x
# 建立 Debianize 的原始檔方式。解開套件原始碼並上 patch

tar xvf

# 解開套件原始碼

zcat | patch -p0
# 打上 Debianize 的 patch

dpkg-buildpackage
# 編譯套件

編譯 ntop 範例
sudo apt-get update
# 更新套件庫清單

sudo apt-get build-dep ntop
# 自動安裝編譯 ntop 所需套件

sudo apt-get -b source ntop
# 下載原始碼並編譯

sudo dpkg -i ntop.deb
# 安裝剛做好的 deb 套件

apt-key 金鑰管理

sudo apt-key list
# 列出 APT 系統所使用的公鑰

$ sudo apt-key list
/etc/apt/trusted.gpg
--------------------
pub   1024D/437D05B5 2004-09-12 # 1024D 表示金鑰擁有者 ID / 437D05B5 為金鑰指紋
uid                  Ubuntu Archive Automatic Signing Key # 套件庫金鑰
sub   2048g/79164387 2004-09-12

pub   1024D/FBB75451 2004-12-30
uid                  Ubuntu CD Image Automatic Signing Key # 光碟用金鑰


一般公鑰會有2K以上,除非是用隨身碟傳,不然無法很容易傳遞。Ubuntu 的公鑰交換使用 Key Server 來傳遞。我們先對金鑰取特徵值,得到一組40碼的金鑰指紋,每一碼為0到F以16進位表示。然後將公鑰上傳到Key Server,其他人只須憑金鑰指紋即可下載完整公鑰。透過Key Server解決公鑰交換的問題。

如果公鑰已經上傳到Key Server,可以使用下列指令下載公鑰:
gpg --keyserver hkp://wwwkeys.us.pgp.net --recv-keys <金鑰指紋>
# 金鑰指紋最少8碼或16碼,亦可用完整40碼來下載公鑰

gpg --keyserver hkp://wwwkeys.eu.pgp.net --recv-keys 010908312D230C5F
# 取得 Debian 套件庫公鑰

由於 APT 系統所使用的公鑰列表雨 GPG 系統的公鑰列表各自獨立,所以要把 GPG 的工要匯出到 APT 系統

gpg --armor --export <金鑰指紋> | sudo apt-key add -
# 輸出 GPG 金鑰並匯入 APT 系統

sudo apt-key add chentunglee.asc
# 手動匯入金鑰。寫信向套件開發者取得。

sudo apt-key del <金鑰指紋>
# 刪除公鑰

apt-file 以檔案找套件

這個小工具可以讓您的 Ubuntu 透過已知的執行檔、文件、函式庫、標頭檔等來找套件哦!

sudo apt-get install apt-file
# 安裝 apt-file 套件

sudo apt-file update
# 根據 sources.list 同步套件庫清單

apt-file search
# 以關鍵字搜尋套件

可用參數:
-l 只顯示套件,不顯示檔名
-i 忽略大小寫
-F 完全符合關鍵字

範例:
apt-file search wx.h
apt-file search ftp
apt-file search /usr/bin/ftp
apt-file search /usr/bin/ftp -F

sudo apt-file list
# 列出套件所包含的檔案

apt-get 套件安裝、移除、升級好工具

sudo apt-get update
# 同步系統套件庫清單

sudo apt-get upgrade
# 更新沒有套件相依性問題的套件

sudo apt-get dist-upgrade
# 依照套件相依性更新所有套件

sudo apt-get install
# 自動安裝指定的套件

sudo apt-get remove
# 自動移除套件,並留下設定檔

sudo apt-get --purge remove
# 自動移除套件,不保留設定檔

sudo apt-get clean
# 移除所有的套件暫存檔案 /var/cache/apt/archives

sudo apt-get autoclean
# 移除所有舊版的套件暫存檔案,最新版本保留

可用參數:

-y 自動回答 yes
-s 安全模式,測試安裝 / 移除
-f 強制模式,強制安裝或修正錯誤
-d 只下載 deb 套件並存放在 /var/cache/apt/archives
--reinstall 重新安裝套件

sudo dpkg --configure -a
# 重新設定之前因中斷等因素還沒裝好的套件

sudo synaptic
# 用圖形化界面管理 APT 套件庫

我的筆記 DokuWiki

架設好DokuWiki一陣子了
裡面有我玩Ubuntu Linux的一些紀錄
和同事使用Oracle的紀錄
有需要就來翻翻吧
Eddie's DokuWiki

方便的 apt-cache 套件查詢工具

apt-cache search
# 從套件資訊中查詢包含 keyword 的套件

apt-cache -n search
# 搜尋 keyword 的套件名稱

apt-cache show
# 顯示套件詳細資訊和介紹

apt-cache showsrc
# 顯示套件原始碼相關資訊

apt-cache showpkg
# 顯示套件相依性相關資訊

apt-cache depends
# 顯示套件相依性相關資訊

apt-cache rdepends
# 顯示套件反向相依性相關資訊

apt-cache stat
# 顯示套件庫資訊

2009年12月5日

Ubuntu 你太求好心切了嗎?

一直以來我都是 Ubuntu 的頭號粉絲,死忠支持者。
但今天我想講的是,為什麼這麼多不穩定的 BUG 在 Version Release 過後這麼久,還未見改善。
Ubuntu 9.10 在今年10月底正式釋出。(其實我老早就從BETA開始一起努力)
雖然安裝的最新版本的過程中無任何不便,但裝完才是問題的開始。
也許你急著要開發許許多多讓 User 感覺驚豔的全新功能
也許你急著要讓桌面環境跟上 Gnome 的最新腳步
也許你急著要讓核心跟上 Linux 最新版本
......
但你也不能忘了大家當初會選擇你的初衷:穩定,友善,好用。

你不能讓 ADSL 上網的使用者每次都要下 sudo pppoeconf 來設定撥號連線
你不能讓使用者每次看 JAVA 網頁都要猜測方塊裡到底寫的是什麼字
你不能讓使用者安裝字型檔案時,迴圈回到一個無止盡
你不能讓使用者開機十次,有兩次無法順利登入 GDM

這 些都是裝完後,一個禮拜內就發現的顯著問題,原本還以為穩定友善的 Ubuntu 團隊,一定會在最短的時間內修復這些,然而在幾乎一個月多過後,上述這些問題還是沒透過 Update or Patches 解決。真是讓我難掩失望,這叫我怎麼再跟別人推廣、怎麼再跟別人說 Ubuntu 的好?(泣...)

雖然這些小問題,都可以透過指令修修改改來更正,但不能期望每個使用者都是 Linux 專家,還是需要顧及使用者的感受。還是很希望官方能盡速處理好這些問題,讓 Ubuntu 能越來越好。

以下列出幾個小問題的解決方式:

搜尋此網誌