statoverride文件中的未知用户

我在运行Ubuntu服务器的htpc上安装了一个叫做mediatomb的应用程序,几个月前我卸载了它,并用Plex进行了替换。周末查询机器上现有用户时,我注意到mediatomb用户和组仍然存在,所以我使用了以下命令:
sudo deluser mediatomb

删除用户。大约一天后,我想安装htop sudo apt-get install htop,但是我发现出现了一个错误:
语法错误:statoverride文件中的未知用户'mediatomb'。
我以为只需使用nano打开statoverride文件,并删除所有对mediatomb的引用,但是我无法正确使用nano打开该文件。我运行了grep命令 grep 'mediatomb' /var/lib/dpkg/statoverride 在文件中返回了两个系统中不存在的位置。目前唯一解决问题的方法是重新创建mediatomb用户,然后一切正常。显然,这不是一个好的长期解决方案。
我想知道的是,statoverride文件是什么,为什么它会保留已从系统中删除的用户?我是否以错误或已弃用的方式删除用户?
9个回答

我知道这个问题有点旧了,但是我现在已经遇到了两次。一次是用puppet,一次是用virtualbox。它又出现了,我找到了一个有效的解决方法。这是对serverfault.com的变体。
不要依赖于dpkg-statoverride --remove /path/to/offending/file.ext,因为会报错。
dpkg: unrecoverable fatal error, aborting:
syntax error: unknown group offendinggroup in statoverride file

你可以用sed来进行高级操作,或者你可以简单地在你喜欢的文本编辑器中打开/var/lib/dpkg/statoverride文件,并删除仅仅包含导致错误的项目的行。我发现这是一个已记录的bug,适用于Debian和Ubuntu系统。 话虽如此,我刚刚通过手动编辑掉任何引发错误的条目来修复了我的问题,现在我可以愉快地下载软件包了。希望这能帮助下一个遇到这个问题并访问这个谷歌搜索结果排名第一的人。

非常感谢!我开始担心我将永远花费时间在Linux的深处探索,以解决几天前我犯下的这个简单错误。不知道我是怎么做到的,但是从那个文件中删除那一行修复了问题。非常感谢您为我节省了很多时间! - Peter Perháč
你太棒了!解决了我的问题。 - Elad Weiss
我删除的那行代码是针对geoclue的。最近我在设置>>隐私>>定位服务中关闭了“位置服务”。在删除了那行geoclue代码之后,我再也没有在更新过程中遇到致命错误。为了以防万一,我还备份了statoverride文件。 - noobninja
你救了我的一天,非常感谢!我在使用他们的脚本卸载netdata后,Dpkg卡住了。从/var/lib/dpkg/statoverride中删除这个用户解决了这个问题。 - Rapekas
MongoDB在Ubuntu 18.04上也会导致这个问题... - MestreLion

虽然我无法按照你的问题给出答案,但我可以帮助你解决困境。我曾经遇到过和你一样的问题,在使用“用户账户”删除了一个名为“backuppc”的用户后,我手动配置了该用户用于备份。我放弃了这种方法,但直到几周后(也就是今天),我才尝试删除该用户。在此之前,我没有遇到任何问题,直到更新管理器发现并尝试应用更新时,该过程失败并显示错误信息。

dpkg: unrecoverable fatal error, aborting:  
 syntax error: unknown user 'backuppc' in statoverride file
W: Waited for dpkg --assert-multi-arch but it wasn't there - dpkgGo (10: No child processes)
E: Sub-process /usr/bin/dpkg returned an error code (2)
A package failed to install.  Trying to recover:

经过一番搜索,我找到了一个解决方案。
x@y ~ $ cat /var/lib/dpkg/statoverride
root postdrop 2555 /usr/sbin/postdrop
root postdrop 2555 /usr/sbin/postqueue
root mlocate 2755 /usr/bin/mlocate
postfix postdrop 2710 /var/spool/postfix/public
backuppc www-data 4750 /usr/lib/backuppc/cgi-bin/index.cgi
root ssl-cert 710 /etc/ssl/private
root crontab 2755 /usr/bin/crontab

通过运行以下命令进行修复:sudo sed -i '/backuppc/d' /var/lib/dpkg/statoverride
x@y ~ $ sudo sed -i '/backuppc/d' /var/lib/dpkg/statoverride; cat /var/lib/dpkg/statoverride
[sudo] password for x: 
root postdrop 2555 /usr/sbin/postdrop
root postdrop 2555 /usr/sbin/postqueue
root mlocate 2755 /usr/bin/mlocate
postfix postdrop 2710 /var/spool/postfix/public
root ssl-cert 710 /etc/ssl/private
root crontab 2755 /usr/bin/crontab

抱歉,我无法回答你的问题,但这是谷歌搜索的第二个结果,所以我想在这里提供一个解决方案给大家。我的答案来源于http://rickfoosusa.blogspot.com/2012/04/howto-ubuntu-unknown-user-in.html

3这是解决问题最糟糕的方法。你应该重新安装/重新配置软件包,而不是随意删除那些不应被删除的内容。 - Braiam
@Braiam,在一些软件包配置中可能存在一个错误,当它应该在之前的升级后删除这些行时,“忘记”删除它们。 - Matthieu
@Matthieu 如果是这样的话,正确的解决方案是让软件包维护者知晓此问题,否则其他用户也会遇到同样的问题,而这个问题可以为所有人修复。顺便说一下,这个问题竟然没有被持续集成系统发现,实在有些奇怪。另外,这个特定情况已经得到了修复。 - Braiam

我遇到了以下错误:
dpkg: unrecoverable fatal error, aborting:
syntax error: unknown group "crontab" in statoverride file,
 E: Sub-process /usr/bin/dpkg returned an error code (2)
dpkg: unrecoverable fatal error, aborting:
 unknown group 'messagebus' in statoverride file
E: Sub-process /usr/bin/dpkg returned an error code (2)

以下命令解决了我的apt-get安装问题

sudo sed -i '/crontab/d' /var/lib/dpkg/statoverride

你可以更改crontab的单词,但保留'/d',直到你能够成功安装任何apt-get而没有任何语法错误。
root@localhost:~# sudo sed -i '/messagebus/d' /var/lib/dpkg/statoverride
root@localhost:~# apt-get install wifite
Reading package lists... Done

这对我有用!谢谢。 - Pranu Pranav

对于MongoDB安装问题,比如在statoverride文件中出现未知用户'mongodb':打开终端然后进入: sudo vim /var/lib/dpkg/statoverride 删除:
mongodb mongodb 755 /var/log/mongodb

重新安装mongodb。

MongoDB的工作解决方案 - sam
经过24小时的挣扎,这对我有所帮助。 - Tichel

这是因为您可能已经删除了用户,现在dpkg查询/etc/passwd与statoverride文件进行比较,它检查statoverride文件的所有条目是否都在passwd中,如果不在,则发出警告,这就是正在发生的情况。
如果您重新配置/重新安装相关软件包(在您的情况下是mediatomb,也可以是其他任何软件包,幸运的是Debian(Ubuntu操作系统的基础)使用与项目名称相同的用户名),它将会(重新)在passwd文件中创建该用户,这个问题很容易解决。
sudo apt-get --reinstall install package

或者

sudo dpkg-reconfigure package

我遇到了一个关于Mongo安装的问题。我尝试了不同的解决方案,但唯一有效的方法是手动编辑文件。
 sudo vim  /var/lib/dpkg/statoverride

所以,我从那里删除了对mongodb的引用,最终成功地完全安装了mongo,没有任何障碍。下面提到的错误已经发生了。
dpkg: unrecoverable fatal error, aborting:
unknown user 'mongodb' in statoverride file
E: Sub-process /usr/bin/dpkg returned an error code (2)

希望这能对某人有所帮助

1这正是我在尝试从Mongo3升级到5时遇到的问题。有一个解决方案建议删除groupuser,可能这导致了问题,但你的解决方案起作用了。谢谢。 - Mehmet Burak Sayıcı

安装DelugeD时,它创建了一个名为debian-deluged的用户。后来,我更改了Deluge配置以使用另一个用户ID,并删除了自动创建的用户。这导致在安装包speedometer时出现了statoverride错误。
我启动了sudo nano /var/lib/dpkg/statoverride并手动将自动创建的用户替换为分配的用户ID,错误得到了解决。

我遇到了类似的错误,并通过首先备份 statoverride 文件,然后删除所有包含单词 postdrop 的行来解决它。

记得在 statoverride 文件末尾添加一行新的内容。


2023年仍然相关的帖子(谢谢:)

在卸载clamav后我遇到了相同的bug

sudo nano /var/lib/dpkg/statoverride

删除所有包含"clamav"的行(并且不要留下文件中的任何空行) 完成任务。