Voir Inadéquation de version entre les référentiels Debian Mariadb et Ubuntu
Il est rare que les numéros de version de mysql-common ou libmysqlclient soient plus élevés dans les dépôts officiels Ubuntu ou Debian que dans les dépôts MariaDB, mais c'est arrivé. Chaque fois qu'il l'a été, c'est à cause de versions critiques de correctifs de bogues pour les bogues qui existaient dans la version de MySQL dans les référentiels de distribution mais qui avaient déjà été corrigés dans la version de MariaDB dans les référentiels MariaDB.
Si une situation telle que décrite ci-dessus existe lorsque vous essayez d'installer MariaDB, vous obtiendrez une erreur comme celle-ci:
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.
Un moyen de résoudre ce problème consiste à spécifier la version exacte des deux packages que vous souhaitez installer. Pour ce faire, déterminez d'abord les numéros de version complets des packages concernés. Un moyen simple de le faire est d'utiliser 'apt-cache show':
apt-cache show mysql-common | grep Version
apt-cache show libmysqlclient18 | grep Version
C'est la situation au moment de la rédaction de ce document, car les numéros de version sont affichés comme suit:
Version: 5.5.34-0ubuntu0.13.10.1
Version: 5.5.34+maria-1~saucy
La page MariaDB propose deux solutions.
Première solution: spécifier la version du package
Pour chacun des éléments ci-dessus, vous recevrez une liste de versions. Ceux dans les dépôts MariaDB auront "mariadb" dans les chaînes de version et ce sont ceux que vous voulez. Avec les numéros de version en main, vous pourrez installer MariaDB en spécifiant explicitement les numéros de version comme ceci:
apt-get install mariadb-server-5.5 mariadb-client-5.5 \
libmysqlclient18=<version-number> \
mysql-common=<version-number>
lequel est
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
REMARQUE: mise à jour vers 5.5.34 pour refléter la version actuelle à partir du 2014.01.28 [RealPariah]
Après l'installation, vous devez conserver les packages jusqu'à ce que les numéros de version soient synchronisés.
Une fois MariaDB installé, et tant que le problème de numéro de version existe, un `apt-get dist-upgrade` essaiera de supprimer MariaDB afin d'installer les paquets libmysqlclient et mysql-common" mis à jour ". Pour éviter que cela ne se produise, vous pouvez les conserver afin qu'apt n'essaye pas de les mettre à niveau. Pour ce faire, ouvrez un terminal, devenez root avec `sudo -s`, puis entrez ce qui suit:
echo libmysqlclient18 hold | dpkg --set-selections
echo mysql-common hold | dpkg --set-selections
Les blocages vous empêcheront de mettre à niveau MariaDB, donc lorsque vous souhaitez supprimer les blocages, ouvrez un terminal, devenez root avec 'sudo -s', puis entrez les informations suivantes:
echo libmysqlclient18 install | dpkg --set-selections
echo mysql-common install | dpkg --set-selections
Vous pourrez ensuite mettre à niveau MariaDB comme d'habitude (par exemple avec `sudo apt-get update; sudo apt-get upgrade`).
Comment savoir quand les numéros de version correspondent à nouveau?
Vous pouvez suivre le numéro de version de MariaDB en vous inscrivant à une alerte par e-mail des nouvelles versions sur MariaDB.org . Selon le site, c'est un low-traffic announce-only list
.
De plus, lorsque les versions des packages sont à nouveau synchronisées, vous devriez cesser de voir un message dans apt que seuls les 2 packages conservés seront conservés, mais que tous les packages mariadb seront conservés:
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
Cela indique que les numéros de colis sont de nouveau synchronisés, ce qui peut également être vérifié dans des outils synaptiques ou similaires.
Deuxième solution: épingler le référentiel MariaDB
Vous pouvez également épingler le référentiel MariaDB que vous utilisez. Cela se fait en créant un fichier sous `/ etc / apt / preferences.d /` avec le contenu suivant:
Package: *
Pin: origin <mirror-domain>
Pin-Priority: 1000
Remplacez <mirror-domain>
par le nom de domaine du miroir MariaDB que vous utilisez. Par exemple ftp.osuosl.org
,. Une fois le fichier PIN en place, les packages de votre référentiel MariaDB auront la priorité sur les packages des référentiels système.
Vous pouvez trouver le nom du miroir que vous utilisez dans Paramètres système >> Logiciels et mises à jour , ou si vous utilisez une autre version d'Ubuntu, Synaptic >> Paramètres >> Référentiels ou cat /etc/apt/sources.list
.
Dans Pin-Priority
ce cas, le doit être supérieur ou égal à 1000, ce quicauses a version to be installed even if this constitutes a downgrade of the package
(Voir man 5 apt_preferences
pour plus d'informations sur les options dans d'autres cas.)
Nommer le fichier de préférences d'épinglage
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...
(Source: man 5 apt_preferences
)
Donc, le nom lui-même n'a pas d'importance, mais un bon nom serait quelque chose comme 50_mariadb
. Cela identifie le package concerné et permet de placer facilement d'autres fichiers de préférences d'épinglage avant ou après ce fichier dans l'ordre de traitement.
sudo apt-get update && sudo apt-get -f install mariadb-server-5.5"=5.5.33a+maria-1~saucy"
Assurez-vous que vous avez coché toutes les cases sous l' onglet Mises à jour dans les sources de logiciels . Pour le vérifier, exécutez:sudo software-properties-gtk
pour ouvrir les sources logicielles . Si vous obtenez une erreur / un message dans la commande que j'ai mentionnée ci-dessus, postez-le dans votre question.