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