
零、问题描述
直接见如下内容
apt-get install lrzsz
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Suggested packages:
minicom
The following NEW packages will be installed:
lrzsz
0 upgraded, 1 newly installed, 0 to remove and 246 not upgraded.
8 not fully installed or removed.
Need to get 0 B/74.8 kB of archives.
After this operation, 531 kB of additional disk space will be used.
Setting up libc6:amd64 (2.35-0ubuntu3.11) ...
dpkg: error processing package libc6:amd64 (--configure):
installed libc6:amd64 package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
libc6:amd64
E: Sub-process /usr/bin/dpkg returned an error code (1)
让我们来分析这个报错,但首先需要有这样 3 个补充知识
一是 apt 在安装软件包之前,会检测系统是否有未处理好的历史安装和配置情况,如果存在会先尝试处理这些问题(这样设计的原因是这样使得整体系统变得更加稳定)。
这对应了上面内容中 8 not fully installed or removed 这一部分,而这里面就包括 libc6:amd64,所以 apt 在安装其他软件前需要先来处理 libc6:amd64 的遗留问题。
二是 apt-get 是依赖于 dpkg 来工作的:
dpkg是 Debian/Ubuntu 系统中最底层的包管理工具,负责直接处理.deb包的安装、卸载、配置等核心操作(例如解压包文件、执行维护脚本、更新包状态数据库等)
apt-get是更高层次的工具,它的主要作用是解决包依赖关系、从软件源下载.deb包,但其最终执行 “安装 / 配置包” 的实际操作时,必须调用dpkg来完成
所以调用 apt-get 的时候,才会显示 dpkg: error...。
三是 dpkg 提供了 postinst 脚本机制,用来在安装或升级软件包时触发的 “后置操作”。而这里的问题,正是后置操作返回了状态 1 返回码(非 0 即为异常)。(对应 post-installation script subprocess returned error exit status 1)
一、预备知识:关于 dpkg 安装状态流转
如果想理解这个问题,必须先对 dpkg 安装软件的流程有所了解。dpkg -i 如果正确安装软件,其流程概述如下
- 软件状态存储在
/var/lib/dpkg/status文件中(所有已安装和安装中的软件都会有记录),在一个软件安装中会上锁,所以 debian 系列系统都无法并行使用dpkg命令操作两个软件 - 初始状态为
not-installed,开始进行解包操作(解包过程中处于half-installed状态).deb包为ar归档格式- 提取控制信息(如
control文件)到/var/lib/dpkg/info/等目录,用于后续配置和状态记录 - 软件内容会先解包到临时文件
/var/lib/dpkg/tmp.ci/中 - 然后依据解包时的目录结构,把对应数据文件(例如可执行文件等)拷贝到对应目录
- 解包操作成功后进入
unpacked状态,开始进行配置(configure)操作(配置过程中处于half-configured状态)- 运行包内
DEBIAN/postinst脚本(如创建用户、初始化服务、配置环境变量等) - 处理配置文件(如合并用户自定义配置与默认配置,例如升级时不能覆盖已有的配置文件)
- 更新包依赖关系记录,确保系统依赖状态一致性(
/var/lib/dpkg/status和/var/lib/dpkg/available文件)
- 运行包内
- 如果配置不报错,就会进入
installed状态,这个状态就是安装完成状态
完整的状态流转如下,包含安装、卸载和一些异常状态:

最低0.47元/天 解锁文章
1144

被折叠的 条评论
为什么被折叠?



