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-Priority
in 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_preferences
Weitere 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.
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.