Instalowanie MariaDB, gdy Apt zgłasza, że ​​MariaDB ma niespełnione zależności lub uszkodzone pakiety

9

Próbowałem już wszystkiego, aby zainstalować MariaDB na tej czystej instalacji Ubuntu, ale wciąż pojawia się ten błąd,

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.

Postępowałem zgodnie z tym przewodnikiem, aby go zainstalować, http://www.unixmen.com/install-lemp-server-nginx-mysql-mariadb-php-ubuntu-13-10-server/

I postępowałem zgodnie z „oficjalnym” przewodnikiem na stronie pobierania MariaDB dla 13.10 https://downloads.mariadb.org/mariadb/repositories/

Ale wydaje się, że nic nie działa.

Edytuj 1

Próbowałem obu. Jak rozwiązać niezaspokojone zależności po dodaniu PPA? i jak zainstalować MariaDB? ale nadal daje mi błąd, który opublikowałem powyżej.

Jest to świeża instalacja Ubuntu, w której prawie nic nie jest zainstalowane.

Edytuj 2

Wszystkie pola wyboru są biletami w Aktualizacjach. Prowadziłem:

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

I dał mi ten błąd:

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
źródło
Uruchom to polecenie, aby zainstalować wymieniony pakiet: 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-gtkaby 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.
Saurav Kumar
Wygląda na to, że wkrótce rozwiążesz problem. Główną sztuczką jest to, że musisz wymienić wszystkie potrzebne pakiety w jednym wierszu, aby zainstalować. Na przykład, z nowego wyjścia musisz wykonać: 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" Złap wzorzec, co robię, więc jeśli otrzymasz więcej pakietów do zainstalowania, umieść to w tym samym wierszu, co po tym samym tupie. Wiem, że byłoby to trudne, ale mam nadzieję, że ci to pomoże. Odpowiadać.
Saurav Kumar
Tak, udało mi się zainstalować mariadb-common i próbowałem zainstalować libmariadbclient18, który zależy od libmysqlclient18, ale mówi, że mam już libmysqlclient18 taki sam z libdbd-mysql-perl.
Andreas
@Ecaz Czy znalazłeś rozwiązanie swojego problemu? Doświadczam tego samego.
Jon Koops
Otrzymuję ten błąd:libmariadbclient18 : Depends: libmysqlclient18 (= 5.5.33a+maria-1~saucy) but 5.5.34-0ubuntu0.13.10.1 is to be installed
Jon Koops,

Odpowiedzi:

16

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-Prioritytym 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_preferenceswię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.

kolby
źródło
Spróbuję pierwszego rozwiązania, ale skąd wiesz, kiedy niezgodność została naprawiona? Czy muszę przeszukiwać dziennik zmian za każdym razem, gdy publikują aktualizację?
Andreas
Zastosowałem pierwszą metodę i poszła bardzo gładko. W ogóle nie martw się o zależności. Zredagowałem odpowiedź z informacją o numerze wersji
mariadb
Jaka powinna być nazwa pliku przypinania dla drugiego rozwiązania?
Thomas Taylor,
Ja ♥ za twoje umiejętności. Pakiety mariadb są dość spieprzone. Twierdzę to w oparciu o fakt, że nigdy wcześniej nie musiałem wykonywać żadnej z powyższych czynności, ale powyższe doprowadziło mnie do zainstalowania. Dzięki!
jettero
1
@ thomas-taylor Dodano informacje w nazwie pliku przypinania.
chaskes
2

Miałem podobny problem w aktualizacji Ubuntu 14.10 z MySQL do Maria DB. Mianowicie utknęłbym

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

Po zastosowaniu się do tych sugestii bezskutecznie, następujące pomogły mi bardzo: Jak zamienić MySQL na MariaDB w Ubuntu Server przez JournalXtra.

Edycja / var / lib / dpkg / status i usunięcie dwóch instancji libmysqlclient18 w następujący sposób:

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 jest szybkim, stabilnym i prawdziwie wielowątkowym serwerem baz danych SQL. SQL (Structured Query Language) to najpopularniejszy język zapytań do baz danych na świecie. Głównymi celami MySQL są szybkość, solidność i łatwość użycia. . Ten pakiet zawiera bibliotekę klienta. Strona domowa: http://dev.mysql.com/ Original-Maintainer: Debian MySQL Maintainers

Pozwoliło mi płynnie zainstalować MariaDB.

sudo apt-get install mariadb-server

Uwaga : Dostałem się tutaj po wielu próbach usunięcia libmariadbclient18 i libmysqlclient18, zanim to rozwiązanie zadziałało. Nie mogłem ominąć problemów z apt-get, dopóki te dwa nie zostały usunięte, ponieważ zgłoszono je jako uszkodzone pakiety, zanim mogłem spróbować wykonać jakąkolwiek inną naprawę.

m1st0
źródło