11 votos

Instalar MariaDB cuando Apt informa que MariaDB tiene dependencias no satisfechas o paquetes rotos

He intentado todo para instalar MariaDB en esta instalación limpia de Ubuntu pero sigo recibiendo este error,

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.

He seguido esta guía para intentar instalarlo, http://www.unixmen.com/install-lemp-server-nginx-mysql-mariadb-php-ubuntu-13-10-server/

Y también he seguido la guía "oficial" en la página de descargas de MariaDB para 13.10 https://downloads.mariadb.org/mariadb/repositories/

Pero nada parece funcionar.

Edición 1

He probado ambos ¿Cómo se resuelven las dependencias no satisfechas después de añadir un PPA? y ¿Cómo instalar MariaDB? pero me sigue dando el error que he publicado arriba.

Es una instalación fresca de Ubuntu sin apenas nada instalado.

Edición 2

Todas las casillas están marcadas en Actualizaciones. He corrido:

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

Y me dio este error:

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.

0 votos

Ejecute este comando una vez para instalar el paquete de la lista: sudo apt-get update && sudo apt-get -f install mariadb-server-5.5"=5.5.33a+maria-1~saucy" Asegúrese de que ha marcado todas las casillas de verificación en Actualizaciones ficha en Fuentes de software . Para verificarlo, ejecute : sudo software-properties-gtk para abrir Fuentes de software . Si obtienes algún error/mensaje en el comando que he mencionado arriba publícalo en tu pregunta.

0 votos

Parece que vas a resolver tu problema pronto. El truco principal es que tienes que listar todos los paquetes necesarios en una línea para instalar. Por ejemplo, a partir de su nueva salida tiene que ejecutar: 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" Atrapa el patrón lo que estoy haciendo, así que si consigues algún paquete más para instalar tienes que incluirlo en la misma línea siguiendo el mismo patrón. Sé que sería difícil pero espero que te ayude. Respuesta.

0 votos

Bien, he conseguido instalar mariadb-common y he intentado instalar libmariadbclient18 que depende de libmysqlclient18 pero me dice que ya tengo libmysqlclient18 igual que libdbd-mysql-perl.

17voto

chaskes Puntos 7671

Ver Desajuste de versiones entre los repositorios de Mariadb y Ubuntu Debian

Es raro que los números de versión de mysql-common o libmysqlclient sean mayores en los repositorios oficiales de Ubuntu o Debian que en los de MariaDB, pero ha ocurrido. Siempre que ha ocurrido ha sido debido a la publicación de correcciones de errores críticos que existían en la versión de MySQL en los repositorios de la distribución pero que ya habían sido corregidos en la versión de MariaDB en los repositorios de MariaDB.

Si existe una situación como la descrita anteriormente, cuando intente instalar MariaDB obtendrá un error como el siguiente:

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.

Una forma de solucionar esto es especificar la versión exacta de los dos paquetes que desea instalar. Para ello, determine primero los números de versión completos de los paquetes afectados. Una forma fácil de hacerlo es con 'apt-cache show':

apt-cache show mysql-common | grep Version
apt-cache show libmysqlclient18 | grep Version

Esta es la situación en el momento de escribir este artículo, ya que los números de versión aparecen como:

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

La página de MariaDB da dos soluciones.

Primera solución: Especificar la versión del paquete

Para cada uno de ellos se le dará una lista de versiones. Las que están en los repositorios de MariaDB tendrán "mariadb" en las cadenas de versión y son las que quieres. Con los números de versión en la mano usted será capaz de instalar MariaDB especificando explícitamente los números de versión así:

apt-get install mariadb-server-5.5 mariadb-client-5.5 \
libmysqlclient18=<version-number> \
mysql-common=<version-number>

que es

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: Actualizar a 5.5.34 para reflejar la versión actual a partir de 2014.01.28 [RealPariah] Después de la instalación, hay que mantener los paquetes hasta que los números de versión vuelvan a estar sincronizados.

Después de instalar MariaDB, y mientras exista el problema del número de versión, un `apt-get dist-upgrade` intentará eliminar MariaDB para instalar los paquetes "actualizados" libmysqlclient y mysql-common. Para evitar que esto ocurra puede retenerlos para que apt no intente actualizarlos. Para ello, abra un terminal, hágase root con `sudo -s`, y luego introduzca lo siguiente:

echo libmysqlclient18 hold | dpkg --set-selections
echo mysql-common hold | dpkg --set-selections

Las retenciones te impedirán actualizar MariaDB, así que cuando quieras eliminar las retenciones, abre un terminal, hazte root con 'sudo -s', y luego introduce lo siguiente:

echo libmysqlclient18 install | dpkg --set-selections
echo mysql-common install | dpkg --set-selections

Entonces podrá actualizar MariaDB de forma normal (por ejemplo, con `sudo apt-get update; sudo apt-get upgrade`).

¿Cómo puedo saber cuándo vuelven a coincidir los números de versión?

Puede seguir el número de la versión de MariaDB inscribiéndose para recibir una alerta por correo electrónico de las nuevas versiones en MariaDB.org . Según el sitio, se trata de un low-traffic announce-only list .

Además, cuando las versiones de los paquetes vuelvan a estar sincronizadas, deberías dejar de ver un mensaje en apt de que sólo se retendrán los 2 paquetes retenidos, sino que se retendrán todos los paquetes de mariadb:

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

Esto indica que los números de los paquetes vuelven a estar sincronizados, lo que también se puede comprobar en synaptic o herramientas similares.

Segunda solución: Fijar el repositorio MariaDB

Otra cosa que puedes hacer es fijar el repositorio MariaDB que utilizas. Esto se hace creando un archivo en `/etc/apt/preferences.d/` con el siguiente contenido:

Package: *
Pin: origin <mirror-domain>
Pin-Priority: 1000

Sustituir <mirror-domain> con el nombre de dominio de la réplica de MariaDB que utiliza. Por ejemplo, ftp.osuosl.org . Con el archivo pin en su lugar, los paquetes de su repositorio MariaDB tendrán prioridad sobre los paquetes de los repositorios del sistema.

Puede encontrar el nombre de la réplica que está utilizando en Configuración del sistema >> Software y actualizaciones o si está utilizando otro tipo de Ubuntu, Synaptic >> Configuración >> Repositorios o cat /etc/apt/sources.list .

El Pin-Priority en este caso tiene que ser mayor o igual a 1000, lo que causes a version to be installed even if this constitutes a downgrade of the package

(Ver man 5 apt_preferences para más información sobre las opciones en otros casos).

Cómo nombrar el archivo de preferencias de fijación

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

(Fuente: man 5 apt_preferences )

Por lo tanto, el nombre en sí no importa, pero un buen nombre sería algo como 50_mariadb . Esto identifica el paquete en cuestión y permite colocar fácilmente otros archivos de preferencias de fijación antes o después de este archivo en el orden de procesamiento.

0 votos

Probaré la primera solución, pero ¿cómo se sabe cuándo se ha solucionado el desajuste? ¿Tengo que buscar en el registro de cambios cada vez que lanzan una actualización?

0 votos

Utilicé el primer método y me fue muy bien. No hay que preocuparse por las dependencias en absoluto. He editado la respuesta con información sobre el número de versión de mariadb

0 votos

¿Cuál debe ser el nombre del archivo de fijación para la segunda solución?

2voto

graycrow Puntos 1175

Tuve un problema similar en Ubuntu 14.10 al actualizar de MySQL a Maria DB. Es decir, me quedaba atascado con

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

Después de seguir estas sugerencias en vano, lo siguiente me ayudó mucho: Cómo reemplazar MySQL con MariaDB en Ubuntu Server por JournalXtra.

Edición de /var/lib/dpkg/status y eliminando las dos instancias de libmysqlclient18 así:

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 is a fast, stable and true multi-user, multi-threaded SQL database 
server. SQL (Structured Query Language) is the most popular database query 
language in the world. The main goals of MySQL are speed, robustness and
ease of use.

This package includes the client library.
Homepage: http://dev.mysql.com/
Original-Maintainer: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org>

Me permitió instalar MariaDB sin problemas después.

sudo apt-get install mariadb-server

Nota : Llegué aquí después de muchos intentos de esta eliminación libmariadbclient18 y libmysqlclient18 antes de que esta solución funcionara. No pude pasar apt-get problemas hasta que estos dos fueron retirados ya que fueron reportados como paquetes rotos antes de que pudiera intentar cualquier otra reparación.

0voto

Vishal Kumar Sahu Puntos 101

Para solucionar el problema, elimino la instalación anterior de mysql

sudo apt remove mysql-server

Y luego instalé mariadb-server

sudo apt install mariadb-server

Esto se aplica a la instalación fresca, si usted ya tiene mysql corriendo, no intente esta solución.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: