Instalando o MariaDB quando o Apt relata O MariaDB tem dependências não atendidas ou pacotes quebrados

9

Eu tentei de tudo para instalar o MariaDB nesta instalação limpa do Ubuntu, mas continuo recebendo este erro,

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.

Eu segui este guia para tentar instalá-lo, http://www.unixmen.com/install-lemp-server-nginx-mysql-mariadb-php-ubuntu-13-10-server/

E também segui o guia "oficial" na página de downloads do MariaDB para a 13.10 https://downloads.mariadb.org/mariadb/repositories/

Mas nada parece estar funcionando.

Editar 1

Eu tentei os dois. Como resolvo dependências não atendidas após adicionar um PPA? e como instalar o MariaDB? mas ainda dá o erro que eu postei acima.

É uma nova instalação do Ubuntu com quase nada instalado.

Editar 2

Todas as caixas de seleção são marcadas em Atualizações. Eu corri:

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

E isso me deu este erro:

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
fonte
Execute este comando uma vez para instalar o pacote listado: 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-gtkabrir Fontes de Software . Se você receber algum erro / mensagem no comando que mencionei acima, poste-o na sua pergunta.
Saurav Kumar # 26/13
Parece que você resolverá seu problema em breve. O principal truque é que você deve listar todos os pacotes necessários em uma linha para instalar. Por exemplo, a partir de sua nova saída, você deve executar: 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" Pegue o padrão que estou fazendo, portanto, se você tiver mais alguns pacotes para instalar, inclua-o na mesma linha que segue o mesmo padrão. Eu sei que seria difícil, mas espero que ajude você. Resposta.
Saurav Kumar
Certo, consegui instalar o mariadb-common e tentei instalar o libmariadbclient18, que depende do libmysqlclient18, mas ele diz que já tenho o libmysqlclient18 igual ao libdbd-mysql-perl.
Andreas
@Ecaz Você encontrou uma solução para o seu problema? Estou experimentando o mesmo.
26913 Jon Koops
Estou recebendo este erro:libmariadbclient18 : Depends: libmysqlclient18 (= 5.5.33a+maria-1~saucy) but 5.5.34-0ubuntu0.13.10.1 is to be installed
Jon Koops 26/10

Respostas:

16

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

perseguições
fonte
Vou tentar a primeira solução, mas como você sabe quando a incompatibilidade foi corrigida? Tenho que vasculhar o log de alterações toda vez que eles lançam uma atualização?
Andreas
Eu usei o primeiro método e correu muito bem. Não se preocupe com dependências. Eu editei a resposta com informações sobre o número da versão MariaDB
chaskes
Qual deve ser o nome do arquivo fixado para a segunda solução?
Thomas Taylor
Eu te ♥ por suas habilidades. Os pacotes de mariadb estão bem estragados. Afirmo isso com base no fato de que nunca tive que fazer o que foi dito antes, mas o que foi dito acima me instalou. Obrigado!
Jato 8/13
11
@ thomas-taylor Adicionadas informações ao nomear o arquivo fixado.
usar o seguinte comando
2

Eu tive um problema semelhante no Ubuntu 14.10 atualizando do MySQL para Maria DB. Ou seja, eu ficaria preso com

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

Depois de seguir essas sugestões sem sucesso, o seguinte me ajudou muito: Como substituir o MySQL pelo MariaDB no Ubuntu Server do JournalXtra.

Editando / var / lib / dpkg / status e removendo as duas instâncias do libmysqlclient18 assim:

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

O MySQL é um servidor de banco de dados SQL multiusuário e multiusuário rápido, estável e verdadeiro. SQL (Structured Query Language) é a linguagem de consulta de banco de dados mais popular do mundo. Os principais objetivos do MySQL são velocidade, robustez e facilidade de uso. . Este pacote inclui a biblioteca do cliente. Página inicial: http://dev.mysql.com/ Original-Maintainer: Debian MySQL Maintainers

Permitiu-me instalar o MariaDB sem problemas depois.

sudo apt-get install mariadb-server

Nota : Eu cheguei aqui após várias tentativas de remover o libmariadbclient18 e o libmysqlclient18 antes desta solução funcionar. Não consegui solucionar os problemas do apt-get até que esses dois foram removidos, pois foram relatados como pacotes quebrados antes que eu pudesse tentar qualquer outro reparo.

m1st0
fonte