Установка MariaDB, когда Apt сообщает, что MariaDB имеет неудовлетворенные зависимости или поврежденные пакеты

9

Я попробовал все, чтобы установить MariaDB на этой чистой установке Ubuntu, но я продолжаю получать эту ошибку,

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:
mariadb-server : Depends: mariadb-server-5.5 (= 5.5.33a+maria-1~saucy) 
but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Я следовал этому руководству, чтобы попытаться установить его, http://www.unixmen.com/install-lemp-server-nginx-mysql-mariadb-php-ubuntu-13-10-server/

И я также следовал «официальному» руководству на странице загрузок MariaDB для 13.10 https://downloads.mariadb.org/mariadb/repositories/

Но, похоже, ничего не работает.

Редактировать 1

Я пробовал оба Как решить неудовлетворенные зависимости после добавления PPA? и как установить MariaDB? но это все еще дает мне ошибку, которую я отправил выше.

Это новая версия Ubuntu, на которой почти ничего не установлено.

Редактировать 2

Все флажки являются тикетами в Updates. Я побежал:

sudo apt-get update && sudo apt-get -f install mariadb-server-5.5"=5.5.33a+maria-1~saucy"

И это дало мне эту ошибку:

The following packages have unmet dependencies:
mariadb-server-5.5 : Depends: mariadb-client-5.5 (>= 5.5.33a+maria-1~saucy) 
but it is not going to be installed
Depends: mariadb-server-core-5.5 (>= 5.5.33a+maria-1~saucy) 
but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
Andreas
источник
Выполните эту команду один раз, чтобы установить указанный пакет: sudo apt-get update && sudo apt-get -f install mariadb-server-5.5"=5.5.33a+maria-1~saucy"убедитесь, что вы отметили все флажки на вкладке « Обновления » в разделе « Источники программного обеспечения» . Чтобы проверить это, запустите: sudo software-properties-gtkчтобы открыть Software Sources . Если вы получили какую-либо ошибку / сообщение в команде, о которой я упоминал выше, опишите ее в своем вопросе.
Саурав Кумар
Похоже, вы скоро решите свою проблему. Основная хитрость заключается в том, что вы должны перечислить все необходимые пакеты в одну строку для установки. Например, из нового вывода вы должны выполнить: sudo apt-get -f install mariadb-server-5.5"=5.5.33a+maria-1~saucy mariadb-client-5.5"=5.5.33a+maria-1~saucy" mariadb-server-core-5.5"=5.5.33a+maria-1~saucy" поймать шаблон, что я делаю, поэтому, если вам нужно установить еще несколько пакетов, вы должны включить их в ту же строку, что и в том же шаблоне. Я знаю, что это будет трудно, но надеюсь, что это поможет вам. Ответить.
Саурав Кумар
Да, мне удалось установить mariadb-common и попытаться установить libmariadbclient18, который зависит от libmysqlclient18, но там говорится, что у меня уже есть libmysqlclient18 с libdbd-mysql-perl.
Андреас
@Ecaz Вы нашли решение для своей проблемы? Я испытываю то же самое.
Джон Купс
Я получаю эту ошибку:libmariadbclient18 : Depends: libmysqlclient18 (= 5.5.33a+maria-1~saucy) but 5.5.34-0ubuntu0.13.10.1 is to be installed
Джон Купс

Ответы:

16

См. Несоответствие версий между репозиториями Debian Mariadb и Ubuntu.

Номера версий mysql-common или libmysqlclient редко встречаются в официальных репозиториях Ubuntu или Debian выше, чем в репозиториях MariaDB, но это произошло. Когда бы то ни было, это происходило из-за критических выпусков исправлений ошибок, которые существовали в версии MySQL в репозиториях распространения, но которые уже были исправлены в версии MariaDB в репозиториях MariaDB.

Если при попытке установить MariaDB возникает ситуация, описанная выше, вы получите сообщение об ошибке:
The following packages have unmet dependencies:
mariadb-server : Depends: mariadb-server-5.5 but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
Способ исправить это - указать точную версию двух пакетов, которые вы хотите установить. Для этого сначала определите полные номера версий затронутых пакетов. Самый простой способ сделать это с помощью 'apt-cache show':
apt-cache show mysql-common | grep Version
apt-cache show libmysqlclient18 | grep Version

Это ситуация на момент написания этой статьи, поскольку номера версий показаны как:

Version: 5.5.34-0ubuntu0.13.10.1
Version: 5.5.34+maria-1~saucy

Страница MariaDB дает два решения.

Первое решение: указание версии пакета

Для каждого из вышеперечисленных вам будет предоставлен список версий. Те, которые находятся в репозиториях MariaDB, будут иметь «mariadb» в строках версий и те, которые вам нужны. Имея номера версий в руках, вы сможете установить MariaDB, явно указав номера версий следующим образом:
apt-get install mariadb-server-5.5 mariadb-client-5.5 \
libmysqlclient18=<version-number> \
mysql-common=<version-number>

который

apt-get install mariadb-server-5.5 mariadb-client-5.5 \
 libmysqlclient18=5.5.34+maria-1~saucy \
 mysql-common=5.5.34+maria-1~saucy

ПРИМЕЧАНИЕ. Обновите до 5.5.34, чтобы отразить текущую версию по состоянию на 2014.01.28 [RealPariah]. После установки необходимо удерживать пакеты до тех пор, пока номера версий не будут синхронизированы.

После установки MariaDB и до тех пор, пока существует проблема с номером версии, apt-get dist-upgrade попытается удалить MariaDB, чтобы установить «обновленные» пакеты libmysqlclient и mysql-common. Чтобы этого не случилось, вы можете держать их так, чтобы apt не пытался их обновить. Для этого откройте терминал, станьте пользователем root с помощью `sudo -s`, а затем введите следующее:
echo libmysqlclient18 hold | dpkg --set-selections
echo mysql-common hold | dpkg --set-selections
Удержания не позволят вам обновить MariaDB, поэтому, когда вы захотите удалить удержания, откройте терминал, войдите в систему как root с помощью sudo -s и введите следующее:
echo libmysqlclient18 install | dpkg --set-selections
echo mysql-common install | dpkg --set-selections
После этого вы сможете обновить MariaDB как обычно (например, с помощью `sudo apt-get update; sudo apt-get upgrade`).

Как узнать, когда номера версий снова совпадают?

Вы можете отслеживать номер версии MariaDB, подписавшись на оповещение по электронной почте о новых выпусках на MariaDB.org . По данным сайта, это low-traffic announce-only list.

Кроме того, когда версии пакетов снова синхронизируются, вы должны перестать видеть в apt сообщение о том, что будут удерживаться только 2 удерживаемых пакета, но что все пакеты mariadb будут удерживаться:

The following packages have been kept back:
libmariadbclient18 libmysqlclient18 linux-generic linux-headers-generic
linux-image-generic mariadb-client-5.5 mariadb-client-core-5.5
mariadb-server mariadb-server-5.5 mariadb-server-core-5.5 mysql-common

Это указывает на то, что номера пакетов снова синхронизированы, что также можно проверить с помощью синаптических или аналогичных инструментов.

Второе решение: закрепление репозитория MariaDB

Еще одна вещь, которую вы можете сделать, это закрепить репозиторий MariaDB, который вы используете. Это делается путем создания файла в `/ etc / apt / preferences.d /` со следующим содержимым:
Package: *
Pin: origin <mirror-domain>
Pin-Priority: 1000

Замените <mirror-domain>доменным именем используемого вами зеркала MariaDB. Например, ftp.osuosl.org. После установки файла pin пакеты из вашего репозитория MariaDB будут иметь приоритет над пакетами из системных репозиториев.

Вы можете найти имя зеркала, которое вы используете, в Системных настройках >> Программное обеспечение и обновления или если вы используете другой вариант Ubuntu, Synaptic >> Настройки >> Хранилища или cat /etc/apt/sources.list.

В Pin-Priorityэтом случае должно быть больше или равно 1000, чтоcauses a version to be installed even if this constitutes a downgrade of the package

(См. man 5 apt_preferencesДля получения дополнительной информации о вариантах в других случаях.)

Наименование файла настроек пиннинга

Note that the file in the /etc/apt/preferences.d directory are parsed in alphanumeric ascending order and need to obey the following naming convention:

The files have either no or "pref" as filename extension and only contain alphanumeric, hyphen (-), undescore (_), and period (.) characters. Otherwise APT will print a notice that it has ignored a file...

(Источник: man 5 apt_preferences)

Таким образом, само имя не имеет значения, но хорошее имя будет примерно таким 50_mariadb. Это идентифицирует пакет и позволяет легко размещать другие файлы настроек закрепления до или после этого файла в порядке обработки.

chaskes
источник
Я попробую первое решение, но как вы узнаете, когда было устранено несоответствие? Должен ли я просматривать журнал изменений каждый раз, когда они выпускают обновление?
Андреас
Я использовал первый метод, и он прошел очень гладко. Не беспокойтесь о зависимостях вообще. Я отредактировал ответ с информацией о номере версии
mariadb
Каким должно быть имя файла закрепления для второго решения?
Томас Тейлор
Я тебе за твои навыки. Пакеты mariadb довольно испорчены. Я утверждаю это, основываясь на том факте, что мне никогда не приходилось делать ничего из вышеперечисленного раньше, но вышеизложенное меня установило. Спасибо!
Jettero
1
@ thomas-taylor Добавлена ​​информация в названии файла закрепления.
Часов
2

У меня была похожая проблема в обновлении Ubuntu 14.10 с MySQL до Maria DB. А именно я бы застрял с

 libmysqlclient18:amd64 10.0.16+maria-1~utopic (Multi-Arch: no) is not co-installable with libmysqlclient18 which has multiple installed instances

После бесполезного следования этим советам мне очень помогло следующее: Как заменить MySQL на MariaDB в Ubuntu Server на JournalXtra.

Редактирование / var / lib / dpkg / status и удаление двух экземпляров libmysqlclient18 следующим образом:

Package: libmysqlclient18
Status: deinstall ok config-files
Priority: optional
Section: libs
Installed-Size: 3392
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: i386
Multi-Arch: same
Source: mysql-5.5
Version: 5.5.40-0ubuntu1
Config-Version: 5.5.40-0ubuntu1
Depends: mysql-common (>= 5.5.40-0ubuntu1), libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), zlib1g (>= 1:1.1.4)
Pre-Depends: multiarch-support
Description: MySQL database client library

MySQL - это быстрый, стабильный и настоящий многопользовательский многопоточный сервер баз данных SQL. SQL (язык структурированных запросов) - самый популярный язык запросов к базам данных в мире. Основными целями MySQL являются скорость, надежность и простота использования. , Этот пакет включает в себя клиентскую библиотеку. Домашняя страница: http://dev.mysql.com/ Original-Maintainer: сопровождающие Debian MySQL

Позволил мне установить MariaDB плавно после этого.

sudo apt-get install mariadb-server

Примечание : я попал сюда после многих попыток удалить libmariadbclient18 и libmysqlclient18 до того, как это решение заработало. Я не мог преодолеть проблемы apt-get, пока эти два не были удалены, так как они были объявлены как поврежденные пакеты, прежде чем я мог попытаться выполнить какое-либо другое восстановление.

m1st0
источник