См. Несоответствие версий между репозиториями 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. Это идентифицирует пакет и позволяет легко размещать другие файлы настроек закрепления до или после этого файла в порядке обработки.
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 . Если вы получили какую-либо ошибку / сообщение в команде, о которой я упоминал выше, опишите ее в своем вопросе.