Menginstal MariaDB ketika Apt melaporkan MariaDB memiliki dependensi yang tidak terpenuhi atau paket rusak

9

Saya telah mencoba segalanya untuk menginstal MariaDB pada instalasi Ubuntu yang bersih ini tetapi saya terus mendapatkan kesalahan ini,

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.

Saya telah mengikuti panduan ini untuk mencoba dan menginstalnya, http://www.unixmen.com/install-lemp-server-nginx-mysql-mariadb-php-ubuntu-13-10-server/

Dan saya juga telah mengikuti panduan "resmi" pada halaman unduhan MariaDB untuk 13.10 https://downloads.mariadb.org/mariadb/repositories/

Tapi sepertinya tidak ada yang berhasil.

Edit 1

Saya telah mencoba keduanya. Bagaimana cara menyelesaikan dependensi yang tidak terpenuhi setelah menambahkan PPA? dan Bagaimana cara menginstal MariaDB? tetapi masih memberi saya kesalahan yang saya posting di atas.

Ini adalah instalasi Ubuntu baru dengan hampir tidak ada apapun yang diinstal.

Edit 2

Semua kotak centang adalah tiket dalam Pembaruan. Saya berlari:

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

Dan itu memberi saya kesalahan ini:

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
sumber
Jalankan perintah ini sekali untuk menginstal paket yang terdaftar: sudo apt-get update && sudo apt-get -f install mariadb-server-5.5"=5.5.33a+maria-1~saucy"Pastikan Anda telah mencentang semua kotak centang di bawah tab Pembaruan di Sumber Perangkat Lunak . Untuk memverifikasinya jalankan: sudo software-properties-gtkuntuk membuka Sumber Perangkat Lunak . Jika Anda mendapatkan kesalahan / pesan dalam perintah yang saya sebutkan di atas, kirimkan dalam pertanyaan Anda.
Saurav Kumar
Tampaknya Anda akan segera menyelesaikan masalah Anda. Trik utamanya adalah Anda harus mendaftar semua paket yang dibutuhkan dalam satu baris untuk diinstal. Sebagai contoh dari output baru Anda, Anda harus menjalankan: 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" Tangkap pola apa yang saya lakukan, jadi jika Anda mendapatkan beberapa paket untuk menginstal Anda harus memasukkannya dalam baris yang sama dengan mengikuti derai yang sama. Saya tahu ini akan sulit tetapi berharap itu akan membantu Anda. Balasan.
Saurav Kumar
Benar, saya berhasil menginstal mariadb-common dan mencoba menginstal libmariadbclient18 yang bergantung pada libmysqlclient18 tetapi dikatakan saya sudah memiliki libmysqlclient18 yang sama dengan libdbd-mysql-perl.
Andreas
@Ecaz Sudahkah Anda menemukan solusi untuk masalah Anda? Saya mengalami hal yang sama.
Jon Koops
Saya mendapatkan kesalahan ini:libmariadbclient18 : Depends: libmysqlclient18 (= 5.5.33a+maria-1~saucy) but 5.5.34-0ubuntu0.13.10.1 is to be installed
Jon Koops

Jawaban:

16

Lihat Versi Ketidakcocokan antara Mariadb dan Repositori Debian Ubuntu

Jarang untuk nomor versi mysql-common atau libmysqlclient lebih tinggi di repositori resmi Ubuntu atau Debian daripada di repositori MariaDB, tetapi telah terjadi. Setiap kali itu terjadi karena rilis perbaikan bug kritis untuk bug yang ada di versi MySQL dalam repositori distribusi tetapi yang sudah diperbaiki dalam versi MariaDB di repositori MariaDB.

Jika situasi seperti yang dijelaskan di atas ada ketika Anda mencoba menginstal MariaDB Anda akan mendapatkan kesalahan seperti ini:
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.
Cara untuk memperbaikinya adalah dengan menentukan versi persis dari dua paket yang ingin Anda instal. Untuk melakukan ini, pertama-tama tentukan nomor versi lengkap dari paket yang terpengaruh. Cara mudah untuk melakukannya adalah dengan 'acara apt-cache':
apt-cache show mysql-common | grep Version
apt-cache show libmysqlclient18 | grep Version

Ini adalah situasi pada penulisan ini, karena nomor versi ditampilkan sebagai:

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

Halaman MariaDB memberikan dua solusi.

Solusi pertama: Menentukan versi paket

Untuk masing-masing di atas Anda akan diberikan daftar versi. Yang di repositori MariaDB akan memiliki "mariadb" di string versi dan yang Anda inginkan. Dengan nomor versi di tangan Anda akan dapat menginstal MariaDB dengan secara eksplisit menentukan nomor versi seperti:
apt-get install mariadb-server-5.5 mariadb-client-5.5 \
libmysqlclient18=<version-number> \
mysql-common=<version-number>

yang mana

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

CATATAN: Perbarui ke 5.5.34 untuk mencerminkan versi saat ini pada 2014.01.28 [RealPariah] Setelah instalasi, Anda harus memegang paket sampai nomor versi kembali sinkron.

Setelah MariaDB diinstal, dan selama masalah nomor versi ada, `apt-get dist-upgrade` akan mencoba menghapus MariaDB untuk menginstal paket libmysqlclient dan mysql-common yang" ditingkatkan ". Untuk mencegah hal ini terjadi, Anda dapat menahannya agar apt tidak mencoba untuk memutakhirkannya. Untuk melakukannya, buka terminal, menjadi root dengan `sudo -s`, dan kemudian masukkan yang berikut ini:
echo libmysqlclient18 hold | dpkg --set-selections
echo mysql-common hold | dpkg --set-selections
Penangguhan akan mencegah Anda meningkatkan MariaDB, jadi ketika Anda ingin menghapus penangguhan, buka terminal, menjadi root dengan 'sudo -s', dan kemudian masukkan yang berikut ini:
echo libmysqlclient18 install | dpkg --set-selections
echo mysql-common install | dpkg --set-selections
Anda kemudian dapat memutakhirkan MariaDB seperti biasa (mis. Dengan `sudo apt-get pembaruan; sudo apt-get upgrade`).

Bagaimana saya tahu kapan nomor versi cocok lagi?

Anda dapat melacak nomor versi MariaDB dengan mendaftar untuk peringatan email tentang rilis baru di MariaDB.org . Menurut situs, itu adalah low-traffic announce-only list.

Selain itu, ketika versi paket sekali lagi disinkronkan, Anda harus berhenti melihat pesan di apt bahwa hanya 2 paket yang ditahan, tetapi semua paket mariadb akan ditahan:

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

Ini menunjukkan nomor paket kembali sinkron, yang juga dapat diperiksa dalam alat sinaptik atau serupa.

Solusi kedua: Menjepit Repositori MariaDB

Hal lain yang dapat Anda lakukan adalah menyematkan repositori MariaDB yang Anda gunakan. Ini dilakukan dengan membuat file di bawah `/ etc / apt / preferences.d /` dengan konten berikut:
Package: *
Pin: origin <mirror-domain>
Pin-Priority: 1000

Ganti <mirror-domain>dengan nama domain mirror MariaDB yang Anda gunakan. Sebagai contoh ftp.osuosl.org,. Dengan file pin di tempat, paket dari repositori MariaDB Anda akan memiliki prioritas lebih dari paket dari repositori sistem.

Anda dapat menemukan nama mirror yang Anda gunakan di Pengaturan Sistem >> Perangkat Lunak & Pembaruan , atau jika Anda menggunakan rasa lain dari Ubuntu, Synaptic >> Settings >> Repositori , atau cat /etc/apt/sources.list.

Dalam Pin-Priorityhal ini harus lebih besar dari atau sama dengan 1000, yangcauses a version to be installed even if this constitutes a downgrade of the package

(Lihat man 5 apt_preferencesuntuk informasi lebih lanjut tentang opsi dalam kasus lain.)

Memberi nama file preferensi yang disematkan

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

(Sumber: man 5 apt_preferences)

Jadi, nama itu sendiri tidak masalah, tapi nama yang bagus akan seperti itu 50_mariadb. Ini mengidentifikasi paket yang terlibat dan memungkinkan file preferensi menyematkan lainnya dengan mudah ditempatkan sebelum setelah file ini dalam urutan pemrosesan.

chaskes
sumber
Saya akan mencoba solusi pertama tetapi bagaimana Anda tahu kapan ketidakcocokan telah diperbaiki? Apakah saya harus memeriksa log perubahan setiap kali mereka merilis pembaruan?
Andreas
Saya menggunakan metode pertama dan berjalan sangat lancar. Tidak ada kekhawatiran tentang ketergantungan sama sekali. Saya mengedit jawaban dengan info tentang nomor versi
mariadb
Apa nama file pinning untuk solusi kedua?
Thomas Taylor
Saya ♥ kasih atas keterampilan Anda. Paket-paket mariadb cukup kacau. Saya menyatakan ini berdasarkan fakta bahwa saya belum pernah melakukan hal di atas sebelumnya, tetapi di atas membuat saya diinstal. Terima kasih!
jettero
1
@ thomas-taylor Menambahkan info dalam menamai file pinning.
chaskes
2

Saya memiliki masalah serupa di Ubuntu 14.10 yang ditingkatkan dari MySQL ke Maria DB. Yaitu saya akan terjebak dengan

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

Setelah mengikuti saran ini tanpa hasil, berikut ini sangat membantu saya: Cara Mengganti MySQL dengan MariaDB di Ubuntu Server oleh JournalXtra.

Mengedit / var / lib / dpkg / status dan menghapus dua instance libmysqlclient18 seperti ini:

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 adalah server basis data SQL multi-pengguna yang cepat, stabil dan benar multi-pengguna. SQL (Structured Query Language) adalah bahasa query database paling populer di dunia. Tujuan utama MySQL adalah kecepatan, ketahanan, dan kemudahan penggunaan. . Paket ini termasuk perpustakaan klien. Homepage: http://dev.mysql.com/ Original-Maintainer: Debian MySQL Maintainers

Izinkan saya untuk menginstal MariaDB dengan lancar sesudahnya.

sudo apt-get install mariadb-server

Catatan : Saya sampai di sini setelah banyak upaya untuk menghapus libmariadbclient18 dan libmysqlclient18 sebelum solusi ini bekerja. Saya tidak bisa menyelesaikan masalah apt-get sampai keduanya dihapus karena mereka dilaporkan sebagai paket rusak sebelum saya bisa mencoba perbaikan lainnya.

m1st0
sumber