Consulte Incompatibilidade de versão entre os repositórios Mariadb e Ubuntu Debian
É raro os números de versão do mysql-common ou libmysqlclient serem mais altos nos repositórios oficiais do Ubuntu ou Debian do que nos repositórios MariaDB, mas isso aconteceu. Sempre que ocorreu, foi devido a lançamentos críticos de correções para erros que existiam na versão do MySQL nos repositórios de distribuição, mas que já haviam sido corrigidos na versão do MariaDB nos repositórios do MariaDB.
Se existir uma situação descrita acima ao tentar instalar o MariaDB, você receberá um erro como este:
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.
Uma maneira de corrigir isso é especificar a versão exata dos dois pacotes que você deseja instalar. Para fazer isso, primeiro determine os números da versão completa dos pacotes afetados. Uma maneira fácil de fazer isso é com o 'apt-cache show':
apt-cache show mysql-common | grep Version
apt-cache show libmysqlclient18 | grep Version
Esta é a situação até o momento da redação deste documento, pois os números de versão são mostrados como:
Version: 5.5.34-0ubuntu0.13.10.1
Version: 5.5.34+maria-1~saucy
A página MariaDB oferece duas soluções.
Primeira solução: especificando a versão do pacote
Para cada uma das opções acima, você receberá uma lista de versões. Os que estão nos repositórios do MariaDB terão "mariadb" nas strings da versão e são os que você deseja. Com os números de versão em mãos, você poderá instalar o MariaDB especificando explicitamente os números de versão da seguinte forma:
apt-get install mariadb-server-5.5 mariadb-client-5.5 \
libmysqlclient18=<version-number> \
mysql-common=<version-number>
qual é
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: Atualize para 5.5.34 para refletir a versão atual a partir de 2014.01.28 [RealPariah]
Após a instalação, é necessário reter os pacotes até que os números da versão voltem a ser sincronizados.
Após a instalação do MariaDB, e enquanto existir o número da versão, um `apt-get dist-upgrade` tentará remover o MariaDB para instalar os pacotes libmysqlclient e mysql-common" atualizados ". Para impedir que isso aconteça, você pode segurá-los para que o apt não tente atualizá-los. Para fazer isso, abra um terminal, torne-se root com `sudo -s` e digite o seguinte:
echo libmysqlclient18 hold | dpkg --set-selections
echo mysql-common hold | dpkg --set-selections
As retenções impedirão que você atualize o MariaDB; portanto, quando você quiser remover as retenções, abra um terminal, torne-se root com 'sudo -s' e digite o seguinte:
echo libmysqlclient18 install | dpkg --set-selections
echo mysql-common install | dpkg --set-selections
Você poderá atualizar o MariaDB normalmente (por exemplo, com `sudo apt-get update; sudo apt-get upgrade`).
Como sei quando os números da versão coincidem novamente?
Você pode acompanhar o número da versão do MariaDB, inscrevendo-se para receber um alerta por email de novos lançamentos em MariaDB.org . Segundo o site, é um low-traffic announce-only list
.
Além disso, quando as versões dos pacotes estiverem novamente sincronizadas, você deve parar de ver uma mensagem no apt de que apenas os dois pacotes retidos serão mantidos, mas que todos os pacotes mariadb serão mantidos:
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
Isso indica que os números dos pacotes estão novamente sincronizados, que também podem ser verificados em ferramentas sinápticas ou similares.
Segunda solução: Fixando o Repositório MariaDB
Outra coisa que você pode fazer é fixar o repositório MariaDB que você usa. Isso é feito criando um arquivo em `/ etc / apt / preferências.d /` com o seguinte conteúdo:
Package: *
Pin: origin <mirror-domain>
Pin-Priority: 1000
Substitua <mirror-domain>
pelo nome de domínio do espelho MariaDB usado. Por exemplo ftp.osuosl.org
,. Com o arquivo pin instalado, os pacotes do seu repositório MariaDB terão prioridade sobre os pacotes dos repositórios do sistema.
Você pode encontrar o nome do espelho que está usando em Configurações do sistema >> Software e atualizações ou se estiver usando outro tipo de Ubuntu, Synaptic >> Configurações >> Repositórios ou cat /etc/apt/sources.list
.
A Pin-Priority
neste caso precisa ser maior ou igual a 1000, o quecauses a version to be installed even if this constitutes a downgrade of the package
(Veja man 5 apt_preferences
para mais informações sobre opções em outros casos.)
Nomeando o arquivo de preferências de fixação
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
:)
Portanto, o nome em si não importa, mas um bom nome seria algo parecido 50_mariadb
. Isso identifica o pacote envolvido e permite que outros arquivos de preferências de fixação sejam facilmente colocados antes e depois desse arquivo na ordem de processamento.
sudo apt-get update && sudo apt-get -f install mariadb-server-5.5"=5.5.33a+maria-1~saucy"
Certifique-se de ter marcado todas as caixas de seleção na guia Atualizações em Fontes de software . Para verificar, execute:sudo software-properties-gtk
abrir Fontes de Software . Se você receber algum erro / mensagem no comando que mencionei acima, poste-o na sua pergunta.