Menginstal versi tertentu ketika repo memiliki versi yang lebih baru?

13

Mari kita memiliki metapackage yang tergantung pada paket-paket berikut

Depends: A (=2),
 B (=2),
 C (=2)

Perhatikan '=' - Saya ingin menginstal versi khusus ini, bukan yang terbaru.

Selain itu:

B tergantung pada A (> = 1)

C tergantung pada B (> = 1) dan A (> = 1)

Jika versi terbaru dari A, B, C di repositori adalah 2 maka ini berfungsi.

Karena saya telah memasukkan versi 3 dari A dan versi 3 dari B di repo sudo apt-get install my-meta-package menolak untuk menyelesaikan dengan info berikut:

The following packages have unmet dependencies:
  my-meta-package: Depends: B (= 2) but 3 is to be installed
                   Depends: A (= 2) but 3 is to be installed

Jika saya menginstal versi 2 dari A dan B secara manual maka metapackage menginstal dengan benar, yang sangat menyarankan bahwa tidak ada ketergantungan tersembunyi pada A3 atau B3. Ini bukan solusi untuk masalah ini karena metapackage diinstal secara otomatis pada banyak mesin.

PERTANYAAN: Apa yang harus dilakukan untuk membuat sudo apt-get install my-meta-package install versi 2,2,2?

Selain itu, adakah cara saya bisa mendapatkan info tambahan apa yang sebenarnya menciptakan kebutuhan untuk versi 3 dari A dan versi 3 dari B?

tymtam
sumber
Oh, saya belum membaca seluruh pertanyaan sebelum menjawab. Bisakah Anda mengemas kembali metapackage?
int_ua
2
@int_ua Saya tidak mengerti apa yang akan mengemas ulang metapackage lakukan.
tymtam
@belacqua - Aku bersamamu, tapi kami membutuhkan jawaban yang solid yang mencakup apa yang terjadi ketika ada pembalikan dan dependensi rusak dll.
RobotHumans
Apakah file kontrol metapackage Anda menyertakan versi eksplisit dari paket dependen, seperti (a=2), (b=2)?
Anwar

Jawaban:

11

Anda harus memilih versi tertentu untuk diinstal, dan menginstal semuanya pada saat yang sama ketika Anda menginstal paket meta.

sudo apt-get install meta-package package1=2 package2=2 package3=2

Seperti jawaban int_ua mengatakan, Anda dapat menemukan dependensi terbalik dengan ini:

apt-cache rdepends package

Jika Anda ingin mengetahui informasi lebih lanjut tentang salah satu paket tersebut ( versi yang tersedia, dependensi, dan banyak lagi ), gunakan ini:

apt-cache show package

Setelah Anda selesai menginstalnya, dan ingin tetap menggunakannya pada versi tersebut saat melakukan peningkatan sistem, Anda perlu menggunakan apt-pinning seperti yang disarankan oleh belacqua .

Penyematan APT

Fitur pinning APT memungkinkan administrator untuk memaksa APT untuk memilih versi paket tertentu yang mungkin tersedia dalam versi yang berbeda dari repositori yang berbeda. Ini memungkinkan administrator untuk memastikan bahwa paket tidak ditingkatkan ke versi yang mungkin bertentangan dengan paket lain pada sistem, atau yang belum cukup diuji untuk perubahan yang tidak diinginkan. Untuk melakukan ini, pin di file preferensi APT (/ etc / apt / preferences) harus diubah.

Sepero
sumber
Saya percaya ini adalah jawaban yang benar, menempatkan = dan kemudian nama paket dengan versi
LnxSlck
1
Saya adalah rekan Tymek dan ini benar-benar menyelesaikan masalah. Sayang sekali kita harus merekayasa balik metapackage untuk mewujudkannya. Beberapa Python kreatif sudah beres. Terima kasih banyak atas jawabannya.
Igor Zevaka
1
Saya ingin tahu apakah ada solusi yang lebih baik muncul sejak waktu berlalu?
ygrek
1

Anda dapat mencoba menginstal dependensi terlebih dahulu

sudo apt-get install package=2 di mana 2 adalah versinya

Anda dapat mengetahui paket apa yang bergantung pada paket tersebut

apt-cache rdepends package

int_ua
sumber
1
rdepends tidak memberikan info detail tentang versi, bukan?
tymtam
2
Menginstal dependensi terlebih dahulu akan menentang memiliki metapackage. Ini adalah solusi, tetapi bukan yang saya cari.
tymtam
1
Perhatikan bahwa agar ini berfungsi, repositori harus memiliki versi yang tersedia dari versi yang Anda tentukan, jika tidak, itu akan salah.
Thomas Ward