2008-09-25 34 views
109

我有一個程序的源代碼(取自cvs/svn/git/...),我想爲它構建一個Debian/Ubuntu包。該軟件包是存在於倉庫,但:如何從源代碼構建Debian/Ubuntu包?

  • 這是一箇舊版本(缺乏特點,我需要)
  • 我需要比默認略有不同的編譯選項。

這樣做最簡單的方法是什麼?我很關心一些事情

  • 如何檢查我是否已正確列出所有依賴關係? (我可以通過查看舊版本的依賴來獲得一些提示,但是可能已經添加了新的依賴關係。)
  • 我該如何防止更新系統在更新的repo上安裝舊版本?
  • 我該如何防止系統安裝更新的版本(如果沒有),覆蓋我的自定義軟件包?
+0

的AU相似:http://askubuntu.com/questions/28372/how-do-i- get-the-source-code-of-packages-installed-through-apt-get – 2015-05-17 07:33:31

回答

2

我相信this是Debian軟件包'bible'。

嗯,這是Debian新的維護者指南,所以它很多都不適用,但它們確實涵蓋了什麼地方。

0

Here是一個構建Debian軟件包的教程。

基本上,你需要:

  1. 設置您的文件夾結構
  2. 創建控制文件
  3. 選擇創建的postinstprerm腳本
  4. 運行的dpkg-DEB

我通常在我的Makefile中執行所有這些操作,所以我只需鍵入使可以將二進制文件吐出並一次打包。

25

首先,標題問題: 假設debian目錄已經存在,請在源目錄(包含debian目錄的目錄)中並調用dpkg-buildpackage。我喜歡用這些選項運行它:

dpkg-buildpackage -us -uc -nc 

這意味着不簽署結果,不清潔。

如何檢查我是否已正確列出所有依賴關係?

獲得依賴關係是一門黑色藝術。 「官方」的方法是檢查構建依賴是如果程序包只與基本系統,「構建必要」包和您指定的構建依賴關係構建。不知道常規依賴的一般答案,只是在wade中:)

我該如何防止更新系統在更新中安裝舊版本的回購協議? 我怎樣才能防止系統安裝新版本(當它出來),覆蓋我的自定義軟件包?

我的知識可能是過期就這一個,但要同時滿足: 使用的dpkg --set-選擇。假設nullidentd是你想留下來放包,以root身份運行

echo 'nullidentd hold' | dpkg --set-selections 

或者,因爲你是從源代碼構建,您可以使用一個epoch設置版本號虛高和永遠不會再打擾。要使用新紀元,請將新條目添加到debian/changelog文件中,並在版本號前加上99:。鑑於我nullidentd例如,您更新更新日誌的第一行就寫着:

nullidentd (99:1.0-4) unstable; urgency=low 

Bernard's link是好的,特別是如果你要創建自己的debian目錄 - 也很有幫助是developers referencegeneral resource pageAdam's link也看起來不錯,但我不熟悉它。

+1

「dpkg --set-selections」仍然有效,但現在更好的方法是「aptitude hold nullidentd」。 – 2008-09-25 15:45:38

6

對於你想要做的,你可能想要使用debian源代碼差異,所以你的包類似於官方的一個,除了上游版本使用。您可以從packages.debian.org下載源代碼差異,或者使用「apt-get source」將它與.dsc和原始源代碼歸檔一起獲取。

然後你解開你的上游源的新版本,更改到該目錄,並應用做

zcat ~/downloaded.diff.gz | patch -p1 
chmod +x debian/rules 

下載的差異然後,讓你想編譯選項的變化,並通過建立包做

dpkg-buildpackage -rfakeroot -us -uc 
75

你可以使用特殊軟件包「checkinstall」的所有軟件包,甚至不在debian/Ubuntu的呢。

可以使用 「uupdate」(apt-get install devscripts)從源代碼編譯的封裝與現有的Debian來源:

爲libdrm2實施例:

apt-get build-dep libdrm2 
apt-get source libdrm2 
cd libdrm-2.3.1 
uupdate ~/Downloads/libdrm-2.4.1.tar.gz 
cd ../libdrm-2.4.1 
dpkg-buildpackage -us -uc -nc 
+0

謝謝!我剛剛使用它來將Subversion 1.6.6移植到只有1.6.5作爲其最新可用版本的Ubuntu安裝中,並且其工作完美無瑕。爲我節省了好幾個小時的時間! :) – 2010-01-20 17:44:30

3
  • 放 「的Debian」 從原始包到目錄您的源代碼目錄
  • 使用「dch」更新軟件包版本
  • 使用「debuild」生成軟件包
1

我如何檢查我是否已正確列出的所有依賴關係?

pbuilder是通過在chroot環境中設置乾淨的基礎系統來檢查構建依賴性和依賴性的極好工具。通過在pbuilder中編譯軟件包,您可以輕鬆檢查構建依賴關係,並通過在pbuilder環境中對其進行測試,您可以檢查依賴關係。

1

如果你想在安裝的依賴關係,一個快速和骯髒的方式,使用方法:

apt-get build-dep 

這將安裝依賴關係。您需要在您的sources.list源線這樣的:

deb-src http://ftp.nl.debian.org/debian/ squeeze-updates main contrib non-free 

如果從測試到穩定向後移植包,被告知請的依賴性可能會有所改變。 apt-get build-deb命令爲當前存儲庫中的源包安裝依賴項。

但是,當然,dpkg-buildpackage -us -uc將顯示任何卸載的依賴關係。

如果您想更頻繁地編譯,請使用cowbuilder。

apt-get install cowbuilder 

然後,創建一個構建領域:

須藤DIST =擠ARCH = AMD64 cowbuilder --create

然後編譯源包:

apt-get source cowsay 

# do your magic editing 
dpkg-source -b cowsay-3.03+dfsg1    # build the new source packages 
cowbuilder --build cowsay_3.03+dfsg1-2.dsc # build the packages from source 

觀看其中cowbuilder放所得到的包。

祝你好運!