Bagaimana cara membuat apt-get mengabaikan beberapa dependensi? Misalnya, saya ingin menginstal mailx sehingga saya dapat menggunakannya untuk mengirim email dari skrip cron / alat penghasil laporan. Namun, menginstal mailx juga menginstal exim4 dan sejumlah dependensi (saya sudah menginstal Postfix) Saya tidak benar-benar membutuhkan dan yang saya kira mailx juga dapat hidup tanpanya.
Bagaimana saya mengabaikan beberapa dependensi tetapi masih menggunakan apt-get karena ini adalah alat yang bagus?
APT::Install-Recommends "false";
keapt.conf
.Jawaban:
Solusi sederhana dan mudah: cukup tentukan paket yang tidak diinginkan dengan tambahan
-
setelah masing-masing.Contoh tanpa
-
saklar:Contoh menggunakan sakelar untuk menghindari pemasangan
exim4-base
. Perhatikan-
bagian akhir:Seperti yang Anda lihat,
apt-get
jangan mencoba lagi untuk menginstalexim4-base
paket, dan tidak mencoba untuk menginstal berbagai dependensinya (exim4-config
dll).Dan jika Anda salah dan membutuhkan
exim4-base
ketergantungan itu, Anda bisaapt-get install
melakukannya nanti!sumber
gnupg2
tanpapinentry-gtk2
untuk menghindari deps X)Depends: xxx but it is not going to be installed
. Anda dapat melewati semua paket opsional denganapt-get install --no-install-recommends PACKAGE
Anda dapat mengubah dependensi paket deb seperti ini:
ar x golden-linux.deb
(akan membuat tiga file: debian-binary control.tar.gz data.tar.gz)tar xzf control.tar.gz
(akan membuat: postrm postrm preinst prerm md5sums control)control
(gunakan editor teks)tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz
(urutan penting! Lihat [Catatan])[Catatan]: dpkg tidak akan bisa membaca metadata suatu paket dengan cepat jika harus mencari di mana bagian data berakhir!
sumber
libmng1.so.1
meskipun itu berfungsi dengan baik dengan set symlink kelibmng1.so.2
.apt-get
tidak bisa diberangus dan terus mengganggu saya tentang dependensi yang tidak terpenuhi (bahkan ketika menginstal sesuatu yang sama sekali tidak berhubungan!) Apa konsep sampah yang penuh.gnome-settings-daemon
ingingnome-settings-daemon-schemas=3.8.6.1-0ubuntu11
tetapi saya sudah punyagnome-settings-daemon-schemas=3.8.6.1-0ubuntu11.2
(<- perhatikan ".2" di akhir). Prosedur ini memungkinkan saya untuk mengedit paket dan memaksanya untuk menggunakan versi 11.2 yang lebih baru. TERIMA KASIH!FILES=$(tar zxvf control.tar.gz)
untuk menyimpan daftar file dalam suatu variabel. 4.tar zcf control.tar.gz $FILES
- buat arsip dalam satu langkah tanpa pipa atau pengalihan menggunakan daftar file asli (setelah modifikasi).--ignore-failed-read
sehinggatar
mengabaikan file yang hilang dari sisa baris perintah. (Sebagai contoh,prerm
,postrm
absen dari banyak paket.) Juga, tarball dapat.xz
daripada.gz
dalam versi yang lebih baru dari Debian format arsip (misalnyadata.tar.xz
).Setelah Anda menginstal paket dengan
--ignore-depends
opsi, pergi dan edit/var/lib/dpkg/status
file, dan hapus dependensi apa pun yang Anda pikir tidak diperlukan. Berhati-hatilah. Untuk memesan dep. akan diperlukan, itu lebih dari mungkin untuk BE diperlukansumber
/var/lib/dpkg/status
mungkin diperlukan untuk menyelesaikan instalasi dengansudo apt-get -f install
(tidak perlu menentukan paket).Anda dapat mencoba
--nodeps
bendera denganapt-get
.Atau unduh paket dan instal menggunakan
dpkg
dengan opsi--ignore-depends
.Misalnya, jika Anda ingin menginstal paket
foo
tanpa ketergantunganbar
:sumber
--no-install-recommends
bekerja untukku.Karena Anda menginstal postfix dari sumber, Anda perlu menginstal paket "dummy" yang akan memuaskan ketergantungan mail-transport-agent dari mailx (atau bsd-mailx). Paket "equivs" dalam debian ada untuk membuat paket dummy yang dapat Anda instal untuk memberi tahu dpkg "ketergantungan ini terpenuhi"
Alasan mengatakan dpkg untuk mengabaikan dependensi bukanlah solusi yang baik, adalah bahwa Anda hanya memberitahu dpkg / apt untuk mengabaikannya untuk satu transaksi, Anda tidak bisa mengatakannya untuk mengabaikan dependensi selamanya. Setiap kali Anda menggunakan apt, ia memeriksa dependensi pada semua paket
sumber
equivs-control <name>
, edit file yang dihasilkan untuk memberikan ketergantungan yang tepat dan memiliki nama yang bagus, kemudian jalankanequivs-build <name>
dan akhirnyadpkg -i
dihasilkan file .deb.Saya telah mencari opsi ini pada Ubuntu 12.04 Server yang menjalankan Xen. Di domain saya, saya menggunakan kernel -virtual, dan terus mencoba menginstal grub dengan setiap peningkatan paket kernel. Namun Grub tidak diperlukan di dalam domU saat menggunakan p [yv] grub.
Saya telah mencari opsi -nodeps untuk apt-get juga, tetapi tidak berhasil, jadi akhirnya mencopot / membersihkan grub * setelah setiap peningkatan kernel.
Lagi pula, benar-benar membaca halaman manual kadang-kadang membantu - ternyata opsi apt-get yang sama pada 12,04 tampaknya --tidak-instal-merekomendasikan, yang benar-benar berfungsi dalam kasus ini, karena grub terdaftar sebagai 'direkomendasikan' di informasi paket (saya kira itu bukan ketergantungan "nyata"?).
Saya menambahkan ini di sini karena dalam kasus saya ini memecahkan masalah yang sama, dan petunjuk untuk '--tidak menginstal-merekomendasikan' belum disebutkan.
sumber
Anda dapat mengunduh paket dengan apt-get dan kemudian menginstalnya dengan dpkg, mendaftar secara manual ketergantungan yang ingin Anda abaikan.
Sebagai contoh jika saya ingin mengunduh mypackage tetapi itu tergantung pada libperl5.14 dan saya tidak ingin menginstal libperl5.14 karena saya memiliki versi yang berbeda, saya dapat mengabaikan ketergantungan ini sebagai berikut:
sumber
Cara alternatif untuk mengubah ketergantungan secara manual adalah:
sumber
Pada sistem debian saya, bsd-mailx sebenarnya tergantung pada
default-mta | mail-transport-agent
(Anda dapat memeriksa apa paket tergantung denganapt-cache show <pkg>
apa pun di arsip ataudpkg -s <pkg>
untuk paket yang diinstal.Mungkin paket postfix Anda tidak memilikinya
Provides: mail-transport-agent
sehingga tidak menyadari bahwa Anda telah menginstal MTA. Akan sangat berharga untuk melaporkan bug jika itu adalah paket resmi.sumber
Untuk keperluan ini, Anda bisa menginstal kuku yang saya pikir tidak memiliki dependensi ini?
sumber
Yah - jangan.
Menggunakan pekerjaan orang lain sangat penting dalam perjalanan menuju kesuksesan. Ketika Anda membangun beberapa perangkat lunak dari sumber (tarball), Anda kehilangan kesempatan untuk menggunakan pekerjaan manajer paket distro itu.
Anda tidak akan mendapatkan pembaruan "gratis". Sebagian besar waktu tidak pernah memperbarui paket yang mereka instal dari sumber. Karena mereka perlu melacak perangkat lunak untuk versi baru, membangunnya kembali dan semua program yang tergantung (cobalah untuk mengingatnya).
Anda akan mengalami masalah dengan paket lain dari repo distribusi Anda. Ini persis seperti yang dinyatakan dalam pertanyaan: ubuntu memiliki manajer paket yang hebat dan beberapa orang yang sangat baik menjaga paket. Dan mereka telah memutuskan, bahwa agar program mailx berfungsi, Anda memerlukan MTA. Jadi jika Anda menginstal postfix dari sumber ubuntu tidak akan meminta Anda untuk menginstal exim.
Jika karena alasan tertentu pemeliharaan server beralih ke orang lain (mis. Proyek Anda menjadi sangat sukses dan Anda memutuskan untuk mempekerjakan orang lain untuk mengelola server sementara Anda sibuk dengan hal-hal lain) ia secara alami akan berharap untuk berlari
dpkg --get-selections
untuk mendapatkan semua paket yang diinstal.Cobalah untuk menggunakan perangkat lunak manajemen paket distro sebanyak mungkin. Belajarlah untuk membangun paket Anda sendiri jika Anda tidak dapat menemukan satu prebuilt dan Anda akan menjadi profesional yang lebih baik.
sumber