Installieren von MariaDB, wenn Apt meldet, dass MariaDB nicht erfüllte Abhängigkeiten oder fehlerhafte Pakete aufweist

9

Ich habe alles versucht, um MariaDB auf dieser sauberen Ubuntu-Installation zu installieren, aber ich erhalte immer wieder diesen Fehler.

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.

Ich habe diese Anleitung befolgt, um zu versuchen, sie zu installieren: http://www.unixmen.com/install-lemp-server-nginx-mysql-mariadb-php-ubuntu-13-10-server/

Und ich habe auch den "offiziellen" Leitfaden auf der MariaDB-Downloadseite für 13.10 https://downloads.mariadb.org/mariadb/repositories/ befolgt.

Aber nichts scheint zu funktionieren.

Bearbeiten 1

Ich habe beide ausprobiert. Wie löse ich nicht erfüllte Abhängigkeiten nach dem Hinzufügen einer PPA auf? und wie installiere ich MariaDB? aber es gibt mir immer noch den Fehler, den ich oben gepostet habe.

Es ist eine neue Ubuntu-Installation, auf der kaum etwas installiert ist.

Bearbeiten 2

Alle Kontrollkästchen sind Tickets in Updates. Ich rannte:

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

Und es gab mir diesen Fehler:

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
quelle
Führen Sie diesen Befehl einmal die aufgelistete Paket zu installieren: sudo apt-get update && sudo apt-get -f install mariadb-server-5.5"=5.5.33a+maria-1~saucy"Stellen Sie sicher , dass Sie alle abgehakt haben Kontrollkästchen unter Updates Registerkarte in Softwarequellen . So überprüfen Sie die Ausführung: sudo software-properties-gtkÖffnen Sie die Softwarequellen . Wenn Sie einen Fehler / eine Meldung in dem oben erwähnten Befehl erhalten, posten Sie ihn in Ihrer Frage.
Saurav Kumar
Es scheint, dass Sie Ihr Problem bald lösen werden. Der Haupttrick besteht darin, dass Sie alle benötigten Pakete in einer Zeile auflisten müssen, um sie zu installieren. Beispiel: Ab Ihrer neuen Ausgabe müssen Sie Folgendes ausführen: 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" Fangen Sie das Muster ab, was ich tue. Wenn Sie also weitere zu installierende Pakete erhalten, müssen Sie diese in dieselbe Zeile einfügen, in der Sie demselben Muster folgen. Ich weiß, dass es schwierig sein würde, aber ich hoffe, es würde Ihnen helfen. Antworten.
Saurav Kumar
Richtig, ich habe es geschafft, mariadb-common zu installieren und habe versucht, libmariadbclient18 zu installieren, was von libmysqlclient18 abhängt, aber es heißt, ich habe libmysqlclient18 bereits mit libdbd-mysql-perl identisch.
Andreas
@ Ecaz Haben Sie eine Lösung für Ihr Problem gefunden? Ich erlebe das gleiche.
Jon Koops
Ich erhalte diesen Fehler:libmariadbclient18 : Depends: libmysqlclient18 (= 5.5.33a+maria-1~saucy) but 5.5.34-0ubuntu0.13.10.1 is to be installed
Jon Koops

Antworten:

16

Siehe Versionsinkongruenz zwischen Mariadb- und Ubuntu-Debian-Repositorys

Es ist selten, dass die Versionsnummern von mysql-common oder libmysqlclient in den offiziellen Ubuntu- oder Debian-Repositorys höher sind als in den MariaDB-Repositorys, aber es ist passiert. Wann immer dies der Fall war, lag dies an kritischen Bugfix-Releases für Fehler, die in der Version von MySQL in den Distributions-Repositorys vorhanden waren, aber bereits in der Version von MariaDB in den MariaDB-Repositorys behoben wurden.

Wenn beim Versuch, MariaDB zu installieren, eine Situation wie oben beschrieben auftritt, wird folgende Fehlermeldung angezeigt:
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.
Eine Möglichkeit, dies zu beheben, besteht darin, die genaue Version der beiden Pakete anzugeben, die Sie installieren möchten. Ermitteln Sie dazu zunächst die Vollversionsnummern der betroffenen Pakete. Ein einfacher Weg, dies zu tun, ist mit 'apt-cache show':
apt-cache show mysql-common | grep Version
apt-cache show libmysqlclient18 | grep Version

Dies ist zum jetzigen Zeitpunkt der Fall, da die Versionsnummern wie folgt angezeigt werden:

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

Die MariaDB-Seite bietet zwei Lösungen.

Erste Lösung: Angabe der Paketversion

Für jede der oben genannten Optionen erhalten Sie eine Liste der Versionen. Diejenigen in den MariaDB-Repositorys haben "mariadb" in den Versionszeichenfolgen und sind diejenigen, die Sie wollen. Mit den vorliegenden Versionsnummern können Sie MariaDB installieren, indem Sie die Versionsnummern wie folgt explizit angeben:
apt-get install mariadb-server-5.5 mariadb-client-5.5 \
libmysqlclient18=<version-number> \
mysql-common=<version-number>

welches ist

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

HINWEIS: Aktualisieren Sie auf 5.5.34, um die aktuelle Version vom 28.01.2014 widerzuspiegeln. [RealPariah] Nach der Installation müssen Sie die Pakete aufbewahren, bis die Versionsnummern wieder synchronisiert sind.

Nach der Installation von MariaDB und solange das Problem mit der Versionsnummer besteht, versucht ein "apt-get dist-upgrade", MariaDB zu entfernen, um die "aktualisierten" libmysqlclient- und mysql-common-Pakete zu installieren. Um dies zu verhindern, können Sie sie halten, damit apt nicht versucht, sie zu aktualisieren. Öffnen Sie dazu ein Terminal, werden Sie root mit `sudo -s` und geben Sie Folgendes ein:
echo libmysqlclient18 hold | dpkg --set-selections
echo mysql-common hold | dpkg --set-selections
Die Holds verhindern, dass Sie MariaDB aktualisieren. Wenn Sie also die Holds entfernen möchten, öffnen Sie ein Terminal, werden Sie mit 'sudo -s' root und geben Sie Folgendes ein:
echo libmysqlclient18 install | dpkg --set-selections
echo mysql-common install | dpkg --set-selections
Sie können dann MariaDB wie gewohnt aktualisieren (z. B. mit `sudo apt-get update; sudo apt-get upgrade`).

Woher weiß ich, wann die Versionsnummern wieder übereinstimmen?

Sie können die Versionsnummer von MariaDB verfolgen, indem Sie sich bei MariaDB.org für eine E-Mail-Benachrichtigung über Neuerscheinungen anmelden . Laut der Website ist es ein low-traffic announce-only list.

Wenn die Paketversionen wieder synchronisiert sind, sollte außerdem keine Meldung in apt angezeigt werden, dass nur die 2 gehaltenen Pakete gehalten werden, aber dass alle Mariadb-Pakete gehalten werden:

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

Dies zeigt an, dass die Paketnummern wieder synchron sind, was auch in synaptischen oder ähnlichen Tools überprüft werden kann.

Zweite Lösung: Fixieren des MariaDB-Repositorys

Sie können auch das von Ihnen verwendete MariaDB-Repository anheften. Dazu erstellen Sie eine Datei unter `/ etc / apt / settings.d /` mit folgendem Inhalt:
Package: *
Pin: origin <mirror-domain>
Pin-Priority: 1000

Ersetzen Sie <mirror-domain>durch den Domainnamen des von Ihnen verwendeten MariaDB-Spiegels. Zum Beispiel ftp.osuosl.org. Wenn die PIN-Datei vorhanden ist, haben Pakete aus Ihrem MariaDB-Repository Vorrang vor Paketen aus den System-Repositorys.

Sie finden den Spiegelnamen, den Sie verwenden, unter Systemeinstellungen >> Software & Updates oder wenn Sie eine andere Ubuntu- Variante verwenden , Synaptic >> Einstellungen >> Repositorys oder cat /etc/apt/sources.list.

Die muss Pin-Priorityin diesem Fall größer oder gleich 1000 sein, wascauses a version to be installed even if this constitutes a downgrade of the package

( man 5 apt_preferencesWeitere Informationen zu Optionen in anderen Fällen finden Sie unter.)

Benennen der Pinning-Voreinstellungsdatei

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

(Quelle: man 5 apt_preferences)

Der Name selbst spielt also keine Rolle, aber ein guter Name wäre so etwas wie 50_mariadb. Dies identifiziert das betroffene Paket und ermöglicht das einfache Platzieren anderer Pinning-Voreinstellungsdateien vor oder nach dieser Datei in der Verarbeitungsreihenfolge.

chaskes
quelle
Ich werde die erste Lösung versuchen, aber woher wissen Sie, wann die Nichtübereinstimmung behoben wurde? Muss ich das Änderungsprotokoll jedes Mal durchsuchen, wenn ein Update veröffentlicht wird?
Andreas
Ich habe die erste Methode angewendet und sie verlief sehr reibungslos. Keine Sorge um Abhängigkeiten. Ich bearbeitete die Antwort mit Informationen über die Mariadb-Versionsnummer
Chaskes
Wie sollte der Name der Pinning-Datei für die zweite Lösung lauten?
Thomas Taylor
Ich ♥ dich für deine Fähigkeiten. Die Mariadb-Pakete sind ziemlich durcheinander. Ich behaupte dies aufgrund der Tatsache, dass ich noch nie zuvor eines der oben genannten Dinge tun musste, aber das oben Gesagte hat mich installiert. Vielen Dank!
Jettero
1
@ thomas-taylor Info zur Benennung der Pinning-Datei hinzugefügt.
Chaskes
2

Ich hatte ein ähnliches Problem bei der Aktualisierung von Ubuntu 14.10 von MySQL auf Maria DB. Ich würde nämlich stecken bleiben

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

Nachdem ich diesen Vorschlägen vergeblich gefolgt war , hat mir Folgendes sehr geholfen: So ersetzen Sie MySQL durch MariaDB in Ubuntu Server von JournalXtra.

Bearbeiten Sie / var / lib / dpkg / status und entfernen Sie die beiden Instanzen von libmysqlclient18 wie folgt:

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 ist ein schneller, stabiler und echter SQL-Datenbankserver mit mehreren Benutzern und mehreren Threads. SQL (Structured Query Language) ist die weltweit beliebteste Datenbankabfragesprache. Die Hauptziele von MySQL sind Geschwindigkeit, Robustheit und Benutzerfreundlichkeit. . Dieses Paket enthält die Client-Bibliothek. Homepage: http://dev.mysql.com/ Original-Maintainer: Debian MySQL Maintainer

Erlaubte mir, MariaDB danach reibungslos zu installieren.

sudo apt-get install mariadb-server

Hinweis : Ich bin nach vielen Versuchen, libmariadbclient18 und libmysqlclient18 zu entfernen, hierher gekommen, bevor diese Lösung funktioniert hat. Ich konnte apt-get-Probleme nicht überwinden, bis diese beiden entfernt wurden, da sie als defekte Pakete gemeldet wurden, bevor ich eine andere Reparatur versuchen konnte.

m1st0
quelle