在Ubuntu下以dpkg打包套件,並安裝回來

Hachibye
7 min readJun 1, 2021

--

環境:Virtualbox + Ubuntu20.4 + filezilla + dpkg + tree

關鍵字:debian、dpkg、deb

應用場景:沒有安裝Docker,通常是老舊的服務器,在不導入其他服務的情況下,純手工將套件打包,以利之後轉向雲端等需求。

這幾天在網路上查了許多相關文件
寫得簡單的,在安裝回來的時候會發生問題(?)
寫得複雜的,在打包過程之中就會遇到問題(?)
所以這一篇文章的目標是要寫得簡單,還要打包和安裝成功!

第一步
安裝我們今天示範的主角「filezilla」
它是一套FTP軟件

sudo apt-get filezilla

查詢filezilla套件內容及安裝位置

dpkg -L filezilla

就能整理得到以下的樹狀圖(手打的,待會介紹自動產出的)

───debian
──────DIBIAN
─────────control
─────────postint
─────────prerm
──────usr
─────────bin
────────────filezilla
────────────fzputtygen
────────────fzsftp
─────────share
────────────applications
──────────────filezilla.desktop
────────────docs
──────────────filezilla
────────────man
──────────────man1
────────────────filezilla.1.gz
────────────────fzputtygen.1.gz
────────────────fzsftp.1.gz
────────────metainfo
────────────────filezilla.appdata.xml
────────────pixmaps
────────────────filezilla.png
────────────────filezilla.xpm
────────────────filezilla.svg

接下來要開始建立打包的內容

最終結果在「debian」文件夾底下會有:

  1. DEBIAN > control , postint , prerm
  2. 跟套件相關聯的 usr/bin , usr/share…等
cd /home/hachi #你的個人家目錄底下
sudo mkdir debian #隨意,也可取filezilla
cd debian
sudo mkdir DEBIAN #必須是這個名字

再來要撰寫打包的套件信息(因為是練習,所以寫得很簡單)

cd DEBIAN
sudo vim control

Package: 套件名稱
Version: 版本號
Section: 軟體的類別
Priority: 對於系統的重要程度
Depends: 描述這個套件相依的其他套件
Suggests: 建議安裝的其他軟體包
Architecture: 指定套件執行的架構
Installed-Size: 安裝所需空間(大小)
Maintainer: 維護者資訊
Provides: 製造商資訊
Description: 詳細描述

Package: filezilla
Version: 3.39
Section:
Priority: optional
Depends:
Suggests:
Architecture: all
Installed-Size:
Maintainer: Hachi
Provides:
Description: Hello

撰寫文件「安裝完畢之後」的腳本

sudo vim postinst

內容
這裡只是簡單示範會出現一行字在安裝之後

#!/bin/bash
echo "hi i am postinst"

撰寫文件「移除完畢之後」的腳本

sudo vim prerm

內容
這裡只是簡單示範會出現一行字在移除之後

#!/bin/bash
echo "hi i am prerm"

修改權限(必須介於555到755之間)否則報錯

sudo chmod 755 postinst
sudo chmod 755 prerm

最麻煩的步驟來了
也許因為我是新手採取土法煉鋼的方式
如果有更好的方式也歡迎留言QQ

cd /home/hachi/debian/
mkdir -p usr/bin
cd /home/
sudo cp /usr/bin/filezilla ~/debian/usr/bin
sudo cp /usr/bin/fzputtygen ~/debian/usr/bin
sudo cp /usr/bin/fzsftp ~/debian/usr/bin
.
.
.
以此類推,將上面的關聯文件都拷貝進來

拷貝完成之後,檢查一下,這裡使用「tree」命令

sudo snap install tree
sudo apt install tree
sudo tree debian/

開始打包

dpkg-deb — build debian/

移除原本用「apt-get install」安裝的「filezilla」
如上圖,原本安裝好在火狐前面的filezilla圖標已經不見了

sudo apt-get remove filezilla

安裝打包好的套件

sudo dpkg -i debian.deb

檢查是不是跟你打包的內容一樣

dpkg -I debian.deb

打包>移除>安裝回來,依然正常運行!

【補充】

普通移除

sudo apt-get remove 套件名稱

如果想移除乾淨(包含相關配置文件)

sudo apt-get purge 套件名稱

【排錯】

如果是認真要打包,而不是練習的話
請注意「sudo vim control」這個文件要完善的寫清楚,包含相依套件!

--

--

Hachibye
Hachibye

Written by Hachibye

字幕組退休勞工 ... DevOps/系統/雲端/資安

No responses yet