- Как мне получить apt-get, чтобы игнорировать некоторые зависимости?
- 11 ответов
- Как заставить apt-get игнорировать некоторые зависимости?
- Как игнорировать зависимость пакета?
- 3 ответа
- Неудовлетворенные зависимости Ubuntu
- Неудовлетворенные зависимости в Ubuntu
- 1. Обновление и исправление зависимостей
- 2. Установка зависимостей
- 3. Удаление зависимостей
- 4. Распаковать пакет
- 5. Использовать snap пакеты
- Выводы
Как мне получить apt-get, чтобы игнорировать некоторые зависимости?
Как заставить apt-get игнорировать некоторые зависимости? Например, я хотел установить mailx , чтобы использовать его для отправки электронной почты из cron-скриптов /инструментов генерации отчетов. Тем не менее, установка mailx также устанавливает exim4 и целую кучу зависимостей (у меня уже установлен Postfix) Мне действительно не нужно, и я думаю, что mailx также может жить без него.
Как игнорировать некоторые зависимости, но все же использовать apt-get, поскольку это хороший инструмент?
11 ответов
Вы можете попробовать флаг —nodeps с помощью apt-get .
Или загрузите пакет и установите его с помощью dpkg с опцией —ignore-depends .
Например, если вы хотите установить пакет foo без зависимости bar :
Вы можете изменить зависимости пакета deb следующим образом:
- Unpack deb: ar x golden-linux.deb (создаст, т. е. три файла: debian-binary control.tar.gz data.tar.gz)
- Распаковать архив управления: tar xzf control.tar.gz (создаст: postinst postrm preinst prerm md5sums control)
- Исправить зависимости в control (использовать текстовый редактор)
- Repack control.tar.gz: tar —ignore-failed-read -cvzf control.tar.gz
md5sums control - Repack deb: ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz (порядок важен! См. [Примечание])
[Примечание]: dpkg не сможет быстро прочитать метаданные пакета, если ему нужно будет найти, где закончилась секция данных!
Простое и простое решение: просто укажите нежелательные пакеты с дополнительным — после каждого из них.
Пример без переключателя — :
Пример использования переключателя на избежать установки exim4-base . Обратите внимание на — в конце:
Как вы можете видеть, apt-get больше не пытается установить пакет exim4-base и не пытается установить его различные зависимости ( exim4-config и т. д.).
И если вы были неправы и нуждались в том, что зависимость exim4-base в конце концов, вы можете просто apt-get install это позже!
После установки пакета с опцией —ignore-depends перейдите и отредактируйте файл /var/lib/dpkg/status и удалите любую зависимость, которую вы думать не нужно. Просто будьте очень осторожны. Для того, чтобы отменить. требуется, более чем вероятно BE
Поскольку вы установили postfix из исходного кода, вам нужно установить пакет «фиктивный», который будет удовлетворять зависимости mail-транспорта-агента от mailx (или bsd-mailx). Пакет «equivs» в debian существует для создания такого фиктивного пакета, который вы можете установить, чтобы сообщить dpkg «эта зависимость удовлетворена»
Причина, по которой говорить, что dpkg просто игнорировать зависимости не является хорошим решением, заключается в том, что вы только сообщаете dpkg /apt игнорировать его для одной транзакции, вы не можете сказать ему игнорировать зависимости навсегда. Каждый раз, когда вы используете apt, он проверяет зависимости от пакетов all
Я искал эту опцию на сервере Ubuntu 12.04 под управлением Xen. В моих доменах я использую -virtual kernel, и apt настойчиво пытался установить grub с каждым обновлением пакета ядра. Однако Grub не нужен внутри domU при использовании p [yv] grub.
Я искал опцию -nodeps для apt-get, но это не сработало, поэтому закончилось удаление /очистка grub * после каждого обновления ядра.
В конце концов, действительно чтение иногда помогает справочная страница — получается, что аналогичный параметр apt-get на 12.04 кажется —no-install-рекомендует, что на самом деле работает в этом случае, поскольку grub указан как «рекомендуется» в информации о пакете (я думаю, что это не «настоящая» зависимость?).
Я добавляю это здесь, потому что в моем случае он решил аналогичную проблему, и намек на «-no-install-рекомендует» еще не упоминался.
Вы можете загрузить пакет с помощью apt-get, а затем установить его с помощью dpkg, указав вручную зависимость, которую вы хотели бы игнорировать.
Например, если я хочу загрузить mypackage, но это зависит от libperl5.14, и я не хочу устанавливать libperl5.14, поскольку у меня есть другая версия, я могу игнорировать эту зависимость следующим образом:
Альтернативный способ ручной настройки зависимостей:
Для этого вы можете просто установить гвоздь , который я не знаю, t думают, что эти зависимости?
В моей системе debian bsd-mailx фактически зависит от default-mta | mail-transport-agent (вы можете проверить, на что зависит пакет, с помощью apt-cache show
для чего-либо в архиве или dpkg -s
для установленных пакетов.
Возможно, ваш пакет postfix не имеет Provides: mail-transport-agent , поэтому apt не понимает, что у вас установлен MTA. Было бы ошибкой, если бы это был официальный пакет.
Хорошо — не надо.
Использование чужих работ очень важно на пути к любому успеху. Когда вы создаете какое-то программное обеспечение из источника (tarball), вы упускаете возможность использовать работу менеджера пакетов дистрибутива.
Вы не получите «бесплатные» обновления. В большинстве случаев ни один из них не обновляет пакеты, которые они установили из источника. Потому что им нужно отслеживать программное обеспечение для новых версий, перестраивать его и все зависимые программы (помните о них).
У вас возникнут проблемы с другими пакетами из репозиториев вашего дистрибутива. Это точно так, как указано в вопросе: у ubuntu есть отличный менеджер пакетов и некоторые очень хорошие люди, поддерживающие пакеты. И они решили, что для работы программы mailx вам нужен MTA. Поэтому, если вы установили postfix из источников, ubuntu не попросит вас установить exim.
Если по какой-то причине обслуживание сервера переходит к другому лицу (например, ваш проект становится очень успешным, и вы решаете нанять другого парня, чтобы управлять серверами, пока вы заняты другими вещами), он, естественно, будет ожидать выполнения dpkg —get-selections, чтобы получить все установленные пакеты.
Постарайтесь использовать программное обеспечение управления пакетами дистрибутива как можно больше. Научитесь создавать свои собственные пакеты, если вы не можете найти один готовый продукт, и вы станете лучшим профессионалом.
Источник
Как заставить apt-get игнорировать некоторые зависимости?
Как мне заставить apt-get игнорировать некоторые зависимости? Например, я хотел установить mailx, чтобы использовать его для отправки электронной почты из скриптов cron / инструментов генерации отчетов. Тем не менее, установка mailx также устанавливает exim4 и целую кучу зависимостей (у меня уже установлен Postfix), в котором я на самом деле не нуждаюсь и который, я думаю, mailx также может обойтись.
Как я игнорирую некоторые зависимости, но все еще использую apt-get, так как это хороший инструмент?
Простое и удобное решение: просто укажите ненужные пакеты с дополнительными — после каждого из них.
Пример без — переключателя:
Пример использования переключателя, чтобы избежать установки exim4-base . Обратите внимание — на в конце:
Как видите, apt-get он больше не пытается установить exim4-base пакет и не пытается установить его различные зависимости (и exim4-config т. Д.).
И если вы ошиблись и в exim4-base конце концов нуждались в этой зависимости, вы можете сделать apt-get install это позже!
Вы можете изменить зависимости пакета deb следующим образом:
- Распакуйте deb: ar x golden-linux.deb (создаст три файла: debian-binary control.tar.gz data.tar.gz)
- Распаковать архив управления: tar xzf control.tar.gz (создаст: postinst postrm preinst prerm md5sums control)
- Исправить зависимости в control (используйте текстовый редактор)
- Repack control.tar.gz: tar —ignore-failed-read -cvzf control.tar.gz
md5sums control - Repack deb: ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz (порядок важен! См. [Примечание])
[Примечание]: dpkg не сможет быстро прочитать метаданные пакета, если ему придется искать, где заканчивается раздел данных!
После того, как вы установите пакет с —ignore-depends опцией, перейдите и отредактируйте /var/lib/dpkg/status файл и удалите все зависимости, которые, по вашему мнению, не нужны. Просто будь очень осторожен. В порядке деп. будет необходимо, это более чем вероятно BE требуется
Вы можете попробовать —nodeps флаг с apt-get .
Или загрузите пакет и установите его, используя dpkg опцию —ignore-depends .
Например, если вы хотите установить пакет foo без зависимости bar :
Поскольку вы установили postfix из исходного кода, вам необходимо установить «фиктивный» пакет, который будет удовлетворять зависимости mailx transport-agent от mailx (или bsd-mailx). Пакет «эквивалент» в Debian существует для создания такого фиктивного пакета, который вы можете установить, чтобы сообщить dpkg «эта зависимость удовлетворена»
Причина, по которой указание dpkg просто игнорировать зависимости не является хорошим решением, заключается в том, что вы просто указываете dpkg / apt игнорировать его для одной транзакции, вы не можете сказать, что он игнорирует зависимости навсегда. Каждый раз, когда вы используете apt, он проверяет зависимости всех пакетов
Я искал эту опцию на сервере Ubuntu 12.04 под управлением Xen. В своих доменах я использую ядро -virtual и постоянно пытаюсь устанавливать grub при каждом обновлении пакета ядра. Однако Grub не нужен внутри DOMU при использовании p [yv] grub.
Я также искал опцию -nodeps для apt-get, но она не работала, поэтому в конечном итоге удалял / удалял grub * после каждого обновления ядра.
В конце концов, действительно полезно чтение man-страницы — оказывается, похожая опция apt-get на 12.04, похоже, —no-install-Recommended, которая на самом деле работает в этом случае, так как grub указан как ‘рекомендуемый’ в информация о пакете (наверное, это не «реальная» зависимость?).
Я добавляю это здесь, потому что в моем случае это решило подобную проблему, а подсказка для ‘—no-install-Recommended’ еще не упоминалась.
Вы можете скачать пакет с помощью apt-get, а затем установить его с помощью dpkg, вручную перечислив зависимость, которую вы хотели бы игнорировать.
Например, если я хочу загрузить mypackage, но это зависит от libperl5.14, и я не хочу устанавливать libperl5.14, так как у меня другая версия, я могу игнорировать эту зависимость следующим образом:
Альтернативный способ ручной настройки зависимостей:
В моей системе Debian bsd-mailx фактически зависит от default-mta | mail-transport-agent (вы можете проверить, от чего зависит пакет, apt-cache show
для чего-либо в архиве или dpkg -s
для установленных пакетов.
Возможно, ваш постфиксный пакет не имеет, Provides: mail-transport-agent поэтому apt не понимает, что у вас установлен MTA. Для этого стоит подать ошибку, если это официальный пакет.
Для этого вы можете просто установить гвоздь, который, я думаю, не имеет этих зависимостей?
Использование работы других людей очень важно на пути к любому успеху. Когда вы создаете какое-то программное обеспечение из исходного кода (tarball), вы упускаете возможность использовать работу менеджера пакетов дистрибутива.
Вы не будете получать «бесплатные» обновления. В большинстве случаев никто не обновляет пакеты, которые они установили из исходного кода. Поскольку им нужно отслеживать программное обеспечение на наличие новых версий, перестраивайте его и все зависимые программы (постарайтесь запомнить их).
У вас будут проблемы с другими пакетами из репозитория вашего дистрибутива. Это как раз тот случай, который указан в вопросе: в Ubuntu есть отличный менеджер пакетов и несколько очень приятных людей, которые поддерживают пакеты. И они решили, что для работы программы mailx нужен MTA. Так что, если вы установили postfix из исходников, Ubuntu не попросит вас установить exim.
Если по какой-либо причине обслуживание сервера переходит к другому человеку (например, ваш проект становится очень успешным, и вы решаете нанять другого парня для управления серверами, пока вы заняты другими делами), он, естественно, будет ожидать, что он запустит dpkg —get-selections все установленные пакеты.
Старайтесь максимально использовать программное обеспечение для управления пакетами дистрибутива. Научитесь создавать свои собственные пакеты, если вы не можете найти один готовый пакет, и вы станете лучшим профессионалом.
Источник
Как игнорировать зависимость пакета?
Просто анализируйте и повторно собирайте $file, когда вы перебираете соответствующие файлы: $
Предположительно, дата не изменится при запуске вашего скрипта, поэтому нет смысла вызывать date для каждого файла; скорее, сохраните дату в переменной один раз, а затем используйте ее во время цикла: date=$(date ‘+%G-%m-%d’). (Обратите внимание, что современные скрипты должны использовать $(. ), а не обратные ссылки. Также обратите внимание, что % не является «специальным» символом и поэтому не требует кавычек или экранирования, хотя в качестве хорошей практики вся строка формата должна быть цитата.)
Если у вас есть новая версия Bash, вы можете полностью исключить подселлем, используя вместо этого printf -v date ‘%(%G-%m-%d)T’ -1.
Вы также можете счесть полезным использовать shopt -s globstar так что вы можете искать произвольную глубину в каталогах и shopt -s nullglob, чтобы unmatched glob (wildcard) расширялся до «ничего» вместо исходного шаблона glob.
Полагая все это вместе, мы получаем: [ ! d4]
3 ответа
Похоже, Microsoft не обновляла свой пакет MSSQL. Поскольку у openssl недавно появились важные исправления, я бы не стал игнорировать зависимость.
Я рекомендую установить mysql-server вместо mssql.
Если вы все еще хотите установить mssql, это путь:
Источник
Неудовлетворенные зависимости Ubuntu
При установке пакетов из официальных или сторонних репозиториев вы можете столкнуться с проблемой неудовлетворенные зависимости Ubuntu. Чтобы понять причину возникновения этой ошибки сначала надо разобраться как работают пакетные менеджеры в Linux. Здесь всё компоненты системы, библиотеки и сами программы разделены на пакеты. И если какой-либо программе нужна определенная библиотека, она не поставляется вместе с этой библиотекой, а ожидает, что эта библиотека будет уже установлена в системе.
Установкой библиотек и других компонентов занимается пакетный менеджер, отсюда у каждой программы есть ряд зависимостей которые должны быть удовлетворены чтобы программа смогла заработать.
Неудовлетворенные зависимости в Ubuntu
По английски наша ошибка ещё может писаться как the following packages have unmet dependencies. Она может возникнуть в нескольких случаях, давайте сначала рассмотрим основные из них:
- Вы используете dpkg для установки deb пакета. Эта утилита не занимается установкой зависимостей. Вместо неё надо использовать apt install или потом просто установить недостающие зависимости с помощью apt, как это делается описано ниже;
- Вы используете старую версию дистрибутива — в старых версиях могло что-то изменится в репозитории и часть пакетов была удалена или переименована. С LTS версиями такое случается редко, но с обычными релизами вполне может произойти;
- Вы пытаетесь установить программу не от своего дистрибутива — несмотря на родство всех дистрибутивов семейства Debian, не желательно использовать программы из других дистрибутивов, так, как они могут требовать пакеты, которые в этом дистрибутиве называются по другому;
- У вас установлен устаревший пакет, который не позволяет обновить некоторые зависимости — случается, когда в системе уже есть какой-нибудь пакет старый пакет, требующий старую версию библиотеки, а новая программа, которую вы собираетесь установить уже хочет более новую версию и не позволяет её обновить. Эта проблема не очень типична для Ubuntu, так как здесь большинство версий программ в репозиториях заморожено, но часто встречается при использовании дистрибутивов с системой роллинг релизов.
1. Обновление и исправление зависимостей
Самое первое что надо сделать при проблемах с зависимостями, это хоть как-нибудь их исправить, потому что иначе пакетный менеджер работать не будет. В некоторых случаях, если списки репозиториев давно не обновлялись их обновление может помочь:
sudo apt update
sudo apt install -f
Эта команда установит зависимости, которые есть во официальных репозиториях (поможет при использовании dpkg) и если это не решит проблему, то удалит пакеты, для которых зависимости удовлетворить не удалось. Также после этого можно выполнить:
sudo dpkg —configure -a
А потом повторить предыдущую команду. Следующим шагом можно попробовать обновить систему до самой последней версии. Это тоже может помочь если вы пытаетесь установить пакет из официальных репозиториев и при этом возникает проблема с зависимостями:
sudo apt upgrade
sudo apt full-upgrade
Если причиной вашей проблемы стал устаревший пакет надо его удалить или придумать для него замену. Например, если у вас установлена старая версия php, могут возникнуть проблемы с установкой новой версии, потому что будут конфликтовать версии библиотек, от которых зависит программа. Однако можно найти PPA со специально подготовленной старой версией php, которая ни с кем конфликтовать не будет.
Также подобная проблема может возникать при использовании PPA. Эти репозитории поддерживаются сторонними разработчиками, и могут содержать проблемы, если это ваш вариант, то, лучше поискать альтернативные способы установки необходимой программы.
2. Установка зависимостей
Дальше установка зависимостей Ubuntu. Следующий этап, если вы скачали пакет в интернете, например, от другого дистрибутива с таким же пакетным менеджером, можно попытаться установить таким же способом библиотеки, которые он просит. Это может сработать особенно, если вы пытаетесь установить программу из старой версии дистрибутива. Пакеты можно искать прямо в google или на сайте pkgs.org:
Здесь собрано огромное количество пакетов от различных дистрибутивов, в том числе и от Ubuntu и Debian. Просто выберите нужную версию пакета для вашей архитектуры. Скачать файл можно чуть ниже на странице пакета:
После загрузки пакета с сайта его можно установить через тот же dpkg:
sudo dpkg -i ffmpegthumbs_19.04.3-0ubuntu1
После этого можно снова попробовать установить свой пакет. Но устанавливаемая библиотека может потребовать свои неудовлетворенные зависимости, а та ещё свои, поэтому тянуть программы из других дистрибутивов таким образом не рационально.
3. Удаление зависимостей
Если у вас есть скачанный пакет, и он говорит, что он зависит о версии библиотеки, которой в вашей системе нет, но вы уверены, что ему подойдет и другая версия, то можно просто убрать эту зависимость из пакета. Но для этого надо его перепаковать. Такая ситуация была когда-то с популярным менеджером Viber. Рассмотрим на примере того же вайбера.
Сначала распакуйте пакет в подпапку package командой:
dpkg-deb -x ./viber.deb package
Затем туда же извлеките метаданные пакета:
dpkg-deb —control viber.deb package/DEBIAN
В файле package/DEBIAN есть строчка Depends, где перечислены все библиотеки, от которых зависит пакет и их версии. Просто удалите проблемную библиотеку или измените её версию на ту, которая есть в системе.
Затем останется только собрать пакет обратно:
dpkg -b viber package.deb
И можете устанавливать, теперь с зависимостями будет всё верно:
sudo dpkg -i package.deb
Но такое исправление зависимостей Ubuntu следует использовать только для пакетов, которые точно неверно собраны. Важно понимать, что пакетный менеджер вам не враг, а помощник, и то что вы отключите зависимости и установите программу ещё не значит, что она потом будет работать.
4. Распаковать пакет
Следующий способ подойдет, если программа которую вы устанавливаете это библиотека, например, веб-драйвер для Selenium. Пакет можно распаковать и просто разложить исполняемые файлы из него по файловой системе в соответствии с папками внутри архива. Только желательно использовать не корневую файловую систему, а каталог /usr/local/ он как раз создан для этих целей.
5. Использовать snap пакеты
Самый простой способ обойти проблемы с зависимостями — использовать новый формат установщика программ, в котором программа содержит все зависимости в установочном архиве и они устанавливаются аналогично Windows в одну папку. Установка такой программы будет дольше, но зато такие там вы точно не получите проблем с зависимостями Ubuntu. Всё программы, которые поддерживают этот формат есть в центре приложений Ubuntu:
Выводы
В этой статье мы разобрали как исправить проблемы с зависимостями Ubuntu. Некоторые из способов довольно сложные, а другие проще. Но сама эта система, согласно которого пакеты зависят от других, а те ещё от других очень сложная и не удивительно, что время от времени в ней возникают ошибки. А какие способы решения этой проблемы вы знаете? Напишите в комментариях?
Источник