Installazione di MariaDB quando Apt segnala che MariaDB ha dipendenze non soddisfatte o pacchetti rotti


9

Ho provato di tutto per installare MariaDB su questa installazione di Ubuntu pulita ma continuo a ricevere questo errore,

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.

Ho seguito questa guida per provare a installarlo, http://www.unixmen.com/install-lemp-server-nginx-mysql-mariadb-php-ubuntu-13-10-server/

E ho anche seguito la guida "ufficiale" sulla pagina dei download di MariaDB per il 13.10 https://downloads.mariadb.org/mariadb/repositories/

Ma nulla sembra funzionare.

Modifica 1

Ho provato entrambi Come posso risolvere le dipendenze non soddisfatte dopo aver aggiunto un PPA? e come installare MariaDB? ma mi dà ancora l'errore che ho postato sopra.

È una nuova installazione di Ubuntu con quasi nulla installato.

Modifica 2

Tutte le caselle di controllo sono ticket in Aggiornamenti. Ho corso:

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

E mi ha dato questo errore:

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.

Esegui questo comando una volta per installare il pacchetto elencato: sudo apt-get update && sudo apt-get -f install mariadb-server-5.5"=5.5.33a+maria-1~saucy"assicurati di aver spuntato tutte le caselle di controllo nella scheda Aggiornamenti in Sorgenti software . Per verificarne l'esecuzione: sudo software-properties-gtkper aprire Sorgenti software . Se ricevi qualche errore / messaggio nel comando che ho menzionato sopra, pubblicalo nella tua domanda.
Saurav Kumar,

Sembra che risolverai presto il tuo problema. Il trucco principale è che devi elencare tutti i pacchetti necessari in una riga per l'installazione. Ad esempio, dal tuo nuovo output devi eseguire: 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" Cattura lo schema di quello che sto facendo, quindi se hai altri pacchetti da installare devi includerlo nella stessa riga seguendo lo stesso scalpiccio. So che sarebbe difficile, ma spero che ti possa aiutare. Rispondere.
Saurav Kumar,

Bene, sono riuscito a installare mariadb-common e ho provato a installare libmariadbclient18 che dipende da libmysqlclient18 ma dice che ho già libmysqlclient18 stesso con libdbd-mysql-perl.
Andreas,

@Ecaz Hai trovato una soluzione per il tuo problema? Sto vivendo lo stesso.
Jon Koops,

Ricevo questo errore:libmariadbclient18 : Depends: libmysqlclient18 (= 5.5.33a+maria-1~saucy) but 5.5.34-0ubuntu0.13.10.1 is to be installed
Jon Koops il

Risposte:


16

Vedi la versione non corrispondente tra i repository Debian di Mariadb e Ubuntu

È raro che i numeri di versione di mysql-common o libmysqlclient siano più alti nei repository ufficiali Ubuntu o Debian rispetto ai repository MariaDB, ma è successo. Ogni volta che lo è stato è stato a causa di rilasci di correzioni di bug critici per bug che esistevano nella versione di MySQL nei repository di distribuzione ma che erano già stati corretti nella versione di MariaDB nei repository MariaDB.

Se si verifica una situazione come sopra descritta quando si tenta di installare MariaDB, verrà visualizzato un errore simile al seguente:
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 modo per risolvere questo problema è specificare la versione esatta dei due pacchetti che si desidera installare. Per fare ciò, determinare innanzitutto i numeri di versione completi dei pacchetti interessati. Un modo semplice per farlo è con 'apt-cache show':
apt-cache show mysql-common | grep Version
apt-cache show libmysqlclient18 | grep Version

Questa è la situazione al momento della stesura di questo documento, poiché i numeri di versione sono indicati come:

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

La pagina MariaDB offre due soluzioni.

Prima soluzione: specificare la versione del pacchetto

Per ognuna di queste opzioni ti verrà fornito un elenco di versioni. Quelli nei repository MariaDB avranno "mariadb" nelle stringhe di versione e sono quelli che desideri. Con i numeri di versione disponibili, sarai in grado di installare MariaDB specificando esplicitamente i numeri di versione in questo modo:
apt-get install mariadb-server-5.5 mariadb-client-5.5 \
libmysqlclient18=<version-number> \
mysql-common=<version-number>

che è

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

NOTA: aggiornare alla 5.5.34 per riflettere la versione corrente al 2014.01.28 [RealPariah] Dopo l'installazione, è necessario conservare i pacchetti fino a quando i numeri di versione non tornano in sincronia.

Dopo l'installazione di MariaDB, e finché sussiste il problema del numero di versione, un `apt-get dist-upgrade` tenterà di rimuovere MariaDB per installare i pacchetti libmysqlclient e mysql-common" aggiornati ". Per evitare che ciò accada, puoi tenerli in modo tale che apt non tenti di aggiornarli. Per fare ciò, apri un terminale, diventa root con `sudo -s`, e quindi inserisci quanto segue:
echo libmysqlclient18 hold | dpkg --set-selections
echo mysql-common hold | dpkg --set-selections
I blocchi ti impediranno di aggiornare MariaDB, quindi quando vuoi rimuovere i blocchi, apri un terminale, diventa root con 'sudo -s', quindi inserisci quanto segue:
echo libmysqlclient18 install | dpkg --set-selections
echo mysql-common install | dpkg --set-selections
Sarai quindi in grado di aggiornare MariaDB normalmente (ad es. Con `sudo apt-get update; sudo apt-get upgrade`).

Come faccio a sapere quando i numeri di versione corrispondono di nuovo?

Puoi tenere traccia del numero di versione di MariaDB registrandoti per un avviso e-mail delle nuove versioni su MariaDB.org . Secondo il sito, è un low-traffic announce-only list.

Inoltre, quando le versioni dei pacchetti sono di nuovo sincronizzate, dovresti smettere di vedere un messaggio in apt che verranno conservati solo i 2 pacchetti in sospeso, ma che tutti i pacchetti di mariadb verranno conservati:

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

Ciò indica che i numeri dei pacchetti sono di nuovo sincronizzati, che possono anche essere controllati in sinaptici o strumenti simili.

Seconda soluzione: bloccare il repository MariaDB

Un'altra cosa che puoi fare è bloccare il repository MariaDB che usi. Questo viene fatto creando un file in `/ etc / apt / preferenze.d /` con i seguenti contenuti:
Package: *
Pin: origin <mirror-domain>
Pin-Priority: 1000

Sostituisci <mirror-domain>con il nome di dominio del mirror MariaDB che usi. Ad esempio ftp.osuosl.org,. Con il file pin installato, i pacchetti dal repository MariaDB avranno la priorità sui pacchetti dai repository di sistema.

Puoi trovare il nome del mirror che stai utilizzando in Impostazioni di sistema >> Software e aggiornamenti , oppure se stai usando un altro sapore di Ubuntu, Synaptic >> Impostazioni >> Repository o cat /etc/apt/sources.list.

Il Pin-Priorityin questo caso deve essere maggiore o uguale a 1000, checauses a version to be installed even if this constitutes a downgrade of the package

(Vedi man 5 apt_preferencesper maggiori informazioni sulle opzioni in altri casi.)

Denominazione del file delle preferenze di blocco

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

(Fonte: man 5 apt_preferences)

Quindi, il nome stesso non ha importanza, ma un buon nome sarebbe qualcosa di simile 50_mariadb. Ciò identifica il pacchetto in questione e consente di posizionare facilmente altri file delle preferenze di pinning prima di dopo questo file nell'ordine di elaborazione.


Proverò la prima soluzione ma come fai a sapere quando è stata corretta la mancata corrispondenza? Devo controllare il registro delle modifiche ogni volta che rilasciano un aggiornamento?
Andreas,

Ho usato il primo metodo ed è andato molto bene. Nessuna preoccupazione per le dipendenze. Ho modificato la risposta con informazioni sul numero di versione di mariadb
chaskes il

Quale dovrebbe essere il nome del file pinning per la seconda soluzione?
Thomas Taylor,

Ti ♥ per le tue abilità. I pacchetti mariadb sono piuttosto incasinati. Lo asserisco basandomi sul fatto che non ho mai dovuto fare nessuna delle precedenti, ma quanto sopra mi ha fatto installare. Grazie!
jettero

1
@ thomas-taylor Aggiunte informazioni nella denominazione del file pinning.
Chaskes,

2

Ho avuto un problema simile nell'aggiornamento di Ubuntu 14.10 da MySQL a Maria DB. Vale a dire che mi sarei bloccato con

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

Dopo aver seguito inutilmente questi suggerimenti, mi è stato di grande aiuto quanto segue: Come sostituire MySQL con MariaDB in Ubuntu Server di JournalXtra.

Modifica / var / lib / dpkg / status e rimuove le due istanze di libmysqlclient18 in questo modo:

Package: libmysqlclient18
Status: deinstall ok config-files
Priority: optional
Section: libs
Installed-Size: 3392
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
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 è un server di database SQL multiutente, veloce, stabile e vero. SQL (Structured Query Language) è il linguaggio di query del database più popolare al mondo. Gli obiettivi principali di MySQL sono velocità, robustezza e facilità d'uso. . Questo pacchetto include la libreria client. Pagina iniziale: http://dev.mysql.com/ Original-Maintainer: Debian MySQL Maintainer

Mi ha permesso di installare MariaDB senza problemi in seguito.

sudo apt-get install mariadb-server

Nota : sono arrivato qui dopo molti tentativi di rimozione di libmariadbclient18 e libmysqlclient18 prima che questa soluzione funzionasse. Non sono riuscito a superare i problemi di apt-get fino a quando questi due non sono stati rimossi poiché sono stati segnalati come pacchetti rotti prima di poter tentare qualsiasi altra riparazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.