dpkg实现多个deb包合并成一个deb包
使用dpkg制作deb包参考
https://www.cnblogs.com/minseo/p/16074459.html
在实际使用中我们会遇到用户没有网络的情况,无法下载安装包的情况,一个应用可能会有多个包,这种情况我们需要在其他有网络的主机下载好deb包并且最后合并成一个deb包
环境查看
本次演示环境为UOS系统,arm系统
# lsb_release -a
No LSB modules are available.
Distributor ID: Uos
Description: UnionTech OS Desktop 20 Pro
Release: 20
Codename: eagle
下载deb包
下载但是不安装deb包,以下载python3-tk包为例
apt -d install python3-tk
以上命令仅下载但是不安装deb包
下载后的deb位置为
/var/cache/apt/archives/
制作一个需要依赖python3-tk的deb包
下面演示打包一个使用python编写的脚本
查看目录结构
root@liuym-virtual-machine:/home/liuym/桌面# tree file_decode_all
file_decode_all
├── DEBIAN
│ ├── control
│ └── postinst
├── readme.md
└── usr
├── local
│ └── bin
│ ├── background.png
│ └── file-decode.py
└── share
└── applications
└── file-decode.desktop
文件内容如下,控制文件
root@liuym-virtual-machine:/home/liuym/桌面# cat file_decode_all/DEBIAN/control
Package: file-decode
Version: 1.0.0
Architecture: all
Essential: no
Section: utils
Priority: optional
Maintainer: Liuym
Description: file utf decode gbk
解压后运行的脚本文件
root@liuym-virtual-machine:/home/liuym/桌面# cat file_decode_all/DEBIAN/postinst
#!/bin/bash
chown root:root /usr/local/bin/file-decode.py
chmod 755 /usr/local/bin/file-decode.py
图片文件 background.png是脚本需要的一个图片
Python脚本文件
root@liuym-virtual-machine:/home/liuym/桌面# cat file_decode_all/usr/local/bin/file-decode.py
#!/usr/bin/python3
import tkinter as tk
from tkinter import messagebox
from tkinter import ttk
from tkinter import filedialog
import configparser, os, time
#from PIL import ImageTk, Image
class Login(object):
def __init__(self):
# 创建主窗口,用于容纳其它组件
self.root = tk.Tk()
# 给主窗口设置标题内容
self.root.title("csv文件转码(utf转gbk)")
self.root.geometry('800x800')
# 运行代码时记得添加一个gif图片文件,不然是会出错的
self.canvas = tk.Canvas(self.root, height=500, width=600) # 创建画布
self.image_file = tk.PhotoImage(file="/usr/local/bin/background.png") # 加载图片文件
self.image = self.canvas.create_image(0, 0, anchor='nw', image=self.image_file) # 将图片置于画布上
self.canvas.pack(side='top') # 放置画布(为上端)
# 创建一个`Button`名为`选择文件 `
self.label_select = tk.Button(self.root, text='选择文件', command=self.upload_file)
# 创建一个`Button`名为`转码`
self.label_change = tk.Button(self.root, text='转码', command=self.decode_file)
self.label_entry = tk.Entry(self.root, width='40')
self.label_out = tk.Text(self.root, width='40', height='5' )
self.label_show = tk.Label(self.root, text='转码输出路径')
def upload_file(self):
self.selectFile = tk.filedialog.askopenfilename()
self.label_entry.insert(0, self.selectFile)
def decode_file(self):
#print(self.selectFile)
now_time = time.strftime("%Y%m%d%H%M%S")
#print(now_time)
user_desktop = os.path.join(os.environ['HOME'], 'Desktop')
csv_name= os.path.basename(self.selectFile)
#os.system('ls -l "' + self.selectFile + '"')
#os.system("ls -l %s" %(self.selectFile))
param1 = '%s/%s_%s' %(user_desktop,now_time,csv_name)
param2 = '>%s/%s_%s' %(user_desktop,now_time,csv_name)
os.system('iconv -f utf8 -t gb2312 -c %s %s' %(self.selectFile, param2))
self.label_out.insert("insert", "文件转码完成\n")
self.label_out.insert("insert", param1)
tk.messagebox.showinfo('提示', '文件转码完成,请在桌面查看转码后的文件')
#self.size = os.path.getsize(self.selectFile)
#print(self.size)
# 完成布局
def gui_arrang(self):
self.label_select.place(x=10, y=520)
self.label_change.place(x=620, y=520)
self.label_entry.place(x=150, y=520)
self.label_show.place(x=10,y=580)
self.label_out.place(x=150, y=580)
def main():
# 初始化对象
app = Login()
# 进行布局
app.gui_arrang()
# 主程序执行
tk.mainloop()
if __name__ == '__main__':
main()
file-decode.Desktop文件
root@liuym-virtual-machine:/home/liuym/桌面# cat file_decode_all/usr/share/applications/file-decode.desktop
[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=utf转码gbk工具
comment=utf转码gbk工具
Exec=/usr/local/bin/file-decode.py
Icon=deepin-terminal
Type=Application
Categories=Application;
打包
dpkg -b file_decode_all/ file_decode-1.0.0.deb
dpkg-deb: 正在 'file_decode-1.0.0.deb' 中构建软件包 'file-decode'。
合并制作deb包
现在我们拿到两个deb包,需要把这两个deb包合并成一个deb包
制作思路把多个deb包解压至一个文件夹,然后使用原始或者创建控制文件重新打包
查看deb包
# pwd
/root/file_decode
# ls
file_decode-1.0.0.deb python3-tk_3.7.3-1_arm64.deb
解压
dpkg -X file_decode-1.0.0.deb file_decode
dpkg -X python3-tk_3.7.3-1_arm64.deb file_decode
解析
dpkg -X # 参数-X把deb解压
file_decode # 自定义解压文件夹,如果没有这个文件夹会自动创建
解压详细过程
# dpkg -X file_decode-1.0.0.deb file_decode
./
./usr/
./usr/local/
./usr/local/bin/
./usr/local/bin/background.png
./usr/local/bin/file-decode.py
./usr/share/
./usr/share/applications/
./usr/share/applications/file-decode.desktop
# dpkg -X python3-tk_3.7.3-1_arm64.deb file_decode
./
./usr/
./usr/lib/
./usr/lib/python3.7/
./usr/lib/python3.7/lib-dynload/
./usr/lib/python3.7/lib-dynload/_tkinter.cpython-37m-aarch64-linux-gnu.so
./usr/lib/python3.7/tkinter/
./usr/lib/python3.7/tkinter/__init__.py
./usr/lib/python3.7/tkinter/__main__.py
./usr/lib/python3.7/tkinter/colorchooser.py
./usr/lib/python3.7/tkinter/commondialog.py
./usr/lib/python3.7/tkinter/constants.py
./usr/lib/python3.7/tkinter/dialog.py
./usr/lib/python3.7/tkinter/dnd.py
./usr/lib/python3.7/tkinter/filedialog.py
./usr/lib/python3.7/tkinter/font.py
./usr/lib/python3.7/tkinter/messagebox.py
./usr/lib/python3.7/tkinter/scrolledtext.py
./usr/lib/python3.7/tkinter/simpledialog.py
./usr/lib/python3.7/tkinter/tix.py
./usr/lib/python3.7/tkinter/ttk.py
./usr/share/
./usr/share/doc/
./usr/share/doc/python3-tk/
./usr/share/doc/python3-tk/README.Debian
./usr/share/doc/python3-tk/README.Tk
./usr/share/doc/python3-tk/changelog.Debian.gz
./usr/share/doc/python3-tk/copyright
./usr/share/lintian/
./usr/share/lintian/overrides/
./usr/share/lintian/overrides/python3-tk
查看解压后的文件夹
# tree file_decode
file_decode
└── usr
├── lib
│ └── python3.7
│ ├── lib-dynload
│ │ └── _tkinter.cpython-37m-aarch64-linux-gnu.so
│ └── tkinter
│ ├── colorchooser.py
│ ├── commondialog.py
│ ├── constants.py
│ ├── dialog.py
│ ├── dnd.py
│ ├── filedialog.py
│ ├── font.py
│ ├── __init__.py
│ ├── __main__.py
│ ├── messagebox.py
│ ├── scrolledtext.py
│ ├── simpledialog.py
│ ├── tix.py
│ └── ttk.py
├── local
│ └── bin
│ ├── background.png
│ └── file-decode.py
└── share
├── applications
│ └── file-decode.desktop
├── doc
│ └── python3-tk
│ ├── changelog.Debian.gz
│ ├── copyright
│ ├── README.Debian
│ └── README.Tk
└── lintian
└── overrides
└── python3-tk
13 directories, 24 files
现在还缺少控制文件,可以创建一个,也可以直接从deb包中解压出来然后修改,本次我们直接使用原来的控制文件使用参数-e
dpkg -e file_decode-1.0.0.deb file_decode/DEBIAN
查看解压后的控制文件
# cat file_decode/DEBIAN/control
Package: file-decode
Version: 1.0.0
Architecture: all
Essential: no
Section: utils
Priority: optional
Maintainer: paic.com.cn
Description: file utf decode gbk
使用新的文件夹打包成一个deb
e# dpkg -b file_decode/ file_decode-2.0.0.deb
dpkg-deb: 正在 'file_decode-2.0.0.deb' 中构建软件包 'file-decode'。
使用新打包的deb安装即可,安装一个deb包相对于安装了刚刚合并的两个deb包
# dpkg -i file_decode-2.0.0.deb
提示:如果一次性打包的deb过多,可以编写一个脚本执行