• 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过多,可以编写一个脚本执行

  • 相关阅读:
    JS和jQuery获取节点的兄弟,父级,子级元素
    HTTP协议详解
    HTML5自定义属性对象Dataset
    当你输入一个网址后都发生什么
    javascript实现ajax
    第一次项目总结
    CSS简单布局总结
    animate.css总结
    自定义动画
    CSS 第四天 多重背景 变形 过渡
  • 原文地址:https://www.cnblogs.com/minseo/p/16085440.html
Copyright © 2020-2023  润新知