Pertanyaan Bagaimana cara menginstal paket Ubuntu tertentu, dengan versi yang tepat?


Saya ingin men-setup mesin virtual baru dengan beberapa paket tertentu (nama dan versi), yang disediakan.

Misalnya apache2 dalam versi 2.2.20-1ubuntu1 dengan semua dependensi. Bahkan jika ada versi baru dari paket ini di server yang satu ini harus diinstal.

Solusinya harus bekerja / skala dengan beberapa (n) "setup". Mesin virtual lain mungkin memerlukan versi apache2 yang lebih lama.

Saat ini saya mengetahui beberapa kemungkinan yang menginstal paket yang tepat, tetapi tidak menskala itu dengan baik:

  1. Salin semua yang diperlukan *.deb ke setiap mesin virtual secara manual dan masukkan: dpkg -i ... -> Bisa berfungsi, tetapi sangat rawan kesalahan. (Skrip manual, dll.)
  2. Buat dan gunakan repositori Ubuntu baru untuk setiap pengaturan. -> Tidak berfungsi karena saya akan membutuhkan n repositori.
  3. Siapkan mesin satu kali dan salin VM / buat snapshot. -> Tidak berfungsi karena saya perlu menyimpan n VM.

Masalah saya bisa diberi label sebagai manajemen patch, tetapi saya tidak ingin memperbarui paket saya ke versi saat ini. Tujuan saya adalah menginstal paket-paket lama.


188
2018-01-01 20:39


asal




Jawaban:


Kamu dapat memakai apt-get untuk menginstal versi tertentu dari paket selama itu dalam arsip yang tahu tentang apt. Dari apt-get manpage:

Versi spesifik dari suatu paket dapat dipilih untuk instalasi dengan mengikuti nama paket dengan yang sama dan versi paket yang akan dipilih. Ini akan menyebabkan versi itu ditempatkan dan dipilih untuk dipasang. Alternatifnya, distribusi spesifik dapat dipilih dengan mengikuti nama paket dengan garis miring dan versi distribusi atau nama Arsip (stabil, beku, tidak stabil).

Misalnya, Anda bisa melakukan:

sudo apt-get install apache2=2.2.20-1ubuntu1

Perhatikan bahwa Anda mungkin perlu melakukan beberapa resolusi ketergantungan sendiri dalam kasus ini, tetapi jika ada masalah, apt-get akan memberi tahu Anda apa yang menyebabkannya. Pada sistem 11.10 saya, saya perlu melakukan hal-hal berikut agar ini berfungsi:

sudo apt-get install apache2=2.2.20-1ubuntu1 \
                     apache2.2-common=2.2.20-1ubuntu1 \
                     apache2.2-bin=2.2.20-1ubuntu1 \
                     apache2-mpm-worker=2.2.20-1ubuntu1

190
2018-01-01 20:57



bagaimana cara mengetahui versi mana yang tersedia? - Rodrigo Gurgel
@Rodrigo Gurgel, "versi aptache apache2" - user169015
@ user169015 "versi ada"! = "versi dikemas untuk Ubuntu dan tersedia dengan apt" - Kyle Strand
Hai Kyle, saya tidak mendapatkan komentar Anda, meskipun Ya, paket dapat diinstal menggunakan apt juga. Saya hanya bertahan dengan bakat karena saya telah menggunakan itu untuk waktu yang lama ... :) - user169015
@ user169015 Saya pikir Anda kehilangan titik komentar Kyle. Silahkan lihat jawaban psusi di bawah ini. Rupanya repositori Ubuntu APT tidak terus menjadi tuan rumah versi lama dari paket! Jadi berbeda dengan pengelola paket runtime (pip, gem, maven, dll.), Anda tidak dapat mengandalkan repositori APT Ubuntu jika Anda ingin menyusun kembali konfigurasi lama yang dikenal baik. Saya terkejut dan kecewa untuk menyadari hal ini sendiri. Mungkin Arch menangani ini dengan lebih baik? ( askubuntu.com/questions/728439/… ) - algal


Untuk memeriksa versi yang tersedia, Anda dapat memeriksa melalui:

sudo apt-cache madison ^apache2

Jika tidak berfungsi, pertimbangkan untuk berlari sudo apt-get update sebelumnya untuk memperbarui daftar paket.

Kemudian salin versi atau gunakan sintaks berikut:

sudo apt-get install apache2=2.2\*

Untuk memeriksa versi yang Anda pasang, jalankan:

dpkg -l 'apache2*' | grep ^i

51
2018-04-01 12:44



Terima kasih banyak untuk menunjukkan =2.2\* pilihan sebagai cara menggunakan wildcard untuk memilih subversi yang tersedia. Itulah yang ingin saya ketahui tetapi tidak tahu cara bertanya :) - aexl
Ketika daftar versi menggunakan dpkg -l <packageName>, nomor versi terkadang terpotong. Untuk menghindari ini, gunakan COLUMNS=100 dpkg -l <packageName> - CJBS
Pada Yakkety, perintah pertama hanya memberi saya: N: Unable to locate package ^apache2 - Jesse Glick
@JesseGlick Run sudo apt-get update pertama. Pastikan Anda memiliki sumber Apt yang tepat yang dikonfigurasi. - kenorb
N: Tidak dapat menemukan paket ^ apache2 setelah $ sudo apt-get update tetapi sudo apt-get install apache2 = 2.2 * berfungsi untuk saya - Braian Mellor


Saya akan memperluas jawaban sebelumnya dengan perintah versi berguna lainnya di apt keluarga. Untuk melihat versi mana yang tersedia, jalankan apt-cache policy:

# apt-cache policy apache2
apache2:
  Installed: (none)
  Candidate: 2.4.7-1ubuntu4.5
  Version table:
     2.4.10-1ubuntu1.1~ubuntu14.04.1 0
        100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages
     2.4.7-1ubuntu4.5 0
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
     2.4.7-1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

Kemudian, sebagaimana disebutkan di tempat lain, instal versi tertentu dengan apt-get:

# apt-get install apache2=2.4.7-1ubuntu4.5
...

Anda sekarang dapat melihat versi yang telah Anda instal dengan menjalankan apt-cache policy lagi:

# apt-cache policy apache2
apache2:
  Installed: 2.4.7-1ubuntu4.5
  Candidate: 2.4.7-1ubuntu4.5
  Version table:
     2.4.10-1ubuntu1.1~ubuntu14.04.1 0
        100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages
 *** 2.4.7-1ubuntu4.5 0
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
        100 /var/lib/dpkg/status
     2.4.7-1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

Jika Anda tidak ingin versi yang lebih baru untuk diinstal pada pembaruan, sematkan paket dengan apt-mark:

# apt-mark hold apache2
apache2 set on hold.

Katakanlah versi baru apache2 ditambahkan ke indeks paket dan mesin Anda disinkronkan apt-get update. Anda akan melihat ini ketika Anda menjalankan berikutnya apt-get upgrade:

# apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  apache2
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

10
2017-07-15 17:25





Secara praktis, ini tidak mungkin karena versi lama tidak disimpan dalam arsip, jadi kecuali Anda memiliki salinan versi lama yang tergeletak di suatu tempat, Anda tidak dapat menginstalnya. Anda harus bertanya pada diri sendiri mengapa Anda ingin menginstal versi yang lebih lama di tempat pertama. Pada rilis stabil, alasan utama untuk versi baru yang dirilis adalah untuk memperbaiki kerentanan keamanan, dan Anda tidak ingin menjalankan server rentan kan?


8
2018-01-02 00:33



Saya memerlukan ini untuk mereproduksi eksemplar yang tepat dari lingkungan lama untuk tujuan pengembangan. Apakah mungkin untuk mengatur mirror yang tidak menghapus versi paket lama untuk mengakses paket yang dibutuhkan atau apakah saya perlu mengatur beberapa repositori yang hanya menyimpan diffs? - ayckoster
@ psusi: Tidak persis respons yang adil, mungkin ada banyak alasan. Dalam kasus saya, versi yang lebih baru mungkin benar-benar memiliki bug, dan untuk memeriksa ulang, ini adalah kasus versi yang lebih lama diperlukan. Hanya sebuah contoh. - Cookie
@nomen, tidak, itu adalah distro tunggal yang melakukannya tidak menggunakan model rilis bergulir. Hati-hati diambil untuk memastikan bahwa ketika bug kritis dan kerentanan keamanan tetap dalam rilis stabil, bahwa mereka tidak menyebabkan regresi, tetapi jika itu terjadi, maka file laporan bug ditandai dengan regresi-rilis dan itu akan diperbaiki atau digulirkan kembali. - psusi
@nomen, jika Anda ingin membuat makna Anda sendiri untuk kata-kata Anda akan kesulitan berkomunikasi dengan orang lain. Untuk semua orang di dunia, itu bukan apa yang rilis bergulir, dan rilis bergulir adalah kebalikannya, dan dengan demikian, saling eksklusif dengan rilis stabil. Dan sekarang saya berpikir tentang hal itu, versi asli yang dikirimkan dengan rilis sebenarnya disimpan di saku -pembelian, dan pembaruan pergi ke -update atau -kunci keamanan, jadi sementara Anda tidak dapat kembali ke pembaruan sebelumnya, Anda dapat kembali ke versi yang awalnya dirilis. - psusi
@ psusi: Ini satu lagi untuk Anda. Bersama-sama diperlukan untuk selalu menjadi versi yang sama pada semua mesin. Namun pada 13.10 itu adalah versi yang berbeda dari pada 12.04 LTS. Jadi sekarang apa? Ketika datang ke pertanyaan seperti ini, menerima jawaban seperti mengapa Anda ingin melakukan ini benar-benar sangat tidak membantu dan membuang-buang waktu untuk semua orang. - Cookie