前言
在UOS系統(tǒng)中默認(rèn)沒有開啟開發(fā)者模式,此時(shí)若需要安裝多個(gè)deb包時(shí),只能通過手動(dòng)一個(gè)個(gè)點(diǎn)擊deb包并輸入密碼進(jìn)行安裝,若依賴包很多時(shí),這種方法非常的麻煩;我們需要提供一種方法將多個(gè)deb合并成一個(gè)deb包提供給用戶使用。
下面將一步步說明如何通過dpkg-deb管理工具實(shí)現(xiàn)deb提取和重新打包的工作。
一 deb基礎(chǔ)知識(shí)
“.deb”是Debian軟件包格式的文件擴(kuò)展名, deb包是Unixar的標(biāo)準(zhǔn)歸檔,將包文件信息以及包內(nèi)容,經(jīng)過gzip和tar打包而成;一個(gè)deb包通常由兩部分組成,控制腳本 和 程序數(shù)據(jù):
1.1 目錄結(jié)構(gòu)
下面以tigervnc-viewer程序的目錄結(jié)構(gòu)為例進(jìn)行說明,如下圖所示:
tigervnc-viewer是當(dāng)前工程的根目錄,被當(dāng)做Linux系統(tǒng)的root目錄,deb安裝時(shí)也會(huì)按照當(dāng)前的目錄結(jié)構(gòu)將需要程序、庫以及各種腳本文件安裝到實(shí)際的linux系統(tǒng)中;DEBIAN是控制腳本目錄,usr目錄是程序數(shù)據(jù)目錄。
1.2 包結(jié)構(gòu)說明
DEBIAN目錄中主要存放控制腳本,在該目錄中至少有control文件,還可能有postinst(postinstallation)、postrm(postremove)、preinst(preinstallation)、prerm(preremove)、copyright (版權(quán))、changlog (修訂記錄)和conffiles等。
最常用的 5 個(gè)腳本文件:
? control,用了記錄軟件標(biāo)識(shí),版本號(hào),平臺(tái),依賴信息等數(shù)據(jù);
? preinst,在安裝數(shù)據(jù)包之前運(yùn)行的腳本,需要有執(zhí)行權(quán)限
? postinst,在安裝數(shù)據(jù)包之后運(yùn)行的腳本,需要有執(zhí)行權(quán)限;
? prerm,卸載時(shí),在刪除文件之前運(yùn)行的腳本,需要有執(zhí)行權(quán)限;
? postrm,在刪除文件之后運(yùn)行的腳本,需要有執(zhí)行權(quán)限.
control文件:描述軟件包的名稱(Package),版本(Version),描述(Description)等,是deb包必須具備的描述性文件,以便于軟件的安裝管理和索引。
為了能將軟件包進(jìn)行充分的管理,可能還具有以下字段 :
Section:申明軟件的類別,常見的有utils, net, mail, text, x11 等;
Priority:申明軟件對(duì)于系統(tǒng)的重要程度,如required
, standard
, optional
, extra
等;
Essential:申明是否是系統(tǒng)最基本的軟件包(選項(xiàng)為yes/no),如果是的話,這就表明該軟件是維持系統(tǒng)穩(wěn)定和正常運(yùn)行的軟件包,不允許任何形式的卸載(除非進(jìn)行強(qiáng)制性的卸載)
Architecture:軟件包結(jié)構(gòu),如基于i386
, amd64,
m68k,
sparc,
alpha,
powerpc’ 等;
Source:軟件包的源代碼名稱;
Depends:軟件所依賴的其他軟件包和庫文件。如果是依賴多個(gè)軟件包和庫文件,彼此之間采用逗號(hào)隔開;
Pre-Depends:軟件安裝前必須安裝、配置依賴性的軟件包和庫文件,它常常用于必須的預(yù)運(yùn)行腳本需求;
Recommends:這個(gè)字段表明推薦的安裝的其他軟件包和庫文件;
Suggests:建議安裝的其他軟件包和庫文件。
二、多個(gè)deb包合并一個(gè)deb包
下面以tigervnc-viewer為例說明,將多個(gè)deb包合并成一個(gè)deb包,系統(tǒng)UOS 1050教育版。
2.1 下載離線deb包
先清空/var/cache/apt/archives目錄下deb包然后在安裝tigervnc-viewer。
sudo apt-get clean #清空/var/cache/apt/archives目錄下deb包
sudo apt-get install tigervnc-viewer #安裝tigervnc-viewer安裝包和依賴包
若在當(dāng)前系統(tǒng)下未安裝過 tigervnc-viewer和缺失的相關(guān)依賴包,則會(huì)在/var/cache/apt/archives
目錄下下載多個(gè)deb包,如下所示:
從信息以上可以知道在當(dāng)前系統(tǒng)下,tigervnc-viewer程序還缺少libfltk1.3和libfltk-images1.3兩個(gè)依賴庫。
2.2 解壓安裝包
將這三個(gè)安裝包c(diǎn)p到其他目錄下,進(jìn)行安裝包解壓和重新打包動(dòng)作,這里目錄為jx目錄。
解壓命令如下:
dpkg-deb -R tigervnc-viewer_1.9.0.1-1+dde_amd64.deb tigervnc
dpkg-deb -R libfltk-images1.3_1.3.4-9_amd64.deb tk-images
dpkg-deb -R libfltk1.3_1.3.4-9_amd64.deb tk
執(zhí)行命令后會(huì)新生成三個(gè)目錄,分別是tigervnc、tk-images、tk,如下圖所示:
dpkg-deb可以從deb包中提取出控制腳本和程序數(shù)據(jù),以便下一步用于合并deb包,相關(guān)內(nèi)容可以參考篇文章。Linux dpkg和dpkg-deb常用參數(shù)使用說明
2.3 deb包合并
從2.1步驟中知道,當(dāng)前tigervnc-viewer程序還缺少libfltk1.3和libfltk-images1.3兩個(gè)依賴庫文件,而本次需要將這兩個(gè)依賴庫文件合并到tigervnc-viewer;為了保證合并后的安裝包可以正確識(shí)別出依賴,我們需要修改tigervnc的control文件中的Depends字段;
整體合并打包流程如下:
1. 提取libfltk庫文件中的control文件中的Depends字段
2. 提取libfltk-images1.3庫文件中的control文件信息中的Depends段
3. 移除tigervnc-viewer control文件中關(guān)于libfltk和libfltk-images1.3 Depends信息。
4. 合并這三個(gè)目錄下的control 文件中的Depends信息,有重復(fù)的需要?jiǎng)h掉
5. 合并libfltk、libfltk-images1.3、tigervnc-viewer程序數(shù)據(jù)到vncviewer目錄下
6. 執(zhí)行打包命令dpkg-deb -b vncviewer vncviewer.deb
libfltk庫文件中的Depends字段
libfltk-images1.3庫文件中的Depends字段
tigervnc-viewer程序中的Depends字段。
合并后的Depends信息如下:
libc6 (>= 2.15), libfontconfig1 (>= 2.12.6), libgcc1 (>= 1:3.0), libgnutls30 (>= 3.6.6),
libjpeg62-turbo (>= 1.3.1), libpam0g (>= 0.99.7.1), libstdc++6 (>= 5), libx11-6, libxcursor1 (>> 1.1.2),libxext6,
libxfixes3, libxft2 (>> 2.1.1), libxinerama1, libxrender1, zlib1g (>= 1:1.1.4), libpng16-16 (>= 1.6.2-1),
在純凈的UOS系統(tǒng)上經(jīng)過驗(yàn)證vncviewer.deb可以正常執(zhí)行,如下圖所示:
我們?cè)趉ylin系統(tǒng)上驗(yàn)證該安裝包時(shí),系統(tǒng)可以正確的給出告警信息如下:
三、使用合并deb包可能存在的問題
如果我們的UOS系統(tǒng)上已安裝了vncviewer.deb安裝包,后續(xù)在單獨(dú)安裝libfltk-images1.3和libfltk庫時(shí)
sudo apt-get install libfltk1.3
安裝包管理器會(huì)給出錯(cuò)誤信息,提示文件已存在
為了解決該問題只能使用強(qiáng)制安裝命令:
dpkg -i --force-overwrite xx.deb
四、總結(jié)
以上就是使用dpkg-deb命令實(shí)現(xiàn)多個(gè)deb包合并成一個(gè)deb包的方法,大家根據(jù)自己的需要進(jìn)行使用,整體過程還是比較簡單,多注意control文件中的Depends字段的準(zhǔn)確。文章來源:http://www.zghlxwxcb.cn/news/detail-600105.html
參考文章:
https://www.cnblogs.com/Genesis-007/p/5219960.html
https://blog.csdn.net/GW569453350game/article/details/49301427文章來源地址http://www.zghlxwxcb.cn/news/detail-600105.html
到了這里,關(guān)于多個(gè)deb包合并成一個(gè)deb包的方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!