問題:
我正在爲一個包編寫一個Ubuntu包,它實質上提供了一些庫和頭,然後用於構建它的他軟件。 軟件包也在較小的子包中分解,在這種情況下,包是相當相似的。
我注意到像boost提供的軟件包
複製代碼
[...]
libboost-dbg
libboost-dev
libboost-doc
[...]
libboost-all-dev
[...]
但是 NAME boost
或者 libboost
中沒有任何內容。
- 這背後的想法是什麼?
-dbg
。-dev
和-doc
軟件包的用途是什麼?- 關於如何編寫這些軟件包的生成文件的說明,是否有說明?
回答 1:
概念&目
分離這些不同包的主要原因與磁盤空間和下載速度有關。 特別是,鏡像空間非常重要,因爲它意味着分發數據的多個副本。 我們可以將 foo-common
。foo-data
或者 foo-doc
包的一個副本保存在歸檔中,而不是在每個體系結構( ) 中複製它複製的Having 文件的副本。 。
對於官方Ubuntu檔案中的軟件包,實際上沒有理由手工創建 -dbg
包。 生成機器自動去除調試符號並將它們放入 ddebs.ubuntu.com. 上託管的-dbgsym
軟件包中( 請參見: 通常存在的調試符號包( ) -dbg
包通常只從Debian進行。
指令框
對於實現,請看下面的問題:
簡單來說,需要在 debian/control
中爲每個包創建新的節。 那麼 debian/foo-*.install
文件也需要創建。 這將允許 dh_install
將正確的內容放入正確的包中。
主二進制軟件包的foo.install
可能看起來像:
複製代碼
usr/bin/
usr/lib/
foo-common.install
,foo-data.install
,foo-doc.install
或者其他任何:
複製代碼
/usr/share/doc/
/usr/share/icons/
/usr/share/foo/
/usr/share/locale/
對於 foo-dev
:
複製代碼
/usr/include/
/usr/lib/pkgconfig
/usr/lib/*.so
創建 foo-dbg
包需要編輯 debian/rules
通常 dh_strip
會去除調試符號。 所以我們需要重寫這個行爲:
複製代碼
.PHONY: override_dh_strip
override_dh_strip:
dh_strip --dbg-package=foo-dbg
回答 2:
Boost是一個複雜的例子,讓我們先來看一個簡單的例子。
精確地講,源軟件包提供了個二進制包:
libssl1.0.0
包含OpenSSL動態庫,版本 1.0.0. 這就是與這個庫鏈接的程序需要運行的。 如果你有其他版本的庫與其他版本不兼容,則軟件包 NAME 包含一個版本號,該版本可能同時安裝了其他版本。- 包含了使用OpenSSL庫的工具。 即使有多個庫版本,也不需要這些工具的多個版本: 僅有一個
/usr/bin/openssl
和相關工具。數據和文檔。 - 如果你想編譯與OpenSSL鏈接的程序,那麼
libssl-dev
插件包含你需要的文件。 有(*.h
) 頭文件。鏈接(*.a
,*.so
)的庫和一些組合文件。 libssl-doc
包含OpenSSL庫的文檔。 如果你要編寫使用庫的程序,你只需要這個包。libssl1.0.0-dbg
包含調試符號。 它只對調試OpenSSL庫或者使用它的程序有用。 andrewsomething的回答有關於這些-dbg
包的更多信息。
除了precise的版本,精確包含了庫的老版本,因爲還有一些程序仍然鏈接到舊版本。
你可能看到的其他包是其他語言的綁定。 OpenSSL不附帶任何( 對於其他語言,有到OpenSSL的綁定,但是它們並不是來自同一個) 。 一個示例是 ,它附帶了 TCL綁定插件。
這樣拆分包的主要原因是不同的包有不同的目標訪問羣體。 一個沒有人編譯任何東西只需要核心 lib
包,也可以能是 命令行 工具;如果需要,它們會自動安裝。 如果有人想編譯使用這個庫的程序,他們需要 -dev
包。 如果有人想寫一個使用這個庫的程序,他們需要 -doc
包。
那麼升級它遵循同樣的結構,但是因爲commit是一個巨大的庫,它被分解成了很多? libboost-*1.46.1
and precise precise precise Boost Boost Boost Boost Boost Boost Boost Boost,但oneiric同時擁有 1.42 和 1.46. 還有一個 metapackage boost默認插件,它將版本化包作爲依賴項引入。
除了動態庫包 libhangul1
和開發包 libhangul-dev
,查看 libhangul插件還有一個包libhangul-data
。 這裏軟件包包含庫所需的附加數據。 即使你有多個版本的庫,它們也可以共享 -data
包。 此外,軟件包的架構獨立。 包含大量架構獨立數據的軟件被拆分成架構依賴性和架構獨立的軟件包,以節省發佈空間。 另一個具有相似含義的後綴是 -common
。
Ubuntu和Debian的包裝規則非常相似,所以製作Debian軟件包的材料也適用於 Ubuntu 。 事實上,對於Debian和 Ubuntu,你可以擁有相同的源代碼包;惟一使Debian和Ubuntu包不同的是針對不同庫的編譯,這不僅僅是不同版本的Ubuntu版本之間的區別。 現在,我們已經擁有了 Debian開發人員文檔,特別是Debian策略手冊和開發者的參考;參見maintainer維護者指南 for 。 忽略關於使用Debian項目等的部分,只讀關於製作包的部分。 是一個很好的方法來啓動deb包( 你要選擇"庫") 。