dpkg:警告:无法找到软件包 XXX的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。(详细的解决过程)

2023-11-16

1.问题描述:在使用sudo apt-get update 和upgrade中会出现:

dpkg:警告:无法找到软件包ca-certificates 的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。

dpkg:警告:无法找到软件包libgstreamer-plugins-good1.0-0:amd64 的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。

dpkg:警告:无法找到软件包libopencv-video-dev:amd64 的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。

dpkg:警告:无法找到软件包libkf5sonnet5-data 的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。

dpkg:警告:无法找到软件包fcitx-libs 的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。

dpkg:警告:无法找到软件包fonts-tlwg-loma 的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。

dpkg:警告:无法找到软件包fonts-tibetan-machine 的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。

dpkg:警告:无法找到软件包libpango-perl 的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。

dpkg:警告:无法找到软件包libacl1:amd64 的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。

 

这里我只摘了一小部分,无法找到软件包就是在系统中的全部软件,问题的本质就是dpkg和软件包之间的链接本打断;

2.问题前身

出现这个问题的前身是在处理某个程序时,出现了:

E: Sub-process /usr/bin/dpkg returned anerror code (1)

 

而这个错误网上似乎只有一种解决办法:

cd /var/lib/dpkg

sudo mv info info.bak #即备份一个info

sudo mkdir info #新建一个新的info目录

然后采用以下命令重装那些出错的软件包

sudo apt-get –reinstallinstall 软件包名

开始我是想在一条命令中同时安装几个软件包,结果还是出现E: Sub-process/usr/bin/dpkg returned an error code (1) 。于是把新的info删掉,一个个地来安装,每装好一个软件包,就把info删掉,再新建一个,这样就没有提示E: Sub-process/usr/bin/dpkg returned an error code (1) 了。

最后用原来的info.bak 替换新的info

sudo -rf info

sudo mv info.bak info

之后输入 sudo apt-get update sudo apt-get upgrade 以及sudo apt-get autoremove都不再有E: Sub-process/usr/bin/dpkg returned an error code (1)

 

这里先说明updateupgrade的区别:
1、apt-get update是同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。 
2、apt-get update只是更新了apt的资源列表,没有真正的对系统执行更新。如果需要,要使用apt-get upgrade来更新。

 

问题本身是dpkg的依赖关系的话,那定位到是什么依赖被打断是解决这个问题的关键,一些小问题可以直接用这个命令来自动修复被无意间打断的依赖:

 

sudo apt-get -finstall 

 

3.多个内核依赖错误

在我现在遇到的问题当中,整个ubuntu出现同时使用了多个内核镜像,这些镜像又被一个程序依赖,直接删掉导致了内核的使用上面命令不能更新成功,而被依赖的4个内核镜像如果同时安装,报出来的问题就是磁盘空间不足,出现这个的原因是每次ubuntu内核升级后,旧的内核不会被删除,久而久之就会积压很多旧的内核,查看已经安装的内核版本

dpkg --get-selections| grep linux-image

linux-image-4.10.0-28-generic                        deinstall

linux-image-4.10.0-33-generic                        deinstall

linux-image-4.10.0-35-generic                        deinstall

linux-image-4.10.0-37-generic                        deinstall

linux-image-4.13.0-36-generic                        install

linux-image-4.13.0-37-generic                        install

linux-image-4.13.0-38-generic                        install

linux-image-4.13.0-39-generic                        install

linux-image-4.4.0-119-generic                        install

linux-image-extra-4.10.0-28-generic             deinstall

linux-image-extra-4.10.0-33-generic             deinstall

linux-image-extra-4.10.0-35-generic             deinstall

linux-image-extra-4.10.0-37-generic             deinstall

linux-image-extra-4.13.0-36-generic             install

linux-image-extra-4.13.0-37-generic             install

linux-image-extra-4.13.0-38-generic             install

linux-image-extra-4.13.0-39-generic             install

linux-image-extra-4.4.0-119-generic             install

linux-image-extra-4.4.0-121-generic             install

linux-image-extra-4.4.0-122-generic             install

linux-image-extra-4.4.0-124-generic             install

linux-image-extra-4.4.0-128-generic             install

linux-image-extra-4.4.0-130-generic             install

linux-image-generic                                  install

linux-image-generic-hwe-16.04                      install

 

uname –a 可以查看正在使用的内核:

Linux combustion-Super-Server4.13.0-38-generic #43~16.04.1-Ubuntu SMP Wed Mar 14 17:48:43 UTC 2018 x86_64x86_64 x86_64 GNU/Linux

 

 

解释下后面带的install和deinstall:

带install的是已经安装的,除了正在使用的可以全面删掉;

带deinstall的是没有安装的,但是卸载有残留;

 

处理:

带install的用:

sudo apt purgelinux-image-4.13.0-36-generic linux-image-4.13.0-37-generic

linux-image-4.13.0-39-generic

 

果然在执行过程中又遇到了不满足依赖的问题,那么先处理deinstall的吧:

sudo dpkg -P linux-image-4.10.0-28-generic

sudo dpkg -P linux-image-4.10.0-37-generic linux-image-4.10.0-35-genericlinux-image-4.10.0-37-generic

sudo dpkg -P linux-image-extra-4.10.0-28-genericlinux-image-extra-4.10.0-33-generic

sudo dpkg -P linux-image-extra-4.10.0-35-genericlinux-image-extra-4.10.0-37-generic

sudo dpkg -P linux-image-4.10.0-33-generic

将deinstall卸载之后:

linux-image-4.13.0-36-generic                        install

linux-image-4.13.0-37-generic                        install

linux-image-4.13.0-38-generic                        install

linux-image-4.13.0-39-generic                        install

linux-image-4.4.0-119-generic                        install

linux-image-extra-4.13.0-36-generic             install

linux-image-extra-4.13.0-37-generic             install

linux-image-extra-4.13.0-38-generic             install

linux-image-extra-4.13.0-39-generic             install

linux-image-extra-4.4.0-119-generic             install

linux-image-extra-4.4.0-121-generic             install

linux-image-extra-4.4.0-122-generic             install

linux-image-extra-4.4.0-124-generic             install

linux-image-extra-4.4.0-128-generic             install

linux-image-extra-4.4.0-130-generic             install

linux-image-generic                                  install

linux-image-generic-hwe-16.04                      install

 

再来处理install的:

sudo apt purge linux-image-4.13.0-36-generic

 

4./boot下空间不足

发现此时还是没法处理,报的是/boot下空间不足的错误:

1.       原因是这样:在修复的时候需要下载依赖包,然而在/boot下本来就没有多余的空间了,所以无法修复依赖的问题。

2.    这就产生死循环了,为了省出更多boot空间需要删除旧的内核,删除旧的内核时又需要修复一些依赖,修复依赖就需要下载依赖包,而boot空间下本来就满了,(

3.    解决办法就是先把boot空间下几个比较大的文件暂存到别的文件夹,腾出来足够的空间来修复依赖,等依赖修复好了并且删除了旧的内核后再迁移回来(如果文件没什么用处就不用迁移回来了)。

 

 

(这一段是参考博客:https://blog.csdn.net/qq_27818541/article/details/72675954

 

这里发现两个文件比较大,因为用的远程,所以用xftp拷出来之后就删掉了:

initrd.img-4.13.0-36-generic

initrd.img-4.4.0-119-generic

 

然后此时运行sudo apt-get –f install 就会发现卡死的齿轮有了松动的迹象;

不过还是会报错,在处理内核时出问题,这个时候因为依赖问题已经解决,dpkg的进程处理完成,使用sudo apt purge 将出错的那些内核全部删个干干净净,再用sudo ap-get autoremove 卸掉多于的那些内核依赖。

通过这一轮大的清洗,整个服务器的内核变得很清爽,查看一下:

linux-image-4.13.0-38-generic                        install

linux-image-4.13.0-39-generic                        install

linux-image-4.4.0-121-generic                        deinstall

linux-image-extra-4.13.0-38-generic             install

linux-image-extra-4.13.0-39-generic             install

linux-image-generic-hwe-16.04                      install

 

发现还可以进一步清理,当然,清理之前先备份:

这里发现文件很多,而且有很多都是不能拷出来的,只拷了当前使用的内核,这是备份的三个内核文件:

 

然后,就继续吧,对于deinstall:

sudo dpkg -P linux-image-4.4.0-121-generic

对于 install:

sudo apt purge linux-image-4.13.0-39-generic

 

 

这里出现一个有意思的事,在purge -39这个内核的时候,系统又自己把linux-image-4.15.0-24-generic内核装上了,然后又sudo aptpurge linux-image-4.15.0-24-generic

 

现在再查看安装的内核:dpkg --get-selections | grep linux-image

linux-image-4.13.0-38-generic                        install

linux-image-extra-4.13.0-38-generic             install

 

这里说明一点,在删内核的时候千万千万不要删错,如果删除,也不要贸然重启,这里有个血的教训,https://blog.csdn.net/sarkerson/article/details/76430975,当然了,不是我。

 

5.源的Hash 校验和不符

现在sudo apt-get update,嗯,源有点问题,把源也修一下吧:

忽略:1 https://repo.fdzh.org/chrome/deb stable InRelease

命中:2 https://repo.fdzh.org/chrome/deb stable Release                                                                                                     

命中:4 http://packages.osrfoundation.org/gazebo/ubuntu-stable xenialInRelease                                                                              

忽略:5 https://dl.google.com/linux/chrome/deb stable InRelease                                                                                             

命中:6 https://dl.google.com/linux/chrome/deb stable Release                                                                                               

命中:9 http://ppa.launchpad.net/ondrej/php/ubuntu xenial InRelease                                                                                         

获取:8 http://packages.ros.org/ros/ubuntu xenial InRelease [4,040B]                                                                                       

获取:10 http://10.6.251.2:9999/packages.ros.org/ros/ubuntu xenial/mainamd64 Packages [620 kB]                                                              

错误:10 http://10.6.251.2:9999/packages.ros.org/ros/ubuntu xenial/mainamd64 Packages                                                                      

 Hash 校验和不符

命中:11 http://ppa.launchpad.net/webupd8team/java/ubuntu xenialInRelease                                                                                  

命中:13 https://packages.microsoft.com/repos/vscode stableInRelease                                                                                    

命中:14 http://archive.ubuntukylin.com:10006/ubuntukylin xenialInRelease                               

命中:15 http://mirrors.ustc.edu.cn/ubuntu xenial InRelease       

命中:16 http://mirrors.ustc.edu.cn/ubuntu xenial-security InRelease   

命中:17 http://linux.teamviewer.com/deb stable InRelease              

命中:18 http://mirrors.ustc.edu.cn/ubuntu xenial-updates InRelease     

命中:19 http://mirrors.ustc.edu.cn/ubuntu xenial-proposed InRelease   

命中:20 http://linux.teamviewer.com/deb preview InRelease             

命中:21 http://mirrors.ustc.edu.cn/ubuntu xenial-backportsInRelease  

已下载 619 kB,耗时 4秒 (130 kB/s)                

正在读取软件包列表... 完成

E: 无法下载

http://10.6.251.2:9999/packages.ros.org/ros/ubuntu/dists/xenial/main/binary-amd64/Packages.gz  Hash 校验和不符

E: 无法下载

http://10.6.251.2:9999/packages.ros.org/ros/ubuntu/dists/xenial/main/binary-i386/Packages.gz 

E: 部分索引文件下载失败。如果忽略它们,那将转而使用旧的索引文件。

 

在上面的解释中,update执行的是索引的本地化,而查看本地的源

cat/etc/apt/sources.list

deb http://mirrors.ustc.edu.cn/ubuntu/xenial main restricted universe multiverse

deb http://mirrors.ustc.edu.cn/ubuntu/xenial-security main restricted universe multiverse

deb http://mirrors.ustc.edu.cn/ubuntu/xenial-updates main restricted universe multiverse

deb http://mirrors.ustc.edu.cn/ubuntu/xenial-proposed main restricted universe multiverse

deb http://mirrors.ustc.edu.cn/ubuntu/xenial-backports main restricted universe multiverse

deb-src http://mirrors.ustc.edu.cn/ubuntu/xenial main restricted universe multiverse

deb-src http://mirrors.ustc.edu.cn/ubuntu/xenial-security main restricted universe multiverse

deb-src http://mirrors.ustc.edu.cn/ubuntu/xenial-updates main restricted universe multiverse

deb-src http://mirrors.ustc.edu.cn/ubuntu/xenial-proposed main restricted universe multiverse

deb-src http://mirrors.ustc.edu.cn/ubuntu/xenial-backports main restricted universe multiverse

#deb http://mirrors.aliyun.com/ubuntu/trusty main restricted universe multiverse

#deb http://mirrors.aliyun.com/ubuntu/trusty-security main restricted universe multiverse

#deb http://mirrors.aliyun.com/ubuntu/trusty-updates main restricted universe multiverse

#deb http://mirrors.aliyun.com/ubuntu/trusty-proposed main restricted universe multiverse

#deb http://mirrors.aliyun.com/ubuntu/trusty-backports main restricted universe multiverse

#deb-src http://mirrors.aliyun.com/ubuntu/trusty main restricted universe multiverse

#deb-src http://mirrors.aliyun.com/ubuntu/trusty-security main restricted universe multiverse

#deb-src http://mirrors.aliyun.com/ubuntu/trusty-updates main restricted universe multiverse

#deb-src http://mirrors.aliyun.com/ubuntu/trusty-proposed main restricted universe multiverse

#deb-src http://mirrors.aliyun.com/ubuntu/trusty-backports main restricted universe multiverse

#deb http://archive.ubuntu.com/ubuntuxenial main universe

 

发现整个源和报的错误包根本就没有半毛钱关系,还是一样,先定位错误源,校验和不符,

百度到的解决方案:(https://blog.csdn.net/mandagod/article/details/53968940

1.清除临时文件

sudo apt-getclean

sudorm -rf /var/lib/apt/lists/*

好吧,看见rm –rf一定要警惕,先备份吧:

 

然后update发现还是没有解决,不过现在upgrade能更新很多软件,并且又出现了开头的那种错误:

 在处理时有错误发生:

 php5.6-common

 php5.6-json

 php5.6-opcache

 php5.6-readline

 php5.6-cli

 libapache2-mod-php5.6

 linux-firmware

 php5.6

 php5.6-gd

 php5.6-mbstring

 php5.6-mysql

 php7.1-common

 php7.1-mbstring

 php7.1-mcrypt

 php7.1-xml

 initramfs-tools

E: Sub-process /usr/bin/dpkg returned anerror code (1)

 

和之前的内核都没有关系,说明内核正常,按开头的方法处理:

cd /var/lib/dpkg

sudo mv info info.bak #即备份一个info

sudo mkdir info #新建一个新的info目录

sudo apt-get -reinstall install php5.6-commonphp5.6-json php5.6-opcache php5.6-readline php5.6-cli libapache2-mod-php5.6linux-firmware php5.6 php5.6-gd php5.6-mbstring php5.6-mysql php7.1-commonphp7.1-mbstring php7.1-mcrypt php7.1-xml initramfs-tools

 

 

将之前备份的info拷回去,upgrade上面的错误消失,现在系统中存在着两个问题:

一个是在使用sudo apt-get update时:

命中:1 http://archive.ubuntukylin.com:10006/ubuntukylin xenial InRelease

命中:2 http://packages.osrfoundation.org/gazebo/ubuntu-stable xenialInRelease    

忽略:3 https://dl.google.com/linux/chrome/deb stable InRelease                    

忽略:4 https://repo.fdzh.org/chrome/deb stable InRelease                          

命中:5 https://repo.fdzh.org/chrome/deb stable Release                            

命中:6 https://dl.google.com/linux/chrome/deb stable Release                      

命中:9 http://ppa.launchpad.net/ondrej/php/ubuntu xenial InRelease                

获取:10 http://packages.ros.org/ros/ubuntu xenial InRelease [4,040B]             

获取:11 http://10.6.251.2:9999/packages.ros.org/ros/ubuntu xenial/mainamd64 Packages [620 kB]

错误:11 http://10.6.251.2:9999/packages.ros.org/ros/ubuntu xenial/mainamd64 Packages

 Hash 校验和不符

命中:12 http://linux.teamviewer.com/deb stable InRelease                          

命中:14 http://linux.teamviewer.com/deb preview InRelease                         

命中:15 http://ppa.launchpad.net/webupd8team/java/ubuntu xenialInRelease

命中:16 http://mirrors.sohu.com/ubuntu xenial InRelease

命中:17 http://mirrors.sohu.com/ubuntu xenial-security InRelease

命中:18 http://mirrors.sohu.com/ubuntu xenial-updates InRelease

命中:19 http://mirrors.sohu.com/ubuntu xenial-proposed InRelease

命中:20 http://mirrors.sohu.com/ubuntu xenial-backports InRelease

命中:21 https://packages.microsoft.com/repos/vscode stable InRelease

已下载 619 kB,耗时 5秒 (105 kB/s)

正在读取软件包列表... 完成

E: 无法下载

http://10.6.251.2:9999/packages.ros.org/ros/ubuntu/dists/xenial/main/binary-amd64/Packages.gz  Hash 校验和不符

E: 无法下载

http://10.6.251.2:9999/packages.ros.org/ros/ubuntu/dists/xenial/main/binary-i386/Packages.gz 

E: 部分索引文件下载失败。如果忽略它们,那将转而使用旧的索引文件。

 

另一个是在安装软件时:

出现无法找到软件包列表,网上有一种解决办法是通过sudo apt-get --reinstall install `dpkg--get-selections | grep '[[:space:]]install' | cut -f1`

来重装全部软件,但是这样的有很多软件是没法下载的,而没法下载的这些软件,如果猜得没错,全部来源于之前Hash校验和不符的站点;

 

这样的话,估计还是得先解决校验和的问题。

 

 

出现这个问题不知道是不是网络的原因,验证的方法就是直接打开网址,能打开就不是,刚开始还以为是墙,结果又是装lantern又是装谷歌浏览器的,但是还是不行;

 

网上第二种解决办法是在在/etc/apt/apt.conf.d/00aptitude文件中,(如果没有这个文件请自建)的最后一行添加如下内容:

Acquire::CompressionTypes::Order "gz"; (不要漏掉分号)

然而对于我的情况并不起作用;

 

第三种解决办法:

所以我找到设置源的地方:将其他软件中的两个独立的源勾去掉

 

我用的xfce4进的ubuntu软件中心,并没有找到所谓的独立的源,但是我看见了ros的源,在终端输出的信息中一直都是ros出的错,然后就把它取消勾选,保存,关闭,重新载入,update一下,发现hash 校验和的错误没了;与此同时,ros站点的软件还是可以下载的;

 

 

此时update&upgrade都是没有问题的,只有在装软件的时候问题才会跳出来,虽然是警告,但是因为这个问题前几天导致了另一个做燃烧仿真的同学电脑崩溃,今天还是决定正式的解决一下:

 

6.直面问题

这个时候再用sudo apt-get --reinstall install `dpkg --get-selections | grep'[[:space:]]install' | cut -f1`来获取跳出错误中的所有软件,然后全部重新,这样会更新dpkg的软件信息,从而解决问题,但是这样出现的结果是:

不能重新安装 libfltk1.3-dev,因为无法下载它。

不能重新安装 gir1.2-gdesktopenums-3.0,因为无法下载它。

不能重新安装 qtdeclarative5-test-plugin,因为无法下载它。

不能重新安装 ros-kinetic-rospy-tutorials,因为无法下载它。

不能重新安装 libfile-stripnondeterminism-perl,因为无法下载它。

不能重新安装 libgksu2-0,因为无法下载它。

不能重新安装 mesa-utils,因为无法下载它。

不能重新安装 libjpeg8,因为无法下载它。

不能重新安装 ros-kinetic-theora-image-transport,因为无法下载它。

不能重新安装 ros-kinetic-visualization-msgs,因为无法下载它。

不能重新安装 python-sip,因为无法下载它。

不能重新安装 ros-kinetic-laser-pipeline,因为无法下载它。

不能重新安装 python-talloc,因为无法下载它。

不能重新安装 libjsoncpp1,因为无法下载它。

不能重新安装 libdbusmenu-qt2,因为无法下载它。

不能重新安装 python-ldb,因为无法下载它。

不能重新安装 libxcb-xkb1,因为无法下载它。

不能重新安装 ros-kinetic-controller-manager,因为无法下载它。

不能重新安装 ros-kinetic-python-orocos-kdl,因为无法下载它。

 

当然这只是一小部分,如果单个重装:sudo apt-get --reinstall install python-ldb 结果也一样,无法下载的原因先不去深究,考虑解决这个问题的逻辑,发现是dpkg没有软件包的信息,那么是不是可以生成一份现在安装的所有软件的信息报放到dpkg的info里,问题是不是就可以得到解决?(还没试,先记下想法——后来证明这种想法似乎并不靠谱,因为在dpkg的所有命令中,没有找到生成软件包列表的命令,如果有同学找到了。可以告诉我一下)

 

在考虑那个问题之前,不能重装的后面又跳了一个错误:

debhelper : 依赖: dh-autoreconf(>= 12~) 但是它将不会被安装

E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

 

这里顺便讲一下解决这种问题的逻辑:什么有问题就装上面,一直装到头;

 sudoapt-get install debhelper 报依赖dh-autoreconf错误,装它

 sudoapt-get install dh-autoreconf,报依赖错误:

 dh-autoreconf : 依赖: autoconf 但无法安装它

                 依赖: automake 但无法安装它 或

                         automaken 但无法安装它

                 依赖: autopoint 但无法安装它

 

装它们

 sudoapt-get install autoconf automake autopoint 结果一样,源里没有,只能通过源码安装了,

第一个先来autoconf吧:

cd

mkdir autoconf

cd autoconf

wget http://mirrors.kernel.org/gnu/autoconf/autoconf-2.65.tar.gz 

 tar -xzvf autoconf-2.65.tar.gz

 cdautoconf-2.65

./configure --prefix=/usr/local

make && sudo make install

 

然后是automake:

cd

mkdir automake

cd automake

wget http://mirrors.kernel.org/gnu/automake/automake-1.11.tar.gz 

 tar xzvf automake-1.11.tar.gz

 cdautomake-1.11

./configure --prefix=/usr/local

make && sudo make install

 

好吧,用这种方法安装之后,dpkg是找不到的,原因不详(应该是用源码安装,dpkg的info里没有办法生成对应的软件包列表的问题),autopoint用deb的包装的,倒是解决了;

autopoint:https://packages.ubuntu.com/xenial/all/autopoint/download

所以automake和autoconf也用deb包装一下:

automake:https://packages.ubuntu.com/xenial/all/autopoint/download

autoconf:https://ubuntu.pkgs.org/16.04/ubuntu-main-amd64/autoconf_2.69-9_all.deb.html

 

这里deb包的安装用sudo dpkg –i [PACKAGENAME.deb]

 

注意这个地方要先装autoconf 再装automake(依赖关系),补装m4,这个源里有,直接apt-get装就行,这个时候再upgrade就没有什么问题了。

 

再用:sudo apt-get --reinstall install `dpkg --get-selections | grep'[[:space:]]install' | cut -f1`

和之前的结果都不一样,看样子所有的程序都进入了重装的正轨。

在waiting了一个小时之后,问题任然存在,但是因为是出现了问题,用

sudo apt-get update 然后 sudoapt-get updte –fix-missing

之后再用:sudo apt-get --reinstall install `dpkg --get-selections | grep'[[:space:]]install' | cut -f1`

发现所有程序进入解包进行,说明上一次没有执行完毕。

等待…….

 

dpkg命令小笔记:

dpkg -i package.deb     #安装包

dpkg -r package         #删除包

dpkg -P package         #删除包(包括配置文件)

dpkg -L package         #列出与该包关联的文件

dpkg -l package         #显示该包的版本

dpkg --unpack package.deb  #解开deb包的内容

dpkg -S keyword            #搜索所属的包内容

dpkg -l                    #列出当前已安装的包

dpkg -c package.deb        #列出deb包的内容

dpkg --configure package   #配置包

 

到了这个地方,从返回的消息来看,找到了出现文章开始内核问题的源头,就是因为dpkg找不到包,使用重装的方法之后,重装和配置了大量的内核,此处需要重复之前的方法将多余的内核删掉,这里验证了用sudo apt-get --reinstall install `dpkg --get-selections | grep'[[:space:]]install' | cut -f1`时解决不通的,重新配置应该才是解决办法,

强制重新配置dpkg软件包的命令是:dpkg-reconfigure –force [PACKAGE] 这里使用sudo重配之后,发现并没有解决问题,因为这个命令并不能在/var/lib/dpkg/info下生成对应的软件包列表,而现在我所知道的范围内,只有重装才能生成软件包的文件列表,所以好像最后就只能重装了,解决方案“sudo apt-get --reinstall install `dpkg --get-selections | grep'[[:space:]]install' | cut -f1`”的原理其实就是重装,但是中间的“dpkg --get-selections”及后面那一串是为了产生要安装的软件名,这里发现的问题是dpkg –get-selection是将所有本地的dpkg软件包重装,而不是找不到软件包列表的文件包,但其实如果是全部丢失,这两个概念是一样的,如果没有全部丢失,那正确的解决办法应该是先复现问题,找到丢失文件列表的软件包名称,因为我的正则表达式用得还不是很好,这里我用的是曲线救国的解决办法:

1.sudo apt-get install minicom -y >log.log(复现问题的方法要看自己的情况)

2.将log.log传到windows下,全部复制到word中,用ctrl+H将重复的字段“dpkg:警告:无法找到软件包”,“的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。”以及换行“^p”都替换为空格,然后再将两个空格替换为一个空格,多执行几次,删掉多于的提示,那就整理出来了一个超级大的软件包列表,我的足足有两千多个,而且并没有全部显示,“(正在读取数据库 ... 系统当前共安装有 288443 个文件和目录。)”,

也就是说,有288443个软件要重装(笑哭),sudo apt-get --reinstall install 重装了下前两页,发现有的可以解决问题,有的还解决不了,会报无法下载的错误,而且吧,照这个方法下去,我可能整个硕士生涯都要费在这上面了,当然了,你可能会问我为什么不干脆重装系统,我的原因是在这台服务器上装的环境太多,OpenFOAM,laminarSMOKE,Cuda,ROS,Invidia显卡驱动等等,重装这些软件,没个一周两周的估计是搞不定,而且遇到问题就重装,这显然不是咱的做事风格,但如果你的系统只是轻量级的,那重装这些软件和重装这个系统其实差别也不大;我的情况,在这个地方又不能重装系统,又不能重装全部软件,那是不是就陷入死胡同了呢?(这个地方如果选择重装全部软件,那估计这辈子是装不完了,下辈子也别想,毕竟每装一批都会报出一些无法预知的错误,夜晚两点,揉眼…….)最后,事实证明,要找到问题的根源才能轻而易举的解决问题,直接讲原因:

在使用

cd /var/lib/dpkg sudo mv infoinfo.bak 吧啦吧啦”这个解决方案时,我在每次操作时都漏掉了一步,就是删掉新建的info,这样用 sudo mv info.bak info我以为这样能覆盖掉原来的文件,但还是too youngtoo simple,这条命令的意思是将info.bak移到了info文件夹里,所以,dpkg过来找的时候,是不会找info下面的子文件夹的,因为我来来回回弄了很多次,所以文件里套文件,将他们全部整理到一个文件夹里,重命名为info,问题解决,这里其实还说明了一点,这种丢失文件包列表的问题,只要确认没有删过,那么多半的文件的地方不对,需要仔细排查。

 

后记:本来这段时间是做机器人的事是很忙的,但是因为这个问题之前就遇到过,但因为不影响使用就暂时搁置了,之前也说过,这个问题现在已经危及到系统的使用,dpkg找不到软件包,所有的链接都被打断,导致了图形界面也不能用,如果不处理,只要重启一次,整个系统就会陷入全面瘫痪的状态,还有一个感受,就系统来说,ubuntu的稳定性确实不够好,虽然更新很快,但这个事也不一定是好事呀,外围的ROSOpenFOAM等跟得应该很辛苦,照这个速度下去,在新系统里能解决问题的人可能会越来越少。而最大的感受是,如果你真的感觉一个问题超级超级难解决,那多半是没有找到问题的根源,人生大概也是如此吧。

 

然后,再总结一下通过这次问题解决学到的命令吧:

sudo apt-get update

sudo apt-get upgrade

两者的区别是一个更新索引,一个更新仓库列表;

sudo apt-get -finstall  修复已经安装软件的依赖;

dpkg --get-selections| grep linux-image 查看已经安装的内核版本

 

dpkg --get-selections 获取本系统的dpkg软件包

其中install是已经安装的,deinstall是没安装,但是有残留的

 

最重要的还是mv,文件拷贝……..

 

 

参考博客:

1. https://blog.csdn.net/wise622453/article/details/7905253

包含了这个问题出现的机理:“其实这里我们可以发现为什么会在安装新的内容时会出现无法找到软件包问题,因为在apt-get install 安装一个新包时先回去检查/var/lib/dpkg/info/目录下的已安装包的配置文件信息;如果发现有已经安装的应用的配置文件信息不在info目录下就会提示这个错误”,但并没有详细说明第二种解决办法的解决机理及来源

2. http://forum.ubuntu.org.cn/viewtopic.php?t=257302

这里博客帖子里有一些思路,可以简单浏览,看看人们都是怎么说这个问题的;

3. http://forum.ubuntu.org.cn/viewtopic.php?t=140396

同上。

4. http://forum.ubuntu.org.cn/viewtopic.php?t=243666

同上,但是在正则表达部分有点新东西。

5. https://blog.csdn.net/weixin_40539892/article/details/80623090

这个好像看起来是转的,但是正则表达式部分讲得多些,注意,遇到这个问题的同仁,这个博客绝对是值得一看的。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dpkg:警告:无法找到软件包 XXX的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。(详细的解决过程) 的相关文章

  • sendfile64 只复制约2GB

    我需要使用 sendfile64 复制大约 16GB 的文件 到目前为止我所取得的成就是 include
  • 在哪里可以找到并安装 pygame 的依赖项?

    我对 Linux 比较陌生 正在尝试安装 python 的 pygame 开发环境 当我运行 setup py 时 它说我需要安装以下依赖项 我找到并安装了其中之一 SDL 然而 其他人则更加难以捉摸 Hunting dependencie
  • 使用 sed 更新 xml 属性(Windows + cygwin 和 Linux)?

    我需要使用 sed 命令对 xml 文件进行更新 但我在这方面遇到了麻烦 它需要在 Windows 使用 cygwin 和 Linux 上运行 XML 具有以下元素
  • 域套接字“sendto”遇到“errno 111,连接被拒绝”

    我正在使用域套接字从另一个进程获取值 就像 A 从 B 获取值一样 它可以运行几个月 但最近 A 向 B 发送消息时偶尔会失败 出现 errno 111 连接被拒绝 我检查了B域套接字绑定文件 它是存在的 我也在另一台机器上做了一些测试 效
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • 如何在Linux内核源代码中打印IP地址或MAC地址

    我必须通过修改 Linux 内核源代码来稍微改变 TCP 拥塞控制算法 但为了检查结果是否正确 我需要记录 MAC 或 IP 地址信息 我使用 PRINTK 函数来打印内核消息 但我感觉很难打印出主机的MAC IP地址 printk pM
  • NPTL 和 POSIX 线程有什么区别?

    NPTL 和 POSIX 线程之间的基本区别是什么 这两者是如何演变的 POSIX 线程 pthread 不是一个实现 它是几个函数的 API 规范 纸上的标准 英文 其名称以pthread 以及定义在
  • ubuntu 16.04.1 LTS 启动 Android 模拟器时崩溃

    我已经尝试过 Android studio 上的 AVD 和 Genymotion 模拟器 我的 ubuntu 16 04 1 在启动 android 模拟器时崩溃 冻结 我的电脑内存是16G 在我于 2016 年 9 月 19 日安装了
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp
  • C语言中如何通过内存地址映射函数名和行号?

    如何用 GCC 中的内存地址映射回函数名称和行号 即假设一个 C 语言原型 void func Get the address of caller maybe this could be avoided MemoryAddress get
  • jq中如何分组?

    这是 json 文档 name bucket1 clusterName cluster1 name bucket2 clusterName cluster1 name bucket3 clusterName cluster2 name bu
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 是否可以创建一个脚本来保存和恢复权限?

    我正在使用 Linux 系统 需要对一组嵌套文件和目录进行一些权限实验 我想知道是否没有某种方法可以保存文件和目录的权限 而不保存文件本身 换句话说 我想保存权限 编辑一些文件 调整一些权限 然后将权限恢复到目录结构中 将更改的文件保留在适
  • 如何在基于 Linux 的系统上的 C 程序中使用 mqueue?

    如何在基于 Linux 的系统上的 C 程序中使用 mqueue 消息队列 我正在寻找一些好的代码示例 可以展示如何以正确且正确的方式完成此操作 也许是一个操作指南 下面是一个服务器的简单示例 该服务器接收来自客户端的消息 直到收到告诉其停
  • 如何减去两个 gettimeofday 实例?

    我想减去两个 gettimeofday 实例 并以毫秒为单位给出答案 这个想法是 static struct timeval tv gettimeofday tv NULL static struct timeval tv2 gettime
  • 监视目录的更改

    很像一个类似的问题 https stackoverflow com questions 112276 directory modification monitoring 我正在尝试监视 Linux 机器上的目录以添加新文件 并希望在这些新文
  • 如果在等待“read -s”时中断,在子进程中运行 bash 会破坏 tty 的标准输出吗?

    正如 Bakuriu 在评论中指出的那样 这基本上与BASH 输入期间按 Ctrl C 会中断当前终端 https stackoverflow com questions 31808863 bash ctrlc during input b
  • dpkg:警告:删除目录 /usr/local 时不为空,因此未删除

    我从以下文件夹结构构建并安装了 debian 软件包 myprog DEBIAN control usr local bin myprog sh 使用以下命令 dpkg b myprog myprog deb dpkg i myprog d
  • 快速像素绘图库

    我的应用程序以每像素的方式生成 动画 因此我需要有效地绘制它们 我尝试过不同的策略 库 但结果并不令人满意 尤其是在更高分辨率的情况下 这是我尝试过的 SDL 好的 但是慢 OpenGL 像素操作效率低下 xlib 更好 但仍然太慢 svg

随机推荐

  • 斗地主游戏

    牌属性类 package Java project 1 import java util Objects public class Card private String size 点数 private String color 花色 pr
  • UE4:自定义Slate 点击保存 出现USlot ReleaseSlateResources() 异常

    Error AssetLog Test uasset Leak Detected CustomWidget 43 CustomWidget still has living Slate widgets it or the parent Ca
  • pyQt5 学习笔记(19)QFrame 边框设置

    文章目录 一 QFrame 简介 二 QFrame 的创建 三 组合效果图 四 QFrame 的功能 API 1 功能 2 QFrame 结构 3 使用总结 1 挑选目标样式 2 根据参数写程序 五 信号 一 QFrame 简介 QFram
  • mysql 数组_MySQL如何实现数组功能

    前段时间想要用数组功能实现某些需求 结果发现mysql不支持数组 这个确实让人很头痛 查阅官方文档 也没有这一方面的资料 结果在网上 看到了某仁兄贴出了变相实现的一种方法 代码如下 DELIMITER DROP DATABASE IF EX
  • 【Ubuntu】使用grub2挂载NFS根文件系统(rootfs)

    经常调试arm开发板的同学应该比较熟悉uboot 它可以使用tftp自动下载内核并通过nfs挂载rootfs 其实 作为x86平台常见的bootloader grub也可以做到通过nfs挂载rootfs 安装grub2 目前新版的ubunt
  • 云vscode搭建--使用容器化部署

    Vscode作为一个轻量级的IDE 其支持丰富的插件 而通过这些插件我们就可以实现在Vscode中写任何语言的代码 Code Server是Vscode的网页版 启动Code Server之后我们就可以在浏览器中打开vscode来愉快的编写
  • java 分页page_java分页PageHelper的使用

    我以前写分页都是些工具类后面偶然的机会发现了这个pagehelper在github上开源框架 maven依赖 com github pagehelper pagehelper 5 1 6 只需要在service层加上然后在controlle
  • 网络安全单兵工具 -- YAKIT

    网络安全单兵工具 YAKIT 一 下载及安装 1 原作者及下载地址 https github com yaklang yakit 2 双击下载好的exe文件 点击核心引擎安装与升级 3 点击意见更新Yak引擎 4 以管理员启动 5 点击连接
  • 《从Paxos到ZooKeeper》读书笔记之第一章(二)

    从Paxos到ZooKeeper 读书笔记之第一章 二 1 2从ACID到CAP BASE 这一节由三小节 从大家数值的数据库事务的四个特性 引出来分布式事务的概念 通过对ACID模型的讨论 提出如何构建一个兼顾可用性和一致性的分布式系统方
  • 前端技术面试大全

    快速搞定前端技术一面 匹配大厂面试要求 迅速建立初中级前端面试 0 2年 JS知识体系 掌握解决面试题的思路与技巧 知识点介绍 CSS 布局 定位 移动端响应式 ES语法 原型 原型链 作用域 闭包 异步 单线程 Web API DOM B
  • SQL复习要点

    1 数据库系统阶段的数据管理特点 1 数据结构化2 数据共享性高 冗余度小 易扩充 3 数据独立性高4 统一的数据管理和控制功能 2 数据库 database DB 是存放数据的仓库 3 数据库管理系统 data base manageme
  • js 截取字符串里的IP和port

    例如 str 192 168 12 254 18081 1 用 ip和port 的正则 let ip reg d gi let ip ip reg exec str ip ip 0 let port reg d 1 5 let port s
  • C++,菱形继承和虚继承

    一 菱形继承的基本概念 菱形继承又称为钻石继承 由公共基类派生出多个中间子类 又由多个中间子类共同派生出汇聚子类 汇聚子类会得到 中间子类从公共基类继承下来的多份成员 菱形继承的格式 A 公共基类 B C 中间子类 D 汇聚子类 示例 in
  • 读《企业中的开放源代码》有感

    文章目录 开源代码的益处 开源的本质 开源是一门学科 开源代码的益处 学习出色编码技能的最佳方法是开发开源项目 注意是开发而不是阅读 因为可以研究该领域内顶尖编码员所采用的实践 以更快的方式启动新项目 从此没有必要再闭门造车 开源的本质 我
  • Linux平台下二进制安装FastDDS

    1 Linux平台下二进制安装 该页面主要介绍在linux环境下 使用二进制release安装 eProsima公司的 Fast DDSThe 安装 内容 运行应用 在一个CMake项目中包含Fast DDS 卸载 1 1 安装 ePros
  • 规则动词的过去式及发音规则

    规则动词的过去式词尾变化有几种 1 一般情况下加ed 如watched planted watered pulled climbed picked 2 以不发音字母e结尾的加d 如liked moved tasted 3 以辅音字母加y结尾
  • 线程池使用之自定义线程池

    目录 一 Java内置线程池原理剖析 二 ThreadPoolExecutor参数详解 三 线程池工作流程总结示意图 四 自定义线程池 参数设计分析 1 核心线程数 corePoolSize 2 任务队列长度 workQueue 3 最大线
  • Java学习心得8——继承

    当我们需要设计几个类似的类的时候 我们可以把它们之间的相同的东西提取出来放到一个父类中 然后这几个类就可以不写这些相同的东西 只要去继承那个父类就可以得到这些东西了 假如我们需要设计三个类Fish Bird Dog 它们的共同点是都有年龄
  • UE4 实现用鼠标旋转场景中的物体

    本文实现的是用在UE4 中用鼠标旋转场景中的物体 点击到物体时开始物体旋转功能 移动鼠标物体跟着旋转相应的角度 松开鼠标左键物体停止旋转 下面介绍实现此功能的蓝图逻辑 由于比较简单就不一一介绍了 直接贴上蓝图代码 如有问题欢迎交流
  • dpkg:警告:无法找到软件包 XXX的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。(详细的解决过程)

    1 问题描述 在使用sudo apt get update 和upgrade中会出现 dpkg 警告 无法找到软件包ca certificates 的文件名列表文件 现假定该软件包目前没有任何文件被安装在系统里 dpkg 警告 无法找到软件