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