我在运行 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 文件是什么,为什么它会保留已从系统中删除的用户?我删除用户的方式是否错误或过时?
答案1
我知道这个问题有点老了,但现在已经遇到过两次了。一次是用puppet
,一次是用virtualbox
。它又出现了,我找到了一个可行的方法。它是 的变体服务器故障。
而不是依赖于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
在你最喜欢的文本编辑器中打开并删除仅有的包含导致错误的项目的行。我发现这是一个已记录的错误,对于 Debian 和 Ubuntu 都是如此,
- https://bugs.launchpad.net/ubuntu/+source/dpkg/+bug/593615
- https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=705752
话虽如此,我刚刚通过手动编辑任何引发错误的条目修复了我的问题,并且我很高兴再次下载软件包。希望这对下一个访问此问题的第一个 Google 搜索结果的人有所帮助。
答案2
虽然我无法回答您的问题,但我可以帮助您解决您的难题。在使用“用户帐户”删除用户“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
我收到以下错误:
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
答案4
这是因为您可能已经删除了该用户,现在 dpkg 查询/etc/passwd
以与 statoverride 文件进行比较,它会检查 statoverride 文件的所有条目是否都在 passwd 中,如果不在,则发出警告,这就是正在发生的事情。
如果您重新配置/重新安装相关包(在您的情况下是mediatomb
,它可以是其他任何东西,幸运的是 Debian(Ubuntu 所基于的操作系统)通常使用与项目名称相同的用户名),这个问题很容易解决,它会在 passwd 文件中(重新)创建用户。
sudo apt-get --reinstall install package
或者
sudo dpkg-reconfigure package