Неизвестный пользователь в файле 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.