dpkg-deb: error: archive 'xxxxx.deb' has premature member 'control.tar.xz' before 'control.tar.gz'

本文解决dpkg在处理tar.xz格式control文件时的错误,更新dpkg到1.17.5ubuntu5.8或以上版本可修复此bug。同时,为提高软件包兼容性,建议使用gz压缩control部分,使用xz压缩data部分。

安装dpkg报错:

dpkg-deb: error: archive 'xxxxx.deb' has premature member 'control.tar.xz' before 'control.tar.gz' ,giving up

这个问题的原因是:dpkg无法解析tar.xz格式的control.tar.xz文件。
解决方案:
更新dpkg即可,这是dpkg工具的bug,只在旧版的dpkg会出现这个问题。在dpkg_1.17.5ubuntu5.8以及之后的版本都不会出现这个问题,dpkg_1.17.5ubuntu5.8这个版本也是ubuntu14.04自带源内的版本。

旧版的系统上更新dpkg就可以解决

软件的提供者

对于软件安装包的提供者而言,一定是希望安装包具有更好的兼容性。最好可以使用xz压缩data部分,仍然用gzip打control部分。旧版的dpkg-deb,默认会把control和data分开用不同的格式打包,control默认始终使用gzip的格式打包。而新版的dpkg-deb(1.19.0)之后都会使用相同的格式压缩control和data。如果你指定了-Z xz ,那就都是xz。

还好,dpkg-deb提供了一个参数:--no-uniform-compression加上这一句就可以了。

默认是:--uniform-compression,代表使用统一的格式进行压缩。加上--no-uniform-compression后不再统一,control使用gz压缩。
详见:http://www.tin.org/bin/man.cgi?section=1&topic=dpkg-deb

### 使用 dpkg-deb 打包 gz 格式的 data 和 control 文件 在使用 `dpkg-deb` 工具打包时,确实可以将 `.gz` 格式的数据和控制文件进行打包。以下是具体方法及需要注意的条件或限制: #### 1. **数据和控制文件的压缩格式** 默认情况下,旧版的 `dpkg-deb`(例如版本低于 1.19.0)会分别对 `control` 和 `data` 部分使用不同的压缩格式。其中,`control` 部分始终使用 `gzip` 压缩[^1]。然而,从新版 `dpkg-deb`(1.19.0 及以上版本)开始,默认会统一使用相同的压缩格式来处理 `control` 和 `data` 部分。如果用户明确指定 `-Z xz` 参数,则两者都会被压缩为 `xz` 格式[^1]。 因此,若希望直接使用 `gz` 格式压缩 `data` 和 `control` 文件,可以省略 `-Z` 参数或明确指定 `-Z gzip`。例如: ```bash dpkg-deb --build -Z gzip package_directory output.deb ``` #### 2. **打包目录结构** 为了正确生成 `.deb` 包,需要确保目录结构符合规范。通常的目录结构如下: ``` package_directory/ ├── DEBIAN/ │ └── control # 必须是未压缩的文本文件 ├── usr/ │ └── bin/ │ └── your_program └── etc/ └── your_config_file ``` - `DEBIAN/control` 文件必须以纯文本形式存在,不能预先压缩为 `.gz` 格式[^4]。 - `data.tar.gz` 是由 `dpkg-deb` 自动生成的,包含除 `DEBIAN` 目录之外的所有文件。 #### 3. **注意事项与限制** - 如果手动预压缩了 `control` 或 `data` 文件(例如将其命名为 `control.tar.gz` 或 `data.tar.gz`),可能会导致错误,如 `dpkg-deb: error: archive '<file>.deb' has premature member 'data.tar.gz' before`[^3]。因此,应避免手动干预这些文件的生成过程。 - 在较新的 `dpkg-deb` 版本中,即使未指定 `-Z` 参数,工具也会自动选择合适的压缩算法。但为了确保兼容性,建议显式指定 `-Z gzip`[^1]。 - `control` 文件的内容必须严格遵循 `.deb` 包的描述规范,包括 `Package`、`Version`、`Architecture` 等字段的定义[^4]。 #### 示例代码 以下是一个完整的打包命令示例: ```bash # 创建 DEBIAN/control 文件 echo "Package: mypackage Version: 1.0 Section: utils Priority: optional Architecture: all Installed-Size: 100 Maintainer: Your Name <your.email@example.com> Description: A simple example package" > package_directory/DEBIAN/control # 构建 .debdpkg-deb --build -Z gzip package_directory output.deb ``` ###
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值