Kaynaktan Debian / Ubuntu paketi nasıl oluşturulur?


116

Bir programın kaynağına sahibim (cvs / svn / git / ...'den alınmıştır) ve bunun için bir Debian / Ubuntu paketi oluşturmak istiyorum. Paket depolarda mevcuttur, ancak:

  • Daha eski bir sürüm (ihtiyacım olan özellikler eksik)
  • Varsayılandan biraz farklı derleme seçeneklerine ihtiyacım var.

Bunu yapmanın en kolay yolu nedir? Birkaç şey hakkında endişeliyim

  • Tüm bağımlılıkları doğru listelediğimi nasıl kontrol edebilirim? (Eski sürümün neye bağlı olduğuna bakarak bazı ipuçları alabilirim, ancak yeni bağımlılıklar eklenmiş olabilir.)
  • Güncelleme sisteminin bir güncellemede depoya eski sürümü yüklemesini nasıl engelleyebilirim?
  • Sistemin daha yeni bir sürüm yüklemesini (çıktığında), özel paketimin üzerine yazmasını nasıl engelleyebilirim?

Yanıtlar:


78

Henüz debian / ubuntu'da olmayan tüm paketler için özel "checkinstall" paketini kullanabilirsiniz.

apt-get install devscriptsMevcut debian kaynakları ile kaynaktan bir paket oluşturmak için "uupdate" ( ) kullanabilirsiniz:

Libdrm2 için örnek:

apt-get build-dep libdrm2
apt-get source libdrm2
cd libdrm-2.3.1
uupdate ~/Downloads/libdrm-2.4.1.tar.gz
cd ../libdrm-2.4.1
dpkg-buildpackage -us -uc -nc

Teşekkürler! Bunu, Subversion 1.6.6'yı mevcut en son sürümü 1.6.5 olan bir Ubuntu kurulumuna taşımak için kullandım ve kusursuz bir şekilde çalıştı. Beni epeyce tamirattan kurtardı! :)
Carlos Villela

Bu komutlar hakkında biraz daha bağlam verebilir misiniz? libdrm-2.3.1Tam olarak nerede ? Ayrıca nereden libdrm-2.4.1.tar.gzgeldi (benim ilk varsayımım, bir deb içinde paketlemek istediğimiz uygulamanın derlenmiş ikili dosyasıdır, ancak mevcut sürümü değiştirmek doğru mu?)
tekerlekli

Hatayı alırsanız You must put some 'source' URIs in your sources.list, deb-src satırlarının yorumunu kaldırın/etc/apt/sources.list
Christian

27

İlk olarak, başlık sorusu: Debian dizininin zaten orada olduğunu varsayarak, kaynak dizinde (debian dizinini içeren dizin) bulun ve dpkg-buildpackage'ı çağırın. Şu seçeneklerle çalıştırmayı seviyorum:

dpkg-buildpackage -us -uc -nc

yani sonucu imzalamayın ve temizlemezsiniz.

Tüm bağımlılıkları doğru listelediğimi nasıl kontrol edebilirim?

Bağımlılıkları elde etmek siyah bir sanattır. "Resmi" yöntem, derlemenin bağlı olup olmadığını kontrol etmektir, paketin yalnızca temel sistemle, "yapı temelli" paketlerle ve belirttiğiniz derleme bağımlılıklarıyla oluşturulup oluşturulmadığına bağlıdır. Normal Bağımlılıklar için genel bir cevap bilmiyorum, sadece içeri girin :)

Güncelleme sisteminin bir güncellemede depoya eski sürümü yüklemesini nasıl engelleyebilirim? Sistemin daha yeni bir sürüm yüklemesini (çıktığında), özel paketimin üzerine yazmasını nasıl engelleyebilirim?

Bilgim bu konuda güncel olmayabilir, ancak her ikisini de ele almak için: dpkg --set-selections kullanın. Nullidentd'nin kalmasını istediğiniz paket olduğunu varsayarsak, root olarak çalıştırın

echo 'nullidentd hold' | dpkg --set-selections

Alternatif olarak, kaynaktan derleme yaptığınız için, sürüm numarasını yapay olarak yüksek ayarlamak ve bir daha asla rahatsız edilmemek için bir epoch kullanabilirsiniz . Bir epoch kullanmak için, debian / changelog dosyasına yeni bir giriş ekleyin ve sürüm numarasının önüne bir 99: koyun. Nullidentd örneğime göre, güncellenmiş değişiklik günlüğünüzün ilk satırı şöyle olacaktır:

nullidentd (99:1.0-4) unstable; urgency=low

Bernard'ın bağlantısı iyidir, özellikle debian dizinini kendiniz oluşturmanız gerekiyorsa - geliştiricilerin referansı ve genel kaynak sayfası da yararlıdır . Adam'ın bağlantısı da iyi görünüyor ama ben buna aşina değilim.


1
"dpkg --set-selections" hala çalışıyor, ancak bu günlerde daha iyi bir yöntem "aptitude hold nullidentd" olacaktır.
Mark Baker

6

Yapmak istediğiniz şey için, muhtemelen debian kaynak diff'i kullanmak istersiniz, bu nedenle paketiniz, kullanılan upstream sürümden farklı olarak resmi pakete benzer. Sen kaynak diff indirebilirsiniz packages.debian.org veya .dsc ve "apt-get kaynak" kullanarak orijinal kaynak arşivinden ile birlikte alabilirsiniz.

Ardından, yukarı akış kaynağının yeni sürümünün paketini açarsınız, bu dizine geçersiniz ve

zcat ~/downloaded.diff.gz | patch -p1
chmod +x debian/rules

Ardından seçenekleri derlemek istediğiniz değişiklikleri yapın ve bunu yaparak paketi oluşturun.

dpkg-buildpackage -rfakeroot -us -uc


3
  • Orijinal paketten "debian" dizinini kaynak dizininize koyun
  • paketin sürümünü güncellemek için " dch " kullanın
  • paketi oluşturmak için "debuild" kullanın

2

İnanıyorum bu 'İncil' Debian paketini olduğunu.

Eh, bu Debian'ın yeni geliştiricisinin kılavuzu, bu yüzden çoğu uygulanamayacak, ancak neyin nereye gittiğini kapsıyorlar.



1

İşte bir Debian paketi oluşturmak için bir öğretici.

Temel olarak yapmanız gerekenler:

  1. Klasör yapınızı ayarlayın
  2. Bir kontrol dosyası oluşturun
  3. İsteğe bağlı olarak oluşturmak postinst veya prerm komut dosyalarını
  4. Dpkg-deb'yi çalıştırın

Genelde tüm bunları Makefile dosyamda yapıyorum, böylece ikiliyi tükürmek için make yazıp tek seferde paketleyebiliyorum.


1

Tüm bağımlılıkları doğru listelediğimi nasıl kontrol edebilirim?

pbuilderBir chroot ortamında temiz bir taban sistemi kurarak inşa bağımlılıklarını ve bağımlılıkları hem kontrol için mükemmel bir araçtır. Paketi pbuilder içinde derleyerek, yapı bağımlılıklarını kolayca kontrol edebilir ve bir pbuilder ortamında test ederek bağımlılıkları kontrol edebilirsiniz.


1

Yapı bağımlılıklarını kurmanın hızlı ve kirli bir yolunu istiyorsanız, şunu kullanın:

apt-get build-dep

Bu, bağımlılıkları yükler. Bunun için kaynaklar listenizde kaynak satırlarına ihtiyacınız var:

deb-src http://ftp.nl.debian.org/debian/ squeeze-updates main contrib non-free

Paketleri testten kararlı hale getiriyorsanız, bağımlılıkların değişmiş olabileceğini lütfen unutmayın. Apt-get build-deb komutu, mevcut deponuzdaki kaynak paketler için bağımlılıkları kurar.

Ama tabii ki, dpkg-buildpackage -us -uc size kaldırılmış bağımlılıkları gösterecektir.

Daha sık derlemek istiyorsanız, inek yapıcıyı kullanın.

apt-get install cowbuilder

Ardından bir inşa alanı oluşturun:

sudo DIST = squeeze ARCH = amd64 cowbuilder - oluştur

Ardından bir kaynak paketi derleyin:

apt-get source cowsay

# do your magic editing
dpkg-source -b cowsay-3.03+dfsg1              # build the new source packages
cowbuilder --build cowsay_3.03+dfsg1-2.dsc    # build the packages from source

İnşaatçıların ortaya çıkan paketi nereye koyduğunu izleyin.

İyi şanslar!

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.