Bir dizi dosyayı yükleyen bir deb paketini oluşturma


23

Bir dizi dosyayı yüklemek için yepyeni bir deb paketi oluşturmak istiyorum. Mümkünse, kurulumun bir parçası olarak bu dosyaları içeren klasörü bilinen bir klasör konumuna çıkarmak istiyorum. Bunu başaramazsanız, kaynak klasörlerin ve dosyaların nasıl paketleneceğine ilişkin bazı bilgiler çok yararlı olacaktır.

Soru şu - bu mümkün mü ve eğer öyleyse - nasıl?

Bir örnek verelim:

~/mypluginfolder/dosyaları x, yadı verilen bir alt klasörü abcve içindeki başka bir dosyayı içerir z.

Bu klasörü tar yapmak istiyorum: tar -cvf myfiles.tar ~/mypluginfolder

Debian paketimin benzeyeceğini sanıyorum

myfiles.tar.gz
myfiles+ppafoss_0.1-1/
   myfiles.tar
   DEBIAN
      changelog, compat, control, install, rules source

myfiles.tarÖrneğin bilinen bir klasör konumuna gitmek için bir şekilde untar yapmak mümkün mü

/usr/share/rhythmbox/plugins/

Böylece nihai sonuç şöyle olacaktır:

/usr/share/rhythmbox/plugins/mypluginfolder
/usr/share/rhythmbox/plugins/mypluginfolder\x
/usr/share/rhythmbox/plugins/mypluginfolder\y
/usr/share/rhythmbox/plugins/mypluginfolder\abc\z

Eğer fırlatma panelinin kaynak gerektirdiğini varsayarsak, kaynak klasörleri ve dosyaları deb paket yapısına nereye bırakmam gerektiği konusunda tavsiye aranır.


Bu, nihayetinde bir dizi bireysel fırlatıcı PPA paketi olacak.

Tercih ettiğim (ancak başaramayacağım ...) ambalajımı minimumda tutmak - bir şablondan bir dizi paket oluşturmak ve en düşük seviyeyi ayarlamak (changelog etc + tar dosya / dosya ve klasör yapısı) .


Um ... neden katran çıkarımı yapmak için bir .deb istiyorsun ? Neden sadece kaynak kodunu almak den katran ve kaynağı ile sıfırdan deb oluşturmak?
Thomas Ward

2
Bir olasılık, tarball'ı adobe-flash tarzında başka bir yerden almanız olabilir.
jrg

@jrg, bu bir tarball değil .bin yükleyicisini indirir. adobe paketleme tarzı kaynak sağlamamaktadır (kapalı kaynak). Yine de konsept hala aynı, kodu başka bir yerden indir ve sonra çıkar / yükle (burada nit = pickif: P)
Thomas Ward

@LordofTime Aynı fark. ; p
jrg

Yanıtlar:


31

Aşağıda, kaynağın açık (örneğin Python scriptleri) olduğu ve bu nedenle herhangi bir mimariye bağlı olmayan (örn. Amd64 veya i386), dolayısıyla "tümü" olduğunu farz ediyorum. C kaynağınız varsa Architecture: amd64 i386, kaynak controldosyanızda kullanmanız gerekir .


Launchpad için hazır paket oluşturma

Bu, nihayetinde bir dizi bireysel fırlatıcı PPA paketi olacak.

Tercih ettiğim (ancak başaramayacağım ...) ambalajımı minimumda tutmak - bir şablondan bir dizi paket oluşturmak ve en düşük seviyeyi ayarlamak (changelog etc + tar dosyası).

Launchpad sadece kaynak paketleri kabul eder, bu yüzden rulesdosyaları doğru yerlere yükleyen bir tane oluşturun . Kolaylık sağlamak için debhelper kullanacağım . Dosyalarınızın bulunduğu dizin şöyle görünmelidir:

debian/changelog
debian/control
debian/rules
debian/compat
mypluginfolder/...

Bir debian/copyrightdosya ayrıca kullanıcıları paketle ilgili lisanslar hakkında bilgilendirmek için de yararlı olabilir. Bir postinstbetiğe ihtiyacın olduğunu sanmıyorum çünkü sadece bazı dosyaları çıkarman gerekiyor. compat"8" deyince debhelper uyumluluk seviyesini içermelidir. ( Daha fazla bilgi için lütfen debhelper kılavuz sayfasına bakınız)

changelogDosya ile düzenlenebilir dchtemin komuta, devscriptspaketin. rules(Kullanarak debhelper) içermelidir:

#!/usr/bin/make -f
%:
    dh $@
override_dh_install:
    dh_install mypluginfolder/ /usr/share/rhythmbox/plugins

Kullanılabilir hale getirin chmod 755 debian/rules. Bir kaynak paketi kullanılarak oluşturulabilir debuild -S. Adlı bir dizinde bulunduğunuzdan emin olun <package-name>-<version>. override_Davranış ve dhkomut hakkında daha fazla bilgiyi kılavuz sayfasında bulabilirsiniz .

Debian Bakımcılarının Kılavuzu beni bu anlamak için çok değerli, bu tavsiye edilen okuma bu. Örnek paketleme https://github.com/Bumblebee-Project/bumblebee-ppa adresinde bulunabilir .


varolan dosya ağacından paket oluşturma

dpkg-deb -bMevcut bir dosya ağacından tarball'lar oluşturmak için kullanılabilir. İlk olarak, paketinizden sonra adlandırılması gereken bir dizin oluşturmaya başlayın. Adını vermek mypluginve koymak istediğinizi varsayalım /usr/share/rhythmbox/plugins/mypluginfolder. Ek olarak, DEBIANpaket bilgisini depolamak için dizini (büyük harf!) Oluşturun :

mkdir -p myplugin/usr/share/rhythmbox/plugins/mypluginfolder
mkdir myplugin/DEBIAN

Dosyalarınızın üzerine kopyalayın:

cp -r ~/mypluginsfolder myplugin/usr/share/rhythmbox/plugins

Daha sonra , paketi tanımlayan bir kontrol dosyasına ihtiyacınız olacak myplugin/DEBIAN/control. Böyle bir dosyanın içeriği aşağıda verilmiştir:

Package: myplugin
Version: 1.0-1
Maintainer: You <whatever@contact.address>
Architecture: all
Description: plugins for Rhythmbox
 Longer description here
 .
 As you can see, new paragraph are split by a single dot,
 and lines have to be indented by one space.

Şimdi, isteğe bağlı olarak paketinizin içeriğini doğrulayabilirsiniz. Bir sonraki komut dosya ve dizin girişlerinin içeriğini listeler myplugin:

find myplugin -ls

Memnunsanız, paketi geçerli dizinde oluşturun:

dpkg-deb -b myplugin .

<package>_<version>_<architecture>.debBu örnekte olduğu gibi adlandırılmış yeni bir dosya görünecektir myplugin_1.0-1_all.deb. lessDosyayı gözetlemek için programı kullanabilirsiniz . Örneğin, less myplugin_1.0-1_all.deb.


3
+1 mutlak deha - Size boyun eğiyorum efendim. Teşekkürler!
fossfreedom

Bu harika yardım için teşekkürler! Yine de kontrol dosyasında bir sorun yaşadım, sonunda çalıştı, ancak bana nasıl olduğunu sorma;)
Gerhard Burger
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.