Solución:
Ver versión no coincidente entre los repositorios Mariadb y Ubuntu Debian
Es raro que los números de versión de mysql-common o libmysqlclient sean más altos en los repositorios oficiales de Ubuntu o Debian que en los repositorios de MariaDB, pero ha sucedido. Siempre que ha sido así, ha sido debido a las versiones críticas de corrección de errores para errores que existían en la versión de MySQL en los repositorios de 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 intenta instalar MariaDB, obtendrá un error 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.
Una forma de solucionar este problema es especificar la versión exacta de los dos paquetes que desea instalar. Para hacer esto, primero determine 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 al momento de escribir este artículo, ya que los números de versión se muestran como:
Version: 5.5.34-0ubuntu0.13.10.1
Version: 5.5.34+maria-1~saucy
La página MariaDB ofrece dos soluciones.
Primera solución: especificar la versión del paquete
Para cada uno de los anteriores se le dará una lista de versiones. Los que están en los repositorios de MariaDB tendrán “mariadb” en las cadenas de versión y son los que usted quiere. Con los números de versión en la mano, podrá 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>
cual 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: Actualice a 5.5.34 para reflejar la versión actual a partir de 2014.01.28 [RealPariah]
Después de la instalación, debe guardar los paquetes hasta que los números de versión se vuelvan a sincronizar.
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 libmysqlclient y mysql-common” actualizados “. Para evitar que esto suceda, puede mantenerlos para que apt no intente actualizarlos. Para hacerlo, abra una terminal, conviértase en root con `sudo -s`, y luego ingrese lo siguiente:
echo libmysqlclient18 hold | dpkg --set-selections
echo mysql-common hold | dpkg --set-selections
Las retenciones evitarán que actualice MariaDB, por lo que cuando desee eliminar las retenciones, abra una terminal, conviértase en root con ‘sudo -s’ y luego ingrese lo siguiente:
echo libmysqlclient18 install | dpkg --set-selections
echo mysql-common install | dpkg --set-selections
Entonces podrá actualizar MariaDB como de costumbre (por ejemplo, con `sudo apt-get update; sudo apt-get upgrade`).
¿Cómo puedo saber si los números de versión vuelven a coincidir?
Puede rastrear el número de versión de MariaDB registrándose para recibir una alerta por correo electrónico de nuevos lanzamientos en MariaDB.org. Según el sitio, es un low-traffic announce-only list
.
Además, cuando las versiones de los paquetes vuelvan a estar sincronizadas, debería dejar de ver un mensaje en apt que indica que solo se guardarán los 2 paquetes retenidos, pero que se retendrán todos los paquetes 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 paquete están nuevamente sincronizados, lo que también se puede verificar en herramientas sinápticas o similares.
Segunda solución: anclar el repositorio MariaDB
Otra cosa que puede hacer es anclar el repositorio MariaDB que usa. Esto se hace creando un archivo en `/etc/apt/preferences.d /` con el siguiente contenido:
Package: *
Pin: origin <mirror-domain>
Pin-Priority: 1000
Reemplazar <mirror-domain>
con el nombre de dominio del espejo MariaDB que usa. 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 del espejo que está usando en Configuración del sistema >> Software y actualizaciones, o si está usando otra versión de Ubuntu, Synaptic >> Configuración >> Repositorios, o cat /etc/apt/sources.list
.
los Pin-Priority
en este caso debe ser mayor o igual a 1000, que causes a version to be installed even if this constitutes a downgrade of the package
(Ver man 5 apt_preferences
para obtener más información sobre las opciones en otros casos).
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
)
Entonces, el nombre en sí no importa, pero un buen nombre sería algo como 50_mariadb
. Esto identifica el paquete involucrado y permite que otros archivos de preferencias de fijación se coloquen fácilmente antes o después de este archivo en el orden de procesamiento.
Tuve un problema similar en la actualización de Ubuntu 14.10 de MySQL a Maria DB. Es decir, me quedaría atrapado 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 /var/lib/dpkg/status
y eliminando las dos instancias de libmysqlclient18
como esto:
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
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 <[email protected]>
Me permitió instalar MariaDB sin problemas después.
sudo apt-get install mariadb-server
Nota: Llegué aquí después de muchos intentos de eliminar libmariadbclient18
y libmysqlclient18
antes de que esta solución funcionara. No pude pasar apt-get
problemas hasta que estos dos se eliminaron, ya que se informaron como paquetes rotos antes de que pudiera intentar cualquier otra reparación.