環境: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」文件夾底下會有:
- DEBIAN > control , postint , prerm
- 跟套件相關聯的 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」這個文件要完善的寫清楚,包含相依套件!