【问题标题】:Get a List of conffiles in a deb package in python在python中获取deb包中的conffiles列表
【发布时间】:2011-11-05 19:12:03
【问题描述】:

我想使用 python 获取与 deb 包关联的配置文件列表。我正在开发一个项目,我需要知道是否修改了包安装的任何 conffile,因此我需要有一个包安装的 conffile 列表,以便我可以使用它来查看哪些 conffile 已被修改。

我尝试使用python-apt library documentation,但找不到任何方法,请建议我这样做。我知道我可以提取控制信息并读取原始 conffiles 文件,但我认为库本身可能有一个方法。

【问题讨论】:

  • /var/lib/dpkg/info/.conffiles,是的,不是很优雅,但它可以工作
  • 是的,这是一种获取配置文件列表的方法,但它不适用于尚未安装的软件包。我认为 python-apt 库中可能有一个更优雅的方法。

标签: python package apt


【解决方案1】:

这是在 python-apt 上的挤压测试: 我使用的包是:

http://ftp.debian.org/debian/pool/main/o/openssh/openssh-server_5.5p1-6+squeeze1_amd64.deb

from apt.debfile import DebPackage
ssh = DebPackage('openssh-server_5.5p1-6+squeeze1_amd64.deb')
print ssh.control_content('conffiles').split('\n')

[u'/etc/init.d/ssh', u'/etc/default/ssh', u'/etc/network/if-up.d/openssh-server', u'/etc/ufw/applications.d/openssh-server', u'/etc/pam.d/sshd', u'']

你需要去掉最后一个

print ssh.data_content('etc/init.d/ssh')
u'#! /bin/sh\n\n### BEGIN INIT INFO\n#......'

你需要去掉第一个斜线

【讨论】:

  • 'u'的作用是什么/etc/init.d/ssh\n/etc/default/ssh\n/etc/network/if-up.d/openssh-server\n /etc/ufw/applications.d/openssh-server\n/etc/pam.d/sshd\n' ?此代码未显示配置文件列表
  • ssh.control_content('conffiles').split('\n'),你会得到一个 conf 文件列表,control_content 提取 'conffiles' 文件,它就是一个带有列表的文本文件每行一个 conf 文件
  • 好的。我已将您的答案标记为答案,但它仍然对我不起作用我试图打印 ssh,control_content('conffiles') 的输出,但它没有打印任何内容你能建议我该怎么做吗?
  • 你也需要内容吗?
  • 是的,它确实适用于您给定的 deb 文件,但不适用于我的 deb 文件,我发现这是因为软件包在控制数据中不包含 conffiles 文件。我已经使用 dpkg-repack 创建了软件包,我认为它也会打包 conffiles。不是吗?
【解决方案2】:

状态标志

dpkg --status bash

【讨论】:

  • 谢谢 Andrew,但我需要使用 python-apt 库来做到这一点。
猜你喜欢
  • 1970-01-01
  • 2019-05-15
  • 2018-08-23
  • 1970-01-01
  • 2012-12-12
  • 2016-04-15
  • 2017-06-27
  • 2011-08-16
  • 2022-10-12
相关资源
最近更新 更多