長篇分享

Debian 打包入門指南

最近筆者忙於為一些 Debian 衍生發行版打包軟體包,這些發行版往往都會使用 deb 包作為默認的軟體包,作為 Linux 世界兩大軟體包格式之一(另一個是 RedHat 系的 rpm 包),deb 包的使用場景非常廣泛,本篇文章就來教各位讀者如何修改現有的軟體包並重新構建自己的 deb 包。

環境準備

在開始打包之前,首先需要準備好必須的各種工具,只需要打開終端並輸入如下命令:

 sudo apt-get install build-essential fakeroot devscripts

這條命令會將 build-essential、fakeroot 和 devscripts 安裝到我們的電腦上,之後我們會用到這些軟體。

獲取軟體包

在準備好必須的工具之後,我們還需要獲取準備修改的原始軟體包,有兩種途徑可以獲取:

  1. 直接從軟體源網站上下載
  2. 配置 apt 源 並使用 apt source 下載

筆者更喜歡用第一種方式(因為比較方便),不過更正規的方式是使用 apt source 下載,因此接下來就向各位介紹這種方法。

首先,我們需要修改 apt 的軟體源列表,因為在默認情況下,apt 不會下載原始軟體包。打開 /etc/apt/sources.list 文件,並檢查下面的這行代碼是否已經取消注釋:

deb-src http://httpredir.debian.org/debian unstable main

如果沒有,去掉這行的注釋,保存並退出,之後運行:

sudo apt update

apt 就會更新剛才取消注釋的軟體源,以便之後進行下載。

選取軟體包

本次我們選取 node-pretty-ms 作為演示,首先使用 apt source 將該軟體包下載至本地:

apt source node-pretty-ms

下載完成後,使用 ls 命令查看當前目錄,應該會多出三個文件:

node-pretty-ms_7.0.1-1.debian.tar.xz
node-pretty-ms_7.0.1-1.dsc
node-pretty-ms_7.0.1.orig.tar.gz

這三個文件共同構成了 deb 包,其中第一個壓縮包中包含了 deb 包的補丁、打包規則等,第二個文件是 deb 包的元數據文件,第三個壓縮包則是原始上游源碼,要對這個包進行修改,我們可以使用如下命令:

dpkg-source -x node-pretty-ms_7.0.1-1.dsc

這條命令會在當前目錄下生成一個名為 node-pretty-ms-7.0.1 的子目錄,使用 cd 命令進入該子目錄後再使用 ls 命令,即可看到原始 deb 包的結構,最核心的就是 debian 目錄,其中包含了製作一個 deb 包所需的各種文件。

lrzlin@LionBattery:~/article/node-pretty-ms-7.0.1/debian$ ls
changelog  control  copyright  docs  gbp.conf  patches  rules  salsa-ci.yml  source  tests  upstream  watch

其中我們要關注的是下面四個文件:

  1. changelog 中包含了每次修改的作者、修改內容、時間等信息
  2. control 中則包含了軟體包的名稱、維護者、構建依賴等信息
  3. patches 目錄中包含了軟體包作者們對上游代碼進行的修改
  4. rules 中是該軟體包的構建腳本

這些文件基本就是 deb 包的核心部分,也是我們之後對軟體包進行修改主要涉及的部分。

初次構建

瀏覽完軟體包的整體結構之後,我們就可以嘗試對該軟體包進行構建了,不過在此之前,我們首先需要安裝它所需的各種構建依賴,使用如下命令即可:

sudo apt build-dep node-pretty-ms

apt 會自動按照軟體包 control 文件中描述的構建依賴幫助我們安裝需要的依賴,下載安裝完成之後,使用 debuild 命令進行構建:

debuild -b -uc -us

等待命令運行完成後,即可在上級目錄找到編譯完成的 deb 包。

修改源碼

當然,我們本次的目標並不止於原封不動的重新編譯 deb 包,畢竟如果這樣的話為什麼不直接從伺服器下載呢?我們要做的是對源碼進行修改並重新編譯:

cd node-pretty-ms-7.0.1
vim index.js

將其中的

throw new TypeError('Expected a finite number');

修改為

throw new TypeError('Expected a finite number!');

保存並退出,使用如下命令編寫日誌

dch -i -Dunstable

此處的 unstable 指的是軟體發行通道,同時因為我們並非官方的維護者,因此由我們做出的更改會默認加入 * Non maintainer upload. 這樣的說明,我們需要在下一行寫明我們對源碼做的修改:

寫完 changelog 之後,就可以退出編輯器,使用如下命令生成補丁:

dpkg-source -b . --commit

輸入補丁名稱並確認,這條命令就會將我們之前所做的修改保存至 debian/patches 目錄下,並在編譯源碼時自動應用。

完成上述的修改之後,使用如下命令重新生成 dsc 源碼

dpkg-source -b .

再次回到上級目錄,即可看到新生成的 .dscdebian.tar.xz 文件,這些就是應用了我們之前的修改的新 deb 包,要重新編譯,只需要回到源碼子目錄,並重新輸入:

debuild -b -uc -us

接下來坐等收包就好啦!

進階技巧

使用上面的方式直接進行編譯雖然方便,但當我們大規模進行打包的時候就會出現問題了:不同包的依賴不同,反覆安裝不僅非常麻煩,有時還可能造成依賴計算錯誤——明明不需要依賴的軟體包卻成了必須依賴,這樣你打出來的軟體包可能在本機運作一切正常,可放在別人的機器上卻沒法正常編譯和安裝了,這就輪到 pbuildersbuild 出場了:這些工具可以幫助我們建立一個隔離的環境,類似 chroot 或者 docker,不過對打包做了更多的特定優化,以下就以 pbuilder 為例作為演示,

要安裝 pbuilder,只需要在終端輸入如下指令:

sudo apt install pbuilder

安裝完成之後,使用如下命令創建編譯環境

sudo pbuilder create

這一步會為我們配置一個完整的環境用於之後的編譯,等待創建完成之後,運行如下的命令即可完成編譯

pbuilder build node-pretty-ms_7.0.1-1.dsc

這就是關於 deb 打包的簡短教程了,至於 pbuilder 更加進階的用法,就等各位讀者進一步挖掘了。

參考文章:
https://wiki.debian.org/BuildingTutorial
https://www.cnblogs.com/Gui-Yue/articles/16967031.html

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0

You may also like

Leave a reply

您的電子郵箱地址不會被公開。 必填項已用 * 標註

此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

More in:長篇分享

信息安全

深度解析shellcode原理及編碼技術

本篇文章深度探討了Shellcode的原理,同時對64位和32位系統下的shellcode進行了詳細解讀。並詳細介紹了Shellcode的編碼技術,其中包括手寫Shellcode的兩種思路。對於編碼Shellcode,本文列舉了幾種常見的解碼器的實現,如FNSTENV XOR解碼器和JMP/CALL解碼器。最後,本文列舉了幾種常見的字符集以及Shellcode編碼工具,並推薦了兩個可查找現成Shellcode的資料庫。
教程

將USB設備連接到WSL2:分步教程

這篇教程詳細地介紹了如何在Windows Subsystem for Linux 2(WSL2)中使用USB設備。首先,我們需要安裝在Windows上共享USB設備的軟體usbipd-win,並進行相應的設置。接下來,我們會在WSL內部安裝USB/IP的用戶空間工具和USB硬體標識符的資料庫。再接下來的步驟是配置udev規則以允許非root用戶訪問設備。最後,我們將通過使用usbipd的WSL便利命令來連接設備。在連接或斷開設備後,我們可以在WSL內部檢查已連接的USB設備。
開源評論

CTF比賽中的網路安全:從一場「失控」的比賽中吸取教訓

在一次CTF(Capture The Flag)比賽中,出題方使用了一個真實的勒索病毒作為比賽題目,導致許多參賽者的磁碟被鎖定,資料無法恢復。這一事件突顯出網路安全比賽在題目設置和比賽環境管理方面的嚴重缺陷,因此,需要重新審視和改進比賽的設計和實施。對於組織者,他們應建立嚴格的題目審查制度,創建安全的比賽環境,並提供清晰的比賽規則和應急響應機制。對於參賽者,他們應持續學習並提高網路安全知識和技能,使用專用設備和網路環境,並定期備份重要數據。這樣,我們可以從中吸取教訓,防止類似事件的再次發生,同時提高我們的網路安全技能。