Неизвестный пользователь в файле statoverride


22

На моем htpc, работающем под управлением ubuntu server, было установлено приложение под названием mediatomb, несколько месяцев назад я удалил его и заменил на Plex. На выходных при опросе существующих пользователей на машине я заметил, что пользователь и группа mediatomb все еще существуют, поэтому я использовал команду

sudo deluser mediatomb

удалить пользователя. Примерно через день я пошел устанавливать htop, sudo apt-get install htopно обнаружил, что получаю ошибку:

синтаксическая ошибка: неизвестный пользователь 'mediatomb' в файле statoverride.

Я думал, что смогу открыть файл statoverride с помощью nano и отредактировать любые ссылки на mediatomb, но я не смог правильно открыть файл с помощью nano. Я выполнил команду grep

grep 'mediatomb' /var/lib/dpkg/statoverride

который вернул в файл два местоположения, которых больше нет в системе. Единственный способ, которым я могу сейчас обойти эту проблему, - это воссоздать медиатомбу пользователя, и тогда все работает нормально. Очевидно, что это не хорошее долгосрочное решение.

Я хотел бы знать, что такое файл statoverride и почему он сохраняет в нем пользователей, которые были удалены из системы? Я удаляю пользователей неправильным или устаревшим способом?

Ответы:


47

Я знаю, что этот вопрос немного староват, но теперь уже сталкивался с этим дважды. Один раз с 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в вашем любимом текстовом редакторе и удалить только те строки, которые содержат элементы, которые вызывали ошибку. Я обнаружил, что это задокументированная ошибка, как для Debian, так и для Ubuntu,

Тем не менее, я просто исправил мой, вручную отредактировав любую запись, которая вызвала ошибку, и я с удовольствием загружаю пакеты снова. Надеюсь, что это поможет следующему человеку, который посетит этот номер 1 в результатах поиска Google для этой проблемы.


Спасибо огромное! Я только начинал беспокоиться о том, что буду проводить всю вечность, открывая неясные уголки мира Linux, чтобы решить эту простую ошибку, которую я сделал несколько дней назад. Не знаю, как мне удалось это сделать, но удаление одной строки из этого файла решило проблему. Большое спасибо за то, что сэкономили мне много времени!
Петер Перхач

Ты обалденный! Исправлена ​​моя проблема.
Elad Weiss

16

Хотя я не могу ответить на ваш вопрос, как спросили, я могу помочь вам с вашей дилеммой. Я столкнулся с той же самой проблемой, с которой вы столкнулись после использования «Учетных записей пользователей» для удаления пользователя «backuppc» - пользователя, которого я вручную настроил для резервного копирования. Ну, я удалил этот маршрут, но не пытался удалить пользователя, пока пару недель спустя (IE - сегодня). У меня не было никаких проблем, пока Менеджер обновлений не нашел и не попытался применить обновления; процесс не сможет прочитать

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

Извините, я не могу ответить на ваш вопрос, но это был второй результат в Google, поэтому я хотел выложить решение здесь для людей. Мой ответ возник из http://rickfoosusa.blogspot.com/2012/04/howto-ubuntu-unknown-user-in.html .


3
Это худший подход к проблеме. Вместо этого вы должны переустановить / перенастроить пакет, вместо того чтобы заниматься удалением вещей, которые не предназначены для удаления.
Брайам

4

Я получаю следующую ошибку:

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

2

Это потому, что вы, возможно, удалили пользователя, и теперь запросы dpkg /etc/passwdсравниваются с файлом statoverride, он проверяет, что все записи файла statoverride находятся в passwd, и, если это не так, выдает предупреждение, что и происходит.

Это легко исправить, если вы переконфигурируете / переустановите соответствующий пакет (в вашем случае это mediatombможет быть что угодно, к счастью, Debian (на котором основана ОС Ubuntu) обычно использует то же имя пользователя, что и имя проекта), и он создаст (повторно) пользователя в файле passwd.

sudo apt-get --reinstall install package

или

sudo dpkg-reconfigure package

1

Когда я установил DelugeD, он создал пользователя с именем debian-deluged. Позже я изменил конфигурацию Deluge для использования другого идентификатора пользователя и удалил автоматически созданного пользователя. Это привело к statoverrideошибке при установке пакета спидометра.

Я запустил sudo nano /var/lib/dpkg/statoverrideи вручную заменил автоматически созданного пользователя с назначенным идентификатором пользователя, и ошибка была устранена.


1

У меня была похожая ошибка, и я исправил ее, сначала сделав резервную копию файла statoverride, а затем удалив все строки, содержащие слово postdrop .

Не забудьте добавить новую строку в конце файла statoverride .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.