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-Priority
in 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_preferences
per 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.
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-gtk
per aprire Sorgenti software . Se ricevi qualche errore / messaggio nel comando che ho menzionato sopra, pubblicalo nella tua domanda.