Linux制作deb包的方法詳解
為了方便管理一些程序或腳本,可以將這些程序以及腳本都制作在一個(gè)deb包中, 本章節(jié)將介紹如何制作一個(gè)deb包, 制作deb的方式很多,如使用dpkg-deb方式、使用checkinstall方式、使用dh_make方式及修改原有的deb包, 本章將介紹如何從零制作一個(gè)自己的deb包,以及修改原有的deb包。
什么是deb包
deb包是在linux系統(tǒng)下的一種安裝包,有時(shí)我們?cè)诰W(wǎng)上下載的Linux軟件安裝包也會(huì)以deb包的形式出現(xiàn), 由于它是基于tar包的,所以同樣會(huì)記錄著文件的權(quán)限信息(讀、寫(xiě)、可執(zhí)行)、所有者、用戶(hù)組等。
我們可以使用命令:dpkg -l 來(lái)查看系統(tǒng)以及安裝了哪些deb包
deb包的組成結(jié)構(gòu)
安裝的內(nèi)容,這部分類(lèi)似linux的根目錄,表示需要將軟件安裝到linux系統(tǒng)上的文件目錄。
控制信息(放在DEBIAN目錄下),通常DEBIAN目錄下有如下幾個(gè)文件。
changelog: 文件記錄了deb包的作者、版本以及最后一次更新日期等信息;
control: 文件記錄了包名、版本號(hào)、架構(gòu)、維護(hù)者及描述等信息;
copyright: 文件記錄了一些版權(quán)信息;
preinst安裝之前調(diào)用
# !/bin/bash echo '準(zhǔn)備安裝<你的文件名>' #執(zhí)行安裝之前的準(zhǔn)備命令,可以省略 你的命令
postinst安裝完成調(diào)用
# !/bin/bash #更新桌面圖標(biāo)數(shù)據(jù)庫(kù) update-desktop-database /usr/share/applications || true #獲取當(dāng)前的用戶(hù)名 username=`getent passwd \`who\` | head -n 1 | cut -d : -f 1` #判斷桌面文件夾是否存在 if [ -d "/home/${username}/Desktop" ]; then echo 'Desktop exist' #將你的桌面文件復(fù)制到桌面 cp 你的.desktop文件 /home/${username}/Desktop else echo '桌面文件夾存在' #中文系統(tǒng)自動(dòng)復(fù)制到中文桌面 cp 你的.desktop文件 /home/${username}/桌面 fi
postrm:卸載完成調(diào)用
# !/bin/bash #可以省略 rm -rf 你創(chuàng)建的軟鏈接文件 echo '已經(jīng)卸載<你的文件名>'
prerm:卸載之前調(diào)用
# !/bin/bash echo '準(zhǔn)備卸載<你的文件名>' #執(zhí)行卸載之前的準(zhǔn)備命令,可以省略 你的命令
其中control、postinst、postrm為必要文件。
從零開(kāi)始創(chuàng)建自己的deb包
sudo apt-get install build-essential debhelper make autoconf automake dpkg-dev fakeroot pbuilder gnupg -y
my-package/
├── DEBIAN
│ ├── control
│ ├── preinst (可選)
│ ├──postinst (可選)
│ ├── prerm (可選)
│ └── postrm (可選)
└── usr
└── share
└── my-package
└── my-script.sh
在hello_deb目錄下創(chuàng)建DEBIAN及opt/hello_deb目錄,DEBIAN目錄下包含控制信息文件, 而在opt/hello_deb目錄下創(chuàng)建hello_deb.sh文件則表示我們需要將hello_deb.sh文件安裝到 linux系統(tǒng)的opt/hello_deb目錄下。
然后分別給予postinst、postrm、hello_deb.sh文件可執(zhí)行權(quán)限,postinst和postrm的權(quán)限必須>=0555且<=0775。
hello_deb/DEBIAN/control
Package: test-deb
Version: 1.0.0
Architecture: arm64
Maintainer: Your Name <your.email@example.com>
Description: A sample package
This is a sample package to demonstrate how to create a deb package.
control文件的末尾需添加一個(gè)空行,否則會(huì)報(bào)錯(cuò)“缺失結(jié)尾的換行符”
若以后想升級(jí)這個(gè)deb包,可以修改該包的版本號(hào)Version,值得注意的是Architecture, 前面我們也有講到,就是該deb包所支持的處理器架構(gòu),因?yàn)樽罱K要將該deb包安裝到arm64處理器的板卡上, 所以我們應(yīng)該在Architecture中填入arm64屬性,大家可根據(jù)自己的需求做相應(yīng)修改即可, 如果不知道你的處理器架可以通過(guò)dpkg -l命令來(lái)查看已安裝的deb包持支的架構(gòu), 或者輸入lscpu查看處理器信息,aarch64就是arm64架構(gòu)。若想支持所有架構(gòu),可以填入all屬性, 如果Architecture屬性與當(dāng)前處理器架構(gòu)屬性不匹配的話(huà),deb包將無(wú)法成功安裝, 且control的屬性信息必須以字母或者數(shù)字開(kāi)頭,不然可能導(dǎo)致打包出錯(cuò)。
hello_deb/DEBIAN/postinst
#!/bin/bash echo "deb installing"
當(dāng)安裝了該deb包以后,系統(tǒng)會(huì)默認(rèn)執(zhí)行postinst腳本, 通常我們利用該腳本來(lái)搭建一些為軟件執(zhí)行的環(huán)境(如創(chuàng)建目錄、修改權(quán)限等), 值得注意的是該文件需具有可執(zhí)行權(quán)限。 這里寫(xiě)的比較簡(jiǎn)單,判斷第一個(gè)參數(shù),僅供參考。
最后我們來(lái)看下真正的程序主體,為了簡(jiǎn)單起見(jiàn),此處以一個(gè)簡(jiǎn)單的腳本為例。
hello_deb/opt/hello_deb/hello_deb.sh
#! /bin/bash echo Hello deb! echo This is a test script!!!
腳本僅僅是打印兩句信息,用戶(hù)可自行設(shè)置需要執(zhí)行的程序。
構(gòu)建打包
萬(wàn)事俱備,只欠東風(fēng),當(dāng)備齊了制作deb包的基本原材料之后我們便可以開(kāi)始制作屬于自己的deb包了, 進(jìn)入hello_deb目錄下,也就是DEBIAN及home文件夾所在的目錄,接著輸入如下命令來(lái)構(gòu)建軟件包。
sudo dpkg-deb -b ../hello_deb ../hello_deb_1.0.0_arm64.deb
其中dpkg-deb是構(gòu)建deb包命令,-b參數(shù)表示要構(gòu)建一個(gè)deb包, …/hello_deb參數(shù)表示要構(gòu)建deb包原材料的路徑, …/hello_deb_1.0.0_arm64.deb參數(shù)表示將該deb包構(gòu)建在當(dāng)前目錄的上級(jí)目錄中, 一般我們構(gòu)建deb包的名字都會(huì)遵循這么一個(gè)原則, 其命名方式為:軟件名稱(chēng)+軟件版本號(hào)+該軟件所支持的處理器架構(gòu), 如軟件名為hello_deb,版本號(hào)為1.0.0,所支持的處理器架構(gòu)為arm64。
打包成功后會(huì)輸出如下信息,并可在上級(jí)目錄查看到deb安裝包
#命令 dpkg -c hello_deb_1.0.0_arm64.deb #打印信息 drwxrwxr-x jiawen/jiawen 0 2022-10-12 09:27 ./ drwxrwxr-x jiawen/jiawen 0 2022-10-12 09:28 ./opt/ drwxrwxr-x jiawen/jiawen 0 2022-10-12 09:28 ./opt/hello_deb/ -rwxrwxrwx jiawen/jiawen 59 2022-10-12 09:41 ./opt/hello_deb/hello_deb.sh
也可使用如下命令查看deb包信息:
#命令 dpkg --info hello_deb_1.0.0_arm64.deb #打印信息 new Debian package, version 2.0. size 976 bytes: control archive=496 bytes. 190 字節(jié), 9 行 control 100 字節(jié), 4 行 * postinst #!/bin/bash 138 字節(jié), 7 行 * postrm #!/bin/bash Package: hello-deb Version: 1.0.0 Section: free Priority: optional Essential: no Architecture: arm64 Maintainer: embedfire <embedfire@embedfire.com> Provides: hell_deb Description: deb test
輸入“sudo dpkg -i hello_deb_1.0.0_arm64.deb”命令即可安裝, 其中-i 參數(shù)表示安裝軟件,即install
解包
新建一個(gè)update_deb目錄,使用 dpkg -X 命令將deb包解壓到update_deb目錄中。
$ ls Desktop Downloads Pictures Templates hello_deb_1.0.0_arm64.deb Documents Music Public Videos $ mkdir update_deb $ sudo dpkg -X hello_deb_1.0.0_arm64.deb update_deb/ ./ ./opt/ ./opt/hello_deb/ ./opt/hello_deb/hello_deb.sh $
進(jìn)入update_deb目錄下可看到并沒(méi)DEBIAN相關(guān)目錄,在update_deb目錄下使用 dpkg -e 解壓出控制文件相關(guān)信息。
~/update_deb$ ls opt ~/update_deb$ sudo dpkg -e ../hello_deb_1.0.0_arm64.deb ~/update_deb$ ls -al total 16 drwxrwxr-x 4 1001 1001 4096 Oct 12 13:37 . drwxr-xr-x 15 cat cat 4096 Oct 12 13:35 .. drwxr-xr-x 2 root root 4096 Oct 12 09:28 DEBIAN drwxrwxr-x 3 1001 1001 4096 Oct 12 09:28 opt ~/update_deb$ tree . |-- DEBIAN | |-- control | |-- postinst | `-- postrm `-- opt `-- hello_deb `-- hello_deb.sh 3 directories, 4 files
此時(shí)就可以對(duì)程序主體進(jìn)行修改了
以上就是Linux制作deb包的方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Linux制作deb包的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
php擴(kuò)展memcached和memcache的安裝配置方法
這篇文章主要介紹了php擴(kuò)展memcached和memcache的安裝配置方法,需要的朋友可以參考下2014-11-11apache啟動(dòng)報(bào) shmget() failed: Invalid argument的解決方法
在apache啟動(dòng)時(shí)報(bào)錯(cuò):“shmget() failed: Invalid argument”,如何解決呢?這里簡(jiǎn)單分享下,方便需要的朋友2013-06-06