Zobacz niezgodność wersji między repozytoriami Mariadb a Ubuntu Debian
Rzadko zdarza się, aby numery wersji mysql-common lub libmysqlclient były wyższe w oficjalnych repozytoriach Ubuntu lub Debian niż w repozytoriach MariaDB, ale tak się stało. Ilekroć tak było, było to z powodu krytycznych wydań poprawek błędów, które istniały w wersji MySQL w repozytoriach dystrybucyjnych, ale które zostały już naprawione w wersji MariaDB w repozytoriach MariaDB.
Jeśli sytuacja opisana powyżej występuje podczas próby zainstalowania MariaDB, pojawi się następujący błąd:
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.
Aby to naprawić, należy podać dokładną wersję dwóch pakietów, które chcesz zainstalować. Aby to zrobić, najpierw określ pełne numery wersji pakietów, których dotyczy problem. Łatwym sposobem na to jest użycie „apt-cache show”:
apt-cache show mysql-common | grep Version
apt-cache show libmysqlclient18 | grep Version
Taka jest sytuacja w tym piśmie, ponieważ numery wersji są pokazane jako:
Version: 5.5.34-0ubuntu0.13.10.1
Version: 5.5.34+maria-1~saucy
Strona MariaDB zawiera dwa rozwiązania.
Pierwsze rozwiązanie: określenie wersji pakietu
Dla każdego z powyższych otrzymasz listę wersji. Te w repozytoriach MariaDB będą miały „mariadb” w ciągach wersji i są tymi, które chcesz. Mając numery wersji pod ręką, będziesz mógł zainstalować MariaDB, podając numery wersji w następujący sposób:
apt-get install mariadb-server-5.5 mariadb-client-5.5 \
libmysqlclient18=<version-number> \
mysql-common=<version-number>
który jest
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
UWAGA: Zaktualizuj do wersji 5.5.34, aby odzwierciedlić bieżącą wersję z 2014.01.28 [RealPariah]
Po instalacji musisz wstrzymać pakiety, dopóki numery wersji nie zsynchronizują się.
Po zainstalowaniu MariaDB i tak długo, jak długo występuje problem z numerem wersji, `apt-get dist-upgrade` będzie próbował usunąć MariaDB w celu zainstalowania„ uaktualnionego ”pakietu libmysqlclient i mysql-common. Aby temu zapobiec, możesz je trzymać, aby apt nie próbował ich uaktualnić. Aby to zrobić, otwórz terminal, zrootuj za pomocą `sudo -s`, a następnie wprowadź następujące polecenie:
echo libmysqlclient18 hold | dpkg --set-selections
echo mysql-common hold | dpkg --set-selections
Blokady uniemożliwiają aktualizację MariaDB, więc jeśli chcesz usunąć blokady, otwórz terminal, zrootuj się za pomocą „sudo -s”, a następnie wprowadź następujące polecenie:
echo libmysqlclient18 install | dpkg --set-selections
echo mysql-common install | dpkg --set-selections
Będziesz wtedy mógł zaktualizować MariaDB w normalny sposób (np. Z `sudo apt-get update; sudo apt-get upgrade`).
Skąd mam wiedzieć, kiedy numery wersji znów się zgadzają?
Możesz śledzić numer wersji MariaDB, zapisując się do powiadomienia e-mail o nowych wydaniach na MariaDB.org . Według strony jest to low-traffic announce-only list
.
Ponadto, gdy wersje pakietów zostaną ponownie zsynchronizowane, powinieneś przestać widzieć komunikat w apt, że będą przechowywane tylko 2 wstrzymane pakiety, ale że wszystkie pakiety mariadb będą przechowywane:
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
Oznacza to, że numery pakietów są ponownie zsynchronizowane, co można również sprawdzić w narzędziach synaptycznych lub podobnych.
Drugie rozwiązanie: Przypinanie repozytorium MariaDB
Inną rzeczą, którą możesz zrobić, jest przypięcie używanego repozytorium MariaDB. Odbywa się to poprzez utworzenie pliku w `/ etc / apt / preferences.d /` z następującą zawartością:
Package: *
Pin: origin <mirror-domain>
Pin-Priority: 1000
Zamień <mirror-domain>
na nazwę domeny lustra MariaDB, którego używasz. Na przykład ftp.osuosl.org
. Po umieszczeniu pliku pin paczki z repozytorium MariaDB będą miały pierwszeństwo przed paczkami z repozytoriów systemowych.
Nazwę lustra, której używasz, możesz znaleźć w Ustawieniach systemu >> Oprogramowanie i aktualizacje lub jeśli używasz innego smaku Ubuntu, Synaptic >> Ustawienia >> Repozytoria lub cat /etc/apt/sources.list
.
W Pin-Priority
tym przypadku wartość musi być większa lub równa 1000, cocauses a version to be installed even if this constitutes a downgrade of the package
(Zobacz man 5 apt_preferences
więcej informacji na temat opcji w innych przypadkach.)
Nazywanie pliku preferencji przypinania
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...
(Źródło: man 5 apt_preferences
)
Więc sama nazwa nie ma znaczenia, ale dobre imię byłoby coś w rodzaju 50_mariadb
. To identyfikuje zaangażowany pakiet i umożliwia łatwe umieszczenie innych plików preferencji przypinania przed lub po tym pliku w kolejności przetwarzania.
sudo apt-get update && sudo apt-get -f install mariadb-server-5.5"=5.5.33a+maria-1~saucy"
Upewnij się, że zaznaczyłeś wszystkie pola wyboru w zakładce Aktualizacje w Źródłach oprogramowania . Aby to sprawdzić, uruchom:sudo software-properties-gtk
aby otworzyć Źródła oprogramowania . Jeśli pojawi się jakikolwiek błąd / komunikat w poleceniu, o którym wspomniałem powyżej, opublikuj go w swoim pytaniu.