komut dosyalarından veya ikili dosyalardan bir .deb Paketi oluşturma


73

Derlemek için kaynak kodu olmayan şeyler için .deb Paketleri oluşturmanın basit bir yolunu aradım (configs, shellscripts, özel yazılım). Bu oldukça büyük bir problemdi çünkü paket derslerinin çoğu, derlemek istediğiniz bir kaynak tarball'a sahip olduğunuzu varsayıyor. Sonra bu kısa öğreticiyi buldum (almanca).

Daha sonra basit bir depo oluşturmak için küçük bir senaryo oluşturdum. Bunun gibi, böyle:

rm /export/my-repository/repository/*
cd /home/tdeutsch/deb-pkg
for i in $(ls | grep my); do dpkg -b ./$i /export/my-repository/repository/$i.deb; done
cd /export/avanon-repository/repository
gpg --armor --export "My Package Signing Key" > PublicKey
apt-ftparchive packages ./ | gzip > Packages.gz
apt-ftparchive packages ./ > Packages
apt-ftparchive release ./ > /tmp/Release.tmp; mv /tmp/Release.tmp Release
gpg --output Release.gpg -ba Release

Anahtarı apt anahtarlığına ekledim ve kaynağı şöyle ekledim:

deb http://my.default.com/my-repository/ ./

Reponun kendisi de iyi çalışıyor gibi görünüyor (bazı problemlerle karşılaştım, düzeltmek için iki kez paketleri ekleyip Sürüm dosyası için geçici dosya geçici çözümü yapmam gerekiyordu). Ayrıca bazı indirilen .deb kodunu koymak, onlar da sorunsuz çalışıyor gibi görünüyor. Ama kendi yarattığım paketlerim yapmadı ... Yaptığım sudo apt-get updategibi, bunun gibi hatalara neden oluyorlar:

E: Problem parsing dependency Depends
E: Error occurred while processing my-printerconf (NewVersion2)
E: Problem with MergeList /var/lib/apt/lists/my.default.com_my-repository_._Packages
E: The package lists or status file could not be parsed or opened.

Neyi yanlış yaptığım hakkında fikri olan var mı?

GÜNCELLEME 2012-03-06: Debs oluşturmak için kolay bir yol arıyor başka bir kişi için sadece aa ipucu: bir göz atın FPM .


Depends: alanını içeren pakete bir DEBIAN / control dosyası eklediniz mi?
Bilal Akhtar

5
Btw. Şimdi paketleme ihtiyaçlarım için FPM kullanıyorum: github.com/jordansissel/fpm
Thomas Deutsch

FWIW, oluşturduğum bir pakette aynı hata mesajını aldım çünkü bağımlılıklardan birini yanlış belirttim. "Foo> = 2.1" yazıp "foo (> = 2.1)" olması gerektiğini yazdım. : (.. FPM kayalar Siz de Yerinde bir biçimde bakmak PS) Ben hata ilk yarısı ... yanlış tam olarak ne söylüyordu fark etmeden önce ben hatanın son yarım bakarak bir saatten geçirdi
Mark E. Haase

2
Katranlı bir topdan gelmeyen ve dosya yapmak gibi bir şeyleri paketlemek için hiçbir öğretici veya kılavuz bulunmadığına kesinlikle katılıyorum. Java geliştiricileri gibi, bir kaç senaryo ve belki de likitbaz ile savaş dağıtmak isteyen, ancak debian sys yöneticileri ya da debian koruyucuları olmayan insanlar için böyle bir rehbere ihtiyacımız var. FPM bu durumda yardımcı olmaz, çünkü nasıl paketleyebileceğini bir şeyi nasıl yarattığını bilmeni gerektirir.
John Little

1
Fpm hakkındaki bilgileri paylaştığınız için teşekkür ederiz. Cazibe gibi çalışıyor!
Damian Nadales

Yanıtlar:


70

Bağladığınız öğretici bir paket oluşturmak için düşük seviye bir yaklaşım kullanır. Bu tür bir yaklaşım genellikle önerilmemektedir ve dikkatle yapılmadığında her türlü soruna yol açabilmektedir.

Ambalajın temellerini anladıktan sonra, bir betiği için bir .deb oluşturmak çok kolaydır. Kısaca:

# Configure your paths and filenames
SOURCEBINPATH=~
SOURCEBIN=myscript.sh
DEBFOLDER=~/somescripts
DEBVERSION=0.1

DEBFOLDERNAME=$DEBFOLDER-$DEBVERSION

# Create your scripts source dir
mkdir $DEBFOLDERNAME

# Copy your script to the source dir
cp $SOURCEBINPATH/$SOURCEBIN $DEBFOLDERNAME 
cd $DEBFOLDERNAME

# Create the packaging skeleton (debian/*)
dh_make -s --indep --createorig 

# Remove make calls
grep -v makefile debian/rules > debian/rules.new 
mv debian/rules.new debian/rules 

# debian/install must contain the list of scripts to install 
# as well as the target directory
echo $SOURCEBIN usr/bin > debian/install 

# Remove the example files
rm debian/*.ex

# Build the package.
# You  will get a lot of warnings and ../somescripts_0.1-1_i386.deb
debuild

Daha fazla komut dosyası eklemek, dizine kopyalanmasını ve debian / install dosyasına eklenmesini gerektirir - sonra sadece debuild'i yeniden çalıştırın. Ayrıca debian / * dosyalarını gerektiği gibi kontrol etmeli ve güncellemelisiniz.

Sen man sayfalarını okumalısınız: dh_make, dh_install, vedebuild


3
Debian / control öğesini düzenleyin, "Architecture: any", "Architecture: all" olarak değiştirilmelidir. Soruyu cevaplandığı gibi ayarlamayı unutma;)
João Pinto

3
Dizini yeniden adlandırmak ve debian / changelog'u güncellemek dışında, yeni sürüme karşılık gelen .orig arşivini oluşturmalısınız, bu kaynak dizin içeriğini (debian / dahil olmadan) oluşturan bir arşivdir.
João Pinto,

1
İçerdiği dizinde, genelde yaptığım şey şunun gibi bir şeydir: cp sourcedir sourcedir.orig && rm -rf sourcedir.orig / debian && tar czvf dosyaadı.orig.tar.gz sourcedir.orig
João Pinto

1
Ekleme --indepbayrağı için dh_make"Architecture: Tüm" paket yapacak Ayrıca -bbayrak yukarıdaki 11.04 ve içinde yok.
andrewsbir şey

1
.Deb paketini oluşturduktan sonra, hataları veya geliştirmeleri lintian somescripts_0.1-1_i386.debveya ile kontrol etmelisiniz lintian package-source.changes- bakınız: packaging.ubuntu.com/html/…
rubo77
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.