(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, slrn
Debian'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, apt
burada kırılmış paket yoktur. Peki, ne yanlış gitti? Sorun, libc6
kararsızın slrn
derlendiği versiyonun Debian stabil'de mevcut olandan farklı olması (ve daha yüksek sürüm numarasına sahip olması). ( libc6
GNU 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
, libc6
kararlı 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 slrn
ancak 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_preferences
iç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 slrn
bağı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 slrn
için deb-src
satıra ihtiyacınız var, yoksa işe yaramaz. deb
Kaynakları indirmek için ilgili satırlara ihtiyacınız olmadığına apt-cache policy
, bu bilgileri kullanmasına rağmen , ilgili deb
satırlara sahip apt-cache policy
olmadığınız takdirde ilgili sürümleri göstermeyeceğini unutmayın. deb
Satırlarınız varsa , daha yeni sürümleri giriş /etc/apt/preferences
veya benzeri bir girişi kullanarak işaretlemeyi unutmayın . Bu /etc/apt/preferences
gibi 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 update
daha 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/changelog
dosyaya 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 debuild
gelen devtools
paketin.
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 debuild
Build'a de bakar içinde Bağımlılıklar debian/control
dosyası 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-dep
Bunu 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-dep
artı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/patches
dizinde bulunuyor.
Ancak, bu konuların ayrıntılı bir tartışması bu yazı için kapsam dışındadır.