Tam sürümüyle belirli Ubuntu paketleri nasıl kurulur?


224

Sağlanan belirli paketlerle (ad ve sürüm) yeni bir sanal makine kurmak istiyorum.

Örneğin 2.2.20-1ubuntu1tüm bağımlılıkları olan sürümde apache2 . Sunucularda bu paketin yeni bir sürümü olsa bile, bunun yüklü olması gerekir.

Çözüm, birden çok (n) "kurulum" ile çalışmak / ölçeklendirmek zorundadır. Başka bir sanal makine daha eski bir apache2 sürümüne ihtiyaç duyabilir.

Şu anda tam paketleri yükleyen bazı olasılıkları biliyorum, ancak bu kadar iyi ölçeklendirmiyoruz:

  1. Tüm *.debsanal makinelere gerekenleri manuel olarak kopyalayın ve şunu girin: dpkg -i... -> İşe yarayabilir, ancak çok eğilimlidir. (El ile komut dosyaları vb.)
  2. Her kurulum için yeni bir Ubuntu deposu oluşturun ve kullanın. -> Çalışmıyor çünkü n depoya ihtiyacım var.
  3. Makineyi bir kez kurun ve VM'yi kopyalayın / bir anlık görüntü oluşturun. -> Çalışmıyor çünkü n VM'leri saklamam gerekecek.

Sorunum yama yönetimi olarak etiketlenmiş olabilir, ancak paketleri güncel sürüme güncellemek istemiyorum. Amacım eski paketleri kurmak.

Yanıtlar:


227

apt-getPaketin belirli bir sürümünü, apt'nin bildiği bir arşivde olduğu sürece kurmak için kullanabilirsiniz . Gönderen apt-getman:

Paket adını, eşittir ve seçilecek paketin sürümünü izleyerek kurulum için belirli bir sürüm seçilebilir. Bu, bu sürümün bulunmasına ve yüklenmek üzere seçilmesine neden olur. Alternatif olarak, paket adını eğik çizgiyle takip ederek dağıtım veya Arşiv adı (kararlı, dondurulmuş, kararsız) izlenerek belirli bir dağıtım seçilebilir.

Örneğin, şunları yapabilirsiniz:

sudo apt-get install apache2=2.2.20-1ubuntu1

Bu durumda kendi başınıza bir miktar bağımlılık çözümü yapmanız gerekebileceğini unutmayın, ancak apt-get herhangi bir sorun varsa, onlara neyin neden olduğunu söyleyecektir. 11.10 sistemimde bunun işe yaraması için aşağıdakileri yapmam gerekiyor:

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

46
hangi sürümlerin mevcut olduğunu bilmek nasıl?
Rodrigo Gurgel

12
@Rodrigo Gurgel, "yetenek sürümleri apache2"
user169015

3
@ user169015 "versiyon var"! = "versiyon Ubuntu için paketlenmiştir ve apt" ile sunulur
Kyle Strand

Merhaba Kyle, Yorumunuzu alamadım, ancak Evet, apt kullanarak da paket yüklenebilir. Ben sadece yeteneklere bağlı kaldım çünkü bunu uzun zamandır kullanıyordum ... :)
user169015

6
@ user169015 Kyle'ın yorumunun eksik olduğunu düşünüyorum. Psusi'nin cevabını aşağıda görebilirsiniz. Görünüşe göre Ubuntu APT depoları eski paket sürümlerini barındırmaya devam etmiyor! Bu nedenle, çalışma zamanı paketi yöneticilerinden (pip, gem, maven, vb.) Farklı olarak, eski, iyi bilinen bir yapılandırmayı yeniden oluşturmak istiyorsanız Ubuntu APT depolarına güvenemezsiniz. Şaşırdım ve bunu kendim gerçekleştirmek beni hayal kırıklığına uğrattı. Belki Arch bunu daha iyi idare eder? ( askubuntu.com/questions/728439/… )
alg

66

Hangi sürümlerin mevcut olduğunu kontrol etmek için aşağıdakileri kontrol edebilirsiniz:

sudo apt-cache madison ^apache2

sudo apt-get updateÇalışmazsa, paket listesini güncellemek için daha önce çalışmayı düşünün .

Ardından sürümü kopyalayın veya aşağıdaki sözdizimini kullanın:

sudo apt-get install apache2=2.2\*

Hangi sürümü yüklediğinizi kontrol etmek için:

dpkg -l 'apache2*' | grep ^i

5
=2.2\*Seçeneği, mevcut herhangi bir yıkımı seçmek için joker karakter kullanmanın bir yolu olarak gösterdiğiniz için teşekkür ederiz . Bilmek istediğim buydu ama nasıl soracağımı bilmiyordum :)
aexl

3
Kullanılan sürümleri listelerken, dpkg -l <packageName>sürüm numarası bazen kısaltılır. Bundan kaçınmak için, kullanınCOLUMNS=100 dpkg -l <packageName>
CJBS

Yakkety'de, ilk komut az önce bana:N: Unable to locate package ^apache2
Jesse Glick,

@JesseGlick sudo apt-get updateÖnce koş . Doğru Apt kaynaklarını yapılandırdığınızdan emin olun.
kenorb

1
N: $ sudo apt-get güncellemesinden sonra paket ^ apache2 bulunamıyor ancak sudo apt-get install apache2 = 2.2 * benim için çalışıyor
Braian Mellor

17

aptAiledeki diğer kullanışlı sürüm komutları ile önceki cevapları genişleteceğim . Hangi sürümlerin mevcut olduğunu görmek için aşağıdakileri çalıştırın 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

Ardından, başka bir yerde de belirtildiği gibi, aşağıdakilerle belirli bir sürümü yükleyin apt-get:

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

Artık hangi sürümü yüklediğinizi apt-cache policytekrar çalıştırarak görebilirsiniz :

# 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

Güncellemelere daha yeni sürümlerin yüklenmesini istemiyorsanız, paketi aşağıdaki şekilde sabitleyin apt-mark:

# apt-mark hold apache2
apache2 set on hold.

Paket dizinine apache2'nin yeni bir sürümünün eklendiğini ve makinenizin senkronize edildiğini varsayalım apt-get update. Bir sonraki çalıştırmada bunu göreceksiniz 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.

6

Pratik olarak konuşursak, bu mümkün değildir, çünkü eski sürümler arşivde tutulmaz, bu nedenle eski sürümün bir yere koyduğu bir kopyasını almadığınız sürece kuramazsınız. İlk başta neden eski bir sürümü yüklemek istediğinizi kendinize sormalısınız. İstikrarlı bir sürümde, piyasaya sürülen yeni bir sürümün temel nedeni bir güvenlik açığını düzeltmektir ve güvenlik açığı bulunan bir sunucu çalıştırmak istemez misiniz?


25
Eski ortamların tam kopyalarını geliştirme amacıyla çoğaltmak için buna ihtiyacım var. Gerekli paketlere erişmek için eski paket sürümlerini silmeyen bir yansıtma oluşturmak mümkün mü yoksa sadece farklılıklar içeren birden fazla depo kurmam gerekiyor mu?
ayckoster

19
@ psusi: Tam olarak adil bir cevap değil, birçok neden olabilir. Benim durumumda daha yeni sürümde bir hata olabilir ve eski sürüme ihtiyaç duyulduğunu kontrol etmek için iki kez kontrol edin. Sadece bir örnek.
Cookie,

2
@nomen, hayır, bu mu tek dağıtımdır değil bir haddeleme bırakma modelini kullanmaktadır. Kritik hatalar ve güvenlik açıklarının kararlı sürümde düzeltilmeleri, gerilemelere neden olmamaları, ancak bu gerçekleşmesi durumunda, regresyon sürümüyle etiketlenmiş bir hata raporu hazırlamasının ve düzeltilmesi veya yuvarlanmasını sağlamak için büyük özen gösterilmektedir. geri.
psusi

5
@nomen, kelimeler için kendi anlamınızı oluşturmak istiyorsanız, başkalarıyla iletişimde bulunmak için zor bir zaman geçireceksiniz. Dünyadaki herkes için, bir haddeleme tahliyesi böyle değildir ve haddeleme tahliyesi, tam tersidir ve bu nedenle, kararlı bir tahribata karşılıklı olarak dahil değildir. Ve şimdi düşündüm ki, sürümle birlikte gönderilen orijinal sürüm aslında -şaşırtma cebinde tutulur ve güncellemeler -updates veya -security cebine gider, böylece önceki bir güncellemeye geri dönemezsiniz. başlangıçta yayımlanan sürüme geri dönebilir.
psusi

5
@ psusi: İşte sizin için başka bir tane. Tüm makinelerde daima aynı sürüm olması için Unison gereklidir. Oysa 13.10'da, 12.04 LTS'den farklı bir sürümdür. Peki şimdi ne? Böyle bir soruya gelirken, neden böyle bir cevap almak istiyorsan bunu yapmak istiyorsan gerçekten yararsızdır ve herkes için zaman kaybıdır.
Kurabiye

2

Psusi'nin açıkladığı gibi, eski sürümler ubuntu deposunda tutulmaz, ancak görünüşe göre onları hala fırlatma panelinde bulabilirsiniz. Böylece, (ubuntu sürümünüz ve mimarinizle güvenilir ve amd64 yerine) gidin:

https://launchpad.net/ubuntu/trusty/amd64/apache2

ve istediğiniz sürümü seçin. Ardından deb'i bir dosya olarak indirip yükleyin:

dpkg -i apache2_2.4.7-1ubuntu4.20_amd64.deb

Yine, dosya adını dosyanızı değiştirin. Çok fazla paketi düşürmeniz gerekiyorsa, bu can sıkıcı hale gelir, ancak çaresizseniz hiç yoktan iyidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.