Ubuntu 12.04 libudev-dev не устанавливается из-за зависимостей

У меня есть пример кода на С++, который получает события горячего подключения с помощью библиотеки udev. Он отлично работал в Ubuntu 10.04. Единственным предварительным условием был пакет libudev-dev: sudo apt-get install libudev-dev

Но когда я попытался установить этот пакет в 12.04, я получаю:

sudo apt-get install libudev-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
libudev-dev : Depends: libudev0 (= 175-0ubuntu9) but 175-0ubuntu9.3 is to be installed
E: Unable to correct problems, you have held broken packages.

Кажется, это означает, что я должен установить libudev0, поэтому:

sudo apt-get install libudev0
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libudev0 is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Я не уверен, как действовать дальше. libudev-dev зависит от libudev0, но это уже есть, так что... что дальше?

Обратите внимание, что следующие репозитории не прокомментированы в sources.list, и я сделал обновление apt-get:

deb http://us.archive.ubuntu.com/ubuntu/ precise main restricted    
deb-src http://us.archive.ubuntu.com/ubuntu/ precise main restricted
deb http://us.archive.ubuntu.com/ubuntu/ precise universe
deb-src http://us.archive.ubuntu.com/ubuntu/ precise universe

Некоторые сайты указали, что я должен сделать -f:

sudo apt-get -f install 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Здесь найдена отличная ссылка: https://askubuntu.com/questions/140246/how-do-i-resolve-unmet-dependencies, но без радости.

Google говорит, что это слэм-данк для других людей...

Спасибо за любую помощь в этом, Джон


person JohnA    schedule 19.06.2013    source источник


Ответы (3)


Вот решение.

Когда вы читаете следующее:

The following packages have unmet dependencies:
libudev-dev : Depends: libudev0 (= 175-0ubuntu9) but 175-0ubuntu9.3 is to be installed
E: Unable to correct problems, you have held broken packages.

это означает, что пакет libudev-dev, который я пытаюсь установить, зависит от пакета:

libudev0 version 175-0ubuntu9

(Это то, что пытается сказать "(= 175-0ubuntu9)").

Но уже установлена ​​libudev0 версии 175-0ubuntu9.3.

(Это то, что пытается сказать «но 175-0ubuntu9.3 должна быть установлена»).

Другими словами:

  • уже установлена ​​более новая версия libudev0.
  • пакет libudev-dev, который я пытаюсь установить, зависит от более старой версии libudev0, и он уже установлен.
  • что, в свою очередь, означает, что репозиторий, из которого я устанавливаю libudev-dev, устарел.

Вы можете найти пакеты, доступные во всех репозиториях, перечисленных в /etc/apt/sources.list:

sudo apt-cache madison libudev-dev
sudo apt-cache madison libudev0

Итак, наконец, мы подошли к НАСТОЯЩЕЙ проблеме! В моем списке репозиториев в sources.list отсутствует тот, который содержит libudev-dev 175-0ubuntu9.3.

Починить это:

  1. перейдите на http://packages.ubuntu.com и найдите "libudev-dev"

  2. В полученном списке найдите 175-0ubuntu9.3 для Precise Pangolin (ubuntu 12.04). В этом случае эта версия находится под «точным обновлением». Вы можете нажать на ссылку:

    http://packages.ubuntu.com/precise-updates/libudev-dev

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

  3. добавить репозитории в apt

    sudo gedit /etc/apt/sources.list
    [ add these two repos ]
    deb http://us.archive.ubuntu.com/ubuntu/ precise-updates main    
    deb-src http://us.archive.ubuntu.com/ubuntu/ precise-updates main
    
  4. обновить

    sudo apt-get update
    sudo apt-cache madison libudev-dev
    [you should see libudev-dev 175-0ubuntu9.3 in the output]
    libudev-dev | 175-0ubuntu9.3 | http://us.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
    
  5. установить пакет:

    sudo apt-get install libudev-dev
    

    который работает как шарм!

Джон

person JohnA    schedule 21.06.2013
comment
apt-cache madison не требует привилегий root - person Ruslan; 18.02.2015

Нет. Не работает как шарм.

@ubuntu:~$ sudo apt-cache madison libudev-dev

либудев-дев | 175-0убунту 9.8 | http://archive.ubuntu.com/ubuntu/ точные обновления/основные пакеты amd64

либудев-дев | 175-0убунту 9.8 | http://us.archive.ubuntu.com/ubuntu/ точные-обновления/main amd64 Пакеты

ubuntu:~$ sudo apt-get установить libudev-dev

Paketlisten werden gelesen... Fertig

Abhängigkeitsbaum wird aufgebaut

Statusinformationen werden eingelesen... Fertig

libudev-dev это новая версия.

Probieren Sie »apt-get -f install«, um dies zu korrigieren:

Die folgenden Pakete haben unerfüllte Abhängigkeiten:

libudev-dev : Hängt ab von: libudev0 (= 175-0ubuntu9.8) aber 175-0ubuntu9 для установки в другом месте

libudev0 : Сообщить: libudev0:i386 (!= 175-0ubuntu9) aber 175-0ubuntu9.8 установить нельзя

libudev0:i386 : Добавил: libudev0 (!= 175-0ubuntu9.8) aber 175-0ubuntu9 установить нельзя

E: Unerfüllte Abhängigkeiten. Versuchen Sie »apt-get -f install« ohne Angabe eines Pakets (или geben Sie eine Lösung an).

ЭТО СДЕЛАЛ:

apt-get скачать libudev0 libudev0:i386

sudo dpkg -i libudev0_*.deb

sudo apt-получить обновление

person alphanerd    schedule 23.01.2015
comment
Это помогло бы отредактировать шум (усугубленный тем, что он на немецком языке) и предоставить основные части решения. - person djv; 24.01.2015
comment
Часть "Нет" мне понравилась. - person diggy; 13.03.2015

Вот что сработало для меня:

  1. sudo apt-mark удерживать libudev0: i386
  2. sudo apt-mark удерживать libudev0
  3. sudo apt-получить обновление
  4. Затем я зашел в synaptic и пометил libudev для обновления (наверное, сработало бы и через командную строку. только не так, как я это сделал)
person DrewB    schedule 05.05.2015