Installation de MariaDB lorsque Apt signale que MariaDB a des dépendances non satisfaites ou des packages cassés

9

J'ai tout essayé pour installer MariaDB sur cette installation Ubuntu propre mais je reçois toujours cette erreur,

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.

J'ai suivi ce guide pour essayer de l'installer, http://www.unixmen.com/install-lemp-server-nginx-mysql-mariadb-php-ubuntu-13-10-server/

Et j'ai également suivi le guide "officiel" sur la page de téléchargement de MariaDB pour 13.10 https://downloads.mariadb.org/mariadb/repositories/

Mais rien ne semble fonctionner.

Modifier 1

J'ai essayé les deux Comment résoudre les dépendances non satisfaites après avoir ajouté un PPA? et comment installer MariaDB? mais cela me donne toujours l'erreur que j'ai affichée ci-dessus.

C'est une nouvelle installation d'Ubuntu avec presque rien installé.

Modifier 2

Toutes les cases à cocher sont des tickets dans les mises à jour. L'Iran:

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

Et cela m'a donné cette erreur:

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
la source
Exécutez cette commande une fois pour installer le package répertorié: 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-gtkpour 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.
Saurav Kumar
Il semble que vous allez bientôt résoudre votre problème. L'astuce principale est que vous devez répertorier tous les packages nécessaires sur une seule ligne à installer. Par exemple, à partir de votre nouvelle sortie, vous devez exécuter: 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" attrapez le modèle que je fais, donc si vous obtenez plus de packages à installer, vous devez l'inclure dans la même ligne que suivre le même motif. Je sais que ce serait difficile mais j'espère que cela vous aidera. Réponse.
Saurav Kumar
À droite, j'ai réussi à installer mariadb-common et j'ai essayé d'installer libmariadbclient18 qui dépend de libmysqlclient18 mais il dit que j'ai déjà libmysqlclient18 avec libdbd-mysql-perl.
Andreas
@Ecaz Avez-vous trouvé une solution à votre problème? Je vis la même chose.
Jon Koops
Je reçois cette erreur:libmariadbclient18 : Depends: libmysqlclient18 (= 5.5.33a+maria-1~saucy) but 5.5.34-0ubuntu0.13.10.1 is to be installed
Jon Koops

Réponses:

16

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-Priorityce 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_preferencespour 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.

chasses
la source
J'essaierai la première solution mais comment savoir quand le décalage a été corrigé? Dois-je parcourir le journal des modifications chaque fois qu'il publie une mise à jour?
Andreas
J'ai utilisé la première méthode et cela s'est très bien passé. Pas de soucis pour les dépendances. J'ai édité la réponse avec des informations sur le numéro de version de
mariadb
Quel devrait être le nom du fichier d'épinglage pour la deuxième solution?
Thomas Taylor
Je vous ♥ pour vos compétences. Les paquets de mariadb sont plutôt foirés. J'affirme cela sur la base du fait que je n'ai jamais eu à faire quoi que ce soit ci-dessus auparavant, mais ce qui précède m'a installé. Merci!
jettero
1
@ thomas-taylor Ajout d'informations pour nommer le fichier d'épinglage.
chasse
2

J'ai eu un problème similaire lors de la mise à niveau d'Ubuntu 14.10 de MySQL vers Maria DB. A savoir que je serais coincé avec

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

Après avoir suivi ces suggestions en vain, ce qui suit m'a beaucoup aidé: Comment remplacer MySQL par MariaDB dans Ubuntu Server par JournalXtra.

Modifier / var / lib / dpkg / status et supprimer les deux instances de libmysqlclient18 comme ceci:

Package: libmysqlclient18
Status: deinstall ok config-files
Priority: optional
Section: libs
Installed-Size: 3392
Maintainer: Ubuntu Developers <[email protected]>
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 est un serveur de base de données SQL multi-utilisateurs, multi-threads rapide, stable et authentique. SQL (Structured Query Language) est le langage de requête de base de données le plus populaire au monde. Les principaux objectifs de MySQL sont la vitesse, la robustesse et la facilité d'utilisation. . Ce package comprend la bibliothèque client. Page d'accueil: http://dev.mysql.com/ Original-Maintainer: Debian MySQL Maintainers

Cela m'a permis d'installer MariaDB en douceur par la suite.

sudo apt-get install mariadb-server

Remarque : je suis arrivé ici après de nombreuses tentatives de suppression de libmariadbclient18 et libmysqlclient18 avant que cette solution ne fonctionne. Je n'ai pas pu surmonter les problèmes apt-get jusqu'à ce que ces deux soient supprimés car ils ont été signalés comme des packages cassés avant que je puisse tenter une autre réparation.

m1st0
la source