【Linux下qt软件安装打包附带问题: dpkg: error processing package xxxx +解决方式+自我尝试+记录】

【Linux下qt软件安装打包附带问题: dpkg: error processing package xxxx +解决方式+自我尝试+记录】

  • 1、前言
  • 2、实验环境
  • 3、问题说明
  • 4、我的努力与查到解决的方式
      • (1)补充两个文件,让软件正常执行
      • (2)尝试修复dpkg状态
      • (3)网上的查到解法-修复。
  • 5、解决方式-致谢
  • 6、补充-postrm文件写法
  • 7、总结

1、前言

  • 第一篇:使用linuxdeployqt软件生成
  • 第二篇:桌面文件.desktop,文件编写与软件图标
  • 第三篇:打包生成安装的包(.deb)

记得之前 学会了使用linuxdeployqt软件生成,打包,已经安装等各种细节,使用一个“test demo” 工程样例,来实现以及说明相关操作流程。但是后在使用的时候,发现使用apt-get install 安装一些软件的时候,dpkg报了错误。就是受到了样例工程影响,本次为记录相关方式,以及自己努力方式。

2、实验环境

实验环境还是挺重要的,因为有时候,在你电脑上能运行的东西,在别人的电脑就不一定能运行,这一部分的原因就可能是实验版本不一样,另外也发现其他小伙伴,也会问些问题,之前有人大致环境装的和我差不多,当时是win的环境,结果编译遇到问题,就跑过来问是不是环境不对,这还是要具体问题具体分析的,当时看了看,发现是其他问题,总的来说,环境还是挺重要的。
系统环境:
环境问题还是要注意下的,不同环境下可能还真的可能不一样。
在这里插入图片描述

QT软件版本环境: Linux qt环境

在这里插入图片描述

3、问题说明

如下图所示,在安装一个包名为“v4l-utils” 的视频捕捉相关设备的时候,报错如下。
在这里插入图片描述

robot@robot-xxx:~/Downloads$ sudo apt install v4l-utils -y
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libv4l2rds0
The following packages will be REMOVED:
  test
The following NEW packages will be installed:
  libv4l2rds0 v4l-utils
0 upgraded, 2 newly installed, 1 to remove and 116 not upgraded.
1 not fully installed or removed.
Need to get 0 B/602 kB of archives.
After this operation, 1,750 kB of additional disk space will be used.
(Reading database ... 299473 files and directories currently installed.)
Removing test (0.1.0) ...
rm: cannot remove '/usr/share/applications/test1_hello.desktop': No such file or
 directory
rm: cannot remove '/root/Desktop/test1_hello.desktop': No such file or directory
dpkg: error processing package test (--remove):
 installed test package post-removal script subprocess returned error exit status 1
dpkg: too many errors, stopping
Errors were encountered while processing:
 test
Processing was halted because there were too many errors.
E: Sub-process /usr/bin/dpkg returned an error code (1)

看习惯了Linux相关问题后,渐渐能够理解哪部分使我们需要内容了,主要是下内容。

rm: cannot remove '/usr/share/applications/test1_hello.desktop': No such file or
 directory
rm: cannot remove '/root/Desktop/test1_hello.desktop': No such file or directory
dpkg: error processing package test (--remove):
 installed test package post-removal script subprocess returned error exit status 1
dpkg: too many errors, stopping
Errors were encountered while processing:
 test
Processing was halted because there were too many errors.
E: Sub-process /usr/bin/dpkg returned an error code (1)

上述问题主要是我们之前的demo test工程,有两个文件移除失败,到时dpkg错误太多,无法运行。

这个问题出现在尝试使用apt或dpkg安装、更新或移除软件包时。具体来说,当尝试安装v4l-utils软件包时,apt也尝试移除名为test的软件包。在移除test软件包的过程中,其postrm(post-removal script)脚本遇到了错误,因为它试图删除不存在的文件(/usr/share/applications/test1_hello.desktop和/root/Desktop/test1_hello.desktop),导致脚本返回了错误状态1,从而使整个处理过程中断。

4、我的努力与查到解决的方式

(1)补充两个文件,让软件正常执行

既然大致理解了,出现问题的原因,那么移除两个文件失败,首先就是能想到的,假装这两个文件,补充其全这两个文件,然后正常执行删除流程。
实际在对应位置尝试了

/usr/share/applications/
/root/Desktop/

创建文件命令如下

sudo vim test1_hello.desktop

在目录创建后,确实解决了此问题。

/usr/share/applications/test1_hello.desktop

但是如下目录却有些问题,实际自己发现没有这个目录,并且要是进入此目录,需要进入su模式。

/root/Desktop/test1_hello.desktop

尝试过后,此方式并没有解决。

(2)尝试修复dpkg状态

1、使用如下命令,这个命令尝试强制移除test软件包,即使它的状态被标记为重新安装请求(reinstreq)。

sudo dpkg --remove --force-remove-reinstreq test

2、清理和更新软件包状态

sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get update

3、之后再次尝试安装软件

sudo apt-get install v4l-utils -y

发现依然不行。

(3)网上的查到解法-修复。

主要是使用如下两个命令,

dpkg-reconfigure -a
apt-get -f install

两个命令解释如下。

命令:dpkg-reconfigure -a

  1. dpkg-reconfigure 是一个用于重新配置一个已安装的包的命令。如果某个软件包在安装时有配置步骤,使用 dpkg-reconfigure 可以重新启动这些配置步骤,让用户可以更改之前的选择。
  2. -a 选项告诉 dpkg-reconfigure 命令重新配置所有已安装的包。这个操作可能会非常耗时,因为它会遍历系统上所有已安装的包,并且对于那些有配置选项的包,会重新启动其配置过程。
  3. 这个命令通常在包的默认配置需要修改,或者在一些特殊情况下,如配置文件损坏或更改后需要还原时使用。

命令:apt-get -f install

  1. apt-get 是Debian及其衍生系统中的软件包管理工具,用于安装、更新、升级和删除软件包。
  2. -f 选项,也就是 --fix-broken 的简写,用于修复因依赖关系问题而未能正确安装的包。这个命令会尝试自动修复这些问题,通过安装缺失的依赖、重新配置包或者在必要时删除有问题的包来达到这个目的。
  3. install 没有紧随包名时,意味着 apt-get -f install 将不会安装新的软件包,而是专注于修复现有的软件包安装问题。

如下是参考连接,可能因为网络限制无法访问。

https://askubuntu.com/questions/603493/apt-get-dependency-issue-open-ssh-client
在这里插入图片描述

尝试后发现以下方式也不行。

5、解决方式-致谢

最后参照了CSDN上的方式,这种方式解决的,自己理解是删除了相关记录的文件。
参考文章:https://blog.csdn.net/qq_39029221/article/details/120193413

命令:

sudo mv /var/lib/dpkg/info/ /var/lib/dpkg/info_old/ 
sudo mkdir /var/lib/dpkg/info/ 
sudo apt-get update
sudo apt-get -f install

在这里插入图片描述

6、补充-postrm文件写法

如下是之前参考第三章里的连接。
之前为了方便porstrm我们写的比较方便,但是它其实是postinst的逆过程,我们将postrm里内容更新,不再出上述错误。

#!/bin/sh

# 删除应用程序启动器目录中的.desktop文件
rm -f /usr/share/applications/test-my-demo.desktop

# 尝试删除当前用户的桌面目录中的.desktop文件
DESKTOP_DIR="$HOME/Desktop"
if [ -f "$DESKTOP_DIR/test-my-demo.desktop" ]; then
    rm -f "$DESKTOP_DIR/test-my-demo.desktop"
fi

# 尝试删除其他可能的位置中的.desktop文件
# 注意:在卸载包时,$SUDO_USER可能不会被正确设置,特别是在图形界面下的卸载过程中
# 如果可能,尝试检测并删除所有潜在用户桌面上的文件

# 删除 /home 下所有用户桌面目录中的.desktop文件
for dir in /home/*; do
    if [ -d "$dir/Desktop" ] && [ -f "$dir/Desktop/test-my-demo.desktop" ]; then
        rm -f "$dir/Desktop/test-my-demo.desktop"
    fi
done

# 如果是以root用户运行,尝试删除root的桌面目录中的.desktop文件
if [ -f "/root/Desktop/test-my-demo.desktop" ]; then
    rm -f "/root/Desktop/test-my-demo.desktop"
fi

exit 0

注意点:

  1. 权限问题:确保postrm脚本有适当的权限执行删除操作。这可能需要软件包在卸载时具有root权限。
  2. 用户目录的处理:由于 H O M E 和 HOME和 HOMESUDO_USER在postrm脚本中可能不可靠,特别是在图形界面环境下,脚本尝试遍历/home/*目录来寻找所有用户的桌面目录并尝试删除.desktop文件。这种方法可能会删除多个用户的桌面快捷方式,需要谨慎使用。
  3. 桌面目录的存在性:脚本检查桌面目录是否存在,并且.desktop文件是否真的在那里,然后才进行删除操作。
  4. 错误处理:使用-f选项调用rm以避免因文件不存在而产生错误信息。
  5. 这个postrm脚本是一个基础的实现,根据实际情况可能需要进一步的定制化。特别是对于多用户环境,可能需要更细致地处理每个用户的情况。

7、总结

细微之处还不能全部理解,一点点踩坑多使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/457724.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot+vue学生选课系统 java+ssm+idea+_mysql

系统包含三种角色:管理员、老师、学生,系统分为前台和后台两大模块,主要功能如下。 ide工具:IDEA 或者eclipse 编程语言: java 学生网上选课系统可以实现教室管理,老师管理,课程管理,教学计划管…

为什么我接不到大单?

以前的领导创业多年,今天找我聊了一下想让我跟他一起做点事情,聊了一下我的现状,突然让我明白为何我一直都接不到大单了 说起来也不是完全没有好的机会,貌似有点像“公交车定律”,当我很忙碌的时候订单一个接一个&…

闯关升级游戏特点,闯关小程序游戏开发

闯关升级类游戏一直以来都备受玩家青睐,其独特的游戏性和吸引力让人们乐此不疲。这类游戏以挑战性关卡和角色成长为核心,让玩家在不断的冒险中获得成就感与乐趣。让我们一起深入探讨这类游戏的特点,以及为何它们如此受欢迎。 挑战性关卡设计…

C语言中内存函数的使用

memcpy函数的使用和模拟实现 memcpy的使用 函数使用说明: • 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 • 这个函数在遇到 \0 的时候并不会停下来。 • 如果source和destination有任何的重叠,复制的结…

提升数据分析效率,选择IBM SPSS Statistics专业统计分析软件

在当今信息爆炸的时代,数据已经成为决策的重要依据。对于研究人员、学者、企业管理者等群体来说,如何高效地进行数据分析并得出准确结论至关重要。而IBM SPSS Statistics作为一款专业统计分析软件,为用户提供了强大的工具和功能,助…

【SQL】1084. 销售分析III (多种解法;is null 和 =null 的区别图示 )

前述 知识点学习:MySQL 中 is null 和 null 的区别 题目描述 leetcode题目: 1084. 销售分析III 写法一 思路:“所有售出日期都在这个时间内”,也就是“在这个时间内售出的商品数量等于总商品数量” -- 解法1:ACCE…

【深度学习】diffusers 学习过程记录,StableDiffusion扩散原理

教程地址:https://huggingface.co/docs/diffusers/quicktour 文章目录 环境扩散模型噪声残差的作用原理,文字编码如何给入Unetschedulerguidance_scalescheduler.init_noise_sigma训练时候的反向传播 环境 python3.10安装环境: pip install…

Gitee配置SSH登录

一、背景 新入手的电脑,需要对Gitee上存放的项目进行更改上传,发现上传不了需要登录,便采用SSH密钥进行登录,防止远程管理工程中的信息泄露 二、前提 电脑已下载Git Bash工具,在项目下点击鼠标右键,进入…

halconOCR文字识别

1、OCR文字识别 FontFile : Universal_0-9_NoRej dev_update_window (off) read_image (bottle, bottle2) get_image_size (bottle, Width, Height) dev_open_window (0, 0, Width, Height, black, WindowHandle) set_display_font (WindowHandle, 16, mono, true, false) dev…

适用于系统版本:CentOS 6/7/8的基线安全检测脚本

#!/bin/bash #适用于系统版本:CentOS 6/7/8 echo "----------------检测是否符合密码复杂度要求----------------" #把minlen(密码最小长度)设置为8-32位,把minclass(至少包含小写字母、大写字母、数字、特殊…

JVM及垃圾回收算法

一、JVM 1、jvm的内存组成 五大内存区域,分1.7和1.8 1.堆内存:引用类型的数据,内部组成:1.新生代(伊甸区和幸存者区)2.老年代。该区域经常发生垃圾回收的操作 堆是JVM中最大的一块内存区域,用…

mac安全干净卸载Anaconda3

使用which python显示当前使用的是/Users/username/anaconda3/bin/python 现在想卸载Anaconda,恢复使用mac系统自带的Python 删除隐藏文件目录 rm -rf ~/.anaconda修改~/.bash_profile文件,将anaconda相关删除 也有可能不是~/.bash_profile而是~/.zs…

声卡喊话IP喇叭,IP网络吸顶天花喇叭

声卡喊话IP喇叭,IP网络吸顶天花喇叭 SV-7043VP是一款ip/sip网络吸顶喇叭,具有10/100M以太网接口,从网络接口接收网络的音频数据后播放。本网络吸顶喇叭可以与其他广播主机、服务器软件和采播主机配合使用,实现音频的播放&#xf…

【DL经典回顾】深度学习概述

深度学习概述 一、引言 在过去的几年里,深度学习已经从学术研究的领域走向了主流,彻底改变了我们对人工智能的认识和应用。这种强大的技术,以其独特的能力模仿人脑处理和分析复杂数据的方式,不仅在科学界引起了革命,…

ThingsBoard Edge 安装部署

文章目录 一、概述1.官方文档2.部署说明3.安装准备3.1. 克隆服务器3.2.安装 Docker3.3.安装 Java 113.4.安装 PostgreSQL3.5.下载安装包 二、安装部署1.创建 Edge 实例2.创建数据库3.Edge 服务安装3.1.安装服务3.2.配置 Edge3.3.运行安装脚本3.4.重新启动服务 4.访问 Edge5.故障…

基于PHP的数字化档案管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的数字化档案管理系统 一 介绍 此数字化档案管理系统基于原生PHP,MVC架构开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 php(mvc)mysqlbootstrapphpstudyvscode 二 功能 …

django-comment-migrate 模型注释的使用

django-comment-migrate 的使用 django-comment-migrate 是一个 Django 应用,用于将模型注释自动迁移到数据库表注释中。它可以帮助您保持数据库表注释与模型定义的一致性,并提高代码的可读性。 安装 要使用 django-comment-migrate,您需要…

Arcgis新建位置分配求解最佳商店位置

背景 借用Arcgis帮助文档中的说明:在本练习中,您将为连锁零售店选择可以获得最大业务量的商店位置。主要目标是要将商店定位在人口集中地区附近,因为这种区域对商店的需求量较大。设立这一目标的前提是假设人们往往更多光顾附近的商店,而对于距离较远的商店则较少光顾。您…

C++学习随笔(5)——类和对象的深窥

本章我们来学习一下更深入了解一下类和对象! 目录 1.类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 5.赋值运算符重载 5.1 运算符重载 5.2 赋值运算符重载 5.3 前置和后置重载…

一键切割,激发无限创意:体验全新图片批量编辑器

在数字创意的时代,图片编辑成为了表达个性和创造力的关键。然而,传统的图片编辑工具常常让人望而生畏,复杂的操作和高门槛的技术要求使得许多人望而却步。现在,我们为您带来一款全新的图片批量编辑器,只需一键切割&…
最新文章