Debian'ın sağladığı yazılımın yeni versiyonlarını nasıl kurabilirim?


26

Bir işletim sisteminin şu anki sürümü için mevcut olandan daha yeni bir yazılım sürümü istediğimi varsayalım, ne yapabilirim?

Dikkate alınacak durumlar:

  1. İşletim sisteminin bu sürümü için yarı resmi / resmi ek paket kaynakları mevcut. Örneğin Debian için backports.org veya Ubuntu için PPA.
  2. İşletim sisteminin söz konusu sürümü için paketin daha yeni bir sürümü yoktur, ancak işletim sisteminin daha yeni sürümleri için daha yeni sürümler vardır. Bu, backporting için standart durumdur.
  3. Yazılımın daha yeni sürümlerinin paketlenmiş sürümleri mevcut değildir. Kullanılabilir seçenekler, en yeni sürümü paketlemek içindir.

Per Per Kanonik bir SSS listesi derleyelim Bu, aşağıdakilere kanonik cevaplar koymak için bir yer olarak tasarlanmıştır. Cevaplar muhtemelen topluluk wiki'sinde yapılmalıdır.


Bu, dağılıma özgüdür. Dağıtım başına bir soru yapsan daha iyi olur.
Gilles 'SO- kötülük yapmayı bırak'

2
@Gilles Soru dağıtıma özgü değil. Farklı dağılımların cevaplarıyla bir sorunun daha iyi olacağını düşünüyorum.
Faheem Mitha

Neyin işe yarayıp yaramadığını gösteren bir örnek: Debian 8 için MySQL 5.6'yı istedim. (Ancak normalde MySQL 5.5 yalnızca Debian 8 için kurulabilir. Yaptığım diğer şeylerle karşılaştırılabilirlik için 5.6'ya ihtiyacım vardı.) 5.6 backport'u yüklemeye çalıştım ama kırıldı. Bir tür yinelenen dosya yükleniyor hata mesajı. Rapor ettim ama sonra ne yapmalı? Çözüm: MySQL 5.6'yı Debian 8 için özel olarak doğrudan MySQL sitesinden indirebileceğinizi keşfettim. Bu işe yaradı, ANCAK ... [this] altındaki WORKAROUND
Elliptical view 3

Yanıtlar:


33

(Bu cevapla ilgili sorularınız / yorumlarınız varsa, lütfen bir yorum ekleyin. Veya, eğer yeterli bilginiz varsa, beni sohbete sokabilirsiniz.)

Doğrudan Debian'ın daha yeni bir sürümünden ikili paketler kurmak - cevabı değil.

Debian tabanlı bir dağıtımın bir sürümünü çalıştırdığınızı varsayalım. Bir paketin sizin için mevcut olandan daha yeni bir sürümü istiyorsunuz. Her yeni başlayanın yapması gereken ilk şey, ikili paketi doğrudan Debian sürümünüze yüklemek. Bu, hangi sürüme çalıştığınıza ve paketin ne kadar yeni olduğuna bağlı olarak çalışmayabilir. Genel olarak, bu prosedür iyi çalışmayacak.

Örneğin, bir test paketinin dengesiz bir şekilde doğrudan dengesiz bir ikili paket kurmaya çalıştığını düşünün. Testin / dengesizliğin o anda ahıra çok yakın olması söz konusu olmadıkça, bu muhtemelen iyi gitmeyecektir. Sebep, Debian gibi Linux tabanlı bir ikili dağıtımın doğası ile ilgili. Bu tür işletim sistemleri büyük ölçüde paylaşılan kütüphanelere dayanır ve bu bağımlılıklar sıklıkla çok sıkı bir şekilde versiyona bağımlıdır; gereğinden çok daha fazla. Şu anda Debian, sürüm bağımlılıklarını "sıkı" hale getirmenin iyi bir yoluna sahip değil - sürüm bağımlılığının tam olarak gerektiği kadar kısıtlayıcı olduğunu söylemenin kısa yoludur.

Bunun kullanıcı için anlamı nedir? Örneğin, slrnDebian'dan kararsız olanı Debian kararlı olanına yüklemeye çalıştığınızı varsayalım . Bu nasıl görünürdü?

# apt-get install slrn/unstable
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Selected version '1.0.1-10' (Debian:testing [amd64]) for 'slrn'
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 slrn : Depends: libc6 (>= 2.15) but 2.13-38+deb7u1 is to be installed
E: Unable to correct problems, you have held broken packages.

Üretilen hataya rağmen, aptburada kırılmış paket yoktur. Peki, ne yanlış gitti? Sorun, libc6kararsızın slrnderlendiği versiyonun Debian stabil'de mevcut olandan farklı olması (ve daha yüksek sürüm numarasına sahip olması). ( libc6GNU C kütüphanesidir. C kütüphanesi, Unix benzeri herhangi bir işletim sisteminin merkezidir ve GNU C kütüphanesi, Linux tabanlı işletim sistemlerinin genellikle kullandığı sürümdür.)

Bu nedenle kararsız slrn, libc6kararlı için uygun olandan daha yüksek numaralı bir versiyon gerektirir . Bir paketin daha yüksek bir kütüphane sürümüne karşı derlendiğinden, mutlaka o kütüphane için daha yüksek bir sürüm gerektirmediğini unutmayın, ancak durum genellikle böyledir.

Sözdizimi

apt-get install slrn/unstable

şu anlama gelir: dengesiz kullanın slrnancak diğer tüm paketler için yalnızca kararlı sürümleri kullanın. Daha kesin olmak gerekirse, öncelikli sayıları kullanır. Detaylar man apt_preferencesiçin bakınız.

Bir de yapabilir

apt-get install -t unstable slrn

Bu, çalışmak için daha muhtemeldir, ancak genellikle bunu yapmak istemezsiniz. Niye ya?

Bunun anlamı: tüm paketleri geçici olarak dengesiz bir biçimde, paketleri dengeli bir şekilde sabit olarak ele alın. Bu nedenle slrn, daha yüksek sürüm numarasına sahiplerse, dengesizin bağımlılıklarını dengesizlikten çekecektir ve genellikle olacaktır. Bu, genel olarak daha önce açıklanan nedenlerden dolayı GNU C kütüphanesini içerecektir. Şimdi, bu yaklaşım genel olarak “başarılı olacaktır”, çünkü bağımlılıklar tanımla karşılanacak (kararsızların kararsız bir şekilde karşılanan slrnbağımlılıkları var), ama sonunda aniden kütüphanelerin sürümleriyle çalışmaya zorlanan paketlerin bir karışımı ile sonuçlanacaksınız. inşa edildiklerinden farklı. Bu muhtemelen iyi bitmeyecek.

Cevap ... BACKPORTS!

Peki, bunu yapmanın doğru yolu nedir? Sisteminizde, halk tarafından "destek" olarak bilinen daha yeni sürümlerin Debian kaynaklarını yeniden inşa etmektir. Aşağıdakileri göz önünde bulundurun:

Debian'ın bu versiyonu için mevcut olan resmi / resmi ek paket kaynakları bulunmaktadır.

Bakılacak ilk yer, Debian desteklerinin resmi sitesi olan Debian Backports .

Somut bir örnek için:

Yeni paketleri bulmak için sürümünüze uygun backports satırını ekleyin ve ardından yeni paketleri bulmak için özel olarak backport'lardan bir şey yükleyin (backport'lar varsayılan olarak devre dışıdır).

echo "deb http://ftp.debian.org/debian stretch-backports main" | sudo tee /etc/apt/sources.list.d/stretch-backports.list
sudo apt-get update
sudo apt-get install -t stretch-backports git

Bu, stretch'in içerdiği durağan olandan daha yeni özelliklere sahip olan ve en çok sayıda config dosyasını birleştirmenize veya kullanıcı adınızı ~ / work / projects / vs ~ / personal / projeler /).

Bakılması gereken bir başka yer ise Ubuntu bakımcılarının çeşitli KKE'leridir. "Packagename PPA" için bir arama yapabilirsiniz.

İşletim sisteminin söz konusu sürümü için paketin daha yeni bir sürümü yoktur, ancak işletim sisteminin daha yeni sürümleri / sürümleri için daha yeni sürümler mevcuttur. Bu, backporting için standart durumdur.

Destekleme, Debian kaynaklarını çalıştırdığınız sürümde daha sonraki bir Debian sürümünden yeniden oluşturduğunuz anlamına gelir. Bu prosedür pakete bağlı olarak kolay veya ilgili ve zor olabilir. İşte bunun nasıl yapılacağı bir anahat.

Yeni Başlayanlar İçin Kısa Bir Destekleme Eğitimi

Somutluk için, şu anki debian istikrarlı, şu anda hırıltılı olduğunuzu varsayacağım. Paketi slrnörnek olarak kullanacağım .

İlk olarak, tüm Debian paketleme dosyalarının debian/kaynak dizininin alt dizininde bulunduğunu unutmayın.

İlk adım, daha yeni bir sürümün mevcut olup olmadığını kontrol etmektir. Bunu kullanarak yapabilirsiniz apt-cache policy.

apt-cache policy slrn

slrn:
  Installed: 1.0.0~pre18-1.3
  Candidate: 1.0.0~pre18-1.3
  Version table:
     1.0.1-10 0
         50 http://debian.lcs.mit.edu/debian/ testing/main amd64 Packages
         50 http://debian.lcs.mit.edu/debian/ unstable/main amd64 Packages
 *** 1.0.0~pre18-1.3 0
        500 http://debian.lcs.mit.edu/debian/ wheezy/main amd64 Packages
        100 /var/lib/dpkg/status
     1.0.0~pre18-1.1 0
        500 http://debian.lcs.mit.edu/debian/ squeeze/main amd64 Packages

Destek vermek istiyoruz 1.0.1-10.

AŞAMA 1:

Not: deb-srcİndirmek istediğiniz kaynak versiyonun satırlarının bilgisayarınızda göründüğünden emin olun /etc/apt/sources.list. Örneğin, dengesiz sürümünü indirmek istiyorsanız, dengesiz slrniçin deb-srcsatıra ihtiyacınız var, yoksa işe yaramaz. debKaynakları indirmek için ilgili satırlara ihtiyacınız olmadığına apt-cache policy, bu bilgileri kullanmasına rağmen , ilgili debsatırlara sahip apt-cache policyolmadığınız takdirde ilgili sürümleri göstermeyeceğini unutmayın. debSatırlarınız varsa , daha yeni sürümleri giriş /etc/apt/preferencesveya benzeri bir girişi kullanarak işaretlemeyi unutmayın . Bu /etc/apt/preferencesgibi bir giriş (kararsız için) işe yarayacaktır.

Package: *
Pin: release a=unstable
Pin-Priority: 50

Satır eklerseniz /etc/apt/sources.list, apt-get updatedaha sonra çalışmayı unutmayın .

İçin kaynakları indirin slrn. Güzel bir yer /usr/local/src/slrn.

apt-get source slrn=1.0.1-10

ADIM 2:

Sürümünüzü biraz değiştirin, böylece destek alanınızı giriş yönündeki sürümden ayırın. Çalıştır dch -i, bu debian/changelogdosyaya otomatik olarak bir giriş ekler Ardından, bunun gibi bir şeye bakmak için girişi değiştirin.

slrn (1.0.1-10.username) UNRELEASED; urgency=low

  * Backport to wheezy.

 -- User <user@domain>  Sun, 02 Feb 2014 23:54:13 +0530

AŞAMA 3:

Kaynakları oluşturmaya çalışın. Derleme için gereken paketler mevcut değilse, deneme başarısız olur. Dizini kaynak dizine değiştirin. Kullanın debuildgelen devtoolspaketin.

cd slrn-1.0.1/
debuild -uc -us

Eğer derleme bağımlılıkları yerine getirilirse, kaynaklar derlenecek ve kaynak dizininin üstündeki seviyede bazı maddeler üretilecektir; bu durumda /usr/local/src/slrn.

ADIM 4:

Derleme bağımlılıklarının tatmin olmadığını varsayalım. Daha sonra derleme bağımlılıklarını yüklemeye çalışmanız gerekir. Bağımlılık sürümünüz için uygun olmayabilir veya mevcutsa doğru sürümde bulunmayabileceğinden bu çalışmayabilir veya çalışmayabilir.

Not: Ne yazık ki, Debian paketlerinin gerekenden daha yüksek sürüm bağımlılıkları sürümlerini gerektirmesi nadir değildir. Bunu kontrol etmek için Debian'da otomatik bir yol yoktur ve paket yöneticileri genellikle ilgili sürümde / sürümde çalıştığı sürece umursamaz. Bu nedenle, bağımlılık versiyonlarına kuşkuyla yaklaşın ve sağduyunuzu kullanın. Örneğin, Python ve GNU araçları gibi yaygın olarak kullanılan paketler, Debian paketleyicisinin ne listelediğinden bağımsız olarak bağımlılıklarının çok özel sürümlerine bağlı olmayacaktır.

Her durumda, bunları yaparken yüklemeyi deneyebilirsiniz

apt-get build-dep slrn=1.0.1-10

Bu başarılı olursa, paketi tekrar oluşturmayı deneyin (2. ADIM). Başarısız olursa, daha fazla çalışmaya ihtiyaç vardır. Not o debuildBuild'a de bakar içinde Bağımlılıklar debian/controldosyası ve gerekirse bu değiştirebilir. Şimdi bunun hakkında konuşalım. Slrn için Yapı Bağımlılıkları.

Build-Depends: debhelper (>=9), libslang2-dev, libuu-dev,
 exim4 | mail-transport-agent, libgnutls-openssl-dev, po-debconf, autoconf,
 libcanlock2-dev, autotools-dev, dpkg-dev (>= 1.16.0), chrpath, dh-autoreconf, inn2-inews

apt-get build-depBunu kullanmanın bir alternatifi, bunları el ile kurmaktır.

apt-get install debhelper libslang2-dev ...

Bu değerleri kontrol dosyasında değiştirmeye başlarsanız, o zaman apt-get build-departık doğru olanı yapmayacağınız için manüel kuruluma geçmelisiniz .

Yazılımın daha yeni sürümlerinin paketlenmiş sürümleri mevcut değildir. Kullanılabilir seçenekler, en yeni sürümü paketlemek içindir.

Çoğu durumda, yazılımın daha eski sürümlerinden gelen paketleri daha yeni kaynaklarla birlikte yeniden kullanabilirsiniz. Bu yaklaşım sorunlara yol açabilir, özellikle yazılımın önceki sürümlerine uygulanan yamalar burada geçerli olmayabilir, bu nedenle kaynaklarla yeniden senkronize edilmesi gerekebilir. Artık standart hale gelen 3.0 (yorgan) kaynak biçimi yorgan kullanıyor ve yamalar debian/patchesdizinde bulunuyor.

Ancak, bu konuların ayrıntılı bir tartışması bu yazı için kapsam dışındadır.


Bu gerçekten dağıtım geneldir (yalnızca yeni şeyler için kod depoları farklı şekilde çağrılabilir veya özel yerlerden bir şeyler almanız gerekir). Dağıtımınızın kılavuzlarını kontrol edin.
vonbrand

2

Sadece Debian'da değil, her zaman çalışan bir yol gerekli yazılımı kendiniz derlemektir. (Bunu, şimdi daha yeni bir sürüme ihtiyaç duyduğumda ve yazılım hiç sağlanmadığında) Debian'da yıllardır yapıyorum.

Yerel olarak derlenmiş paketleri /use/localkullanarak stow, bir paketle ilgili tüm dosyaları bir alt dizin ağacında saklamama izin veriyor, sonra da bu ağaca sembolik bağlantılar yapıyorum. Bu derlenmiş paketleri yönetmeyi kolaylaştırır: Yüklenen dosyalar Debian tarafından sağlanan dosyalarla çakışmaz ve bir paketi tek bir komutla kaldırabilirim.

Bir paketi derleme ve yükleme adımları, örneğin some_software, genellikle aşağıdakilerin bir çeşididir:

  1. .tarDosyayı vs. indirin /usr/local/src/.

  2. /usr/local/packages/some_softwareYazılımı nereden indirdiğimi, ne yaptığını, hangi sürüme ait olduğunu ve derlemek için ne yapmam gerektiğine dair notlar içeren bir dosya oluşturun (aşağıya bakın).

  3. .tarDosyanın içeriğini paketinden çıkarın /usr/local/tmp/some_software.

  4. Alternatif olarak, eğer bir havuzdan derliyorsanız, depoyu uygun bir alt dizinde (örn. /usr/local/git/some_software) Kontrol edin ve orada derleyin,

  5. cdBu dizinde, bakmak içine README, INSTALLvb

  6. Çoğu durumda, configurepakete bir otomatik araç betiği vardır . ./configure --prefix /usr/local/stow/some_software-versionDosyaları bu alt dizine kurmak için arayın . Aksi takdirde, Makefileyüklü dosyalar için yolun nasıl ayarlanacağını okuyun ve anlayın.

  7. İle derleyin make.

  8. İle yükleyin make install.

  9. cd /usr/local/stow, sonra stow some_software-version

  10. Çalışıp çalışmadığını test edin.

Genelde derleme ilk denemede işe yaramaz: Paketin kütüphanelere ve buna karşılık gelen dosyalara ihtiyacı olabilir, bu nedenle biri doğru ...-devpaketleri Debian'dan yüklemelidir . Veya kullanılan paketin yazarının gccfarklı bir versiyonunun şikayet etmediği şeylerden şikayetçi olabilir gcc. Bazen bir kod okumak ve bunları düzeltmek zorunda kalır, ancak bu çok sık olmaz.


Bu sorunun amacı, belki de açık olmasa da, Debian için yazılım paketlerinin nasıl kurulacağını açıklamaktı. Belki de soruyu netleştirmeliyim. stowDebian paketleri yaratır mı ? Man sayfasından, öyle görünmüyor.
Faheem Mitha 30:17

@FaheemMitha Stow Debian paketleri hakkında bir şey bilmiyor. Yalnızca bir dizi ayrı kurulum dizininden tek bir dizine sembolik bağlantıları yönetir.
Kusalananda

@FaheemMitha: Eğer kendi kendine derlenmiş bir yazılımı bir Debian paketine dönüştürmek istiyorsanız, o zaman bir Debian paket sağlayıcısı gibi kendiniz de paketlemelisiniz. Ancak, tek kullanıcı olacaksanız, kurulumu /usr/localçok kolaydır ve stoworada depolanan dosyaları yönetmenize yardımcı olur. Ya da farklı bir ifadeyle: Yazılımın Debian'da kullanılması için bir Debian paketinde olması gerekmez.
dirkt

Yalnızca yerel kullanım için bile, yazılımı bir Debian paketi olarak paketlemenin büyük bir avantajı vardır: bağımlılıkları doğru tanımlarsanız, bir paketin kurulu olması bağımlılıkların kurulu kalmasını sağlar ...
Stephen Kitt

@StephenKitt: Tabii ki paketleme yazılımı Debian paketi gibi uygunsa, en iyi çözümdür. Dezavantajı, düzgün bir şekilde paketlemek için zaman
harcaması gerektiğidir
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.