2017-03-23 47 views
1

我嘗試通過添加一些額外的源文件(未包含在上游存檔中)並應用一些修補程序來嘗試定製和重建Debian源包。更具體地說,我嘗試通過添加自定義插件來自定義Ubuntu「ppp」包。我做了以下內容:如何在定製和重建Debian軟件包時添加其他源文件?

1)我下載並使用 「apt-get的源PPP」

2)我進入 「PPP-XXX」 子樹,並使用「dpkg-buildpackage乾淨重建包解壓源碼包-uc「來確保源代碼包的一切正常。 (實際上現在一切正常)。

3)現在我把我的自定義補丁放到「debian」子樹的「debian/patches」子文件夾中。然後我在「debian/patches/series」文件中引用它們。我還將我的自定義源文件全部放在一個文件夾中,稱爲「tacacs」,並將此文件夾放入「debian/extra」子文件夾中。我不確定我應該把它們放在那裏,但我沒有看到更適合他們的地方。

4)現在我嘗試再次運行「dpkg-buildpackage -uc」以構建自定義軟件包。我看到以下內容:

  • 「的dpkg-buildpackage/dpkg的源/被子」試圖 修補程序應用我的自定義我的自定義來源和無法找到他們。所以它失敗了,並且 構建完全失敗。
  • 構建失敗並停止後,我可以在構建樹中看到自定義插件(「tacacs」)子文件夾,但它是空的。 所以補丁失敗並不奇怪。

所以問題是:我應該在哪裏放置自定義源文件,還應該做些什麼來使「dpkg-source -b」看到它們並將它們注入到構建樹中?

+0

IIRC你需要在'debian/files'中列舉它們。 – tripleee

+0

@tripleee謝謝,但我相信你確實是錯誤的'debian/files'。正如我所看到的,這個文件包含了構建中生成的輸出文件列表。在'debian'目錄中有許多其他文件包含這些列表,也許我將不得不嘗試所有這些,我以前沒有得到正確的答案。 –

+0

也許我正在用'debian/install'混合它。快速谷歌搜索表明,這是你枚舉你想安裝在某個地方的非標準文件的地方。 – tripleee

回答

1

我發現了兩個辦法來解決我的問題:

  1. 第一個似乎是更合適的地道。將 附加源添加到名爲 的「補充原始壓縮包」中,並在主要原始壓縮包中添加「組件 名稱」(如man dpkg-source中所述)。補充tarball 在構建之前通過主壓縮包提取,並且額外的 代碼到達構建樹,可以在其中進行修補和編譯。 事實上,我的附加代碼已經打包到歸檔中,所以我只需要重命名歸檔。

    不幸的是這種方法並沒有爲我工作,因爲從補充tar包 可以把代碼注入到只有構建樹的根,和pppd的插件代碼 應放置到pppd/plugins子目錄。我不能 找到一種方法來創建一個符號連接到dpkg-source/quilt正確的 子目錄中的代碼。

  2. 因此,我不得不使用第二種方法:

    • 我直接與dpkg-source -x(或apt-get source
    • 創建的清潔源樹解包附加源代碼,以適當的位置然後我施加dpkg-source --commit到源目錄,並在debian/patches子目錄中獲得修補程序以及引用新創建的修補程序的正確series文件。此修補程序包含將其他源放置到源樹時發生的所有更改。因此,通過重新應用此補丁程序,可以在適當的位置重新創建其他源。
    • 我將新創建的補丁和series文件保存到臨時位置並刪除了源代碼樹。
    • 我用dpkg-source -x重新創建了乾淨的源代碼樹。
    • 我將保存的補丁和series文件再次放到源樹的debian/patches文件夾中。我還編輯了debian\changelogdebian\control以表明應該構建新版本的包,而不是將新包與原始包混淆。
    • 現在我可以用dpkg-buildpackage -uc -us構建一個新版本的包。這還不是最終版本,因爲它不包含我的自定義修補程序,但它已包含我的自定義來源。

    • 最後我將自己的自定義補丁的debian/patches目錄,添加到它們的引用到debian/patches/series文件,跑dpkg-buildpackage一次,並得到了我想要得到的包。

雖然這種方法與源代碼注入到源樹中的任何期望的地方工作,它的缺點是附加源應手動拆包,與原來的代碼混合並轉化成補丁。所有這些操作必須在每次更新這些附加代碼時重複。而在第一種方法中,用新版本替換補充tar包就足夠了,並確保所有後續補丁都能很好地應用。

相關問題