
Я использую 64-битный Debian Wheezy. В последнее время, когда я это делаю, apt-get upgrade
я получаю это:
The following packages have been kept back:
libsmbclient libtevent0 samba-libs
Это сводит меня с ума. Я думал, что просто удалю samba, так как я ей все равно не пользуюсь, но какой-то гений заставил Gnome зависеть от нее:
# apt-get remove libsmbclient
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
gnome gnome-core gvfs-backends libgnomevfs2-extra libsmbclient mencoder mplayer
Как безопасно обновить эти пакеты?
Не так много дополнительных вещей установлено:
deb http://ftp.pl.debian.org/debian/ wheezy main
deb-src http://ftp.pl.debian.org/debian/ wheezy main
deb http://security.debian.org/ wheezy/updates main
deb-src http://security.debian.org/ wheezy/updates main
# wheezy-updates, previously known as 'volatile'
deb http://ftp.pl.debian.org/debian/ wheezy-updates main
deb-src http://ftp.pl.debian.org/debian/ wheezy-updates main
# wheezy-backports
deb http://ftp.pl.debian.org/debian/ wheezy-backports main contrib non-free
# virtualbox
deb http://download.virtualbox.org/virtualbox/debian/ wheezy contrib
[ОБНОВЛЯТЬ]
Что я пробовал:
apt-get dist-upgrade
- результат тот же (пакеты были задержаны).- используется
aptitude
, но все, что он предлагает, это удалить gnome и несколько других пакетов, связанных с gnome, и установить целую кучу пакетов i386 (похоже, только библиотеки). apt-get install libsmbclient
даетlibsmbclient : Depends: samba-libs (= 2:4.1.9+dfsg-1~bpo70+1) but it is not going to be installed
apt-get install libtevent0
даетlibtevent0 : Depends: libtalloc2 (>= 2.1.0) but 2.0.7+git20120207-1 is to be installed
.apt-get install samba-libs
даетsamba-libs : Depends: samba-dsdb-modules (= 2:4.1.9+dfsg-1~bpo70+1) but it is not going to be installed
[ОБНОВЛЕНИЕ 2]
Похоже, что источник этой проблемы находится где-то в репозитории backports. Я как-то экспериментировал с bumblebee и некоторыми DVD-рипперами, и я помню, что мне пришлось установить что-то из backports. Мне это больше не нужно. Bumblebee в любом случае не сработал на моем оборудовании, и DVD в итоге был рипнут на Windows :(
Я так и сделал aptitude search '~S ~i ~Abackports'
и вот что получилось:
i initramfs-tools - generic modular initramfs generator
i A libavutil53 - Libav utility library
i libldb1 - LDAP-like embedded database - shared library
i A libnettle4 - low level cryptographic library (symmetric and one-way cryptos)
i A libntdb1 - New Trivial Database - shared library
i A libopus0 - Opus codec runtime library
i libswscale2 - Libav video scaling library
i A libtdb1 - Trivial Database - shared library
i A libwbclient0 - Samba winbind client library
i A python-talloc - hierarchical pool based memory allocator - Python bindings
i samba-common - common files used by both the Samba server and client
Я думаю, что мне следует понизить эти пакеты и все должно быть хорошо. Я прав? Как мне это сделать?
[ОБНОВЛЕНИЕ 3]
Я попытался удалить или понизить версию этих пакетов из репозитория backports, но мне это удалось лишь частично.
Когда я захотел понизить версию, libntdb1
я понял, что его нет в стабильном репозитории. Когда я попытался удалить его - снова, apt захотел удалить и gnome. Когда я это сделал, apt-cache rdepends libntdb1
оказалось, что есть только обратная зависимость samba-libs
. В стабильном репозитории его тоже нет samba-libs
, И я не могу его удалить, потому что он снова пытается удалить gnome и кучу всего прочего. Что, черт возьми, здесь происходит? Обратите внимание, что этого samba-libs
нет в списке, когда я делаю aptitude search '~S ~i ~Abackports'
. Как избавиться от этой штуки?
Также, когда я попытался сделать даунгрейд libldb1
и libwbclient0
не смог, потому что apt
хотел удалить gnome в обоих случаях. Почему?
Итак, теперь у меня есть три пакета из репозитория backports, перечисленных ниже aptitude search '~S ~i ~Abackports'
:
i libldb1 - LDAP-like embedded database - shared library
i A libntdb1 - New Trivial Database - shared library
i A libwbclient0 - Samba winbind client library
И samba-libs
это, по-видимому, также происходит из бэкпортов, но не указано в спискеaptitude search '~S ~i ~Abackports'
решение1
Понизить версию deb-пакетов до определенного репозитория можно с помощью apt
:
# apt-get install libsmbclient/wheezy libtevent0/wheezy samba/wheezy
- Конструкция «[package]/wheezy» означает, что пользователю нужен пакет из репозитория wheezy.толькои не самый новый.
- Важно указатьвсенужные пакеты за один раз, чтобы
apt
можно было правильно разрешить зависимости и извлечь другие сложные пакеты.
Если apt
не появляется запрос на удаление важных пакетов, которые вы хотите сохранить, то все в порядке. Будет несколько предупреждений о проблемах с зависимостями, но вы можете спокойно игнорировать эти предупреждения, пока они не станут фатальными.
После успешного понижения версии библиотеки типа libtevent0, libldb1 и т. д. больше не нужны. Вы можете использовать apt-get --purge autoremove
and/or deborphan
(если он установлен) для поиска и очистки бесполезных в системе пакетов-сирот.
(Мой предыдущий ответ будет признан недействительным, скоро удалю, он в любом случае неверен — можно понизить версию с помощью apt
)
решение2
Я использую интерактивный решатель пакетов aptitude:
запустить sudo aptitude
. Затем введите U
(это заглавная буква u), чтобы сказать, что вы хотите обновить все это. Он сообщит вам, что есть конфликт, и сделает предложение по его решению. используйте e
для входа в интерактивный решатель, а затем .
(точка) и ,
(запятая) для итерации по различным решениям, которые он найдет, затем !
для принятия одного из решений.
Вы также можете попытаться помочь ему найти лучшее решение (для вас), перейдя к части решения (где, например, предлагается удалить gnome) и сообщив ему, что вы хотите принять (с помощью A
) или отказаться (с помощью R
) его действие.
решение3
Самое быстрое и простое решение:
Каждый пакет необходимо устанавливать по отдельности.
Видеть этоСуперпользовательрешение: apt пакеты сдерживали решение
Предупреждение: Не беги sudo apt-get dist-upgrade
пока вы полностью не установите пакеты, которые вам нужно установить. ПОСЛЕ и ТОЛЬКО ПОСЛЕ этого вы можете запустить sudo apt-get update
&sudo apt-get dist-upgrade
решение4
Откройте Терминал и введите:
apt-cache rdepends packagename
и заменитьимя пакетас пакетом, который вы хотите удалить, и он выведет список пакетов, которым нужен пакет, который вы пытаетесь удалить, сначала удалите эти пакеты, а затем попробуйте удалить сам пакет.