来自: http://lnmp.ailinux.net/dpkg-deb

1 dpkg

(1) 语法

  1. dpkg (选项) (参数)
  2. 参数: 指定要操作的.deb软件包。

(2) 选项

  1. -i:安装软件包;
  2. -r:删除软件包;
  3. -P:删除软件包的同时删除其配置文件;
  4. -L:显示于软件包关联的文件;
  5. -l:显示已安装软件包列表;
  6. --unpack:解开软件包;
  7. -c:显示软件包内文件列表;
  8. --confiugre:配置软件包。

(3) 示例

  1. dpkg -i package.deb # 安装包
  2. dpkg -r package # 删除包
  3. dpkg -P package # 删除包(包括配置文件)
  4. dpkg -L package # 列出与该包关联的文件
  5. dpkg -l package # 显示该包的版本
  6. dpkg --unpack package.deb # 解开deb包的内容
  7. dpkg -S keyword # 搜索所属的包内容
  8. dpkg -l # 列出当前已安装的包
  9. dpkg -c package.deb # 列出deb包的内容
  10. dpkg --configure package # 配置包

image.png

2 dpkg-deb

(1) 语法

dpkg-deb命令是Debian Linux下的软件包管理工具,它可以对软件包执行打包和解包操作以及提供软件包信息。

(2) 选项

  1. -c:显示软件包中的文件列表;
  2. -e:将主控信息解压;
  3. -f:把字段内容打印到标准输出;
  4. -x:将软件包中的文件释放到指定目录下;
  5. -X:将软件包中的文件释放到指定目录下,并显示释放文件的详细过程;
  6. -W:显示软件包的信息;
  7. -l:显示软件包的详细信息;
  8. -R:提取控制信息和存档的清单文件;
  9. -b:创建debian软件包。(--build)

(3) 示例

  1. dpkg-deb -b WS1.2.3-1 # 把文件夹打包为deb软件包, 包名为WS1.2.3-1

0 打包deb专用py脚本

  1. import shutil
  2. import os
  3. controlText = """Package: ws
  4. Version: 1.262-1
  5. Section: base
  6. Priority: optional
  7. Architecture: amd64
  8. Depends: python3 (>= 3.8.0)
  9. Maintainer: Wang Shuang <ws156858@163.com>
  10. Description: it's a demo
  11. """
  12. serviceText = """[Unit]
  13. Description=WS-Service
  14. [Service]
  15. WorkingDirectory=/usr/local/WS
  16. User=root
  17. Type=simple
  18. ExecStartPre=/bin/sleep 20
  19. ExecStart=python3 /home/hello.py
  20. Restart=always
  21. [Install]
  22. WantedBy=multi-user.target
  23. """
  24. postinst = """#!/bin/bash
  25. echo "postinst"
  26. """
  27. version = '1.2.3'
  28. targetName = f"WS{version}-1"
  29. shutil.rmtree(targetName, True)
  30. try:
  31. os.remove(targetName + ".deb")
  32. except:
  33. pass
  34. os.makedirs(targetName, exist_ok=True)
  35. os.makedirs(os.path.join(targetName, 'usr/local/WS/'), exist_ok=True)
  36. os.makedirs(os.path.join(targetName, 'etc/WS/'), exist_ok=True)
  37. os.makedirs(os.path.join(targetName, 'DEBIAN'), exist_ok=True)
  38. os.makedirs(os.path.join(targetName, 'lib/systemd/system'), exist_ok=True)
  39. with open(f"{targetName}/DEBIAN/control", 'w') as f:
  40. f.write(controlText)
  41. with open(f"{targetName}/DEBIAN/postinst", 'w') as f:
  42. f.write(postinst)
  43. os.chmod(f"{targetName}/DEBIAN/postinst", 0o755)
  44. with open(f"{targetName}/lib/systemd/system/ws.service", 'w') as f:
  45. f.write(serviceText)
  46. os.system(f"dpkg-deb --build {targetName}")