Bagaimana cara memalsukan versi paket yang diinstal?

23

Menjadi adopter awal dan menggunakan build 11,04 setiap hari saya kadang-kadang menghadapi situasi ketika beberapa paket memerlukan versi lebih awal dari paket lain daripada yang saya instal. Biasanya versi yang lebih baru (tetapi ditolak) paket yang dibutuhkan menyediakan semua fungsionalitas versi yang lebih lama.

Jika saya gunakan dpkg -i --force-depends-versionuntuk menginstal paket tergantung semuanya berfungsi dengan baik, saya belum pernah melihat masalah.

Alih-alih secara manual mengunduh dan menginstal setiap paket, dapatkah saya membuat sistem berpura-pura ada versi paket tertentu yang diinstal ketika ada yang lebih baru? Atau adakah yang --force-depends-versionsetara dengan kunci untuk apt-get?

Ivan
sumber

Jawaban:

16

Anda dapat menggunakan paket equivs Instal equivs untuk membuat paket dummy untuk memalsukan paket yang diberikan sedang diinstal. Beberapa instruksi di sini .

luar biasa
sumber
Meskipun ini sudah cukup. Tetapi tautan itu dapat rusak cepat atau lambat. Lebih baik memiliki setidaknya melanjutkan instruksi dalam jawaban. Jawaban saya dapat membantu di sini askubuntu.com/a/1181415/26246 . Jadi kita bisa mereferensikan pertanyaan ini yang memiliki suara lebih tinggi tentang equivs.
user.dz
23

Meskipun jawaban sudah diterima, inlining yang diterima lebih baik menyampaikan proses:

  1. Ada paket Debian yang disebut equivsyang dapat membuat paket dummy. Instal dengan menjalankansudo apt-get install -y equivs

  2. Setelah terinstal, Anda menghasilkan file "kontrol" template menggunakan perintah berikut: equivs-control postfix(ganti postfixdengan nama paket Anda). Dalam kasus saya, saya mungkin menggunakan nama paket alternatif, misalnya postfix-customatau apa pun, tetapi memiliki paket kustom saya memenuhi atau Providesketergantungan instalasi postfix(lagi-lagi mengganti postfixuntuk paket apa pun yang Anda inginkan.

  3. Setelah file kontrol template dihasilkan, saya biasanya akan menghapus banyak pernyataan yang dikomentari (pernyataan yang dimulai dengan #). Salah satu yang ingin saya pertahankan secara khusus adalah Provides:pernyataan di mana saya dapat mengatakan bahwa paket saya menyediakan kemampuan yang ditawarkan oleh paket lain yang saya coba palsu, misalnya Provides: postfixmemberi tahu mekanisme resolusi ketergantungan Debian / Ubuntu bahwa paket saya — dengan nama apa pun— memberikan kemampuan yang sama dari paket target, lagi postfixatau apa pun. Ini memungkinkan saya untuk memberi nama paket saya secara terpisah dari paket target untuk menghindari kebingungan. Pabrik Erlang melakukan ini dengan barang-barang mereka, misalnya esl-erlangmenyediakan erlang.

  4. Akhirnya, setelah file kontrol template dibuat, Anda gunakan equivs-builduntuk menghasilkan paket palsu, misalnya equivs-build /path/to/generated/control/file.

  5. Butuh beberapa detik untuk membangun paket dan kemudian Anda dapat menjalankannya sudo dpkg -i my_package_name*.deb

Untuk pengguna tingkat lanjut, jika file kontrol template Anda memiliki Requires:garis ketergantungan, Anda mungkin ingin menggunakan alat seperti gdebiuntuk menginstal paket Anda serta berbagai paket yang dinyatakannya sebagai dependensi.

Jonathan Oliver
sumber