deb 、採用DPKG打包

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   使用   


轉自http://blog.solrex.cn/articles/packaging-2-deb.html

deb 是 Debian 系 Linux 使用的軟體包格式,也是我最欣賞的軟體包格式。我所知道的打 deb 軟體包的方法有兩種,一種是使用 checkinstall,另一種是使用 dpkg。

checkinstall 不僅僅可以用來打 deb 包,還可以打 rpm 和 tgz 包,而且使用方法相對簡單。但是 checkinstall 的運行不是那麼穩定,我搞不懂它在什麼情況下才能正常運行,而且它的定製性不是很強,使用時老是要互動地輸入些資訊,所以我還是放棄了使用它來打包軟體。感興趣的朋友可以在網上搜尋一下這個程式的使用方法。

dpkg 是 Debian 的“原生”包管理軟體,但是很多人不太願意使用 dpkg 來打包 deb。究其原因可能是需要寫麻煩的設定檔,但是寫設定檔的一個好處就是在下次打包時候可以直接用上次的設定檔,只修改一個版本號碼就可以了,而不用每次都需要填包資訊。在介紹如何打 deb 包之前,我們現看一下如何解 deb 包。

$ sudo apt-get install tree
$ dpkg -X /var/cache/apt/archives/tree_1.5.1.1-1_i386.deb fakeroot
$ cd fakeroot
$ dpkg -e /var/cache/apt/archives/tree_1.5.1.1-1_i386.deb
$ tree
.
|-- DEBIAN
| |-- control
| `-- md5sums
`-- usr
|-- bin
| `-- tree
`-- share
|-- doc
| `-- tree
| |-- README
| |-- changelog.Debian.gz
| |-- changelog.gz
| `-- copyright
`-- man
`-- man1
`-- tree.1.gz

dpkg -X 是將 deb 包的內容檔案釋放出來,dpkg -e 是將 deb 包的控制資訊釋放出來。前面執行那個 sudo apt-get install tree 是為了將 tree_1.5.1.1-1_i386.deb 下載到本地 apt cache,如果您已經安裝過 tree 這個軟體,可以為 apt-get 加上 -d 參數,使其只下載而不安裝。

從上面 tree 命令的執行結果我們發現,deb 包解開後分兩部分:一部分是控制資訊,在 DEBIAN 目錄下;一部分是安裝內容,在 usr 目錄下。現在您大概明白為什麼我們使用 fakeroot 作為目錄名了,因為這個目錄就是一個"假根目錄",您在這個目錄下所有的修改,最後都會被映射到目標機的根目錄 / 下。比如 fakeroot/usr/bin/tree 這個檔案,就會被安裝到 /usr/bin 下,以此類推。

只要您能理解 fakeroot 這個目錄映射,您就知道如何安放自己的檔案了。為了讓產生的包將檔案 foo 安裝到目錄 /usr/xx/yy 目錄下,您只用在 fakeroot 目錄下建立 usr/xx/yy 目錄,並將 foo 拷貝進去就行了。

好,下面進入關鍵的設定檔部分,關於 control 和 md5sums。

$ more DEBIAN/control
Package: tree
Version: 1.5.1.1-1
Architecture: i386
Maintainer: Ubuntu MOTU Developers
Original-Maintainer: Florian Ernst
Installed-Size: 92
Depends: libc6 (>= 2.6-1)
Section: utils
Priority: optional
Description: displays directory tree, in color
Displays an indented directory tree, using the same color assignments as
ls, via the LS_COLORS environment variable.
.
Homepage: http://mama.indstate.edu/users/ice/tree/

我們可以看到,control 檔案中包含的主要是軟體的版本和維護者資訊,我相信大家都能基本看懂上面這些資訊什麼意思:Package 包名(tree)、Version 版本(1.5.1.1-1)、Architecture 目標機架構(i386 386及以後)、Maintainer 維護者(Ubuntu MOTU Developers)、Original-Maintainer 原維護者(Florian Ernst)、Installed-Size 安裝後大小(92K)、Depends 依賴軟體包(libc6 不低於 2.6-1 版本)、Section 包分類(工具)、Priority 優先順序(可選)、Description 包描述、Homepage 軟體首頁。

由於咱們分析這個包是 Ubuntu 發布的包,所以包資訊給的比較全,其實並不是上面所有的資訊都有必要提供(小聲說一句,就算全提供也不是很難吧?除了咱不用的,Original- Maintainer 這種就算了)。關於哪些資訊比較重要,以及每個域的具體含義和可選項,可以參考 Debian 的文檔 Debian Policy Manual Chapter 5 - Control files and their fields 。

您也可以依樣畫葫蘆,寫一個類似的 control 檔案放到 DEBIAN 目錄下,提供一些自己軟體包的資訊,基本有這個設定檔就可以打包了。

$ more DEBIAN/md5sums
d60a3b4736f761dd1108cb89e58b9d4e usr/bin/tree
981ea0343c2a3eb37d5fc8b5ac5562df usr/share/man/man1/tree.1.gz
483a56158a07a730ec60fc36b3f81282 usr/share/doc/tree/README
ea56d78ae0d54693ae8f3c0908deeeff usr/share/doc/tree/copyright
4456e04c3c268eabcd10ee9b949a9b9a usr/share/doc/tree/changelog.gz
ec104db6914cfce2865a0d8c421512bb usr/share/doc/tree/changelog.Debian.gz

md5sums,這檔案名稱一看,就知道是儲存著軟體包中各檔案的 md5 校正值,用來校正軟體包是否被損壞了。其實這個檔案純屬“臘月三十逮兔子,有它沒它都過年”,您可以完全不提供它。

這樣呢,我們就準備好了 deb 包的內容檔案和控制資訊:控制檔案放在了 fakeroot/DEBIAN 目錄下,內容檔案放在 fakeroot/usr 下,分類樹就像開頭 tree 命令的結果。下面只需要一個命令就能打出來 deb 安裝包了:

$ cd ..
$ dpkg -b fakeroot/ foo.deb

這時候目前的目錄下就出現了 foo.deb。您可以使用 dpkg -I foo.deb 查看 foo.deb 的控制資訊,dpkg -c foo.deb 查看 foo.deb 包含了什麼檔案,sudo dpkg -i 安裝 foo.deb。

小技巧:

1. 如果您懶得自己建立一個控制檔案和分類樹,您完全可以像本文開頭那樣,找一個簡單的軟體包,將它的內容和控制資訊釋放出來,對它進行修改,然後打出來自己的包。

2. 產生 md5sums 檔案不是什麼難事,您只需要在 fakeroot 目錄使用下面這個命令:

$ md5sum `find usr -type f` > DEBIAN/md5sums
或者
$ find usr/ -type f -exec md5sum {} + > DEBIAN/md5sums

3. 將您的可執行檔拷貝到 fakeroot/usr 下並不一定要手動一個個拷。如果您使用 GNU 自動工具集,./configure 時加個參數 --prefix=fakeroot/usr/ 即可;如果您自己寫的 Makefile,可以在 Makefile 中使用一個變數 PREFIX=/usr,當您不加參數時,make install 的安裝目標就是 /usr 下,您可以使用 Makefile -e PREFIX=fakeroot/usr/ install 來覆蓋 Makefile 中的變數設定。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.