APT заклинило из-за несоответствия версий ядра

18

Apt, по-видимому, не в состоянии сделать что-нибудь полезное для меня, постоянно давая сообщения этой формы:

dpkg: dependency problems prevent configuration of linux-server:
 linux-server depends on linux-image-server (= 3.2.0.37.44); however:
  Version of linux-image-server on system is 3.2.0.37.45.
 linux-server depends on linux-headers-server (= 3.2.0.37.44); however:
  Version of linux-headers-server on system is 3.2.0.37.45.
dpkg: error processing linux-server (--configure):
 dependency problems - leaving unconfigured

По сути, это та же проблема, что и я не могу установить какой-либо пакет (linux-image-server, ошибки зависимостей linux-server), который был закрыт Duplicate на ответ, совершенно бесполезный для этой ситуации. Ни один из советов в этом очень общем ответе о зависимостях не помогает.

Явное:

sudo apt-get clean
sudo apt-get autoclean
sudo apt-get update

все не имеют никакого эффекта. Пока

sudo apt-get -f install
sudo dpkg --configure -a
sudo apt-get -u dist-upgrade
sudo apt-get -o Debug::pkgProblemResolver=yes dist-upgrade

все дают некоторую форму сообщения об ошибке выше.

Leopd
источник

Ответы:

20

Вы бежали sudo apt-get update, и проблема все еще возникает. Таким образом, вы, вероятно, просто имеете более новую версию linux-image-serverи linux-headers-serverчем любой linux-serverпакет, доступный из ваших сконфигурированных источников программного обеспечения .

Это может произойти в течение очень короткого времени, даже если вы используете центральный сервер (или дольше, если возникла проблема с его обновлением). Насколько я понимаю, это может произойти в течение более длительных периодов времени, если вы используете зеркало. Это не означает, что вам не следует использовать зеркало - центральный сервер ( http://archive.ubuntu.com) обычно работает очень медленно, а национальные, региональные или другие зеркала работают намного быстрее.

Поиск пакета показывает , что версия 3.2.0.37.45 обоих linux-image-serverи linux-serverсуществуют для Ubuntu 12.04. Так что это, вероятно, связано с вашим зеркалом.

Вот несколько альтернатив:

Игнорируй это

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

Это не проблема, если у вас нет последней версии linux-server, так как это метапакет , который не предоставляет никакого реального программного обеспечения. Он существует только для того, чтобы он мог перечислить три пакета как зависимости , гарантируя, что они остаются установленными:

У вас уже есть последние версии linux-headers-serverи linux-image-server. Я предполагаю, что это 64-битная система, поэтому сообщения о linux-generic-paeней не отображались. Кажется, все в порядке.

Тем не мение:

  • Если проблема не позволяет обновлению и установке других пакетов работать (вместо того, чтобы показывать эти сообщения всякий раз, когда вы это делаете, но не мешаете им), вам следует применить другое решение.
  • Вы также можете сделать это, если вам просто не нравится постоянно видеть эти сообщения и вы хотите от них избавиться.
  • Немного странно, что вы не получаете этот пакет, даже если вы используете зеркало, которое немного отстает от основного сервера загрузки, потому что этот пакет также предоставляется http://security.ubuntu.com. Этот сервер всегда должен быть включен в /etc/apt/sources.list. Поэтому я рекомендую проверить, чтобы убедиться, что это включено. Вы можете создать резервную копию sources.listперед редактированием ( sudo cp /etc/apt/sources.list /etc/apt/sources.list.old). Эта проблема также может быть следствием кэширования веб-прокси (если вы его используете) с устаревшими данными. (Решения ниже будут работать вокруг этого тоже.)

Перейти на другой сервер загрузки

Я предполагаю, что вы работаете в системе Ubuntu Server и, возможно, у вас не установлен графический интерфейс. Итак, смотрите:

После изменения зеркала запустите:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

Если хотите, вы можете изменить свой сервер после linux-serverобновления.

Загрузите и установите .debфайл пакета вручную

Вы можете вручную загрузить и установить .debфайл для последней версии linux-serverметапакета в Ubuntu 12.04.

cd куда вы хотите скачать пакет.

Если это 64-битная система, запустите:

wget https://launchpad.net/ubuntu/+archive/primary/+files/linux-server_3.2.0.23.25_amd64.deb

Если это 32-битная система, запустите ее:

wget https://launchpad.net/ubuntu/+archive/primary/+files/linux-server_3.2.0.23.25_i386.deb

(Я получил обе эти ссылки на странице Launchpad для linux-metaисходного пакета в Ubuntu .)

Теперь (как для 64-разрядных, так и для 32-разрядных) выполните эту команду, чтобы установить пакет:

sudo dpkg -i linux-server_3.2.0.23.25_*.deb

(Или просто начните вводить имя пакета и используйте Tabдля его завершения.)

Удалить пакет

Поскольку это программное обеспечение, предоставляющее метапакет, у вас уже есть, вы можете удалить пакет. Тогда вы больше не получите ошибку. Вы можете установить его позже, если хотите (вы можете периодически запускать, apt-get update && apt-cache policy linux-serverчтобы увидеть, доступна ли новая версия).

Есть два шага, если вы хотите удалить его. Первое, чтобы удалить linux-server. во-вторых, убедитесь, что пакеты не будут автоматически удалены позже.

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

1. Удалить linux-server.

Чтобы удалить linux-server, просто запустите:

sudo apt-get remove linux-server

2. Отметьте его зависимости как установленные вручную

Чтобы сообщить APT (менеджеру пакетов) о пакетах, которые вы намереваетесь установить, даже если ничего не остается, что объявляет их зависимостью, пометьте их как установленные вручную.

Для этого выполните эту команду, если это 64-битная система:

sudo apt-mark manual linux-image-server linux-headers-server

Если это 32-битная система, запустите это:

sudo apt-mark manual linux-image-server linux-headers-server linux-generic-pae

(Вы должны иметь, apt-markно если вы этого не сделаете, и вы не можете установить программное обеспечение, вы можете использовать apt-get installвместо - apt-mark manualуказание пакета для установки вручную, чтобы он был помечен как установленный вручную, даже если он уже был установлен.)

Источник: пометьте пакет deb как использованный, чтобы он не предлагался для автоматического удаления
(В частности, ответ Лекенштейна ).

Элия ​​Каган
источник
3
Спасибо за подробный ответ. Изменение зеркал не изменило ситуацию вообще. Но ручная установка более новой версии linux-server ( linux-server_3.2.0.37.45) действительно устранила проблему.
Леопд
2
В моем случае я не мог использовать apt-get ни для чего. Я всегда получал ошибку неудовлетворенной зависимости для linux-сервера. Вдохновленный вашим советом, я попробовал следующее, что сработало и было намного проще:sudo apt-get remove linux-server && sudo apt-get install linux-server
Эндрю Энсли
4

Если у вас была полная / загрузочная и автоматическая установка обновлений безопасности, вы можете оказаться в той же лодке, что и я.

Я не мог заставить apt-get делать что-либо, так что традиционный совет full / boot не работал. Я вручную удалил старые данные ядра. Не удаляйте текущее работающее ядро, проверьте с помощью 'uname -a'. Я удалил с помощью 'sudo rm / boot / -3.2.0- {23,24,25,26} - .

Затем мне пришлось запустить 'sudo apt-get remove linux-server' и 'sudo apt-get install linux-server', чтобы исправить беспорядок из-за 1/2 установленной проблемы с ядром. После всего этого я мог наконец-то «sudo apt-get upgrade» и снова начать работать.

В качестве примера я добавил «sudo update-grub» и «sudo apt-get autoremove», чтобы убедиться, что меню загрузки было точным, а другие пакеты были очищены.

flickerfly
источник
Я написал немного больше об этом процессе здесь: askubuntu.com/a/430944/47461 Как подрядчик, я часто сталкиваюсь с этой проблемой.
flickerfly
0

В ситуации с Ubuntu 12.04 необходимо было вручную установить linux-headers-server и linux-server (как предложено выше - я бы там прокомментировал, но пока не имел этой привилегии), а затем apt-get remove linux-headers-virtual, который больше не существует как 64-битный пакет для 12.04.

sudo wget https://launchpad.net/ubuntu/+archive/primary/+files/linux-headers-server_3.2.0.64.76_amd64.deb

user291949
источник