1. 程式人生 > 其它 >從原始碼構建deb包的兩種方式

從原始碼構建deb包的兩種方式

技術標籤:Linux學習記錄

直接從debian/ubuntu/deepin/uos 這類已有debian化原始碼構建

  1. 開啟系統的src源,或者手工瀏覽系統的源目錄,使用apt source xxx 或者dget來獲取debian化的原始碼。

apt source 方式

[email protected]:~/deb-test$ apt source wget
正在讀取軟體包列表... 完成
需要下載 4,455 kB 的原始碼包。
獲取:1 https://professional-packages.chinauos.com/desktop-professional eagle/main wget
1.20.1-1.1 (dsc) [1,054 B] 獲取:2 https://professional-packages.chinauos.com/desktop-professional eagle/main wget 1.20.1-1.1 (tar) [4,393 kB] 獲取:3 https://professional-packages.chinauos.com/desktop-professional eagle/main wget 1.20.1-1.1 (diff) [60.9 kB] 已下載 4,455 kB,耗時 1秒 (3,430 kB/s) dpkg-source: info: extracting wget
in wget-1.20.1 dpkg-source: info: unpacking wget_1.20.1.orig.tar.gz dpkg-source: info: unpacking wget_1.20.1-1.1.debian.tar.xz dpkg-source: info: using patch list from debian/patches/series dpkg-source: info: applying wget-doc-remove-usr-local-in-sample.wgetrc dpkg-source: info: applying wget-doc-remove-usr-local-in-wget.texi dpkg-source: info: applying wget-passive_ftp-default dpkg-source: info: applying Fix-a-buffer-overflow-vulnerability.patch
[email protected]
:~/deb-test$ ls wget-1.20.1 wget_1.20.1-1.1.debian.tar.xz wget_1.20.1-1.1.dsc wget_1.20.1.orig.tar.gz

使用dget 方式獲取

[email protected]:~/deb-test$ dget -u http://mirrors.aliyun.com/debian/pool/main/w/wfuzz/wfuzz_3.1.0-1.dsc
dget: retrieving http://mirrors.aliyun.com/debian/pool/main/w/wfuzz/wfuzz_3.1.0-1.dsc
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1695  100  1695    0     0  45810      0 --:--:-- --:--:-- --:--:-- 45810
dget: retrieving http://mirrors.aliyun.com/debian/pool/main/w/wfuzz/wfuzz_3.1.0.orig.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  431k  100  431k    0     0  3624k      0 --:--:-- --:--:-- --:--:-- 3624k
dget: retrieving http://mirrors.aliyun.com/debian/pool/main/w/wfuzz/wfuzz_3.1.0-1.debian.tar.xz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  6720  100  6720    0     0   142k      0 --:--:-- --:--:-- --:--:--  142k
dpkg-source: info: extracting wfuzz in wfuzz-3.1.0
dpkg-source: info: unpacking wfuzz_3.1.0.orig.tar.gz
dpkg-source: info: unpacking wfuzz_3.1.0-1.debian.tar.xz
dpkg-source: info: using patch list from debian/patches/series
dpkg-source: info: applying fix-header-script.patch
dpkg-source: info: applying switch-to-python3.patch
dpkg-source: info: applying add-sys-path-append
dpkg-source: info: applying upgrade-doc-installation.patch
[email protected]:~/deb-test$ ls
wfuzz-3.1.0  wfuzz_3.1.0-1.debian.tar.xz  wfuzz_3.1.0-1.dsc  wfuzz_3.1.0.orig.tar.gz

  1. 獲取到原始碼後,先保證編譯依賴是否滿足,如果不滿足,用sudo apt-get build-dep wget來自動安裝編譯原始碼包需要的依賴包,然後直接用debuild -us -uc 編譯
    注意:debuild需要進入到解壓後的目錄執行,然後編譯好的deb包會在上一級目錄
[email protected]:~/deb-test/wget-1.20.1$ debuild -us -uc^C
[email protected]:~/deb-test/wget-1.20.1$ ls ../
wget-1.20.1                      wget_1.20.1-1.1_amd64.deb      wget-dbgsym_1.20.1-1.1_amd64.deb
wget_1.20.1-1.1_amd64.build      wget_1.20.1-1.1.debian.tar.xz  wget-udeb_1.20.1-1.1_amd64.udeb
wget_1.20.1-1.1_amd64.buildinfo  wget_1.20.1-1.1.dsc
wget_1.20.1-1.1_amd64.changes    wget_1.20.1.orig.tar.gz

標題從裸原始碼編譯的過程

  1. 從軟體官網或者git伺服器checkout下來
  2. 進入到原始碼目錄 dh_make --createorig ,將原始碼debian化
  3. 修改debian/control 檔案,軟體包的名稱依賴以及編譯依賴描述等等都在這裡了
  4. 修改changelog ,dhc -e ,這個也是比較重要的檔案,軟體debian-revision版本也在這裡面了
  5. 修改debian/rules這個檔案其實就是Makefile,功能就是編譯,安裝到fakeroot,完成打包這個過程, 把傳統的編譯安裝3件套configure&&make&&make install ,或者cmake ninja之類的命令放進去就好了。編譯完成安裝,安裝的fake根目錄就在原始碼路徑的debian目錄下,當然make目標最後還需要把dh_builddeb這些dh——helper的套件命令放進去,這樣編譯完成後才會自動完成打包過程,完成後會在原始碼的上一級目錄生成deb二進位制檔案。
  6. 在原始碼目錄使用debuild -uc -us進行編譯打包過程。
  7. debuild 會先呼叫dpkg-buildpackage,然後執行lintian檢查包是否符合debian規範,最後會做包簽名。 debian 的簡易打包指南說,dpkg-buildpackage會呼叫binary這個目標來開始編譯,所以rules檔案裡應該是必須要包涵binary這個目標的。
  8. 這幾個步驟其實主要是修改control,rules,changelog,尤其是rules。其餘的一些很多功能還是需要進一步擴充套件看文件的。(rules裡面cd那一行命令結束後會自動回到cd前的目錄,所以如果在Makefile裡面要想cd 到某個目錄做什麼,只能連著寫一行)
  9. debian這個玩意兒實在是歷史太悠久了,以至於不管是打包還是安裝包以及做線上源,都有好幾種不通的方法。對沒接觸過的人來說絕對暈菜。
    10.要想省事,就直接用人家寫好的檔案或者甚至官網的src庫裡的原始碼來修改,這樣基本等於白嫖,你只需要修改你想改的部分或者軟體原始碼。